[개발 공부] / Welch ANOVA: 분산이 다른 세 그룹 비교.md

Welch ANOVA: 분산이 다른 세 그룹 비교

조회

2026년 6월 17일 | 개발 공부


세 개 이상 설정을 평균으로 비교하다 보면, 평균 차이보다 먼저 분산 차이가 눈에 밟힐 때가 있다. A 설정은 점수가 좁게 모여 있고, B 설정은 몇 개 샘플에서 크게 흔들리고, C 설정은 평균은 좋아 보이지만 꼬리가 길다. 이때 일반 ANOVA를 바로 붙이면 내가 묻고 싶은 질문과 가정이 살짝 어긋난다. Welch ANOVA는 Analysis of Variance, 즉 분산분석 계열의 검정인데, 그룹별 분산이 같다고 강하게 가정하지 않고 세 그룹 이상의 평균 차이 신호를 보는 방법으로 이해하면 편하다.

분산이 다른 세 그룹에서 Welch ANOVA와 사후 비교를 나누는 도식
Figure 1: 평균 비교 질문은 유지하되, 그룹별 흔들림 폭이 다를 수 있음을 먼저 열어 두는 흐름.

평균표가 기울어 보이는 이유

모델 평가나 로그 분석에서 세 설정을 나란히 놓으면 평균표가 제일 먼저 보인다. baseline, reranker 추가, threshold 조정 같은 세 칸을 만들고 평균 nDCG나 latency를 적으면 비교가 깔끔해 보인다. 문제는 그 깔끔함이 데이터 모양을 너무 빨리 지운다는 점이다. 한 그룹은 표준편차가 작고 다른 그룹은 outlier가 많은데, 같은 분산을 가정한 평균 비교로 결론을 내리면 숫자가 안정적으로 보이는 쪽으로 마음이 기울 수 있다.

내가 Welch ANOVA를 떠올리는 순간은 보통 이때다. 질문은 여전히 평균 차이에 있다. 다만 분산이 서로 다를 수 있음을 가정한 평균 비교가 필요하다. 세 그룹이 모두 같은 사용자군, 같은 query set, 같은 측정 조건에서 나온 것이 아니라면 이 의심은 더 커진다. 평균이 올라간 것인지, 흔들림이 커진 것인지, 특정 꼬리 샘플이 표를 밀었는지부터 분리해야 한다.

Kruskal-Wallis로 바로 가기 전의 선택지

분산이 다르면 곧바로 Kruskal-Wallis test로 넘어가고 싶을 때가 있다. rank 기반 검정은 평균과 정규성 가정에서 한 발 떨어져 있으니 안전해 보인다. 하지만 모든 상황에서 rank로 질문을 바꾸는 것이 답은 아니다. 내가 알고 싶은 것이 “점수의 위치가 전반적으로 밀렸나”라면 Kruskal-Wallis가 잘 맞고, “평균 성능 자체가 달라졌나”라면 Welch ANOVA가 더 직접적일 수 있다.

그래서 나는 먼저 질문의 단위를 적는다. 평균 latency를 줄인 설정을 고르는 일인지, 사용자군별 점수 분포가 한쪽으로 치우쳤는지 보는 일인지, 아니면 outlier를 만든 샘플 큐를 찾는 일인지가 다르다. 정규성보다 분산 차이가 먼저 눈에 띄는 상황에서는 Welch ANOVA가 중간 선택지가 된다. 평균 질문을 버리지 않으면서도, 등분산 가정에 기대는 불편함을 줄여 주기 때문이다.

사후 비교는 따로 열어야 한다

Welch ANOVA가 유의하다고 해서 세 그룹이 모두 서로 다르다는 뜻은 아니다. 이 점은 Kruskal-Wallis 뒤에 Dunn test를 붙일 때와 비슷하다. 전체 검정은 “어딘가 차이가 있을 수 있다”는 신호이고, 어느 두 그룹이 실제로 벌어졌는지는 별도의 사후 비교가 필요하다. 등분산을 가정하기 어렵다면 Tukey HSD보다 Games-Howell 같은 쪽을 검토하는 이유도 여기에 있다.

