본문 바로가기
C.W.K.
Stream
Lesson 05 of 06 · published

학습·검증·시험 분할: 자기기만을 막는 규율

~6 min · train-test-split, validation, leakage

Level 0수학 초심자
0 XP0/59 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete

세 자료, 세 가지 책임

  • 학습셋: 손실을 계산하고 매개변수를 직접 갱신하는 데 사용해. 전처리 통계도 여기서 추정해.
  • 검증셋: 모델 구조와 학습률, 규제 강도, 조기종료 시점 같은 개발 결정을 고르는 데 사용해. 가중치 경사에 직접 넣지 않아도 선택을 통해 모델에 간접 영향을 줘.
  • 시험셋: 개발 결정을 끝낸 뒤 최종 시스템의 일반화를 추정해. 이 결과를 보고 다시 설계를 바꾸면 더는 독립된 최종 평가가 아니야.

왜 검증셋이 따로 필요할까

학습셋과 시험셋만 두고 시험 성능을 보며 하이퍼파라미터를 고르면 시험 정보가 개발 과정에 스며들어. 여러 후보 가운데 시험셋에서 우연히 잘 나온 모델을 선택하게 되므로 보고 성능이 낙관적으로 기울 수 있어. 검증셋이 반복적인 선택을 맡고 시험셋은 마지막 추정에 남아야 해.

시험셋을 물리적으로 딱 한 번만 열어야 한다는 주문보다 중요한 건 역할을 바꾸지 않는 거야. 반복 평가가 필요한 운영 환경이라면 새 holdout이나 시간별 평가 창, 접근 기록 같은 거버넌스로 독립성을 관리해.

누출이 생기는 자리

  • 전처리 누출: 전체 자료의 평균과 표준편차, 어휘, 결측값 규칙을 먼저 계산하면 검증·시험 정보가 학습 변환에 들어가.
  • 중복 누출: 같은 사람이나 장치, 문서의 거의 같은 복사본이 서로 다른 분할에 있으면 모델이 독립된 사례가 아니라 대상을 알아볼 수 있어.
  • 시간 누출: 미래 정보로 과거를 예측하는 구성이 생기지 않도록 학습 시점과 배포 시점을 재현해야 해. 모든 시계열 문제에 한 가지 분할만 맞는 건 아니지만 시간 순서를 무시하면 안 돼.
  • 라벨 누출: 예측 시점에는 알 수 없는 사후 정보가 특성에 포함되면 높은 점수가 실제 성능을 뜻하지 않아.
Kaggle 리더보드 효과. 공개 리더보드 점수를 반복해서 보며 제출을 고르면 그 표본에도 과적합할 수 있어. 공개 순위는 검증셋처럼 사용되고, 숨겨 둔 비공개 순위에서 성능이 떨어지는 이유야. 집계된 점수도 충분히 반복해서 보면 정보가 돼.
좋은 분할은 배포 때 만날 독립 단위를 흉내 내. 행을 무작위로 나누기 전에 사람, 문서, 장치, 장소, 시간을 어느 쪽 경계로 묶어야 하는지 먼저 정해.

Code

scikit-learn으로 세 자료 분할하기·python
import numpy as np
from sklearn.model_selection import train_test_split

X = np.random.randn(1000, 10)
y = np.random.randint(0, 2, 1000)

# 두 단계 분할: 60% train, 20% val, 20% test
X_temp, X_test, y_temp, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
X_train, X_val, y_train, y_val = train_test_split(X_temp, y_temp, test_size=0.25, random_state=42)

print(f"train: {len(X_train)}, val: {len(X_val)}, test: {len(X_test)}")

External links

Exercise

표 형식 자료를 60/20/20의 학습·검증·시험 자료로 나눠. 학습셋의 평균과 표준편차만 계산해 세 자료 모두에 같은 표준화를 적용하고, 전체 자료에서 통계를 계산한 경우와 무엇이 다른지 설명해.
Hint
전체 자료의 통계에는 검증·시험 분포 정보가 들어가. 학습셋에서 fit한 변환을 검증과 시험에는 transform만 해야 해. 같은 사람이나 그룹의 행이 분할을 가로지르는지도 확인해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.