회귀 가정 진단: 잔차로 선형성·독립성·등분산성·정규성 확인하기

회귀 분석의 선형성·독립성·등분산성·정규성 가정을 잔차 분석으로 진단하고, 위반 유형별 완화 방법을 정리합니다.

2026-08-14 · 최초 발행 2024-04-29

잔차에서 확인하는 회귀 모델의 전제

회귀 분석에서 추론과 예측을 신뢰하려면 모형 적합 뒤에도 확인할 일이 남는다. 선형성(linearity), 독립성(independence), 등분산성(homoscedasticity), 정규성(normality)은 잔차(residual)의 패턴과 분산, 분포를 통해 검토할 수 있는 핵심 가정이다.

선형성은 설명변수와 종속변수의 조건부 기댓값 관계가 선형 구조를 따른다는 전제다. 독립성은 오차 항 사이에 상관이 없다는 뜻이며, 시계열과 패널 데이터에서는 특히 문제가 되기 쉽다. 등분산성은 설명변수의 범위 전체에서 오차 분산이 일정하다는 가정이고, 정규성은 오차가 정규분포를 따른다는 가정이다.

잔차는 관측 오차의 추정치다. 따라서 잔차에 남은 곡선 패턴, 분산 변화, 자기상관, 분포의 치우침은 가정 위반의 징후가 된다. 가우스-마르코프 정리에 따르면 선형성·독립성·등분산성을 만족할 때 OLS는 BLUE(최선의 선형 불편추정량)다. 정규성은 유한표본에서 t/F 검정의 정확성에 영향을 주며, 대표본에서는 근사적으로 만족된다.

적합부터 재평가까지의 진단 흐름

아니오데이터 수집/정제탐색적 분석/스케일링훈련/검증 분할OLS 적합잔차 추출 e = y - ŷ선형성 점검(잔차-적합값, 부분잔차)독립성 점검(DW, ACF/PACF)등분산성 점검(잔차 vs 적합값,Breusch–Pagan/White)정규성 점검(Q-Q plot,Shapiro/Jarque–Bera)가정 충족?모델 검증/배포완화 조치 선택변환: log/Box–Cox,다항/스플라인오차 구조:GLS/AR(1)/Newey–West강건화:HC3/Huber/Quantile/WLS이상치/영향점 처리

Python으로 잔차 진단과 완화 조치 실행하기

전제조건: Python 3.10+, pandas 2.x, numpy 1.26+, statsmodels 0.14+, matplotlib 3.8+, seaborn 0.13+

# pip install pandas numpy statsmodels matplotlib seaborn scikit-learn
import numpy as np, pandas as pd, seaborn as sns, matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.stats.diagnostic import het_breuschpagan
from statsmodels.stats.stattools import durbin_watson, jarque_bera
from statsmodels.graphics.gofplots import qqplot
from statsmodels.graphics.tsaplots import plot_acf

rng = np.random.default_rng(42)
n = 500
X = rng.uniform(0, 10, n)
# 선형성 OK, 등분산성 위반(분산이 X에 비례), 약한 AR(1) 도입
eps = rng.normal(0, 1, n) * (0.5 + 0.1*X)
for t in range(1, n):
    eps[t] += 0.3*eps[t-1]
y = 2.0 + 1.5*X + eps

df = pd.DataFrame({'y': y, 'X': X})
X1 = sm.add_constant(df['X'])
ols = sm.OLS(df['y'], X1).fit()
print(ols.summary())

resid = ols.resid
fitted = ols.fittedvalues

# 선형성/등분산성 시각화
fig, axes = plt.subplots(1,2, figsize=(10,4))
sns.regplot(x=fitted, y=resid, lowess=True, scatter_kws={'s':10}, ax=axes[0])
axes[0].axhline(0, color='r', lw=1); axes[0].set_title('잔차 vs 적합값')
sns.regplot(x=df['X'], y=resid, lowess=True, scatter_kws={'s':10}, ax=axes[1])
axes[1].axhline(0, color='r', lw=1); axes[1].set_title('잔차 vs X')
plt.tight_layout(); plt.show()

# 독립성: Durbin–Watson, ACF
print('Durbin–Watson:', round(durbin_watson(resid), 3))
plot_acf(resid, lags=24); plt.show()

# 등분산성: Breusch–Pagan
bp_stat, bp_p, _, _ = het_breuschpagan(resid, X1)
print('Breusch–Pagan p-value:', round(bp_p, 4))

# 정규성: Q–Q, Jarque–Bera
qqplot(resid, line='45'); plt.title('Q–Q plot'); plt.show()
jb_stat, jb_p, _, _ = jarque_bera(resid)
print('Jarque–Bera p-value:', round(jb_p, 4))

# 완화 예시 1) 강건 표준오차(HC3)
ols_hc3 = ols.get_robustcov_results(cov_type='HC3')
print(ols_hc3.summary())

# 완화 예시 2) Newey–West(HAC) for AR(1)
ols_hac = ols.get_robustcov_results(cov_type='HAC', maxlags=1)
print(ols_hac.summary())

# 완화 예시 3) 가중최소제곱(WLS): 가중치 ~ 1/Var(e|X) 근사
w = 1.0 / (0.5 + 0.1*df['X'])**2
wls = sm.WLS(df['y'], X1, weights=w).fit()
print(wls.summary())

선형 관계가 남아 있는 패턴을 읽는 법

