콘텐츠로 이동

편향-분산 트레이드오프 (Bias-Variance Trade-off)

난이도: 중급
선수 지식: 회귀 지표, 기댓값·분산의 개념
관련 문서: 과적합과 과소적합 | 정규화 이론 | 앙상블

핵심 요약: 편향(Bias)은 모델이 체계적으로 빗나가는 정도이고, 분산(Variance)은 데이터가 바뀔 때 모델이 흔들리는 정도다. 단순한 모델은 편향이 높고 분산이 낮으며(과소적합), 복잡한 모델은 편향이 낮고 분산이 높다(과적합). 최적의 모델은 그 중간 어딘가에 있다. 다트를 던질 때 항상 같은 곳(과녁 밖)에 맞으면 편향이 높고, 과녁 근처이지만 흩어지면 분산이 높은 것이다.

  • 편향(Bias): 모델이 너무 단순해서 생기는 오차. 직선으로 곡선을 그리려 할 때처럼, 데이터를 아무리 많이 줘도 줄지 않는다.
  • 분산(Variance): 모델이 너무 복잡해서 생기는 오차. 훈련 데이터가 조금만 바뀌어도 결과가 크게 흔들린다.
  • 줄일 수 없는 오차(Irreducible Error): 데이터 자체에 낀 잡음. 어떤 모델을 써도 없앨 수 없는 하한선이다.
  • 트레이드오프: 보통 편향을 줄이면 분산이 커지고, 분산을 줄이면 편향이 커진다. 둘의 합이 최소가 되는 적당한 복잡도를 찾는 것이 목표다.
  • 이중 하강(Double Descent): 모델을 아주 크게 키우면 오차가 다시 내려가는 현상. 고전적인 U자형 곡선만으로는 설명되지 않는 딥러닝 시대의 관찰이다.

모든 예측 오차는 세 가지 원천으로 분해된다: 편향(Bias), 분산(Variance), 그리고 줄일 수 없는 오차(Irreducible Error). 편향은 모델이 너무 단순할 때(과소적합), 분산은 모델이 너무 복잡할 때(과적합) 커진다. 이 둘 사이의 균형을 찾는 것이 모델 선택의 핵심이다.

이것은 이론적 개념만이 아니다. 실제로 모델의 복잡도를 결정하고, 정규화(regularization) 강도를 설정하고, 앙상블 방법을 선택하는 모든 결정의 근간에 이 트레이드오프가 있다.

비유: 편향과 분산은 과녁에 화살을 쏘는 두 가지 실패 방식이다. 편향이 큰 사수는 화살이 한곳에 모이지만 과녁 중심에서 벗어나 있다 — 조준 자체가 틀렸다. 분산이 큰 사수는 평균은 중심에 맞지만 화살이 사방으로 흩어진다 — 손이 떨린다. 조준을 고치면 손떨림이 늘고, 손을 굳히면 조준이 굳어버리는 것이 트레이드오프다.


편향-분산 분해(Bias-Variance Decomposition)는 통계학에서 오래전부터 알려진 개념이었지만, 머신러닝 커뮤니티에서 핵심 프레임워크로 자리잡은 것은 Geman, Bienenstock, Doursat의 1992년 논문 “Neural Networks and the Bias/Variance Dilemma”가 계기였다. 당시 통계학자들은 “신경망은 과적합(Overfitting) 기계에 불과하다”고 비판했고, AI 연구자들은 “충분히 큰 신경망은 모든 함수를 근사할 수 있다”고 반박했다. Geman 등은 이 논쟁을 편향-분산 분해라는 수학적 프레임워크로 정리하여, 양측의 주장이 모두 부분적으로 옳음을 보였다. 신경망은 낮은 편향(높은 표현력)을 가지지만 높은 분산(불안정성)을 대가로 치르며, 이 트레이드오프를 관리하는 것이 핵심이라는 것이다. 이 논문은 정규화(Regularization), 조기 종료(Early Stopping), 앙상블(Ensemble) 같은 기법들이 왜 필요한지에 대한 이론적 근거를 제공했고, 이후 모든 ML 교과서에서 다루는 필수 개념이 되었다.


실제 관계 y=f(x)+ϵy = f(x) + \epsilon (ϵ\epsilon은 평균 0, 분산 σ2\sigma^2인 노이즈)에서, 학습된 모델 f^(x)\hat{f}(x)의 제곱 오차 기대값은 다음과 같이 분해된다:

