과적합과 과소적합 (Overfitting and Underfitting)
난이도: 초급~중급
선수 지식: 기초 ML 개념 (훈련/테스트 분할)
관련 문서: 정규화 이론 | 오컴의 면도날 | VC 차원 | 앙상블 방법
핵심 요약: 과적합(Overfitting) = 시험 답 외우기, 과소적합(Underfitting) = 공부 안 하기. 적절한 모델 복잡도(Model Complexity)를 찾는 것이 핵심이다. 편향-분산 트레이드오프(Bias-Variance Tradeoff)를 이해하면, 모델이 왜 실패하는지 진단하고 올바른 처방을 내릴 수 있다.
과적합(Overfitting)과 과소적합(Underfitting)은 머신러닝에서 가장 핵심적인 개념이다. 편향-분산 트레이드오프(Bias-Variance Tradeoff)를 통해 이 두 현상을 이해하면, 모델의 성능을 진단하고 개선하는 체계적인 방법을 갖게 된다.
- 과적합: 모델이 훈련 데이터의 노이즈까지 학습 (낮은 훈련 오류, 높은 테스트 오류)
- 과소적합: 모델이 데이터의 패턴을 충분히 학습하지 못함 (높은 훈련 오류, 높은 테스트 오류)
탄생 배경
섹션 제목: “탄생 배경”과적합과 과소적합의 이론적 토대는 1992년 Geman, Bienenstock, Doursat의 논문 “Neural Networks and the Bias/Variance Dilemma”에서 체계적으로 정립되었다. 이 논문은 신경망의 성능을 편향(Bias)과 분산(Variance)이라는 두 가지 오류 원천으로 분해하는 프레임워크를 제시했다.
1990년대 초, 신경망은 이미 강력한 도구로 인식되고 있었지만, “왜 때때로 학습이 실패하는가”에 대한 체계적 이해가 부족했다. Geman et al.은 이 문제를 ML의 근본 딜레마(Fundamental Dilemma)로 정의했다:
- 너무 단순한 모델(높은 편향): 데이터의 진정한 패턴을 포착하지 못한다
- 너무 복잡한 모델(높은 분산): 훈련 데이터의 노이즈까지 학습하여 새 데이터에서 실패한다
- 이 둘 사이의 최적점을 찾는 것이 모든 ML 프로젝트의 핵심 과제이다
이 프레임워크는 이후 ML의 가장 기본적인 교과서적 개념이 되었으며, 모델 선택, 정규화, 교차 검증 등 실무 기법의 이론적 근거를 제공했다. 2019년 Belkin et al.의 이중 하강(Double Descent) 발견으로 이 전통적 U자형 곡선이 도전받았지만, 편향-분산 분해 자체의 가치는 여전히 유효하다.
핵심 개념
섹션 제목: “핵심 개념”1. 정의
섹션 제목: “1. 정의”| 과소적합 (Underfitting) | 적정 (Good Fit) | 과적합 (Overfitting) | |
|---|---|---|---|
| 훈련 오류 | 높음 | 낮음 | 매우 낮음 |
| 테스트 오류 | 높음 | 낮음 | 높음 |
| 모델 상태 | 너무 단순 | 적절 | 너무 복잡 |
| 편향 | 높음 | 적정 | 낮음 |
| 분산 | 낮음 | 적정 | 높음 |
숫자로 이해하기
섹션 제목: “숫자로 이해하기”시험 공부 비유로 과적합과 과소적합을 이해해 보자.
시나리오: 수학 시험을 준비하는 학생 3명
| 학생 | 공부 방법 | 연습 문제 점수 | 실전 시험 점수 | 상태 |
|---|---|---|---|---|
| A | 공부 안 함 | 40점 | 38점 | 과소적합 (둘 다 낮음) |
| B | 원리 이해 + 적당한 연습 | 85점 | 82점 | 적정 (격차 작음) |
| C | 기출문제 답 통째로 암기 | 100점 | 55점 | 과적합 (큰 격차) |
학생 C는 연습 문제(훈련 데이터, Training Data)에서 만점이지만, 새로운 문제(테스트 데이터, Test Data)에서 절반밖에 맞추지 못한다. 이것이 과적합이다. 진단 핵심: 훈련 오류(Training Error)와 테스트 오류(Test Error)의 격차를 보면 된다. 격차가 크면 과적합, 둘 다 높으면 과소적합이다.
2. 편향-분산 분해 (Bias-Variance Decomposition)
섹션 제목: “2. 편향-분산 분해 (Bias-Variance Decomposition)”
| 요소 | 의미 | 원인 |
|---|---|---|
| 편향 (Bias) | 잘못된 가정으로 인한 오류 | 과소적합 |
| 분산 (Variance) | 훈련 데이터 변동에 대한 민감도 | 과적합 |
| 불가축 오류 () | 데이터 자체의 노이즈 | 줄일 수 없음 |
직관적 비유: 과녁 맞추기
섹션 제목: “직관적 비유: 과녁 맞추기”높은 편향 + 낮은 분산 낮은 편향 + 높은 분산 낮은 편향 + 낮은 분산(과소적합) (과적합) (이상적)
○ ○ ○ · · · · · ··· · · · · ··· · · · · · ··· ·일관되게 빗나감 흩어져 있음 과녁 중앙에 모임3. 진단 (Detection)
섹션 제목: “3. 진단 (Detection)”학습 곡선 (Learning Curves)
섹션 제목: “학습 곡선 (Learning Curves)”훈련 세트 크기에 따른 오류 변화:
| 패턴 | 진단 |
|---|---|
| 둘 다 높음, 격차 작음 | 과소적합 (높은 편향) |
| 훈련 낮음, 검증 높음, 격차 큼 | 과적합 (높은 분산) |
| 데이터 추가로 격차 감소 | 분산 문제 (더 많은 데이터 도움) |
| 데이터 추가해도 변화 없음 | 편향 문제 (모델 변경 필요) |
검증 곡선 (Validation Curves)
섹션 제목: “검증 곡선 (Validation Curves)”모델 복잡도(하이퍼파라미터)에 따른 오류 변화를 플롯:
- 복잡도 증가 —> 훈련 오류 감소, 검증 오류 U자형
교차 검증 (Cross-Validation)
섹션 제목: “교차 검증 (Cross-Validation)”- 폴드 간 성능이 일관적 —> 좋은 일반화
- 폴드 간 큰 편차 —> 불안정한 모델 (높은 분산)
4. 과적합의 원인
섹션 제목: “4. 과적합의 원인”| 원인 | 설명 |
|---|---|
| 데이터 대비 과도한 파라미터 | 모델이 노이즈까지 암기 |
| 과도한 학습 (에폭) | 후반 에폭에서 노이즈 학습 |
| 노이즈/오류 레이블 | 잘못된 패턴 학습 |
| 데이터 누출 (Data Leakage) | 테스트 정보가 훈련에 유입 |
| 과도하게 복잡한 아키텍처 | 불필요한 표현력 |
5. 과적합 방지 전략
섹션 제목: “5. 과적합 방지 전략”| 전략 | 유형 | 메커니즘 |
|---|---|---|
| 더 많은 데이터 | 데이터 | 분산 감소 |
| 데이터 증강 | 데이터 | 효과적 데이터셋 증가 |
| 특성 선택 | 모델 | 차원 축소 |
| 정규화 (L1, L2) | 모델 | 가중치 제약 |
| 드롭아웃 | 모델 | 뉴런 무작위 비활성화 |
| 조기 종료 | 학습 | 학습 반복 제한 |
| 교차 검증 | 평가 | 더 나은 모델 선택 |
| 앙상블 | 모델 | 노이즈 평균화 |
| 단순한 모델 | 모델 | 용량 감소 |
| 배치 정규화 | 모델 | 학습 안정화 |
자세한 정규화 기법은 정규화 이론 참조.
6. 과소적합의 원인
섹션 제목: “6. 과소적합의 원인”| 원인 | 해결 방법 |
|---|---|
| 모델이 너무 단순 | 더 복잡한 모델 사용 |
| 특성 부족 / 특성 공학 미흡 | 더 많은/좋은 특성 추가 |
| 과도한 정규화 | 정규화 강도 감소 |
| 불충분한 학습 | 에폭 수 증가, 학습률 조정 |
| 잘못된 모델 유형 | 문제에 맞는 모델로 변경 |
7. 진단 의사결정 흐름
섹션 제목: “7. 진단 의사결정 흐름”상세 내용
섹션 제목: “상세 내용”편향-분산 트레이드오프의 예시: 다항 회귀
섹션 제목: “편향-분산 트레이드오프의 예시: 다항 회귀”같은 데이터에 다항 함수를 적합할 때:
| 차수 | 편향 | 분산 | 상태 |
|---|---|---|---|
| 1 (직선) | 높음 | 낮음 | 과소적합 |
| 4 | 적정 | 적정 | 적정 |
| 15 | 매우 낮음 | 매우 높음 | 과적합 |
- 1차: 비선형 패턴을 잡지 못함 (편향 오류 지배)
- 15차: 모든 훈련 포인트를 통과하지만 새 데이터에서 극심한 진동 (분산 오류 지배)
모델별 과적합/과소적합 신호
섹션 제목: “모델별 과적합/과소적합 신호”| 모델 | 과적합 신호 | 과소적합 신호 |
|---|---|---|
| 결정 트리 | 매우 깊은 트리, 많은 리프 | 매우 얕은 트리 |
| 신경망 | 훈련 손실 계속 감소, 검증 손실 증가 | 훈련 손실도 높음 |
| 선형 모델 | 상관없는 특성의 큰 계수 | 비선형 패턴 미포착 |
| k-NN | k=1일 때 | k=n일 때 |
| 부스팅 | 라운드가 많고 학습률이 높을 때 | 라운드가 적을 때 |
언제 사용하는가
섹션 제목: “언제 사용하는가”편향-분산 분석은 모든 ML 프로젝트의 핵심 진단 도구이다:
- 모델 성능이 기대에 미치지 못할 때 원인 진단
- 다음 단계 결정 (데이터 추가? 모델 변경? 정규화?)
- 하이퍼파라미터 튜닝의 방향 설정
- 모델 복잡도 결정
실전 사례: Kaggle 리더보드의 함정
섹션 제목: “실전 사례: Kaggle 리더보드의 함정”Kaggle 대회에서 과적합으로 인한 리더보드 추락은 빈번하게 발생하는 현상이며, 과적합의 위험을 가장 극적으로 보여주는 실전 사례이다.
대표적인 패턴은 다음과 같다:
- 퍼블릭 리더보드(Public Leaderboard) 1위: 한 참가자가 퍼블릭 테스트 세트(전체 테스트 데이터의 일부)에서 놀라운 성능을 기록하며 1위를 차지한다
- 프라이빗 리더보드(Private Leaderboard)에서 50위 이하로 추락: 대회 종료 후 나머지 테스트 데이터로 평가했을 때, 성능이 급격히 떨어진다
- 원인: 참가자가 퍼블릭 리더보드의 점수를 검증 지표로 삼아 모델을 반복 조정한 결과, 퍼블릭 테스트 세트에 과적합된 것이다
이 현상이 발생하는 구체적 메커니즘:
- 퍼블릭 리더보드에 하루 5회 이상 제출하며 점수를 확인한다
- 점수가 오른 모델의 방향으로 하이퍼파라미터를 조정한다
- 이 과정을 수십~수백 회 반복하면, 사실상 퍼블릭 테스트 세트를 “검증 세트처럼” 사용한 것이 된다
- 결과적으로 퍼블릭 테스트 세트에 특화된 모델이 만들어지며, 새로운 데이터(프라이빗 테스트 세트)에서는 일반화가 되지 않는다
교훈: 테스트 세트를 반복적으로 사용하면 테스트 세트에 대한 과적합이 발생한다. 이것이 “최종 테스트 세트는 단 한 번만 사용해야 한다”는 원칙의 실무적 근거이다. 내부 교차 검증(Cross-Validation)을 통한 모델 선택을 철저히 하고, 외부 테스트 세트에 대한 의존을 최소화하는 것이 핵심이다.
흔한 오해와 함정
섹션 제목: “흔한 오해와 함정”1. “훈련 데이터를 더 추가하면 과소적합이 해결된다”
섹션 제목: “1. “훈련 데이터를 더 추가하면 과소적합이 해결된다””- 아니다. 과소적합은 모델이 너무 단순한 것이 원인이다. 더 많은 데이터는 과적합 해결에 도움이 된다. 과소적합에는 더 복잡한 모델이나 더 좋은 특성이 필요하다.
2. “과적합은 항상 나쁘다”
섹션 제목: “2. “과적합은 항상 나쁘다””- 약간의 과적합은 허용 가능할 수 있다. 훈련 오류와 테스트 오류의 격차가 작으면서 둘 다 낮다면 약간의 과적합은 문제되지 않는다.
3. “정규화 강도는 높을수록 좋다”
섹션 제목: “3. “정규화 강도는 높을수록 좋다””- 과도한 정규화는 과소적합을 유발한다. 적절한 강도를 교차 검증으로 찾아야 한다.
4. “테스트 세트에서 성능이 좋으면 일반화가 잘 되는 것이다”
섹션 제목: “4. “테스트 세트에서 성능이 좋으면 일반화가 잘 되는 것이다””- 테스트 세트를 반복적으로 사용하여 모델을 선택하면, 테스트 세트에 대한 과적합이 발생한다. 별도의 최종 테스트 세트를 유지해야 한다.
5. “편향과 분산을 동시에 줄일 수 없다”
섹션 제목: “5. “편향과 분산을 동시에 줄일 수 없다””- 앙상블, 더 좋은 특성, 더 많은 데이터 등으로 동시 개선이 가능할 수 있다. 트레이드오프는 고정된 모델 복잡도에서의 이야기이다.
다른 주제와의 연결
섹션 제목: “다른 주제와의 연결”- 정규화 이론: 과적합 방지의 핵심 도구
- VC 차원: 모델 복잡도와 일반화 격차의 이론적 관계
- 오컴의 면도날: 적절한 복잡도 선택의 원리
- 앙상블 방법: 배깅(분산 감소), 부스팅(편향 감소)
- 하이퍼파라미터 최적화: 최적 복잡도를 찾는 실무 방법
- 학습률: 학습률과 과적합/과소적합의 관계
자주 묻는 면접 질문
섹션 제목: “자주 묻는 면접 질문”-
학습 곡선에서 과적합과 과소적합을 어떻게 구분하는가?
- 과적합: 훈련 오류 낮고 검증 오류 높음 (큰 격차)
- 과소적합: 둘 다 높음 (작은 격차)
-
검증 오류가 높을 때, 편향인지 분산인지 어떻게 진단하는가?
- 훈련 오류도 높으면 편향 문제. 훈련 오류는 낮지만 검증 오류가 높으면 분산 문제.
-
더 많은 훈련 데이터가 과소적합에 도움이 되는가?
- 아니다. 과소적합은 모델 용량 부족이 원인. 더 복잡한 모델이나 더 좋은 특성이 필요.
-
정규화 강도가 편향-분산에 미치는 영향은?
- 정규화 강도 증가: 편향 증가, 분산 감소. 감소: 편향 감소, 분산 증가. 교차 검증으로 최적 균형 탐색.
코드 예시
섹션 제목: “코드 예시”from sklearn.model_selection import learning_curve, validation_curveimport numpy as npimport matplotlib.pyplot as plt
# 학습 곡선 (과적합 vs 과소적합 진단)train_sizes, train_scores, val_scores = learning_curve( estimator=model, X=X_train, y=y_train, train_sizes=np.linspace(0.1, 1.0, 10), cv=5, scoring='accuracy')
plt.plot(train_sizes, train_scores.mean(axis=1), label='훈련')plt.plot(train_sizes, val_scores.mean(axis=1), label='검증')plt.xlabel('훈련 세트 크기')plt.ylabel('정확도')plt.legend()plt.title('학습 곡선')
# 검증 곡선 (하이퍼파라미터 vs 성능)param_range = [0.001, 0.01, 0.1, 1, 10, 100]train_scores, val_scores = validation_curve( estimator=model, X=X_train, y=y_train, param_name='C', # 또는 'alpha', 'max_depth' 등 param_range=param_range, cv=5, scoring='accuracy')
plt.plot(param_range, train_scores.mean(axis=1), label='훈련')plt.plot(param_range, val_scores.mean(axis=1), label='검증')plt.xscale('log')plt.xlabel('하이퍼파라미터 C')plt.ylabel('정확도')plt.legend()plt.title('검증 곡선')용어 정리
섹션 제목: “용어 정리”| 영어 | 한국어 |
|---|---|
| Overfitting | 과적합 |
| Underfitting | 과소적합 |
| Bias | 편향 |
| Variance | 분산 |
| Bias-Variance Tradeoff | 편향-분산 트레이드오프 |
| Irreducible Error | 불가축 오류 |
| Learning Curve | 학습 곡선 |
| Validation Curve | 검증 곡선 |
| Generalization | 일반화 |
| Data Leakage | 데이터 누출 |
참고 자료
섹션 제목: “참고 자료”- Hastie, Tibshirani, Friedman - The Elements of Statistical Learning (Ch. 7: Model Assessment and Selection)
- Geman, Bienenstock, Doursat (1992) - “Neural Networks and the Bias/Variance Dilemma”
- Belkin et al. (2019) - “Reconciling Modern Machine-Learning Practice and the Classical Bias-Variance Trade-off”
- Andrew Ng - “Advice for Applying Machine Learning” (Stanford CS229)