오늘 끝나면
훈련·검증·테스트 분할
- ✓훈련·검증·테스트 분할의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 훈련이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
정직하게 평가하려면 데이터를 나눠야 함 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
통계 · 26
훈련·검증·테스트
분할
배운 데이터로 다시 채점하면 점수가 부풀려진다.
그래서 데이터를 훈련, 검증, 테스트 셋으로 쪼갠다.
테스트는 마지막에 딱 한 번 본다.
같은 데이터로 채점 = 반칙
모델을 학습시킨 그 데이터로 다시 성능을 재면, 점수가 진짜 실력보다 높게 나온다.
이유는 단순하다. 모델이 그 데이터를 이미 봤다.
충분히 복잡한 모델은 답을 외워 버릴 수 있고, 그러면 채점해도 거의 만점이 나온다.
이건 시험 문제를 미리 보고 친 점수다. 처음 보는 문제에서의 실력은 알 수 없다.
우리가 알고 싶은 건 처음 보는 데이터에서의 성능이다.
이것을 일반화 성능이라 한다.
외운 데이터 점수는 거의 항상 일반화 성능보다 낙관적이다.
이 부풀림을 낙관 편향이라 한다.
막으려면 채점에 쓸 데이터를 학습에서 떼어 놔야 한다.
모델이 이미 답을 봐서 거의 만점이 나온다
훈련 점수 98%
실제 성능 74%
훈련 · 검증 · 테스트
답은 데이터를 미리 세 덩어리로 나누는 것이다. 역할이 각각 다르다.
훈련셋(train)은 모델이 파라미터를 학습하는 데 쓴다. 직선의 기울기와 절편을 여기서 맞춘다.
검증셋(validation)은 모델을 고르고 튜닝하는 데 쓴다. 차수나 정규화 세기 같은 손잡이를 여기 점수로 비교한다.
테스트셋(test)은 마지막에 최종 성능을 보고하는 데만 쓴다.
학습에도 안 쓰고 튜닝에도 안 쓴다. 끝까지 봉인한다.
흔한 비율은 60대 20대 20 또는 70대 15대 15인데, 절대 법칙은 아니다.
데이터가 많으면 테스트 몫을 줄여도 되고, 적으면 다음 강의에서 다룰 교차검증을 쓴다.
같은 데이터 vs 분리 평가
낙관 편향을 눈으로 확인한다.
빈 사각형이 테스트셋이다. 모델이 학습 때 건드린 적 없는 데이터다.
훈련 비율을 옮기고, 모델 복잡도(다항 차수)를 바꿔 본다.
두 점수를 같이 띄운다. 둘 다 RMSE이고, 낮을수록 좋다.
훈련셋 RMSE는 모델이 본 데이터 점수이고, 분리한 테스트 RMSE는 정직한 점수다.
차수를 9까지 올려 본다.
훈련 RMSE는 계속 내려가는데 테스트 RMSE는 어느 순간 다시 오른다.
훈련 점수만 믿으면 더 복잡한 모델이 더 좋아 보인다. 그게 낙관 편향의 함정이다.
테스트가 훈련보다 -0.019 높다. 차이가 작다. 적당히 일반화됐다. 차수를 9까지 올려 보자.
테스트는 마지막에 한 번
테스트셋의 규칙은 하나다. 끝날 때까지 보지 않는 것이다.
모델 고르기와 튜닝은 전부 검증셋으로 한다.
테스트셋은 모든 결정이 끝난 뒤, 최종 성능을 딱 한 번 재는 데만 쓴다.
테스트 점수를 보고 모델을 고치는 순간, 테스트셋이 사실상 튜닝 데이터가 되기 때문이다.
여러 번 들여다보며 거기 맞춰 가면 테스트셋에 과적합이 일어난다.
그러면 보고한 성능도 다시 낙관적으로 부풀려진다.
또 하나, 데이터 누수를 조심한다.
분할 전에 전체로 정규화나 결측 대치를 하면 테스트 정보가 훈련에 새어 든다.
스케일링 같은 전처리는 훈련셋에서만 학습하고, 검증과 테스트에는 그 값을 적용한다.
왜 검증과 테스트를 따로 두나? (펼치기)
검증셋도 반복해서 보고 모델을 고르다 보면 거기에 살짝 과적합된다.그래서 검증 점수도 약간 낙관적이라, 최종 보고용으로는 못 쓴다.
끝까지 건드리지 않은 테스트셋만이 진짜 처음 보는 데이터에 가깝다.
그 점수가 가장 정직한 일반화 성능 추정치다.
테스트셋으로 최종 성능 측정
여기서 모델을 고치면 테스트셋에 과적합된다
정리, 셋으로 나눠 정직하게
같은 데이터로 학습하고 평가하면 외운 걸 채점하는 부정행위라, 점수가 부풀려진다.
그래서 훈련(학습), 검증(튜닝), 테스트(최종)로 나눈다.
테스트셋은 끝까지 봉인했다가 마지막에 한 번만 본다.
분할 전에 전처리를 전체로 돌리면 데이터 누수가 생기므로, 전처리는 훈련셋 기준으로만 한다.
데이터가 적어 한 번 나누기 아까우면, 다음 강의의 교차검증으로 넘어간다.
Q. 테스트셋을 여러 번 보며 모델을 고치면?
정답은 테스트셋에 과적합돼 평가가 낙관적으로 부풀려진다이다.테스트 점수를 보고 모델을 고치는 순간, 테스트셋은 사실상 튜닝 데이터가 된다.
거기에 맞춰 가면 보고한 성능이 실제 일반화 성능보다 높게 나온다.
그래서 테스트셋은 모든 결정이 끝난 뒤 딱 한 번만 본다.
| 셋 | 쓰임 |
|---|---|
| 훈련 train | 학습파라미터 맞추기 · 본 데이터 |
| 검증 val | 튜닝모델·하이퍼 고르기 · 반복 참조 |
| 테스트 test | 최종마지막 한 번 · 정직한 점수 |