E[(yf^(x))2]=(Bias[f^(x)])2편향2+Var[f^(x)]분산+σ2줄일 수 없는 오차E\left[(y - \hat{f}(x))^2\right] = \underbrace{\left(\text{Bias}[\hat{f}(x)]\right)^2}_{\text{편향}^2} + \underbrace{\text{Var}[\hat{f}(x)]}_{\text{분산}} + \underbrace{\sigma^2}_{\text{줄일 수 없는 오차}}

각 항의 정의:

Bias[f^(x)]=E[f^(x)]f(x)\text{Bias}[\hat{f}(x)] = E[\hat{f}(x)] - f(x)

Var[f^(x)]=E[(f^(x)E[f^(x)])2]\text{Var}[\hat{f}(x)] = E\left[(\hat{f}(x) - E[\hat{f}(x)])^2\right]

여기서 기대값 E[]E[\cdot]같은 크기의 서로 다른 훈련 세트에 대해 취한다.

데이터 20개로 다항식 회귀(Polynomial Regression)를 학습한다고 하자:

모델다항식 차수훈련 오차테스트 오차진단
직선 (차수 1)115%12%과소적합 — 훈련/테스트 오차 모두 높고 격차 작음
적절한 곡선 (차수 4)43%5%적절 — 훈련 오차 낮고 테스트와 격차 작음
극단적 곡선 (차수 20)200%45%과적합 — 훈련 오차는 완벽하지만 테스트 오차 폭등

차수 20 모델은 훈련 데이터의 노이즈까지 외워버려서(분산 높음), 새 데이터에서 엉뚱한 예측을 한다. 차수 1은 너무 단순해서(편향 높음) 데이터의 패턴을 놓친다.

분해 유도 (핵심 단계):

E[(yf^)2]=E[(f+ϵf^)2]E[(y - \hat{f})^2] = E[(f + \epsilon - \hat{f})^2] =E[(ff^)2]+E[ϵ2]+2E[(ff^)ϵ]= E[(f - \hat{f})^2] + E[\epsilon^2] + 2E[(f - \hat{f})\epsilon] =E[(ff^)2]+σ2(ϵ은 독립, 평균 0)= E[(f - \hat{f})^2] + \sigma^2 \quad (\because \epsilon \text{은 독립, 평균 0})

첫째 항을 전개하면 (fˉ=E[f^]\bar{f} = E[\hat{f}]로 놓고):

E[(ff^)2]=E[(f^fˉ+fˉf)2]E[(f - \hat{f})^2] = E[(\hat{f} - \bar{f} + \bar{f} - f)^2] =E[(f^fˉ)2]+(fˉf)2+2E[(f^fˉ)](fˉf)= E[(\hat{f} - \bar{f})^2] + (\bar{f} - f)^2 + 2E[(\hat{f} - \bar{f})](\bar{f} - f) =Var[f^]+Bias[f^]2(E[f^fˉ]=0)= \text{Var}[\hat{f}] + \text{Bias}[\hat{f}]^2 \quad (\because E[\hat{f} - \bar{f}] = 0)


다트 비유:

편향 낮음 (Low Bias)편향 높음 (High Bias)
분산 낮음 (Low Variance)과녁 중심에 모여 있음 — 이상적과녁 밖 한 점에 모여 있음 — 일관되게 틀림
분산 높음 (High Variance)과녁 중심 주위에 넓게 퍼짐 — 불안정하지만 평균은 맞음과녁 밖에 넓게 퍼짐 — 최악

직관적 이해 다이어그램 세 가지 오차 원천:

  • 편향 (Bias): 모델의 가정이 잘못되어 발생하는 체계적 오차

    • 예: 이차 관계인 데이터에 선형 회귀를 적용
    • 높은 편향 = 과소적합(Underfitting, 모델이 너무 단순해서 패턴을 못 잡는 것)
  • 분산 (Variance): 훈련 데이터의 작은 변동에 모델이 민감하게 반응하는 정도

    • 예: 작은 데이터셋에 깊은 결정 트리 적용 → 훈련 데이터가 조금만 달라져도 완전히 다른 모델
    • 높은 분산 = 과적합(Overfitting, 모델이 훈련 데이터의 노이즈까지 외우는 것)
  • 줄일 수 없는 오차 (σ2\sigma^2, Irreducible Error): 데이터 자체의 내재적 노이즈. 어떤 모델로도 줄일 수 없다 (Bayes Error, 이론적 최소 오차).


