logo

모형 선택

과대적합

  • 과대적합(overfitting)은 모형이 훈련 데이터의 우연한 변동이나 잡음까지 학습하여 새로운 데이터에서 예측 성능이 낮아지는 문제
  • 최소제곱법은 훈련 데이터의 잔차제곱합(RSS)을 최소화하는 회귀계수를 추정
RSS=i=1n(yiy^i)2
  • 훈련 데이터에 잘 맞는다는 사실만으로 새 데이터에서도 잘 예측한다고 판단할 수 없음
  • 변수가 많아질수록 표본의 우연한 관계까지 모형에 포함될 위험이 커짐

독립변수의 개수와 훈련 성능

  • 같은 관측값과 종속변수를 사용하고 절편을 포함한 중첩 모형에서는 독립변수를 추가해도 RSS가 증가하지 않음
  • 따라서 훈련 데이터의 R2도 감소하지 않음
  • 그러나 자유도를 보정한 잔차분산 추정치는 반드시 감소하지 않음
MSEresid=npRSS
  • n: 관측값 개수
  • p: 절편을 포함하여 추정한 회귀계수 개수
  • 변수를 추가하면 RSS는 감소하지만 잔차 자유도 np도 감소하므로 MSEresid는 증가 가능
  • 모형 비교에 훈련 R2만 사용하면 변수가 많은 모형을 선호하게 됨

파이썬 실습: 관련 없는 변수 추가

노트북에서는 서로 독립인 난수로 독립변수 후보 x1부터 x9와 종속변수 y를 생성함. 재실행할 때 같은 결과를 얻도록 난수 시드를 추가.

import numpy as np
import pandas as pd
from statsmodels.formula.api import ols

np.random.seed(0)

rd = pd.DataFrame(dict(
    x1=np.random.uniform(size=10),
    x2=np.random.uniform(size=10),
    x3=np.random.uniform(size=10),
    x4=np.random.uniform(size=10),
    x5=np.random.uniform(size=10),
    x6=np.random.uniform(size=10),
    x7=np.random.uniform(size=10),
    x8=np.random.uniform(size=10),
    x9=np.random.uniform(size=10),
    y=np.random.uniform(size=10),
))

먼저 x1만 포함한 모형을 적합.

model1 = ols("y ~ x1", data=rd).fit()
model1.summary()

x2를 추가한 모형을 적합.

model2 = ols("y ~ x1 + x2", data=rd).fit()
model2.summary()

두 모형의 적합도와 모형 선택 지표를 비교.

pd.DataFrame({
    "R2": [model1.rsquared, model2.rsquared],
    "adjusted_R2": [model1.rsquared_adj, model2.rsquared_adj],
    "AIC": [model1.aic, model2.aic],
    "BIC": [model1.bic, model2.bic],
    "residual_MSE": [model1.mse_resid, model2.mse_resid],
}, index=["x1", "x1 + x2"])
모형 R2 수정 R2 AIC BIC 잔차 MSE
y ~ x1 0.061 -0.056 6.766 7.371 0.0965
y ~ x1 + x2 0.068 -0.199 8.696 9.604 0.1095
  • x2를 추가하면 훈련 R20.061에서 0.068로 증가
  • 수정 R2는 감소하고 AIC와 BIC는 증가하므로 단순한 y ~ x1 모형을 선호
  • x2의 p-value는 0.831로, 회귀계수가 0이라는 귀무가설을 기각할 근거가 부족
  • 잔차 MSE도 0.0965에서 0.1095로 증가하므로 독립변수 추가가 잔차분산 추정치를 반드시 낮추지는 않음

모형 선택 지표

  • 수정 R2: 독립변수 개수와 표본 크기를 반영하여 R2를 보정한 값으로, 클수록 선호
  • AIC와 BIC: 로그우도에 모형 복잡도 벌점을 더한 정보 기준으로, 작을수록 선호
  • BIC는 AIC보다 모형 복잡도에 더 큰 벌점을 부여하는 경향이 있음
  • AIC와 BIC는 같은 종속변수와 관측값을 사용하고 같은 우도 가정을 적용한 후보 모형끼리 비교
  • 모형 선택 지표가 좋더라도 새 데이터에서의 예측 성능이 자동으로 보장되지는 않음

단계적 회귀분석

  • 독립변수 후보가 k개이면 절편만 있는 모형을 포함한 변수 조합은 2k
  • 독립변수가 하나 이상인 조합만 세면 2k1
  • 후보가 많으면 모든 조합을 적합하고 비교하기 어려움
  • 단계적 회귀분석(stepwise regression)은 변수를 하나씩 추가하거나 제거하며 후보 모형을 탐색하는 방법
  • p-value, AIC, BIC, 교차검증 오차 등 사전에 정한 기준 사용
  • 자료에 따라 선택 결과가 달라질 수 있으므로 탐색적으로 사용하고 이론과 새 데이터로 재검토

전진 선택

  • 전진 선택(forward selection)은 절편만 있는 모형에서 시작하여 독립변수를 하나씩 추가
  • 현재 모형에 추가 가능한 각 변수를 평가하고 선택 기준을 가장 많이 개선하는 변수를 추가
  • 어떤 변수를 추가해도 사전에 정한 기준이 충분히 개선되지 않으면 중단

예를 들어 첫 단계에서 A를 선택했다면 다음 단계에서는 A+B, A+C, A+D를 비교. A보다 선택 기준이 개선되는 조합이 없으면 중단.

후진 선택

  • 후진 선택(backward selection)은 모든 후보 변수를 포함한 모형에서 시작하여 독립변수를 하나씩 제거
  • 각 변수를 제거한 모형을 평가하고 선택 기준의 손실이 가장 작거나 기준을 개선하는 변수를 제거
  • 어떤 변수를 제거해도 사전에 정한 기준을 충족하지 못하면 중단

단계적 회귀분석에서 주의할 점

  • 선택 경로에 포함되지 않은 변수 조합은 검토하지 못할 수 있음
  • 전진 선택과 후진 선택은 시작점과 탐색 경로가 달라 결과가 일치하지 않을 수 있음
  • 표본이 달라지거나 독립변수 사이의 상관관계가 높으면 선택 결과가 불안정할 수 있음
  • 변수 선택에 사용한 데이터로 계산한 일반적인 p-value와 신뢰구간은 지나치게 낙관적일 수 있음

위계적 회귀분석

  • 위계적 회귀분석(hierarchical regression)은 이론이나 연구 가설에 따라 변수 묶음의 투입 순서를 미리 정하는 방법
  • 통제변수를 먼저 투입한 뒤 관심 변수 묶음을 추가하여 설명력 증가량을 평가
  • 중첩 모형의 수정 R2, ΔR2, F 변화량 등을 비교
  • 자료가 자동으로 변수를 선택하는 단계적 회귀분석과 구분

퀴즈

문제 1 / 8맞음: 0힌트: 0틀림: 0채점중: 0남음: 8

과대적합에 대한 설명으로 가장 적절한 것은?

  • 모형이 단순하여 훈련 데이터와 새 데이터에서 모두 오차가 큰 상태
  • 훈련 데이터의 잡음까지 학습하여 새 데이터에서 예측 성능이 낮아지는 상태
  • 독립변수의 단위를 표준화하여 회귀계수의 크기가 달라진 상태
  • 모형의 모든 회귀계수가 통계적으로 유의한 상태

퀴즈를 풀려면 대화형 기능을 불러와야 합니다.