회귀 사전/후처리 (4개속성, 더빈왓슨)

import statsmodels.api as sm
from sklearn.datasets import make_regression
X, y, w = make_regression(
    n_samples=50, n_features=1, bias=100, noise=10, coef=True, random_state=0
    )
 
X = sm.add_constant(X)
model = sm.OLS(y, X).fit()
 
predictions = model.predict(X)
# 잔차
residuals = model.resid 

회귀모형의 가정 체크 (잔차분석)

다중선형회귀모델을 돌린 후 잔차에 대해 판단 진행

가정 위배주요 원인 및 증상위배 시 발생하는 통계적/기계학습 문제해결 조치 및 기법
선형성 (Linearity)비선형적 관계를 선형 모형으로 강제 적합모형의 설정 오류(Misspecification)로 인해 회귀계수 추정치가 편향(Biased)되고 일치성(Consistency)을 상실함. 예측 오차가 크게 증가하며 잘못된 추론을 유도함.독립변수 변환(Log, √ 등), 다항 회귀(Polynomial Regression), 스플라인(Splines) 및 GAM(Generalized Additive Model) 적용, 트리 기반 머신러닝 알고리즘으로 전환
독립성 (Independence)시계열/공간 데이터에서 자기상관성(Autocorrelation) 존재회귀계수 추정치 자체는 불편성(Unbiasedness)을 유지하나, 표준오차가 과소추정됨. 이로 인해 t-통계량 및 F-통계량이 과대계상되어 귀무가설을 기각할 확률(제1종 오류)이 크게 증가함.시차 변수(Lagged variable) 추가, 자기회귀오차모델이나 ARIMA 등 시계열 모델 사용, 일반화 최소제곱법(GLS), 패널 데이터 분석 기법 적용
등분산성 (Homoscedasticity)잔차의 분산이 X의 크기에 따라 변함 (이분산성, Heteroscedasticity)OLS 추정량이 여전히 불편성은 가지나, 최소분산을 갖지 못함(효율성 상실, 즉 Not BLUE). 표준오차가 편향되어 신뢰구간과 가설검정(p-value)의 타당성을 잃음.종속변수(Y) 변환(Log, Box-Cox), 가중최소제곱법(WLS) 적용, 이분산성 일치 표준오차(Robust Standard Errors, 예: Huber-White estimator) 사용
정규성 (Normality)극단적인 이상치(Outlier) 존재, 심하게 편향된(Skewed) 데이터 분포계수 추정치의 불편성 및 일치성에는 직접적 영향이 없으나, 소표본일 경우 t-검정 및 F-검정 등 모수적 통계적 가설검정의 유효성이 상실됨. (단, 대규모 데이터에서는 중심극한정리에 의해 완화됨).이상치 탐지 및 제거, 종속변수 변환(Box-Cox 변환), 부트스트래핑(Bootstrapping), 비모수적 회귀 방법 적용
  • 정규성 위배는 주로 극단적인 이상치나 데이터의 심한 왜곡에서 비롯된다. OLS는 이상치에 매우 민감하므로 Cook’s Distance 등으로 이상치를 판별하여 제거하는 것이 1차 조치다. 데이터 형태가 한쪽으로 꼬리가 긴(Skewed) 경우 종속변수에 Box-Cox 변환을 적용하여 정규 분포에 가깝게 변환한다.
라이브러리WLS 구현 방식클래스 및 메서드 사용법
statsmodels별도의 WLS 클래스 제공sm.WLS(endog=y, exog=X, weights=w)
smf.wls(formula, data, weights=w)
scikit-learn모델 적합 시 파라미터로 제공LinearRegression().fit(X, y, sample_weight=w)

BP (Breusch-Pagan) 검정

BP 검정의 보조 회귀식은 다음과 같다.

이때 귀무가설(H0) 과 대립가설(H1)은 다음과 같다.

  • : 등분산성 성립
  • : 적어도 하나의 (이분산성)

일반적인 회귀 분석(OLS) 상황이라면 Breusch-Pagan(BP) 검정을 사용하는 것이 통계적으로 더 적합하며 표준적이다.

  • 회귀 모델의 가정인 등분산성(Homoskedasticity) 은 “독립변수 X의 값과 상관없이 오차항의 분산이 일정해야 함”을 의미한다.

  • 연속형 변수 처리:

    • 대부분의 회귀 모델은 연속형 독립변수를 포함한다.
    • Levene 검정은 이를 처리하기 위해 데이터를 임의로 범주화해야 하므로 정보 손실이 발생한다.
    • 반대로 BP는 연속형 데이터를 있는 그대로 활용하므로 손실을 피한다.
  • 구조적 부합성

    • BP 검정은 잔차의 제곱을 독립변수들에 대해 회귀 분석하여, 독립변수가 분산에 영향을 주는지를 직접 확인한다.
    • 이는 회귀 모델의 논리와 완벽히 일치한다.
