overfitting오버피팅
Overfitting
쉽게 이해하기
머신러닝의 목표는 ‘보지 못한 데이터’에서도 잘 맞는 예측이다. 그런데 모델이 훈련 데이터에 너무 집착하면, 우연한 잡음이나 예외적 패턴까지 기억해 버린다. 이때 훈련 성능은 계속 좋아지지만, 새 데이터 성능은 오히려 나빠지는 현상이 생긴다. 이것이 바로 과적합이다. 과적합을 막으려면 ‘훈련에서만 좋은 모델’을 가려내는 객관적 기준이 필요하다. 해결의 출발점은 데이터를 분리해 평가하는 것이다. 훈련 데이터로 모델을 학습시키고, 전혀 보지 않은 검증·테스트 데이터로 다시 재평가한다. 훈련 점수와 테스트 점수의 차이가 크면 모델이 훈련셋을 외운 것에 가깝다고 볼 수 있다. 또 데이터와 모델 복잡도 사이의 균형을 맞추는 절차도 중요하다. 너무 단순하면 패턴을 못 잡는 ‘과소적합’, 너무 복잡하면 잡음까지 학습하는 ‘과적합’이 된다. 구체적 메커니즘을 보면, 모델 복잡도가 올라갈수록 훈련 오차를 줄이기는 쉽다. 예를 들어 다항 회귀에서 차수를 높이면 훈련 데이터 점들을 요철처럼 따라가며 거의 완벽히 맞출 수 있다. 하지만 이렇게 생긴 곡선은 실제 현상의 일반적 규칙보다 ‘우연한 진동’을 더 많이 반영해 새로운 데이터에서는 오차가 커진다. 따라서 보지 않은 데이터를 통해 일반화 성능을 추정하고, 적절한 복잡도에서 멈추는 것이 핵심이다.
비유와 예시
- 구독 해지 예측에서의 ‘완벽한’ 트리: 고객 200명으로 작은 데이터에서 최대 깊이 제한 없이 의사결정나무를 학습하니 훈련 정확도는 거의 100%가 된다. 그러나 새 분기 고객에게 적용하자 분기 특유의 우연한 패턴만 따라 성능이 급락한다.
- 소수 표본의 이미지 분류: 제품 불량 사진이 적고 조명·각도 변화가 심한 상황에서 복잡한 모델을 쓰면 훈련셋의 특정 그림자나 배경 점까지 외운다. 검수 라인에서 다른 조명으로 촬영된 이미지를 만나면 오판이 늘어난다.
- 대학 성과 예측의 편향된 데이터: 특정 성별·민족 비중이 높은 훈련셋으로 성적·졸업 여부를 예측하면 그 집단 특이한 상관관계에 과하게 맞춘다. 다른 집단 데이터에서는 정확도가 눈에 띄게 떨어진다.
한눈에 비교
| Holdout Validation | Cross-Validation | Learning Curves | |
|---|---|---|---|
| 데이터 분할 | 훈련/검증(또는 테스트) 한 번 분할 | K개 폴드로 반복 학습·평가 | 훈련 크기별 성능을 곡선으로 시각화 |
| 장점 | 간단하고 빠름 | 분할 운에 덜 민감, 안정적 추정 | 고정 복잡도에서 과소/과적합 양상 파악 |
| 한계 | 분할 운에 성능이 좌우될 수 있음 | 계산비용 증가 | 해석엔 경험이 필요, 원인 추정용 |
| 관측 지표 | 훈련-테스트 점수 격차 | 폴드 평균·분산, 격차 | 훈련/검증 곡선의 간격과 수렴 여부 |
요약: 분할 수가 늘수록 추정은 안정적이지만 비용이 커진다. 학습곡선은 ‘왜 성능이 이렇지?’를 시각적으로 설명해 준다.
어디서 왜 중요한가
- 소규모 학습셋에서 빈번: 표본이 적으면 우연한 변동을 신호로 착각해 훈련 성능과 실제 성능의 차이가 커지기 쉽다.
- 노이즈가 많은 데이터에서 두드러짐: 관련 없는 특징이나 측정 오류가 많을수록 모델이 불필요한 부분을 외워 일반화가 떨어진다.
- 모델 복잡도 증가 시 리스크 상승: 다항 차수나 트리 깊이를 과도하게 늘리면 훈련 오차는 줄지만 테스트 오차가 커지는 양상이 나타난다.
- 교차검증의 실무 표준화: 단일 분할의 우연을 줄이기 위해 K-fold 등 교차검증으로 일반화 성능을 추정하는 관행이 자리 잡았다.
- 데이터 증강의 활용: 이미지 등에서 입력을 약간 변형해 표본을 늘리는 방식이 과적합 완화를 돕는다.
자주 하는 오해
- ❌ 오해: 훈련 정확도가 높으면 모델이 좋다 → ✅ 실제: 훈련-검증(또는 테스트) 성능 격차가 작아야 일반화가 좋다.
- ❌ 오해: 과적합은 딥러닝에만 생긴다 → ✅ 실제: 트리, 최근접 이웃, 다항 회귀 등 대부분의 모델에서 발생한다.
- ❌ 오해: 학습을 더 오래 돌리면 해결된다 → ✅ 실제: 데이터 분리 평가, 복잡도 제어, 증강 등 체계적 완화가 필요하다.
▶ 이런 것도 궁금하지 않으세요? - 회의에서 어떻게 말해요?
- 다음에 뭘 공부하면 좋아요?
대화에서는 이렇게
- "현재 모델이 훈련 0.95 / 검증 0.78이라 격차가 커요. 깊이를 제한해서 과적합 줄여보죠."
- "단일 holdout 말고 이번엔 5-fold CV로 평균 성능을 봅시다. 분산도 같이 체크하고요."
- "다항 차수를 8에서 4로 낮추니 학습곡선 간격이 줄고 검증 점수가 올랐어요. 이게 더 일반화돼요."
- "이미지에 증강을 적용했더니 훈련 점수는 약간 떨어져도 테스트 리콜이 개선됐습니다."
- "피처가 많아 노이즈가 섞인 듯해요. 선택/정규화로 복잡도 줄이고 다시 교차검증하겠습니다."
함께 읽으면 좋은 용어
- 과소적합 (Underfitting) — 너무 단순해 패턴을 못 잡는 반대 상황. 복잡도 조절의 양 끝을 비교하며 균형점을 이해하기 좋다.
- 바이어스-분산 트레이드오프 — 모델 복잡도를 높이면 분산이 커져 과적합이 늘 수 있다. 적정 복잡도 탐색의 이론적 틀.
- 교차검증 (Cross-Validation) — 과적합 점검의 표준 절차. 분할 운을 줄여 일반화 추정을 안정화한다.
- 정규화 (Regularization) — 불필요한 자유도를 억제해 과적합을 완화한다. 복잡도 제어의 대표 수단.
- 데이터 증강 (Data Augmentation) — 입력을 변형해 사실상 표본을 늘려 과적합을 줄인다. 특히 이미지에 효과적.
- 학습곡선 (Learning Curves) — 훈련 크기별 훈련/검증 성능을 보여 과소·과적합 원인 진단에 유용하다.
참고 자료
- Underfitting vs. Overfitting — scikit-learn documentation
다항 회귀 예로 과소·과적합의 양상을 시각화.
- What is Overfitting? - AWS
원인(소규모·노이즈)과 데이터 증강의 완화 개요.
- Identifying Overfitting in Machine Learning Models Using Scikit-Learn
홀드아웃·교차검증·학습곡선으로 진단하는 방법.
- How to Identify Overfitting Machine Learning Models in Scikit-Learn
훈련/테스트 성능 비교로 과적합 식별 가이드.
- Understanding Overfitting in Machine Learning — Kaggle
간단 예제로 과적합 동작을 직관적으로 설명.