Data Analysis & ML/회귀분석

[회귀분석] 회귀분석 실습(2) - 잔차분석 (Python)

YSY^ 2023. 7. 23. 21:42

1. [회귀분석] 회귀분석 실습(1) - Statsmodel분석/데이터 스케일링(Python) : ysyblog.tistory.com/119

 

[회귀분석] 회귀분석 실습(1) - OLS 회귀분석 결과 해석 및 범주형 변수 처리 (Statsmodel)

Statsmodel을 활용한 회귀분석 statsmodels 패키지에서는 OLS 클래스를 사용하여 선형 회귀분석을 실시한다 독립변수와 종속변수가 모두 포함된 데이터프레임이 생성되며, 상수항 결합은 하지 않아도

ysyblog.tistory.com

이번 포스팅은 파이썬으로 잔차분석을 하는 방법들을 소개하겠습니다. 이번 포스팅은 위 포스팅에 이어 진행됩니다.

 

잔차분석

  • 잔차분석은 회귀모형에 대한 가정(정규성, 등분산성, 독립성)을 충족하는지에 대한 검정, 이상치가 개입하는지에 대한 검정을 하는 절차
import pandas as pd
from statsmodels.formula.api import ols

df = pd.read_csv('cars.csv')
res = ols('dist ~ speed', data=df).fit()

 

모형의 선형성

  • 예측값(fitted)과 잔차(residual)를 비교
  • 모든 예측값에서 가운데 점선에 맞추어 잔차가 비슷하게 있어야 한다.
  • 빨간 실선은 잔차의 추세를 나타낸다.
  • 빨간 실선이 점선에서 크게 벗어난다면 예측값에 따라 잔차가 크게 달라진다는 것으로 선형성이 없다는 것이다.
import matplotlib.pyplot as plt
import seaborn as sns

fitted = res.predict(df)
residual = df['dist'] - fitted

sns.regplot(fitted, residual, lowess=True, line_kws={'color': 'red'})
plt.plot([fitted.min(), fitted.max()], [0, 0], '--', color='grey')

 

잔차의 정규성

  • 잔차가 정규분포를 따른다는 가정을 한다.
  • Q-Q Plot로 확인할 수 있다.
  • 잔차가 정규분포를 띄면 Q-Q Plot에서 점들이 점선을 따라 배치되어 있어야 한다.
import scipy.stats
sr = scipy.stats.zscore(residual)
(x, y), _ = scipy.stats.probplot(sr)
sns.scatterplot(x, y)
plt.plot([-3, 3], [-3, 3], '--', color='grey')

  • 잔차의 정규성은 샤피로 검정으로 확인할 수 있다.
  • scipy.stats.shapiro(residual) # ShapiroResult(statistic=0.9450905919075012, pvalue=0.02152460627257824)
  • 위 분석에서 두 번째 값이 p값이다. p값이 0.02이므로 유의수준 5%에서 잔차의 정규성이 위반되었다고 판단한다.

 

잔차의 등분산성

  • 회귀모형을 통햬 예측된 값이 어떻든지, 모든 값들에 대하여 잔차의 분산이 동일하다는 가정
  • 아래 그래프는 예측값(X축)에 따라 잔차가 어떻게 달라지는지 보여줌
  • 빨간색 실선이 수평선에 가까울수록 등분산성이 있다는 것이다.
import numpy as np
sns.regplot(fitted, np.sqrt(np.abs(sr)), lowess=True, line_kws={'color': 'red'})

 

잔차의 독립성

  • Result.summary의 Durbin-Watson(더빈왓슨, DW검정)으로 확인한다.
  • DW검정은 잔차의 독립성을 확인할 수 있는 수치이다. 0이면 잔차들이 양의 자기상관을 갖고, 2이면 자기상관이 없는 독립성을 갖고, 4이면 잔차들이 음의 자기상관을 갖는다고 해석한다.
  • 보통 1.5 ~ 2.5사이이면 독립으로 판단하고 회귀모형이 적합하다는 것을 의미한다. DW검정값이 0 또는 4에 가깝다는 것은 잔차들이 자기상관을 가지고 있다는 의미이고, 이는 t값, F값, R제곱을 실제보다 증가시켜 실제로 유의미하지 않은 결과를 유의미한 결과로 왜곡하게 된다.
  • 위 회귀분석에서 더빈왓슨검정의 값이 1.676이므로 독립성이 있다고 판단할 수 있다.

 

극단값

  • Cook's distance는 극단값을 나타내는 지표이다.
  • 48번, 22번, 38번 자료가 특히 예측에서 많이 벗어남을 알 수 있다.
from statsmodels.stats.outliers_influence import OLSInfluence
cd, _ = OLSInfluence(res).cooks_distance
cd.sort_values(ascending=False).head()

728x90
반응형