다중 선형 회귀 모형의 도입 배경
- 현실 세계의 현상은 단 하나의 요인, 즉 단순 선형 회귀만으로 완벽하게 설명하기 어려움
- 여러 독립변수가 종속변수에 복합적으로 미치는 영향을 동시에 평가할 필요가 있음
- 예: 선박의 무게를 예측하기 위해 길이, 폭, 속도 등 다양한 제원을 종합적으로 고려
- 종속변수: 선박의 무게
- 독립변수: 길이, 폭, 속도 등
다중 선형 회귀 모형
- 다중 선형 회귀 모형은 단순 선형 회귀를 확장하여 2개 이상의 독립변수를 포함하는 모형
Y=β0+β1X1+β2X2+⋯+βkXk+ϵ
- Y: 종속변수
- X1,X2,…: 독립변수
- β1,β2,…: 각 독립변수에 해당하는 회귀계수, 즉 편회귀계수
- β0: y절편
- ϵ: 오차항
통계적 통제
- 특정 회귀계수 βi는 다른 모든 변수가 일정하게 고정, 즉 통제되어 있다는 가정 하에 해석
- Xi가 1 단위 증가할 때 다른 변수들의 변화 없이 종속변수 Y가 변화하는 평균적인 폭을 의미
- 변수 간 영향이 얽혀있는 상황에서 순수하게 한 변수만이 가지는 영향력을 분리하여 추정
- 실험적 통제
- 통계적 통제
- 일정한 가정 하에 다른 변수가 고정되었을 때의 결과를 추정
파이썬 실습: 다중 선형 회귀 모형 적합
statsmodels의 수식 기반 방식(formula.api) 활용
~ 기호 우측에 여러 독립변수를 + 기호로 나열하여 다중 회귀식을 구성
from statsmodels.formula.api import ols
import pandas as pd
df_ship = pd.read_excel("ship.xlsx")
m = ols("weight ~ length + beam + speed", data=df_ship).fit()
m.summary()
모델 결과 요약표 주요 항목
- 일반 결정계수(R2)
- 모델 자체의 설명력
- 종속변수 예측과 무관한 변수를 모델에 추가만 해도 값이 무조건 커질 수 있음
- 모델 간 비교에는 한계가 있음
- 수정된 결정계수(Adjusted R2)
- 변수의 개수가 불필요하게 늘어날 때 그만큼 패널티를 수식에 반영
- 모델 간 비교에 사용
- F-statistic, Prob(F-statistic)
- 분석에 사용된 회귀 모델 자체가 전체적으로 통계적 의미가 있는지 판별
- 일반적으로 0.05 미만이면 유의
coef
- 각각 투입된 독립변수의 편회귀계수
- 부호를 통해 직관적인 증감 패턴을 분석
P>|t|
- 독립변수 개별 단위에서 종속변수 예측에 유의미한지 따지는 p-value 기준
표준화
- 다중회귀분석에서 독립변수는 단위가 다르므로 종속변수에 대한 영향력을 비교하기 어려움
- 표준화를 하면 평균은 0, 표준편차는 1이 됨
표준편차X−평균
- 표준화를 통해 변수의 단위를 제거하여 상대적인 영향력을 비교할 수 있음
scale 함수를 이용하여 표준화할 수 있음
m = ols(
"weight ~ scale(length) + scale(beam) + scale(speed)",
data=df_ship,
).fit()
m.summary()
신규 선박 중량 예측
ship_predict.xlsx: 신규 선박 제원 정보
- 모델 학습에 사용한 독립변수(
length, beam, speed)가 포함되어 있어야 함
- 학습된 다중 회귀 모델
m으로 신규 데이터의 중량을 예측
- 예측값은 학습 데이터의 관계를 기준으로 계산된 추정치
df_pred = pd.read_excel("ship_predict.xlsx")
df_pred["predicted_weight"] = m.predict(df_pred)
다중공선성
- 다중공선성(Multicollinearity)은 다중 선형 회귀 모델 내부에서 독립변수들끼리 매우 강한 선형 상관관계를 띠는 현상
- 서로가 겹치는 정보 비율이 지나치게 커서 각 변수의 순수한 영향력을 계산하기 어려워짐
- 모델의 신뢰성 훼손, 추정치의 분산 팽창 등이 발생할 수 있음
- 심한 경우 회귀계수의 부호가 논리와 정반대로 뒤집히기도 함
- Variance Inflation Factor(VIF)
- 특정 독립변수가 나머지 여러 독립변수들에 의해 어느 정도 설명되는지 측정하는 수치 지표
- 특정 독립변수 Xi를 종속변수로 두고 나머지 X들로 회귀분석했을 때 산출된 Ri2를 이용
VIFi=1−Ri21
- 판단 기준
- VIF가 1에 가까울수록 다중공선성이 없음
- 실무적으로 VIF > 10이면 다중공선성 문제가 심각하다고 평가하고 변수 제외 등 조치를 고려
분산팽창지수 계산
import patsy
from statsmodels.stats.outliers_influence import variance_inflation_factor
design_matrix = patsy.dmatrix(
" ~ length + beam + speed",
df_ship,
return_type="dataframe",
)
pd.DataFrame({
"variable": design_matrix.columns[1:],
"VIF": [
variance_inflation_factor(design_matrix.values, i)
for i in range(1, design_matrix.shape[1])
],
})