세 자료, 세 가지 책임
- 학습셋: 손실을 계산하고 매개변수를 직접 갱신하는 데 사용해. 전처리 통계도 여기서 추정해.
- 검증셋: 모델 구조와 학습률, 규제 강도, 조기종료 시점 같은 개발 결정을 고르는 데 사용해. 가중치 경사에 직접 넣지 않아도 선택을 통해 모델에 간접 영향을 줘.
- 시험셋: 개발 결정을 끝낸 뒤 최종 시스템의 일반화를 추정해. 이 결과를 보고 다시 설계를 바꾸면 더는 독립된 최종 평가가 아니야.
왜 검증셋이 따로 필요할까
학습셋과 시험셋만 두고 시험 성능을 보며 하이퍼파라미터를 고르면 시험 정보가 개발 과정에 스며들어. 여러 후보 가운데 시험셋에서 우연히 잘 나온 모델을 선택하게 되므로 보고 성능이 낙관적으로 기울 수 있어. 검증셋이 반복적인 선택을 맡고 시험셋은 마지막 추정에 남아야 해.
시험셋을 물리적으로 딱 한 번만 열어야 한다는 주문보다 중요한 건 역할을 바꾸지 않는 거야. 반복 평가가 필요한 운영 환경이라면 새 holdout이나 시간별 평가 창, 접근 기록 같은 거버넌스로 독립성을 관리해.
누출이 생기는 자리
- 전처리 누출: 전체 자료의 평균과 표준편차, 어휘, 결측값 규칙을 먼저 계산하면 검증·시험 정보가 학습 변환에 들어가.
- 중복 누출: 같은 사람이나 장치, 문서의 거의 같은 복사본이 서로 다른 분할에 있으면 모델이 독립된 사례가 아니라 대상을 알아볼 수 있어.
- 시간 누출: 미래 정보로 과거를 예측하는 구성이 생기지 않도록 학습 시점과 배포 시점을 재현해야 해. 모든 시계열 문제에 한 가지 분할만 맞는 건 아니지만 시간 순서를 무시하면 안 돼.
- 라벨 누출: 예측 시점에는 알 수 없는 사후 정보가 특성에 포함되면 높은 점수가 실제 성능을 뜻하지 않아.
Kaggle 리더보드 효과. 공개 리더보드 점수를 반복해서 보며 제출을 고르면 그 표본에도 과적합할 수 있어. 공개 순위는 검증셋처럼 사용되고, 숨겨 둔 비공개 순위에서 성능이 떨어지는 이유야. 집계된 점수도 충분히 반복해서 보면 정보가 돼.
좋은 분할은 배포 때 만날 독립 단위를 흉내 내. 행을 무작위로 나누기 전에 사람, 문서, 장치, 장소, 시간을 어느 쪽 경계로 묶어야 하는지 먼저 정해.