Mann–Whitney U Test

이정훈·2025년 12월 3일

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

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등의 값이 같다면, 둘 다 3+42=3.5\frac{3+4}{2} = 3.5등으로 처리

3단계: 순위 합 계산 (Sum of Ranks)

다시 원래 그룹으로 돌아가서, 각 그룹이 받은 순위들의 합(RR)을 구합니다.

  • R1R_1: 집단 1의 순위 합
  • R2R_2: 집단 2의 순위 합

4단계: U 통계량 계산 (Calculate U Statistic)

이 부분이 핵심 알고리즘입니다. 단순히 순위 합만 비교하면 표본 크기(nn)가 다를 때 공정하지 않으므로 보정 공식(U값)을 사용합니다.

U1=n1n2(R1n1(n1+1)2)U_1 = n_1 n_2 - (R_1 - \frac{n_1(n_1+1)}{2})
U2=n1n2(R2n2(n2+1)2)U_2 = n_1 n_2 - (R_2 - \frac{n_2(n_2+1)}{2})
  • n1,n2n_1, n_2: 각 집단의 표본 크기
  • R1,R2R_1, R_2: 각 집단의 순위 합

최종 U값 선정:
계산된 U1U_1U2U_2더 작은 값을 최종 UU 값으로 선택합니다.

U=min(U1,U2)U = \min(U_1, U_2)

💡 U값의 의미
UU값은 "상대방 그룹보다 순위가 뒤쳐지는 횟수"를 의미합니다. 따라서 차이가 클수록(두 그룹이 확실히 분리될수록) UU값은 0에 가까워집니다.


5단계: 유의성 판단 (Significance Testing)

표본의 크기에 따라 검정 방식이 달라집니다.

  1. 표본이 작을 때 (n<20n < 20)

    • 미리 계산된 Mann-Whitney U 임계값 표(Table)와 비교합니다.
    • UU값이 표에 있는 기각치보다 작거나 같으면 통계적으로 유의한 차이가 있다고 봅니다.
  2. 표본이 클 때 (n20n \ge 20)

    • 정규분포 근사(Normal Approximation)를 사용합니다.
    • UU값을 Z-score로 변환하여 P-value를 구합니다.


🤔 표본이 클 때 정규분포로 어떻게 근사하지?

표본의 크기가 클 때(보통 두 집단 중 하나라도 n20n \ge 20일 때)는 통계학의 중요한 원리인 중심극한정리(Central Limit Theorem)에 의해, UU값들의 분포가 정규분포(종 모양)에 가까워집니다.

따라서 복잡한 UU값 표를 일일이 찾는 대신, 우리가 익숙한 Z-score(표준점수) 공식으로 변환하여 P-value를 계산할 수 있습니다.

계산 과정은 크게 3단계(결론 포함 4단계)로 나뉩니다.


1단계: UU 분포의 평균(μU\mu_U) 구하기

만약 두 집단 간에 차이가 없다면(귀무가설), UU값은 딱 중간쯤에 위치할 것입니다.(n1n2=U1+U2n_1n_2 = U_1 + U_2이고, 각각팀이 번갈아서 위치하면 절반을 가짐) 그 기대되는 평균값을 구합니다.

μU=n1×n22\mu_U = \frac{n_1 \times n_2}{2}
  • n1n_1: 집단 1의 크기
  • n2n_2: 집단 2의 크기

2단계: UU 분포의 표준편차(σU\sigma_U) 구하기

데이터가 평균에서 얼마나 퍼져 있는지(산포도)를 나타내는 표준편차를 구합니다.

σU=n1n2(n1+n2+1)12\sigma_U = \sqrt{\frac{n_1 n_2 (n_1 + n_2 + 1)}{12}}
  • 여기서 1212는 순위 데이터의 분산을 구할 때 고정적으로 사용하는 상수입니다.
  • 순위들이 무작위로 섞여 있을 때, 순위 합이 얼마나 흔들릴 수 있는지를 수학적으로 정확히 계산한 결과입니다.

💡 주의 (동점 보정)
만약 데이터에 동점(Tie, 같은 값)이 많다면 이 공식이 조금 더 복잡해집니다.
(동점이 많으면 분산이 줄어들기 때문에 분모/분자를 보정하는 추가 수식이 붙습니다. 하지만 기본 원리는 같습니다.)


3단계: Z-score(Z값) 계산하기

이제 우리가 구한 실제 UU값이 평균에서 표준편차의 몇 배만큼 떨어져 있는지를 계산합니다.

Z=UμUσUZ = \frac{U - \mu_U}{\sigma_U}
  • UU: 앞서 구한 U1,U2U_1, U_2 중 작은 값 (데이터로부터 얻은 실제 값)
  • μU\mu_U: 1단계에서 구한 평균
  • σU\sigma_U: 2단계에서 구한 표준편차

참고: 연속성 수정 (Continuity Correction)
UU값은 1, 2, 3 같은 정수(이산형)이지만 정규분포는 연속형이므로, 더 정확한 계산을 위해 분자에 ±0.5\pm 0.5를 해주기도 합니다.
Z=UμU0.5σUZ = \frac{|U - \mu_U| - 0.5}{\sigma_U}


4단계: 결론 (P-value 확인)

계산된 ZZ값을 표준정규분포표에서 찾으면 P-value가 나옵니다.
보통 유의수준 α=0.05\alpha=0.05 (양측 검정) 기준일 때 판단 방법은 다음과 같습니다.

  • Z>1.96|Z| > 1.96 이면: P-value < 0.05 → 유의미한 차이가 있다. (귀무가설 기각)
  • Z<1.96|Z| < 1.96 이면: P-value > 0.05 → 차이가 없다.

📝 요약 예시

만약 n1=20,n2=20n_1=20, n_2=20이고, 계산된 U=100U=100일 때의 계산 과정입니다.

  1. 평균:
    20×202=200\frac{20 \times 20}{2} = 200

  2. 표준편차:
    20×20(20+20+1)12=164001236.97\sqrt{\frac{20 \times 20 (20+20+1)}{12}} = \sqrt{\frac{16400}{12}} \approx 36.97

  3. Z값:
    10020036.97=2.70\frac{100 - 200}{36.97} = -2.70

  4. 판정:
    절댓값 2.70|-2.70|1.961.96보다 크므로, "통계적으로 유의미한 차이가 있다"고 결론 내립니다.

profile
AngDDo

0개의 댓글