맨-휘트니 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 적용 요건
- 두 집단(표본)은 서로 독립해야 함.
- 두 표본의 데이터가 최소한 서열척도(순서 비교가 가능) 이상이어야 함.
- 정규성 가정이 필요 없음(비모수적).
- 다만, 두 집단의 분포 모양이 비슷한지는 어느 정도 고려해야 합니다(중앙값 비교 의미).
2. 검정 과정(개념적)
- 두 독립 집단 A, B의 관측값을 모두 합쳐서, 값의 크기 순으로 정렬한다.
- 각 관측값에 **순위(rank)**를 부여한다(동점이면 평균 순위).
- 각 집단에 속한 관측값의 순위합(rank sum)을 계산한다.
- 그 순위합을 기반으로 U 통계량을 구하고, 이를 통해 p-value를 산출(통계 패키지에서 자동 계산)
- 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. 결과 해석 및 주의사항
- p-value < 0.05
- “두 집단의 중앙값(또는 분포의 위치)이 유의하게 다르다”
- p-value >= 0.05
- “두 집단의 중앙값 차이가 유의하지 않다(통계적으로 차이가 있다고 보기 어려움)”
- 순위 기반 비모수 검정이므로, 실제 분포 형태가 달라도 적용 가능
- 독립성은 반드시 만족해야 함(한 집단 내 관측치가 다른 집단과 연관되면 안 됨)
- 두 집단이 분포 형태가 크게 다를 때는 해석에 주의(‘중앙값 차이’ 외에 다른 요인으로도 검정 결과가 달라질 수 있음)
5. 요약
- Mann-Whitney U 검정은 독립 두 표본 T 검정의 비모수적 대안으로, “정규분포를 가정하기 어려울 때” 주로 사용
- 두 그룹의 데이터를 순위화하여, 한쪽 그룹의 순위합이 유의미하게 큰지(혹은 작은지)를 평가
- Python
scipy.stats.mannwhitneyu함수로 간편히 계산 가능(단, ‘단측/양측’ 옵션 확인 필요) - p-value를 통해 귀무가설(두 집단 중앙값 동일)을 기각/채택 판단
참고문헌
- 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.
- Wilcoxon, F. (1945). Individual comparisons by ranking methods. Biometrics bulletin, 1(6), 80-83.
- Wilcoxon rank-sum test와 Mann-Whitney U test는 밀접하게 연관
- Hollander, M., Wolfe, D. A., & Chicken, E. (2013). Nonparametric Statistical Methods (3rd ed.). John Wiley & Sons. 이상으로 Mann-Whitney U 검정에 대해 살펴보았습니다. 정규성 가정이 불확실하거나 표본 크기가 작을 때, 두 독립 집단의 중앙값(분포 위치) 비교를 위해 유용하게 사용되는 대표적인 비모수적 검정입니다.