회귀 사전/후처리 (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 Test | Levene 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())