Mann–Whitney U Test는 서로 독립적인 두 집단 간의 차이를 비교할 때 사용하는 비모수 통계 검정법(Non-parametric test)입니다.
쉽게 설명하자면, 우리가 흔히 사용하는 독립 표본 t-검정(Independent Samples t-test)의 "대안책"이라고 생각하면 됩니다. 데이터가 깨끗한 정규분포를 따를 때는 t-검정을 쓰지만, 데이터가 한쪽으로 치우쳤거나 등수(순위)로 매겨진 경우에는 이 검정법을 사용합니다.
동작 과정
1단계: 데이터 통합 및 정렬 (Merge & Sort)
두 집단(Group A, Group B)의 데이터를 모두 합쳐서 하나의 리스트로 만듭니다.
가장 작은 값부터 가장 큰 값까지 오름차순으로 정렬합니다.
이때, 각 데이터가 어느 그룹 출신인지는 기억해둡니다.
2단계: 순위 부여 (Assign Ranks)
정렬된 데이터에 1등부터 차례대로 순위(Rank)를 매깁니다. (가장 작은 값이 1위, 그다음이 2위...)
★ 중요: 동점(Ties) 처리 방법
만약 값이 같은 데이터가 있다면, 해당 순위들의 평균을 부여합니다.
예시: 3등과 4등의 값이 같다면, 둘 다 23+4=3.5등으로 처리
3단계: 순위 합 계산 (Sum of Ranks)
다시 원래 그룹으로 돌아가서, 각 그룹이 받은 순위들의 합(R)을 구합니다.
R1: 집단 1의 순위 합
R2: 집단 2의 순위 합
4단계: U 통계량 계산 (Calculate U Statistic)
이 부분이 핵심 알고리즘입니다. 단순히 순위 합만 비교하면 표본 크기(n)가 다를 때 공정하지 않으므로 보정 공식(U값)을 사용합니다.
U1=n1n2−(R1−2n1(n1+1))
U2=n1n2−(R2−2n2(n2+1))
n1,n2: 각 집단의 표본 크기
R1,R2: 각 집단의 순위 합
최종 U값 선정:
계산된 U1과 U2 중 더 작은 값을 최종 U 값으로 선택합니다.
U=min(U1,U2)
💡 U값의 의미 U값은 "상대방 그룹보다 순위가 뒤쳐지는 횟수"를 의미합니다. 따라서 차이가 클수록(두 그룹이 확실히 분리될수록) U값은 0에 가까워집니다.
5단계: 유의성 판단 (Significance Testing)
표본의 크기에 따라 검정 방식이 달라집니다.
표본이 작을 때 (n<20)
미리 계산된 Mann-Whitney U 임계값 표(Table)와 비교합니다.
내 U값이 표에 있는 기각치보다 작거나 같으면 통계적으로 유의한 차이가 있다고 봅니다.
표본이 클 때 (n≥20)
정규분포 근사(Normal Approximation)를 사용합니다.
U값을 Z-score로 변환하여 P-value를 구합니다.
🤔 표본이 클 때 정규분포로 어떻게 근사하지?
표본의 크기가 클 때(보통 두 집단 중 하나라도 n≥20일 때)는 통계학의 중요한 원리인 중심극한정리(Central Limit Theorem)에 의해, U값들의 분포가 정규분포(종 모양)에 가까워집니다.
따라서 복잡한 U값 표를 일일이 찾는 대신, 우리가 익숙한 Z-score(표준점수) 공식으로 변환하여 P-value를 계산할 수 있습니다.
계산 과정은 크게 3단계(결론 포함 4단계)로 나뉩니다.
1단계: U 분포의 평균(μU) 구하기
만약 두 집단 간에 차이가 없다면(귀무가설), U값은 딱 중간쯤에 위치할 것입니다.(n1n2=U1+U2이고, 각각팀이 번갈아서 위치하면 절반을 가짐) 그 기대되는 평균값을 구합니다.
μU=2n1×n2
n1: 집단 1의 크기
n2: 집단 2의 크기
2단계: U 분포의 표준편차(σU) 구하기
데이터가 평균에서 얼마나 퍼져 있는지(산포도)를 나타내는 표준편차를 구합니다.
σU=12n1n2(n1+n2+1)
여기서 12는 순위 데이터의 분산을 구할 때 고정적으로 사용하는 상수입니다.
순위들이 무작위로 섞여 있을 때, 순위 합이 얼마나 흔들릴 수 있는지를 수학적으로 정확히 계산한 결과입니다.
💡 주의 (동점 보정)
만약 데이터에 동점(Tie, 같은 값)이 많다면 이 공식이 조금 더 복잡해집니다.
(동점이 많으면 분산이 줄어들기 때문에 분모/분자를 보정하는 추가 수식이 붙습니다. 하지만 기본 원리는 같습니다.)
3단계: Z-score(Z값) 계산하기
이제 우리가 구한 실제 U값이 평균에서 표준편차의 몇 배만큼 떨어져 있는지를 계산합니다.
Z=σUU−μU
U: 앞서 구한 U1,U2 중 작은 값 (데이터로부터 얻은 실제 값)
μU: 1단계에서 구한 평균
σU: 2단계에서 구한 표준편차
참고: 연속성 수정 (Continuity Correction) U값은 1, 2, 3 같은 정수(이산형)이지만 정규분포는 연속형이므로, 더 정확한 계산을 위해 분자에 ±0.5를 해주기도 합니다. Z=σU∣U−μU∣−0.5
4단계: 결론 (P-value 확인)
계산된 Z값을 표준정규분포표에서 찾으면 P-value가 나옵니다.
보통 유의수준 α=0.05 (양측 검정) 기준일 때 판단 방법은 다음과 같습니다.
∣Z∣>1.96 이면: P-value < 0.05 → 유의미한 차이가 있다. (귀무가설 기각)
∣Z∣<1.96 이면: P-value > 0.05 → 차이가 없다.
📝 요약 예시
만약 n1=20,n2=20이고, 계산된 U=100일 때의 계산 과정입니다.
평균: 220×20=200
표준편차: 1220×20(20+20+1)=1216400≈36.97
Z값: 36.97100−200=−2.70
판정:
절댓값 ∣−2.70∣은 1.96보다 크므로, "통계적으로 유의미한 차이가 있다"고 결론 내립니다.