오차
│ ╲ ╱ ← 테스트 오차 (Total Error)
│ ╲ ╌╌╌╌╌╌╌╌ ╱
│ ╲ ╱ ╲ ╱
│ ╲ ╱ ╲╱ ← 최적점 (Sweet Spot)
│ ╲╱
│ ────────────────────────── ← 줄일 수 없는 오차 (σ²)
│ ╲
│ ──────── ← 훈련 오차
└──────────────────────────── 모델 복잡도 →
단순 복잡
(High Bias) (High Variance)
  • 단순한 모델: 높은 편향, 낮은 분산 → 과소적합
  • 복잡한 모델: 낮은 편향, 높은 분산 → 과적합
  • 최적점: 편향2^2 + 분산의 합이 최소인 지점
  • U자형 테스트 오차: 훈련 오차는 복잡도에 따라 단조 감소하지만, 테스트 오차는 U자형

현대적 예외 — Double Descent: 매우 고차원/과모수화(overparameterized) 모델(딥러닝)에서는 보간(interpolation) 임계점을 지나면 테스트 오차가 다시 감소하는 현상이 관찰된다. 이는 고전적 U자형 곡선의 예외다.


과소적합 vs 과적합 진단과 처방

섹션 제목: “과소적합 vs 과적합 진단과 처방”
과소적합 (Underfitting)과적합 (Overfitting)
훈련 오차높음낮음
테스트 오차높음높음
둘의 차이작음큼 (큰 격차)
원인모델이 너무 단순모델이 너무 복잡
처방더 복잡한 모델, 더 많은 특성, 정규화 약화더 많은 데이터, 정규화 강화, 단순한 모델, Dropout, 조기 종료, 앙상블

학습 곡선(Learning Curve)으로 진단:

  • 과소적합: 데이터를 늘려도 훈련 오차와 검증 오차 모두 높은 수준에서 수렴
  • 과적합: 훈련 오차는 낮지만 검증 오차와의 격차가 크고, 데이터를 늘리면 격차가 줄어듦

모델편향분산참고
선형 회귀높음낮음강한 선형 가정
k-NN (k=1)낮음높음데이터에 완벽히 적합
k-NN (k=n)높음낮음항상 전체 평균 예측
결정 트리 (깊음)낮음높음Bagging으로 분산 감소 → Random Forest
신경망낮음높음 → 정규화로 제어Dropout, Weight Decay, Early Stopping
앙상블 (Bagging)원래 모델과 유사감소독립적 모델들의 평균
앙상블 (Boosting)감소약간 증가 가능잔차를 반복 학습

제곱 오차에 대한 깔끔한 분해와 달리, 0-1 손실에서의 편향-분산 분해는 덜 명확하다 (Domingos, 2000). 여러 분해 방법이 존재한다 (Kohavi & Wolpert 등). 하지만 실용적 해석은 동일하다:

  • 단순한 분류기는 결정 경계가 너무 단순하여 패턴을 놓침 (높은 편향)
  • 복잡한 분류기는 노이즈에 맞춰 불안정한 결정 경계를 만듦 (높은 분산)

  • 모델 복잡도를 결정할 때 → 훈련/검증 오차 곡선으로 편향-분산 상태 진단
  • 정규화 강도를 설정할 때 → 편향-분산 균형점 탐색 (교차 검증 활용)
  • 앙상블 전략을 선택할 때 → 분산이 문제면 Bagging, 편향이 문제면 Boosting
  • 데이터 수집 여부를 결정할 때 → 과적합이면 데이터 추가가 도움, 과소적합이면 데이터 추가만으로는 부족

