콘텐츠로 이동

과적합과 과소적합 (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자형 곡선이 도전받았지만, 편향-분산 분해 자체의 가치는 여전히 유효하다.


과소적합 (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)”

E[(yf^(x))2]=Bias[f^(x)]2편향2+Var[f^(x)]분산+σ2불가축 오류E\left[(y - \hat{f}(x))^2\right] = \underbrace{\text{Bias}[\hat{f}(x)]^2}_{\text{편향}^2} + \underbrace{\text{Var}[\hat{f}(x)]}_{\text{분산}} + \underbrace{\sigma^2}_{\text{불가축 오류}}

요소의미원인
편향 (Bias)잘못된 가정으로 인한 오류과소적합
분산 (Variance)훈련 데이터 변동에 대한 민감도과적합
불가축 오류 (σ2\sigma^2)데이터 자체의 노이즈줄일 수 없음
높은 편향 + 낮은 분산 낮은 편향 + 높은 분산 낮은 편향 + 낮은 분산
(과소적합) (과적합) (이상적)
○ ○ ○
· · · · · ···
· · · · ···
· · · · · ···
·
일관되게 빗나감 흩어져 있음 과녁 중앙에 모임

훈련 세트 크기에 따른 오류 변화:

학습 곡선 (Learning Curves) 다이어그램

패턴진단
둘 다 높음, 격차 작음과소적합 (높은 편향)
훈련 낮음, 검증 높음, 격차 큼과적합 (높은 분산)
데이터 추가로 격차 감소분산 문제 (더 많은 데이터 도움)
데이터 추가해도 변화 없음편향 문제 (모델 변경 필요)

모델 복잡도(하이퍼파라미터)에 따른 오류 변화를 플롯:

  • 복잡도 증가 —> 훈련 오류 감소, 검증 오류 U자형
  • 폴드 간 성능이 일관적 —> 좋은 일반화
  • 폴드 간 큰 편차 —> 불안정한 모델 (높은 분산)

원인설명
데이터 대비 과도한 파라미터모델이 노이즈까지 암기
과도한 학습 (에폭)후반 에폭에서 노이즈 학습
노이즈/오류 레이블잘못된 패턴 학습
데이터 누출 (Data Leakage)테스트 정보가 훈련에 유입
과도하게 복잡한 아키텍처불필요한 표현력

전략유형메커니즘
더 많은 데이터데이터분산 감소
데이터 증강데이터효과적 데이터셋 증가
특성 선택모델차원 축소
정규화 (L1, L2)모델가중치 제약
드롭아웃모델뉴런 무작위 비활성화
조기 종료학습학습 반복 제한
교차 검증평가더 나은 모델 선택
앙상블모델노이즈 평균화
단순한 모델모델용량 감소
배치 정규화모델학습 안정화

자세한 정규화 기법은 정규화 이론 참조.


원인해결 방법
모델이 너무 단순더 복잡한 모델 사용
특성 부족 / 특성 공학 미흡더 많은/좋은 특성 추가
과도한 정규화정규화 강도 감소
불충분한 학습에폭 수 증가, 학습률 조정
잘못된 모델 유형문제에 맞는 모델로 변경

7. 진단 의사결정 흐름 다이어그램

편향-분산 트레이드오프의 예시: 다항 회귀

섹션 제목: “편향-분산 트레이드오프의 예시: 다항 회귀”

같은 데이터에 다항 함수를 적합할 때:

차수편향분산상태
1 (직선)높음낮음과소적합
4적정적정적정
15매우 낮음매우 높음과적합
  • 1차: 비선형 패턴을 잡지 못함 (편향 오류 지배)
  • 15차: 모든 훈련 포인트를 통과하지만 새 데이터에서 극심한 진동 (분산 오류 지배)
모델과적합 신호과소적합 신호
결정 트리매우 깊은 트리, 많은 리프매우 얕은 트리
신경망훈련 손실 계속 감소, 검증 손실 증가훈련 손실도 높음
선형 모델상관없는 특성의 큰 계수비선형 패턴 미포착
k-NNk=1일 때k=n일 때
부스팅라운드가 많고 학습률이 높을 때라운드가 적을 때

편향-분산 분석은 모든 ML 프로젝트의 핵심 진단 도구이다:

  • 모델 성능이 기대에 미치지 못할 때 원인 진단
  • 다음 단계 결정 (데이터 추가? 모델 변경? 정규화?)
  • 하이퍼파라미터 튜닝의 방향 설정
  • 모델 복잡도 결정

실전 사례: Kaggle 리더보드의 함정

섹션 제목: “실전 사례: Kaggle 리더보드의 함정”

Kaggle 대회에서 과적합으로 인한 리더보드 추락은 빈번하게 발생하는 현상이며, 과적합의 위험을 가장 극적으로 보여주는 실전 사례이다.

대표적인 패턴은 다음과 같다:

  • 퍼블릭 리더보드(Public Leaderboard) 1위: 한 참가자가 퍼블릭 테스트 세트(전체 테스트 데이터의 일부)에서 놀라운 성능을 기록하며 1위를 차지한다
  • 프라이빗 리더보드(Private Leaderboard)에서 50위 이하로 추락: 대회 종료 후 나머지 테스트 데이터로 평가했을 때, 성능이 급격히 떨어진다
  • 원인: 참가자가 퍼블릭 리더보드의 점수를 검증 지표로 삼아 모델을 반복 조정한 결과, 퍼블릭 테스트 세트에 과적합된 것이다

이 현상이 발생하는 구체적 메커니즘:

  1. 퍼블릭 리더보드에 하루 5회 이상 제출하며 점수를 확인한다
  2. 점수가 오른 모델의 방향으로 하이퍼파라미터를 조정한다
  3. 이 과정을 수십~수백 회 반복하면, 사실상 퍼블릭 테스트 세트를 “검증 세트처럼” 사용한 것이 된다
  4. 결과적으로 퍼블릭 테스트 세트에 특화된 모델이 만들어지며, 새로운 데이터(프라이빗 테스트 세트)에서는 일반화가 되지 않는다

교훈: 테스트 세트를 반복적으로 사용하면 테스트 세트에 대한 과적합이 발생한다. 이것이 “최종 테스트 세트는 단 한 번만 사용해야 한다”는 원칙의 실무적 근거이다. 내부 교차 검증(Cross-Validation)을 통한 모델 선택을 철저히 하고, 외부 테스트 세트에 대한 의존을 최소화하는 것이 핵심이다.


1. “훈련 데이터를 더 추가하면 과소적합이 해결된다”

섹션 제목: “1. “훈련 데이터를 더 추가하면 과소적합이 해결된다””
  • 아니다. 과소적합은 모델이 너무 단순한 것이 원인이다. 더 많은 데이터는 과적합 해결에 도움이 된다. 과소적합에는 더 복잡한 모델이나 더 좋은 특성이 필요하다.
  • 약간의 과적합은 허용 가능할 수 있다. 훈련 오류와 테스트 오류의 격차가 작으면서 둘 다 낮다면 약간의 과적합은 문제되지 않는다.

3. “정규화 강도는 높을수록 좋다”

섹션 제목: “3. “정규화 강도는 높을수록 좋다””
  • 과도한 정규화는 과소적합을 유발한다. 적절한 강도를 교차 검증으로 찾아야 한다.

4. “테스트 세트에서 성능이 좋으면 일반화가 잘 되는 것이다”

섹션 제목: “4. “테스트 세트에서 성능이 좋으면 일반화가 잘 되는 것이다””
  • 테스트 세트를 반복적으로 사용하여 모델을 선택하면, 테스트 세트에 대한 과적합이 발생한다. 별도의 최종 테스트 세트를 유지해야 한다.

5. “편향과 분산을 동시에 줄일 수 없다”

섹션 제목: “5. “편향과 분산을 동시에 줄일 수 없다””
  • 앙상블, 더 좋은 특성, 더 많은 데이터 등으로 동시 개선이 가능할 수 있다. 트레이드오프는 고정된 모델 복잡도에서의 이야기이다.


  1. 학습 곡선에서 과적합과 과소적합을 어떻게 구분하는가?

    • 과적합: 훈련 오류 낮고 검증 오류 높음 (큰 격차)
    • 과소적합: 둘 다 높음 (작은 격차)
  2. 검증 오류가 높을 때, 편향인지 분산인지 어떻게 진단하는가?

    • 훈련 오류도 높으면 편향 문제. 훈련 오류는 낮지만 검증 오류가 높으면 분산 문제.
  3. 더 많은 훈련 데이터가 과소적합에 도움이 되는가?

    • 아니다. 과소적합은 모델 용량 부족이 원인. 더 복잡한 모델이나 더 좋은 특성이 필요.
  4. 정규화 강도가 편향-분산에 미치는 영향은?

    • 정규화 강도 증가: 편향 증가, 분산 감소. 감소: 편향 감소, 분산 증가. 교차 검증으로 최적 균형 탐색.

from sklearn.model_selection import learning_curve, validation_curve
import numpy as np
import 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)