분석 상황권장 검정 도구실무적 일반성비고
일반적인 다중 회귀 (OLS)Breusch-Pagan매우 높음가장 표준적으로 사용됨
비선형적 이분산 의심 시White Test높음변수가 많으면 계산량 증가
잔차가 비정규 분포일 때Koenker (Studentized BP)필수적statsmodels의 기본 방식
집단 간 평균 비교 (ANOVA)Levene / Bartlett높음독립변수가 범주형일 때 최적
구분Breusch-Pagan (BP) 검정Levene 검정
주 사용 모델선형 회귀 분석 (OLS)분산 분석 (ANOVA), t-test
독립변수 유형연속형 및 범주형 독립변수 혼합 가능범주형 집단 변수 (Groups)
검정 메커니즘잔차 제곱()을 독립변수들에 대해 회귀 분석 (보조 회귀식 활용)각 집단의 중앙값/평균으로부터의 절대 편차 비교
핵심 논리독립변수 의 변화에 따라 분산이 체계적으로 변화하는지 검정집단 간 분산 자체가 통계적으로 유의미하게 다른지 검정
장점회귀 모델의 구조적 이분산성 탐지에 탁월, 정보 손실 없음오차항의 정규성 가정에 관대함 (Robust)
한계점오차항의 정규성 가정에 민감함 (비정규 시 Koenker-Bassett 권장)연속형 변수를 처리하기 위해 데이터를 임의로 범주화해야 함
특성Breusch-Pagan (BP)White TestLevene Test
주요 용도OLS 회귀 모델 이분산성 확인비선형/복합 이분산성 확인ANOVA/t-test 등분산성 확인
독립변수 유형연속형/범주형 혼합 가능연속형/범주형 (제곱항 포함)범주형 집단 (Groups)
정규성 의존도매우 높음 (Studentized 권장)낮음매우 낮음 (강건함)
핵심 논리잔차 제곱과 X의 선형 회귀잔차 제곱과 X, X², 교차항 회귀집단 간 편차의 평균 비교
탐지 범위선형적인 이분산 패턴선형 + 비선형 패턴집단 간 단순 분산 차이

AIC

구분설명 (개념)장점단점평가 기준
AIC정보 이론에 기반하여, 주어진 모델이 실제 데이터 생성 과정을 얼마나 손실 없이 근사하는지 평가한다. 파라미터 수에 비례하는 고정된 패널티()를 부여한다.예측 성능을 극대화하는 모델을 선택하는 데 유리하다. 새로운 데이터에 대한 일반화 성능이 좋다.표본 크기()가 커질수록 패널티의 영향력이 작아져, 불필요한 변수까지 포함하는 과적합 모델을 선택할 위험이 있다.작을수록 좋음
BIC베이지안 확률에 기반하여, 사후 확률(Posterior probability)이 가장 높은 모델을 선택한다. 표본 크기의 로그값에 비례하는 동적 패널티()를 부여한다.진점 모델(True model)이 후보군에 존재할 경우, 데이터가 많아질수록 그 모델을 정확히 찾아내는 일치성(Consistency)이 있다.표본 크기가 작을 때 패널티가 너무 강하게 작용하여, 중요한 변수까지 제거하는 과소적합(Underfitting)을 유발할 수 있다.작을수록 좋음
라이브러리AIC / BIC 기본 제공획득 방식 및 클래스통계적 특징
statsmodels제공함model.fit().aic, model.fit().bic최대 우도 기반의 엄밀한 통계적 계산 수행
scikit-learn제한적 제공LassoLarsIC(criterion='aic') 등 일부 알고리즘 한정기본 LinearRegression 등에서는 잔차합(RSS) 기반으로 직접 계산해야 함
import statsmodels.api as sm
import numpy as np
 
np.random.seed(42)
X = np.random.rand(100, 3) # 100개의 관측치, 3개의 독립변수
X = sm.add_constant(X)     # Statsmodels는 절편(상수항)을 수동으로 추가해야 함
y = X @ np.array([1.5, 2.0, -1.5, 3.0]) + np.random.randn(100)
 
# 2. OLS 모델 정의 및 적합
model = sm.OLS(y, X)
fitted_model = model.fit()
 
# 3. AIC 및 BIC 획득
aic_value = fitted_model.aic
bic_value = fitted_model.bic
 
print(f"획득한 AIC: {aic_value:.4f}")
print(f"획득한 BIC: {bic_value:.4f}")
 
# (참고) 전체 요약 통계표에서도 확인 가능
# print(fitted_model.summary())