Python에서 cook의 거리를 계산하는 방법


Cook의 거리는 회귀 모델에서 영향력 있는 관측치를 식별하는 데 사용됩니다.

Cook의 거리 공식은 다음과 같습니다.

d i = (ri 2 / p*MSE) * (h ii / (1-h ii ) 2 )

금:

  • r i 는 i 번째 잔기이다
  • p 는 회귀 모델의 계수 수입니다.
  • MSE 는 평균 제곱 오차입니다.
  • h iii번째 레버리지 값입니다.

기본적으로 Cook의 거리는 i 번째 관측치가 제거될 때 모델의 모든 적합치가 얼마나 변경되는지 측정합니다.

Cook의 거리 값이 클수록 주어진 관측값의 영향력이 커집니다.

일반적으로 Cook의 거리가 4/n( n = 총 관측치)보다 큰 관측치는 큰 영향을 미치는 것으로 간주됩니다.

이 튜토리얼은 Python에서 주어진 회귀 모델에 대해 Cook의 거리를 계산하는 방법에 대한 단계별 예를 제공합니다.

1단계: 데이터 입력

먼저 Python에서 작업할 작은 데이터세트를 만듭니다.

 import pandas as pd

#create dataset
df = pd. DataFrame ({' x ': [8, 12, 12, 13, 14, 16, 17, 22, 24, 26, 29, 30],
                   ' y ': [41, 42, 39, 37, 35, 39, 45, 46, 39, 49, 55, 57]})

2단계: 회귀 모델 적합

다음으로 간단한 선형 회귀 모델을 피팅하겠습니다.

 import statsmodels. api as sm

#define response variable
y = df[' y ']

#define explanatory variable
x = df[' x ']

#add constant to predictor variables
x = sm. add_constant (x)

#fit linear regression model
model = sm. OLS (y,x). fit ()

3단계: 요리 거리 계산

다음으로 모델의 각 관측값에 대한 Cook 거리를 계산합니다.

 #suppress scientific notation
import numpy as np
n.p. set_printoptions (suppress= True )

#create instance of influence
influence = model. get_influence ()

#obtain Cook's distance for each observation
cooks = influence. cooks_distance

#display Cook's distances
print (cooks)

(array([0.368, 0.061, 0.001, 0.028, 0.105, 0.022, 0.017, 0. , 0.343,
        0. , 0.15 , 0.349]),
 array([0.701, 0.941, 0.999, 0.973, 0.901, 0.979, 0.983, 1. , 0.718,
        1. , 0.863, 0.713]))

기본적으로 cooks_distance() 함수는 각 관측값에 대한 Cook의 거리 값 배열과 그에 상응하는 p-값 배열을 표시합니다.

예를 들어:

  • 관찰 #1에 대한 Cook의 거리: 0.368 (p-값: 0.701)
  • 관찰 #2에 대한 Cook의 거리: 0.061 (p-값: 0.941)
  • 관찰 #3에 대한 Cook의 거리: 0.001 (p-값: 0.999)

등등.

4단계: 요리사의 거리 시각화

마지막으로 예측 변수의 값을 각 관측값에 대한 Cook의 거리 함수로 시각화하는 산점도를 만들 수 있습니다.

 import matplotlib. pyplot as plt

plt. scatter (df.x, cooks[0])
plt. xlabel (' x ')
plt. ylabel (' Cooks Distance ')
plt. show () 

쿡의 Python 거리

마지막 생각들

잠재적으로 영향력이 있는 관측치를 식별 하려면 Cook의 거리를 사용해야 한다는 점에 유의하는 것이 중요합니다. 관찰이 영향력이 있다고 해서 데이터 세트에서 제거되어야 한다는 의미는 아닙니다.

먼저, 관찰 결과가 데이터 입력 오류나 기타 이상한 사건의 결과가 아닌지 확인해야 합니다. 합법적인 값으로 판명되면 이를 제거하는 것이 적절한지, 그대로 두는 것이 적절한지, 아니면 단순히 중앙값과 같은 대체 값으로 바꾸는 것이 적절한지 결정할 수 있습니다.

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다