RSNA 무릎 ④ — 잣대가 틀렸다: 닫힌 축 하나를 다시 열고, 다시 닫기까지
③편은 “우리가 가진 세 자(OOF·gold58·public LB)가 전부 우리 효과보다 거칠다”는 글이었습니다. 이번 글은 그 결론의 절반이 틀렸다는 이야기입니다.
대회 진행 중이라 코드와 대회 이미지는 싣지 않습니다. ‘실측’은 다른 조건을 그대로 두고 한 가지만 바꾼 비교로 확인한 값입니다.
1. 같은 자인데 눈금이 다섯 배 달랐다
저는 몇 주 동안 “교차검증 4겹의 95% 구간은 ±0.0043”이라는 숫자를 잣대로 써 왔습니다. 그보다 작은 차이는 잡음이라고 보고 축을 닫았습니다.
그런데 어느 설정 하나를 바꾼 비교에서, 겹별 차이의 표준편차가 0.0008로 나왔습니다. 제가 쓰던 잣대의 5분의 1입니다.
둘은 다른 것을 재고 있었습니다.
| 무엇의 산포인가 | 겹 난이도 | |
|---|---|---|
| ±0.0043 | 짝짓지 않은 겹 평균 | 그대로 들어간다 |
| ±0.0008 | 같은 겹에서 설정 하나만 바꾼 차이 | 상쇄된다 |
겹마다 환자 구성이 다르니 평균 성능도 다릅니다. 그 변동이 ±0.0043의 대부분입니다. 그런데 같은 겹 안에서 A와 B를 비교하면 그 변동은 양쪽에 똑같이 들어가 빼면 사라집니다. 짝지은 비교(paired comparison)의 기본인데, 저는 몇 주 동안 짝짓지 않은 산포를 짝지은 비교의 잣대로 쓰고 있었습니다.
2. 그래서 과거의 판정을 다시 봤다
잣대가 다섯 배 촘촘해졌다면, “구간이 0을 포함해서” 닫은 축들은 잘못 닫혔을 수 있습니다.
기록을 뒤지니 모순이 하나 나왔습니다. 요약 색인에는 어떤 축이 “닫힘 — +0.0012, 구간이 0을 포함”이라고 적혀 있는데, 본문 다른 곳에는 같은 축이 “오염으로 미판정“이라고 적혀 있었습니다.
추적해 보니 이랬습니다. 그 판정의 원자료는 겹별로 +0.0018 · +0.0034 · +0.0021 · -0.0046이었고, 나중에 네 겹 중 둘이 오염된 것으로 확인됐습니다. 통합값을 +0.0028에서 +0.0012로 끌어내리고 구간을 터뜨린 것이 바로 그 오염된 -0.0046이었습니다. 저는 그때 “판정했다”는 기술은 철회했으면서, 요약 색인은 고치지 않았습니다.
오염을 피한 겹만 짝지어 다시 재니 +0.0032가 나왔습니다. 우리가 채택한 유일한 축(학습률 2배, +0.0035)과 같은 크기입니다.
닫힌 축이 두 결함의 겹침으로 닫혀 있었던 것입니다 — 오염된 음수 하나와, 틀린 잣대.
3. 다시 열었다
지침에는 “닫힌 축은 다시 열지 않는다”가 있습니다. 좋은 규칙입니다. 다시 열 때는 마음이 바뀐 것이 아니라 닫힘의 근거에 결함이 있었다는 점을 분명히 적고 열어야 합니다.
그래서 근거를 적고, 현재 계보에서 깨끗한 네 겹을 두 가지 데이터 캐시에서 독립으로 돌렸습니다. 결과를 보기 전에 채택 기준도 못박았습니다.
4. 그리고 다시 닫았다
1
2
3
캐시 A +0.0004 · +0.0007 평균 +0.0006 (2/2 양수)
캐시 B +0.0001 · -0.0017 평균 -0.0008 (1/2 양수)
통합 평균 -0.0001
두 캐시의 부호가 엇갈렸습니다. 사전에 적어 둔 세 조건(문턱 미달·구간이 0 포함·부호 엇갈림)에 전부 걸려 닫았습니다.
이번 닫힘은 지난번과 다릅니다. 네 겹이 전부 깨끗하고, 짝지은 비교이고, 두 조건에서 독립으로 쟀습니다. 근거를 남기고 닫은 것입니다.
5. 진짜 수확은 따로 있었다
왜 과거(+0.0032)와 현재(+0.0006 / -0.0008)가 이렇게 다를까요. 그 사이에 기준선이 달라져 있었습니다.
1
2
3
그때 기준선 0.9040
지금 기준선 0.9147 ~ 0.9180
그 사이에 들어간 것: 학습률 2배 · 증강 조정 · 기반 교체
약한 기준선에서 잰 이득은 강한 기준선으로 그 크기 그대로 옮겨오지 않습니다. 먼저 들어간 개선들이 이미 같은 종류의 오차를 줄여 놓았기 때문입니다.
이것은 추정이었는데, 며칠 뒤 두 번째 사례가 나왔습니다. 대회 지표가 순위인데 학습은 확률을 맞추는 손실을 쓰고 있어서, 순위에 직접 정렬된 손실 항을 켜 봤습니다. 옛 기준선 위에서는 +0.0015였는데 현재 계보에서는 음수였습니다. 같은 패턴입니다.
이제 추정이 아니라 운영 규칙으로 씁니다.
과거 기록의 양수를 보고 축을 열지 않는다. 열려면 현재 계보에서 직접 재고, 그 비용(약 6시간)을 치를 값이 있는지 먼저 따진다.
오늘 두 축에 각각 반나절씩 썼고 둘 다 음수였습니다. 이 규칙이 없었으면 같은 비용을 몇 번 더 치렀을 것입니다.
6. 세 가지 메모
첫째, 잣대는 질문마다 다시 재야 합니다. 짝지은 차이의 산포는 축마다 달랐습니다 — 예측이 많이 닮는 변경(입력 배분)은 0.0002, 손실 자체를 바꾸는 변경은 0.0020. “±0.0043”도 “±0.0008”도 보편 상수가 아닙니다. 그래서 축마다 자기 산포를 재는 작은 도구를 만들어 쓰고 있습니다.
둘째, 요약은 본문보다 빨리 낡습니다. 철회한 값이 요약 색인에 ‘닫힘’의 근거로 남아 있었습니다. 본문은 고쳤는데 색인은 안 고쳤습니다. 색인이 있는 문서는 색인도 같이 고쳐야 합니다.
셋째, 사전 등록은 양방향이 아닙니다. 결과를 보기 전에 기준을 적는 것은 약한 양수를 채택으로 합리화하는 것을 막기 위함입니다. 반대로 새 정보가 들어와 추가 측정이 무의미해졌다면, 근거를 적고 규칙을 철회하는 쪽이 맞습니다. 실제로 이번에 한 번 철회했습니다 — 비용을 늘리는 쪽이 아니라 줄이는 쪽이었기 때문입니다.
다음
추론 쪽은 이제 거의 다 닫혔습니다. 가중치·구성·혼합 비율을 어떻게 바꿔도 점수가 움직이지 않습니다. 남은 것은 학습 쪽인데, 거기엔 다른 문제가 있습니다 — 학습 쪽 개선은 리더보드로 검증할 수가 없습니다. 전이 비율을 측정해 보니 리더보드에서 읽히려면 지금까지 찾은 최대 축의 세 배가 넘는 효과가 필요합니다. 그 이야기는 다음 글에서 하겠습니다.