나는 표를 만들 때 전체 p-value와 쌍별 비교 p-value를 같은 칸에 섞지 않으려고 한다. 전체 신호는 위에 두고, A-B, A-C, B-C 비교는 아래로 내린다. 그리고 보정 방식, 샘플 수, 평균 차이, 신뢰구간 또는 효과 크기를 같이 둔다. 이렇게 해야 전체 신호와 쌍별 설명을 분리할 수 있다. 유의한 전체 검정 하나로 우승자를 뽑는 습관은 생각보다 위험하다.

실험 노트에 남길 최소 칸

내 기준의 최소 메모는 길지 않다. 그룹 이름, 그룹별 n, 평균, 표준편차, Welch ANOVA p-value, 사후 비교 방식, 효과 크기 또는 중앙값 보조 지표 정도다. 여기에 데이터 수집 조건을 한 줄 붙인다. 같은 query set에서 나온 세 설정인지, 서로 다른 사용자군인지, 로그 기간이 같은지 같은 정보가 빠지면 검정 이름보다 더 중요한 조건이 사라진다.

특히 샘플 수가 한쪽으로 크게 기울면 결과를 더 조심해서 본다. Welch ANOVA는 분산 차이를 고려하지만, 데이터 품질 문제까지 대신 해결해 주지는 않는다. 한 그룹만 새 배포 직후 로그이고 다른 그룹은 안정화된 기간의 로그라면, p-value보다 수집 조건이 먼저다. 통계 검정은 정리된 질문 위에서 힘을 내지, 흐릿한 질문을 자동으로 정리해 주지는 않는다.

효과 크기도 같은 이유로 따로 둔다. Welch ANOVA의 전체 p-value가 낮아도, 실제 평균 차이가 운영 기준보다 작으면 설정을 바꿀 이유가 약하다. 반대로 p-value가 애매해도 특정 그룹에서 tail latency가 계속 벌어지면 다음 실험 후보로 남길 수 있다. 나는 그래서 표 마지막 칸에 “결정”보다 “다음 확인”을 적는다. 통계 숫자를 결론으로 닫지 않고, 어떤 샘플을 다시 열지 정하는 식이다.

내가 멈추는 조건

Welch ANOVA를 붙이기 전에 내가 멈추는 조건도 있다. 첫째, 같은 관측 단위를 만들 수 있으면 paired 비교를 먼저 본다. 같은 query나 같은 seed가 세 설정을 모두 지나간 구조라면 Friedman test나 paired permutation 쪽이 더 자연스러울 수 있다. 둘째, 평균보다 순위나 중앙값이 질문에 가깝다면 Kruskal-Wallis와 Dunn test 흐름이 더 낫다. 셋째, outlier 자체가 제품 판단의 핵심이면 평균 검정으로 그 문제를 덮지 않는다.

결국 내가 원하는 건 검정 이름을 더 많이 아는 것이 아니라, 표의 질문을 덜 헷갈리는 것이다. 동일한 관측 단위가 아니면 paired 검정으로 억지 변환하지 않는다. 평균 질문을 유지할 거라면 분산 차이를 먼저 보고, rank 질문으로 바꿀 거라면 그 이유를 남긴다. 이 정도만 해도 세 그룹 비교표가 “별표가 붙은 평균표”에서 “다음 실험을 고르는 기록”으로 조금 바뀐다.

Welch ANOVA는 대단히 화려한 도구라기보다, 평균 비교를 할 때 가정을 한 번 더 점검하게 만드는 이름에 가깝다. 나는 그래서 이 검정을 결과표의 장식으로 쓰기보다, 분산이 다른 세 그룹을 같은 자로 재려는 순간에 잠깐 멈추는 표식으로 둔다. 그 멈춤이 있으면 평균, 분산, 사후 비교, 효과 크기가 서로의 역할을 덜 침범한다.

다음에는 이 표 뒤에 붙는 Games-Howell 쌍별 비교까지 이어서 정리해 보려고 한다. 전체 검정에서 멈추지 않고 어느 그룹 쌍이 실제로 갈라졌는지 확인해야, 평균 비교가 실험 운영 문장으로 내려오기 때문이다. 그때도 같은 query set인지부터 먼저 볼 생각이다.

댓글

홈으로 돌아가기

검색 결과

"" 검색 결과입니다.