지표 포화
다들 만점이라 차이가 안 보이는 상태.
무엇이 문제인가
방식 A와 B를 비교하려고 지표를 쟀는데 둘 다 1.000이면, 어느 쪽이 나은지 알 수 없다. 지표가 변별력을 잃었다고 한다.
⚠️ 하면 안 되는 대응 — 조건 바꾸기
우리가 실제로 저지른 실수다.
hit@5가 1.000으로 포화됐다 → 문서 필터를 껐다 → 차이가 보이기 시작했다 → 그걸로 판정했다
이러면 안 된다. 필터를 끈 조건은 프로덕션에 존재하지 않는 경로였다. 존재하지도 않는 상황에서 측정하고 “이 방식은 효과 없다”고 결론냈다. 나중에 조건을 실전대로 되돌리니 결론이 뒤집혔다 (+0.002 → +0.073).
올바른 대응
| 방법 | 설명 |
|---|---|
| 더 민감한 지표 | hit@5 → MRR. “찾았나”에서 “몇 등인가”로 |
| 더 어려운 문항 | 쉬운 문항만 있으면 뭘 써도 만점 |
| 단위 바꾸기 | 문서 단위 포화 → 청크 단위로 내려가면 안 포화 |
조건은 실전 그대로 둔다. 포화는 “그 조건에서 잘 되고 있다”는 신호지 조건을 버리라는 뜻이 아니다.
교훈
측정 편의를 위해 실전 조건을 바꾸면, 그 실험은 실전에 대해 아무 말도 못 한다.
“승격 기준을 측정 전에 확정한다”는 규칙을 지키는 것과 조건이 실전과 같은지 검증하는 것은 별개다. 전자만 지키면 엄격하게 잘못된 답이 나온다.
친척 현상 — 모델 출력이 포화하는 경우
위는 지표가 포화한 이야기지만, 같은 일이 모델 점수 쪽에서도 일어난다.
2차 실험에서 한국어 튜닝 리랭커(bge-reranker-v2-m3-ko)가 그랬다.
후보 20개 중 고유 점수가 10개뿐이고, 상위 3개가 전부 정확히 1.0이었다.
원인도 대응도 다르다. 지표 포화는 재는 자가 무뎌서 문항이나 지표를 바꾸면 되지만, 점수 포화는 모델 자체가 변별을 못 하는 것이라 모델을 바꿔야 한다(그래서 R1을 유지했다).
공통점은 하나 — 동점이 쌓이면 순위를 매길 수 없다. 그 리랭커에서는 동점 때문에 안정 정렬이
입력 순서를 그대로 흘려보내 C_doc ≠ D_doc 같은 미세한 어긋남까지 만들었다.
→ 검색 실험 결과 §3·§10
관련
MRR · Recall과 hit rate · 크로스인코더 리랭커 · 검색 실험 설계 §3-1