한 헬스케어(Healthcare) 스타트업이 환자 재입원 예측(Hospital Readmission Prediction)을 위해 5,000건의 전자건강기록(EHR) 데이터에 128개 뉴런, 4개 히든 레이어의 딥 뉴럴넷(Deep Neural Network)을 적용했다. 훈련 데이터에서 AUC는 0.94였지만, 5-fold 교차 검증(Cross-Validation) 결과 테스트 AUC는 0.61로 급락했다 — 전형적인 과적합(Overfitting), 즉 높은 분산(High Variance) 문제였다. 5,000건이라는 데이터 규모에 비해 모델 파라미터 수가 약 50,000개로 10배나 많았기 때문이다. 이 팀은 모델을 로지스틱 회귀(Logistic Regression) + L2 정규화(Ridge)로 교체하고, 도메인 전문가와 함께 핵심 특성(Feature) 12개를 수작업으로 선별했다. 결과적으로 교차 검증 AUC가 0.78로 안정적으로 향상되었고, 해석 가능성(Interpretability)까지 확보하여 의료진의 신뢰를 얻었다.


import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import Ridge
from sklearn.pipeline import make_pipeline
rng = np.random.default_rng(0)
f = lambda x: np.sin(2 * np.pi * x) # 우리가 맞히려는 참 함수
x_test = np.linspace(0.05, 0.95, 100)
print(f"{'차수':>4} {'편향^2':>9} {'분산':>9} {'':>9}")
for deg in (1, 4, 12):
preds = []
for _ in range(200): # 데이터를 200번 다시 뽑아 학습
x = rng.uniform(0, 1, 30)
y = f(x) + rng.normal(0, 0.3, 30)
m = make_pipeline(PolynomialFeatures(deg), Ridge(alpha=1e-6)).fit(x[:, None], y)
preds.append(m.predict(x_test[:, None]))
P = np.array(preds)
b2 = np.mean((P.mean(0) - f(x_test)) ** 2) # 평균 예측이 참값에서 벗어난 정도
v = np.mean(P.var(0)) # 데이터가 바뀔 때 예측이 흔들리는 정도
print(f"{deg:>4} {b2:>9.4f} {v:>9.4f} {b2+v:>9.4f}")
# 실행 결과:
# 차수 편향^2 분산 합
# 1 0.1553 0.0205 0.1758 <- 과소적합: 편향이 지배
# 4 0.0026 0.0172 0.0198 <- 최적
# 12 0.0004 0.1635 0.1639 <- 과적합: 분산이 지배

편향은 계속 줄지만 분산이 폭발한다. 합이 최소가 되는 지점(차수 4)이 최적이라는 것을 숫자로 확인할 수 있다.


  1. “항상 가장 복잡한 모델이 가장 좋다” — 복잡도를 높이면 훈련 성능은 좋아지지만, 테스트 성능은 악화될 수 있다. 교차 검증으로 일반화 성능을 확인해야 한다.

  2. “편향과 분산을 동시에 줄일 수 있다” — 고정된 데이터에서는 대체로 트레이드오프 관계다. 다만 더 많은 데이터를 확보하면 두 모두 개선 가능하고, 앙상블 방법은 한쪽만 선택적으로 줄일 수 있다.

  3. “줄일 수 없는 오차는 무시해도 된다”σ2\sigma^2는 모델 성능의 하한을 결정한다. 이 한계보다 더 좋아질 수는 없으므로, 현실적인 성능 기대치를 설정하는 데 중요하다.

  4. “딥러닝은 편향-분산 트레이드오프를 무시할 수 있다” — Double descent 현상이 관찰되지만, 트레이드오프 자체가 사라지는 것은 아니다. 정규화와 조기 종료는 여전히 중요하다.

  5. “학습 곡선이 수렴했으면 데이터가 충분하다” — 훈련 오차와 검증 오차가 모두 높은 상태에서 수렴하면, 데이터 문제가 아니라 모델 복잡도 문제(과소적합)일 수 있다.


1. 훈련 오류와 검증 오류가 둘 다 높다면 편향 문제인가 분산 문제인가?

정답 보기

편향(과소적합) 문제다. 모델이 훈련 데이터조차 못 맞히고 있으므로 더 복잡한 모델이나 더 좋은 특성이 필요하다. 데이터를 더 모아도 거의 도움이 되지 않는다.

2. 훈련 오류는 매우 낮은데 검증 오류가 높다면?

정답 보기

분산(과적합) 문제다. 정규화 강화, 데이터 추가, 모델 단순화, 조기 종료가 해법이다.

3. 데이터를 무한히 모으면 오차를 0으로 만들 수 있는가?

정답 보기

없다. 줄일 수 없는 오차(σ2\sigma^2)는 데이터 자체의 잡음에서 오므로 어떤 모델로도 제거할 수 없다.