콘텐츠로 이동

과적합과 과소적합 (Overfitting and Underfitting)

난이도: 초급~중급
선수 지식: 기초 ML 개념 (훈련/테스트 분할)
관련 문서: 정규화 이론 | 오컴의 면도날 | VC 차원 | 앙상블 방법


개요

과적합(Overfitting)과 과소적합(Underfitting)은 머신러닝에서 가장 핵심적인 개념이다. 편향-분산 트레이드오프(Bias-Variance Tradeoff)를 통해 이 두 현상을 이해하면, 모델의 성능을 진단하고 개선하는 체계적인 방법을 갖게 된다.

  • 과적합: 모델이 훈련 데이터의 노이즈까지 학습 (낮은 훈련 오류, 높은 테스트 오류)
  • 과소적합: 모델이 데이터의 패턴을 충분히 학습하지 못함 (높은 훈련 오류, 높은 테스트 오류)

핵심 개념

1. 정의

과소적합 (Underfitting) 적정 (Good Fit) 과적합 (Overfitting)
훈련 오류 높음 낮음 매우 낮음
테스트 오류 높음 낮음 높음
모델 상태 너무 단순 적절 너무 복잡
편향 높음 적정 낮음
분산 낮음 적정 높음

2. 편향-분산 분해 (Bias-Variance Decomposition)

공식

\[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) 훈련 데이터 변동에 대한 민감도 과적합
불가축 오류 (\(\sigma^2\)) 데이터 자체의 노이즈 줄일 수 없음

직관적 비유: 과녁 맞추기

높은 편향 + 낮은 분산     낮은 편향 + 높은 분산     낮은 편향 + 낮은 분산
(과소적합)               (과적합)                 (이상적)

     ○                      ○                      ○
   · · ·               ·    ·                    ···
   · · ·                  ·                      ···
   · · ·              ·     ·                    ···
                         ·
일관되게 빗나감           흩어져 있음              과녁 중앙에 모임

3. 진단 (Detection)

학습 곡선 (Learning Curves)

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

graph LR
    subgraph "과소적합"
        A1["훈련 오류: 높고 평탄<br/>검증 오류: 높고 평탄<br/>둘 다 높은 수준에서 수렴"]
    end
    subgraph "과적합"
        A2["훈련 오류: 매우 낮음<br/>검증 오류: 높음<br/>큰 격차"]
    end
    subgraph "적정"
        A3["훈련 오류: 낮음<br/>검증 오류: 낮음<br/>작은 격차"]
    end
패턴 진단
둘 다 높음, 격차 작음 과소적합 (높은 편향)
훈련 낮음, 검증 높음, 격차 큼 과적합 (높은 분산)
데이터 추가로 격차 감소 분산 문제 (더 많은 데이터 도움)
데이터 추가해도 변화 없음 편향 문제 (모델 변경 필요)

검증 곡선 (Validation Curves)

모델 복잡도(하이퍼파라미터)에 따른 오류 변화를 플롯: - 복잡도 증가 --> 훈련 오류 감소, 검증 오류 U자형

교차 검증 (Cross-Validation)

  • 폴드 간 성능이 일관적 --> 좋은 일반화
  • 폴드 간 큰 편차 --> 불안정한 모델 (높은 분산)

4. 과적합의 원인

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

5. 과적합 방지 전략

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

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


6. 과소적합의 원인

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

7. 진단 의사결정 흐름

flowchart TD
    A[모델 성능이 부족] --> B{훈련 오류가 높은가?}
    B -->|예| C[과소적합<br/>높은 편향]
    B -->|아니오| D{검증 오류가 높은가?}
    D -->|예| E[과적합<br/>높은 분산]
    D -->|아니오| F[모델 적정!]

    C --> G[더 복잡한 모델]
    C --> H[더 많은 특성]
    C --> I[정규화 감소]
    C --> J[더 오래 학습]

    E --> K[더 많은 데이터]
    E --> L[정규화 추가]
    E --> M[단순한 모델]
    E --> N[드롭아웃/조기종료]

상세 내용

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

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

차수 편향 분산 상태
1 (직선) 높음 낮음 과소적합
4 적정 적정 적정
15 매우 낮음 매우 높음 과적합
  • 1차: 비선형 패턴을 잡지 못함 (편향 오류 지배)
  • 15차: 모든 훈련 포인트를 통과하지만 새 데이터에서 극심한 진동 (분산 오류 지배)

모델별 과적합/과소적합 신호

모델 과적합 신호 과소적합 신호
결정 트리 매우 깊은 트리, 많은 리프 매우 얕은 트리
신경망 훈련 손실 계속 감소, 검증 손실 증가 훈련 손실도 높음
선형 모델 상관없는 특성의 큰 계수 비선형 패턴 미포착
k-NN k=1일 때 k=n일 때
부스팅 라운드가 많고 학습률이 높을 때 라운드가 적을 때

언제 사용하는가

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

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

흔한 오해와 함정

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

  • 아니다. 과소적합은 모델이 너무 단순한 것이 원인이다. 더 많은 데이터는 과적합 해결에 도움이 된다. 과소적합에는 더 복잡한 모델이나 더 좋은 특성이 필요하다.

2. "과적합은 항상 나쁘다"

  • 약간의 과적합은 허용 가능할 수 있다. 훈련 오류와 테스트 오류의 격차가 작으면서 둘 다 낮다면 약간의 과적합은 문제되지 않는다.

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

  • 과도한 정규화는 과소적합을 유발한다. 적절한 강도를 교차 검증으로 찾아야 한다.

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

  • 테스트 세트를 반복적으로 사용하여 모델을 선택하면, 테스트 세트에 대한 과적합이 발생한다. 별도의 최종 테스트 세트를 유지해야 한다.

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

  • 앙상블, 더 좋은 특성, 더 많은 데이터 등으로 동시 개선이 가능할 수 있다. 트레이드오프는 고정된 모델 복잡도에서의 이야기이다.

다른 주제와의 연결


자주 묻는 면접 질문

  1. 학습 곡선에서 과적합과 과소적합을 어떻게 구분하는가?
  2. 과적합: 훈련 오류 낮고 검증 오류 높음 (큰 격차)
  3. 과소적합: 둘 다 높음 (작은 격차)

  4. 검증 오류가 높을 때, 편향인지 분산인지 어떻게 진단하는가?

  5. 훈련 오류도 높으면 편향 문제. 훈련 오류는 낮지만 검증 오류가 높으면 분산 문제.

  6. 더 많은 훈련 데이터가 과소적합에 도움이 되는가?

  7. 아니다. 과소적합은 모델 용량 부족이 원인. 더 복잡한 모델이나 더 좋은 특성이 필요.

  8. 정규화 강도가 편향-분산에 미치는 영향은?

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

코드 예시

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)