logo

다중회귀분석

다중 선형 회귀 모형의 도입 배경

  • 현실 세계의 현상은 단 하나의 요인, 즉 단순 선형 회귀만으로 완벽하게 설명하기 어려움
  • 여러 독립변수가 종속변수에 복합적으로 미치는 영향을 동시에 평가할 필요가 있음
  • 예: 선박의 무게를 예측하기 위해 길이, 폭, 속도 등 다양한 제원을 종합적으로 고려
    • 종속변수: 선박의 무게
    • 독립변수: 길이, 폭, 속도 등

다중 선형 회귀 모형

  • 다중 선형 회귀 모형은 단순 선형 회귀를 확장하여 2개 이상의 독립변수를 포함하는 모형
  • : 종속변수
  • : 독립변수
  • : 각 독립변수에 해당하는 회귀계수, 즉 편회귀계수
  • : y절편
  • : 오차항

통계적 통제

  • 특정 회귀계수 는 다른 모든 변수가 일정하게 고정, 즉 통제되어 있다는 가정 하에 해석
  • 가 1 단위 증가할 때 다른 변수들의 변화 없이 종속변수 가 변화하는 평균적인 폭을 의미
  • 변수 간 영향이 얽혀있는 상황에서 순수하게 한 변수만이 가지는 영향력을 분리하여 추정
  • 실험적 통제
    • 실제로 다른 변수를 고정
  • 통계적 통제
    • 일정한 가정 하에 다른 변수가 고정되었을 때의 결과를 추정

파이썬 실습: 다중 선형 회귀 모형 적합

  • 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()

모델 결과 요약표 주요 항목

  • 일반 결정계수()
    • 모델 자체의 설명력
    • 종속변수 예측과 무관한 변수를 모델에 추가만 해도 값이 무조건 커질 수 있음
    • 모델 간 비교에는 한계가 있음
  • 수정된 결정계수(Adjusted )
    • 변수의 개수가 불필요하게 늘어날 때 그만큼 패널티를 수식에 반영
    • 모델 간 비교에 사용
  • F-statistic, Prob(F-statistic)
    • 분석에 사용된 회귀 모델 자체가 전체적으로 통계적 의미가 있는지 판별
    • 일반적으로 0.05 미만이면 유의
  • coef
    • 각각 투입된 독립변수의 편회귀계수
    • 부호를 통해 직관적인 증감 패턴을 분석
  • P>|t|
    • 독립변수 개별 단위에서 종속변수 예측에 유의미한지 따지는 p-value 기준

표준화

  • 다중회귀분석에서 독립변수는 단위가 다르므로 종속변수에 대한 영향력을 비교하기 어려움
  • 표준화를 하면 평균은 0, 표준편차는 1이 됨
  • 표준화를 통해 변수의 단위를 제거하여 상대적인 영향력을 비교할 수 있음
  • 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)
    • 특정 독립변수가 나머지 여러 독립변수들에 의해 어느 정도 설명되는지 측정하는 수치 지표
    • 특정 독립변수 를 종속변수로 두고 나머지 들로 회귀분석했을 때 산출된 를 이용
  • 판단 기준
    • 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])
    ],
})
Previous
회귀분석