Skip to Content

맨-휘트니 U 검정 (Mann-Whitney U Test)

아래는 Mann-Whitney U 검정(Mann-Whitney U test, 또는 Wilcoxon rank-sum test)에 대한 개념과 Python 예시를 정리한 내용입니다. Mann-Whitney U 검정은 두 개의 독립된 표본(집단)에 대해, 그들의 중앙값(혹은 분포의 위치)이 서로 다른지 비모수적으로 검정하는 방법입니다.


1. 개념 정리

1.1 정의

  • Mann-Whitney U 검정정규성 가정이 어려운 경우에 두 독립 집단의 중앙값 차이(분포 위치 차이)를 비교하는 비모수적 가설 검정입니다.
  • 두 독립 집단 T 검정(독립 표본 t-test)의 비모수적 대응 방법으로 볼 수 있습니다.
  • 집단 A, 집단 B 각각에서 표본을 추출하고, 이 표본들을 하나로 합쳐서 값 순서대로 정렬한 뒤 순위를 매겨서, 어느 집단이 더 높은 순위를 가지는지에 대한 통계량을 계산합니다.

1.2 가설 설정

  • 귀무가설(H₀): “두 집단(모집단)의 분포가 동일하고, 따라서 중앙값이 같다.”
    • (단순화해서) “두 집단의 중앙값이 동일하다.”
  • 대립가설(H₁): “두 집단의 중앙값이 다르다.” (양측 검정)

단측 검정(“A 집단이 B 집단보다 더 크다/작다”)도 가능하지만, 일반적으로 양측 검정이 많이 쓰입니다.

1.3 적용 요건

  1. 두 집단(표본)은 서로 독립해야 함.
  2. 두 표본의 데이터가 최소한 서열척도(순서 비교가 가능) 이상이어야 함.
  3. 정규성 가정이 필요 없음(비모수적).
  4. 다만, 두 집단의 분포 모양이 비슷한지는 어느 정도 고려해야 합니다(중앙값 비교 의미).

2. 검정 과정(개념적)

  1. 두 독립 집단 A, B의 관측값을 모두 합쳐서, 값의 크기 순으로 정렬한다.
  2. 각 관측값에 **순위(rank)**를 부여한다(동점이면 평균 순위).
  3. 각 집단에 속한 관측값의 순위합(rank sum)을 계산한다.
  4. 그 순위합을 기반으로 U 통계량을 구하고, 이를 통해 p-value를 산출(통계 패키지에서 자동 계산)
  5. p-value와 유의수준()을 비교하여 귀무가설 기각 여부 결정 α\alpha

3. Python 실습 예시

Python에서 Mann-Whitney U 검정scipy.stats 모듈의 mannwhitneyu 함수를 사용할 수 있습니다.

3.1 라이브러리 임포트

import numpy as np import pandas as pd from scipy.stats import mannwhitneyu

3.2 예시 데이터 생성

  • 시나리오: 남학생 그룹과 여학생 그룹(서로 독립)의 수학 점수를 수집했다고 가정
  • 표본 크기가 크지 않거나, 점수가 정규분포가 아니라는 단서가 있어 비모수 검정(Mann-Whitney) 적용
np.random.seed(123) # 남학생 그룹: 평균 70, 표준편차 12를 가진 정규분포로부터 20명 male_scores = np.random.normal(70, 12, 20) # 여학생 그룹: 평균 75, 표준편차 10을 가진 정규분포로부터 20명 female_scores = np.random.normal(75, 10, 20) df_scores = pd.DataFrame({ 'score': np.concatenate([male_scores, female_scores]), 'gender': ['M']*20 + ['F']*20 }) print(df_scores.head(6))

실제론 정규분포로 생성했지만, “정규성 여부를 확신할 수 없다”라는 상황을 가정합니다.

