잔차분석 :: Python 기초 통계 - mindscale
Skip to content

잔차분석

회귀분석 결과를 바탕으로 다양한 잔차 분석을 실시한다.

실습 준비

실습을 위해 cars.csv를 다운로드 받아 열고, 회귀분석을 한다.

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')
[<matplotlib.lines.Line2D at 0x2b23d82bc88>]

잔차의 정규성

  • 잔차가 정규분포를 따른다는 가정
  • Q-Q 플롯으로 확인할 수 있음
  • 잔차가 정규분포를 띄면 Q-Q 플롯에서 점들이 점선을 따라 배치되어 있어야 함
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')
[<matplotlib.lines.Line2D at 0x2b23d9e2bc8>]

잔차의 정규성은 샤피로 검정으로 확인할 수 있다. 아래 분석에서 두 번째 값이 p값이다. p값이 0.02이므로 유의수준 5%에서 잔차의 정규성이 위반되었다고 판단한다.

scipy.stats.shapiro(residual)
(0.9450905919075012, 0.02152460627257824)

잔차의 등분산성

  • 회귀모형을 통햬 예측된 값이 크던 작던, 모든 값들에 대하여 잔차의 분산이 동일하다는 가정
  • 아래 그래프는 예측값(가로축)에 따라 잔차가 어떻게 달라지는지 보여줌
  • 빨간색 실선이 수평선을 그리는 것이 이상적
import numpy as np
sns.regplot(fitted, np.sqrt(np.abs(sr)), lowess=True, line_kws={'color': 'red'})
<matplotlib.axes._subplots.AxesSubplot at 0x2b23dc1f6c8>

극단값

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

잔차의 독립성

  • 회귀분석에서 잔차는 정규성, 등분상성 그리고 독립성을 가지는 것으로 가정
  • 자료 수집 과정에서 무작위 표집(random sampling)을 하였다면, 잔차의 독립성은 만족하는 것으로 봄
  • 시계열 자료나 종단연구 자료처럼, 연구 설계 자체가 독립성을 담보할 수 없는 경우에는 더빈-왓슨 검정(Durbin-Watson test) 등을 실시

잔차 분석 결과를 바탕으로 대응

  • 잔차 분석 결과에 따라 다양한 방식의 대응이 가능
    • 극단값을 제거
    • 독립변수를 추가
    • 종속변수를 수학적으로 변환

위의 예에서는 48번 자료가 극단값으로 보이고 이 때문에 잔차의 정규성이 위배되는 것으로 추측된다. 따라서 48번 자료를 제거하고 다시 분석을 시도해볼 수 있다.