설명변수의 선형 결합이 종속변수의 조건부 기댓값을 충분히 설명해야 한다. 비선형성이나 상호작용을 누락한 구조라면 편향이 생길 수 있다.

잔차-적합값 산점도와 설명변수별 잔차 산점도에서 패턴을 확인하고, 부분잔차(partial residual), 추가변수도(added-variable), 비모수 스무딩(LOWESS)으로 구조적 누락을 살핀다. 문제가 보이면 log/Box–Cox 변환, 다항식·스플라인·상호작용 추가, 일반화가법모형(GAM)을 고려할 수 있다.

시계열과 패널에서 독립성을 다루는 방식

독립성은 오차 간 상관이 없다는 뜻이다. 시계열·패널 데이터에서는 자기상관과 군집 상관이 빈번하므로, 단순한 회귀 적합만으로는 충분하지 않다.

Durbin–Watson, Ljung–Box, ACF/PACF와 클러스터 구조를 함께 점검한다. 위반이 확인되면 GLS/AR(1) 오차 구조를 사용하거나 Newey–West(HAC) 표준오차를 적용한다. 패널 데이터에서는 클러스터-강건 표준오차도 선택지가 된다.

분산이 달라질 때 표준오차를 지키는 방법

등분산성은 설명변수 전 구간에서 오차 분산이 일정하다는 가정이다. 이분산성이 존재하면 표준오차가 왜곡되어 검정력이 저하될 수 있다.

잔차와 적합값 또는 예측변수의 플롯, Breusch–Pagan/White 검정, 스케일-로케이션 플롯으로 분산 변화를 확인한다. 가중최소제곱(WLS), log/√ 변환, 강건 표준오차(HC3/HC4)를 통해 대응할 수 있다.

정규성은 검정의 정확도와 연결된다

오차 정규성은 추정량의 불편성과 효율성이 아니라 유한표본의 t/F 검정 정확도에 주로 영향을 준다. 정규성이 없어도 추정량의 불편성과 효율성은 가능하다.

Q–Q plot과 Shapiro–Wilk/Jarque–Bera 검정이 분포 상태를 확인하는 도구다. 표본 크기가 증가하면 중심극한정리에 따라 영향이 완화된다. 대표본 확보, 강건 추정과 부트스트랩 신뢰구간, 분위회귀 또는 연속·양수·카운트 등 분포에 맞춘 GLM을 검토할 수 있다.

모델 목적에 따라 달라지는 대응

가격 탄력성 모델링에서는 log–log 변환으로 비선형성과 이분산성을 함께 완화하고, 남은 이분산성은 WLS로 보정할 수 있다. 계수 안정화와 신뢰구간 축소, 탄력성 해석 용이화가 기대되는 조합이다.

시계열 매출 회귀에서 잔차 ACF가 양(+)의 자기상관을 보이면 AR(1) 오차 또는 GLS와 HAC(Newey–West)를 병행한다. 이는 과신된 유의성을 교정하고 예측 구간의 캘리브레이션을 개선한다.

제조 품질에서 공정변수와 결함률의 관계를 볼 때, 분산이 투입량에 비례한다면 Gamma/Poisson GLM 또는 log 변환+WLS를 선택할 수 있다. 분산 모델링의 정합도를 높이고 현장 제어 한계선의 신뢰도를 높이는 방향이다.

마케팅 MMM/AB테스트 보조 회귀에서는 상호작용과 스플라인으로 포화와 한계효과를 반영하고 HC3로 강건 추론을 적용한다. 채널 기여도의 과대·과소 추정을 피하고 예산 배분 효율을 개선하는 데 쓴다.

가정 위반을 교정하면 표준오차와 신뢰구간 측면에서 1030% 수준의 CI 폭 축소 사례가 빈번하며, 데이터·설계에 따라 차이가 있다. 이분산성과 자기상관을 교정한 뒤 예측 RMSE/MAE가 515% 개선될 수 있다. 계수 방향과 크기의 일관성을 확보해 과신과 과소신을 줄이고, 반복 가능한 진단-개선 파이프라인과 모델 거버넌스를 갖추는 효과도 있다.

진단 신호와 조치의 선택 기준

가정 주 진단 권장 조치 성능(예측) 일관성(추정) 안정성(분산/캘리브) 운영 편의
선형성 부분잔차, LOWESS 변환/다항/스플라인/GAM 개선 가능 편향 감소 과적합 리스크 관리 필요 모델 해석 난이도↑
독립성 DW, ACF/PACF GLS/AR 오차, HAC 과신 교정 불변 캘리브레이션 개선 구현 복잡도↑
등분산성 잔차–적합, BP/White WLS, 변환, HC3 개선 가능 불변 신뢰구간 안정 가중치 추정 필요
정규성 Q–Q, JB/Shapiro 대표본, 강건/부트스트랩 영향 제한적 불변 소표본에서 개선 계산량↑

잔차 진단은 한 번의 검정으로 끝나지 않는다. 데이터 정제 후 OLS를 적합하고, 잔차로 가정을 점검한 뒤 변환·강건화·오차 구조화를 적용하고 다시 평가하는 흐름을 반복한다. 표준화된 진단 레포트와 자동화 파이프라인을 두고, 강건 표준오차와 부트스트랩을 기본 적용하며, 시계열과 패널에서는 구조적 오차 모델링을 우선하는 방식이 적합하다.

회귀분석잔차분석통계선형성등분산성자기상관