2026년 6월 11일 | 개발 공부
Friedman 검정에서 전체 차이 신호가 잡히면 바로 따라오는 질문이 있다. 세 설정 이상이 모두 같다고 보긴 어렵다 치고, 그럼 어느 쌍이 실제로 갈라진 것인가. Nemenyi 사후검정은 이 지점에서 쓰는 post-hoc rank 비교다. Friedman test처럼 같은 block 안에서 여러 설정의 순위를 만든 뒤, 설정별 평균 rank 차이가 우연한 흔들림을 넘는지 모든 쌍에 대해 비교한다.
나는 평가표를 만들 때 이 순서를 자주 헷갈렸다. Friedman p-value가 작게 나왔으니 baseline과 새 모델을 바로 Wilcoxon으로 비교하면 되는 것 아닌가 싶었다. 그것도 가능한 경로지만, 세 개 이상 설정을 한 번에 비교하는 표에서는 먼저 “전체 rank 판에서 어떤 쌍이 충분히 멀리 떨어졌는가”를 보는 렌즈가 필요할 때가 있다. Nemenyi는 그 역할에 가깝다.
평균 rank 차이를 먼저 보는 이유
예를 들어 같은 query 50개에서 baseline, reranker, graph boost, hybrid 네 설정의 nDCG를 비교한다고 하자. query마다 네 설정에 순위를 붙이고, 각 설정의 평균 rank를 계산한다. Friedman 검정은 네 설정의 rank가 전체적으로 비슷하게 섞였는지 묻는다. 반면 Nemenyi는 평균 rank 1.7인 hybrid와 2.9인 baseline의 차이가, 설정 수와 block 수를 고려했을 때 충분히 큰지 본다.
이때 핵심은 원래 metric 값이 아니라 block 내부 순위다. 그래서 query마다 nDCG 스케일이 조금 달라도, 그 query 안에서 누가 앞섰는지를 기준으로 비교한다. 검색 랭킹이나 GraphRAG profile 평가처럼 query별 난이도 차이가 큰 상황에서는 이 점이 꽤 편하다. 절대 점수 평균을 바로 비교하면 쉬운 query가 결론을 밀어 올릴 수 있는데, rank 기반 비교는 그 영향을 어느 정도 눌러 준다.
물론 rank로 바꾼다는 건 정보도 버린다는 뜻이다. hybrid가 baseline보다 아주 조금 이긴 query와 크게 이긴 query가 같은 1등/2등 관계로 접힌다. 그래서 나는 Nemenyi 결과를 최종 승패표로 쓰기보다, 평균 rank가 꽤 떨어진 후보 쌍을 골라 다음 확인으로 넘기는 용도로 둔다. 이 값 하나만 보고 배포 설정을 바꾸면, 실제 delta 크기나 실패 query의 성격을 놓치기 쉽다.
Critical Difference를 표 옆에 붙이기
Nemenyi를 쓰면 자주 같이 나오는 표현이 Critical Difference, 줄여서 CD다. 직관적으로는 “평균 rank가 이 정도 이상 떨어져야 차이가 있다고 보자”는 기준선이다. 설정 수가 많아질수록, 그리고 block 수가 적을수록 이 기준선은 커진다. 비교할 쌍이 많고 데이터가 적으면 우연히 벌어진 rank 차이를 더 보수적으로 봐야 하기 때문이다.
실험 노트에는 복잡한 수식보다 표 형태가 더 잘 남는다. 나는 보통 설정명, 평균 rank, best/worst query cluster, CD 통과 여부를 한 줄에 둔다. 평균 rank 차이가 CD를 넘은 쌍은 따로 표시하고, 넘지 못한 쌍은 “차이 없음”이 아니라 “이 표만으로는 충분히 떨어졌다고 보기 어려움”이라고 적는다. 이 표현 차이가 중요하다. 통계 검정은 없음의 증명이 아니라, 현재 표에서 말할 수 있는 강도의 제한에 가깝다.
CD diagram도 같은 맥락이다. 설정들을 평균 rank 축 위에 놓고, 통계적으로 구분하기 어려운 설정들을 가로선으로 묶어 보여 준다. 논문 그림에서는 깔끔해 보이지만, 실무 노트에서는 작은 텍스트 표만으로도 충분할 때가 많다. 핵심은 그림이 아니라 평균 rank 차이와 불확실성 기준을 같이 보는 습관이다.
Wilcoxon + Holm과 어떻게 나눌까
Nemenyi와 pairwise Wilcoxon에 Holm-Bonferroni 보정을 붙이는 방식은 비슷한 자리에 놓인다. 둘 다 Friedman 뒤의 사후 비교로 쓸 수 있다. 내가 나누는 기준은 질문의 모양이다. “네 설정 전체 rank 판에서 어떤 쌍이 멀리 떨어졌는가”를 빠르게 보고 싶으면 Nemenyi가 읽기 쉽다. 반대로 특정 후보 두 개의 paired delta 크기와 방향을 자세히 보고 싶으면 Wilcoxon이나 paired permutation 쪽이 더 손에 잡힌다.
검색 평가에서는 둘을 같이 쓸 수도 있다. 먼저 Friedman과 Kendall's W로 전체 rank 신호와 합의도를 본다. W가 충분히 크고 평균 rank 간격도 보이면 Nemenyi로 전체 쌍을 훑는다. 그중 제품 의사결정에 걸리는 쌍, 예를 들어 current baseline 대 새 reranker만 다시 paired delta, confidence interval, 실패 query 목록으로 내려간다. 이렇게 하면 검정 표가 길어지기 전에 질문을 좁힐 수 있다.
반대로 W가 작고 query cluster마다 승자가 갈리면 Nemenyi를 돌려도 해석이 흐릴 수 있다. 전체 평균 rank가 비슷한데 일부 cluster에서는 순위가 뒤집히는 상황이기 때문이다. 이때는 사후검정을 더 많이 여는 것보다 query taxonomy를 먼저 나누는 편이 낫다. 전역 승자를 고르는 문제가 아니라 routing rule을 찾아야 하는 문제일 수 있다.
내 노트에 남기는 최소 항목
작은 평가 로그에서 Nemenyi를 쓸 때 내가 남기는 항목은 네 가지다. 첫째, block 수와 설정 수. 둘째, 설정별 평균 rank. 셋째, CD 값과 통과한 쌍. 넷째, 통과 여부와 별개로 실제 metric delta가 큰 query 몇 개다. 이 네 줄이 있으면 나중에 표를 다시 봐도 “통계적으로 멀어진 쌍”과 “실제로 디버깅해야 할 쌍”을 분리해 읽을 수 있다.
특히 block 수가 작을 때는 조심한다. query 10개로 네 설정을 비교하면 평균 rank가 꽤 벌어져 보여도 CD 기준을 넘기 어렵다. 이걸 실패로만 보면 아깝고, “더 많은 query가 필요한가”, “query group을 먼저 고정해야 하는가”, “metric tie가 많아 rank가 뭉개졌는가”를 보는 신호로 쓰는 편이 낫다. 작은 실험에서 통계표는 결론보다 다음 수집 방향을 더 자주 알려 준다.
정리하면 Nemenyi 사후검정은 Friedman 검정 뒤에 붙이는 전체 쌍별 rank 비교 도구다. 내 기준에서는 모델 하나를 뽑는 도장이라기보다, 여러 설정이 섞인 평가표에서 어느 쌍을 다음에 깊게 볼지 표시해 주는 얇은 형광펜에 가깝다. 평균 rank, Kendall's W, CD, 그리고 실제 실패 query를 같이 놓으면 p-value만 남은 표보다 훨씬 덜 흔들린다.
'[개발 공부]' 카테고리의 다른 글
| Dunn 사후검정: Kruskal-Wallis 뒤의 쌍별 rank 비교 (0) | 2026.06.15 |
|---|---|
| Kruskal-Wallis 검정: 독립 세 묶음 rank 비교 (0) | 2026.06.12 |
| Kendall's W: Friedman 검정 옆 효과 크기 (0) | 2026.06.04 |
| Friedman 검정: 세 설정을 같은 query set에서 비교하기 (1) | 2026.06.03 |
| Mann-Whitney U 검정: 두 묶음의 순위 비교 (0) | 2026.05.27 |