3.3 정규성 검정(선택 사항)

  • 꼭 해야 하는 것은 아니지만, “정규성을 가정하기 어렵다”는 근거를 얻기 위해 Shapiro-Wilk 검정 등으로 확인할 수 있습니다.
import scipy.stats as stats stat_m, p_m = stats.shapiro(male_scores) stat_f, p_f = stats.shapiro(female_scores) print("\n[Shapiro-Wilk Test for Normality]") print(f"Male: p-value={p_m:.4f}, Female: p-value={p_f:.4f}")
  • 일반적으로 p-value < 0.05라면 정규분포에서 벗어난다고 볼 수 있습니다.

3.4 Mann-Whitney U 검정 수행

(a) 함수 사용법

stat_u, p_value = mannwhitneyu(male_scores, female_scores, alternative='two-sided')
  • alternative='two-sided'는 양측 검정을 의미(기본값이 ‘two-sided’인지 버전에 따라 다를 수 있음).
  • 만약 “남학생 점수가 더 높다”라는 단측 검정을 원한다면 'greater' / 'less'로 설정할 수 있습니다.
stat_u, p_value = mannwhitneyu(male_scores, female_scores, alternative='two-sided') print("[Mann-Whitney U Test]") print(f"U-statistic = {stat_u:.4f}, p-value = {p_value:.4f}") alpha = 0.05 if p_value < alpha: print("=> 귀무가설 기각: 두 집단의 중앙값에 유의한 차이가 있음.") else: print("=> 귀무가설 채택(기각 실패): 중앙값 차이가 유의하지 않음.")

(b) 검정 통계량 해석

  • stat_u는 Mann-Whitney의 U 통계량
  • p-value가 유의수준보다 작으면(보통 0.05 미만) → “두 그룹 분포(중앙값)가 통계적으로 유의하게 다르다”고 판단

4. 결과 해석 및 주의사항

  1. p-value < 0.05
  • “두 집단의 중앙값(또는 분포의 위치)이 유의하게 다르다”
  1. p-value >= 0.05
  • “두 집단의 중앙값 차이가 유의하지 않다(통계적으로 차이가 있다고 보기 어려움)”
  1. 순위 기반 비모수 검정이므로, 실제 분포 형태가 달라도 적용 가능
  2. 독립성은 반드시 만족해야 함(한 집단 내 관측치가 다른 집단과 연관되면 안 됨)
  3. 두 집단이 분포 형태가 크게 다를 때는 해석에 주의(‘중앙값 차이’ 외에 다른 요인으로도 검정 결과가 달라질 수 있음)

5. 요약

  • Mann-Whitney U 검정독립 두 표본 T 검정비모수적 대안으로, “정규분포를 가정하기 어려울 때” 주로 사용
  • 두 그룹의 데이터를 순위화하여, 한쪽 그룹의 순위합이 유의미하게 큰지(혹은 작은지)를 평가
  • Python scipy.stats.mannwhitneyu 함수로 간편히 계산 가능(단, ‘단측/양측’ 옵션 확인 필요)
  • p-value를 통해 귀무가설(두 집단 중앙값 동일)을 기각/채택 판단

참고문헌

  1. Mann, H. B., & Whitney, D. R. (1947). On a test of whether one of two random variables is stochastically larger than the other. The Annals of Mathematical Statistics, 18(1), 50-60.
  2. Wilcoxon, F. (1945). Individual comparisons by ranking methods. Biometrics bulletin, 1(6), 80-83.
  • Wilcoxon rank-sum test와 Mann-Whitney U test는 밀접하게 연관
  1. Hollander, M., Wolfe, D. A., & Chicken, E. (2013). Nonparametric Statistical Methods (3rd ed.). John Wiley & Sons. 이상으로 Mann-Whitney U 검정에 대해 살펴보았습니다. 정규성 가정이 불확실하거나 표본 크기가 작을 때, 두 독립 집단의 중앙값(분포 위치) 비교를 위해 유용하게 사용되는 대표적인 비모수적 검정입니다.