Python에서 vif를 계산하는 방법


회귀분석에서 다중공선성은 두 개 이상의 설명변수가 서로 높은 상관관계를 갖고 있어서 회귀모델에서 고유하거나 독립적인 정보를 제공하지 않는 경우에 발생합니다.

변수 간의 상관 정도가 충분히 높으면 회귀 모델을 피팅하고 해석할 때 문제가 발생할 수 있습니다.

다중 공선성을 탐지하는 한 가지 방법은 회귀 모델 에서 설명 변수 간의 상관 관계 및 상관 강도를 측정하는 분산 팽창 계수(VIF) 라는 측정항목을 사용하는 것입니다.

이 튜토리얼에서는 Python에서 VIF를 계산하는 방법을 설명합니다.

예: Python에서 VIF 계산

이 예에서는 농구 선수 10명의 속성을 설명하는 데이터 세트를 사용합니다.

 import numpy as np
import pandas as pd

#create dataset
df = pd.DataFrame({'rating': [90, 85, 82, 88, 94, 90, 76, 75, 87, 86],
                   'points': [25, 20, 14, 16, 27, 20, 12, 15, 14, 19],
                   'assists': [5, 7, 7, 8, 5, 7, 6, 9, 9, 5],
                   'rebounds': [11, 8, 10, 6, 6, 9, 6, 10, 10, 7]})

#view dataset
df

	rating points assists rebounds
0 90 25 5 11
1 85 20 7 8
2 82 14 7 10
3 88 16 8 6
4 94 27 5 6
5 90 20 7 9
6 76 12 6 6
7 75 15 9 10
8 87 14 9 10
9 86 19 5 7

점수를 응답 변수로 사용하고 포인트, 어시스트, 리바운드를 설명 변수로 사용하여 다중 선형 회귀 모델을 적합화한다고 가정합니다.

모델의 각 설명 변수에 대한 VIF를 계산하려면 statsmodels 라이브러리의 variance_inflation_factor() 함수를 사용할 수 있습니다.

 from patsy import damatrices
from statsmodels.stats.outliers_influence import variance_inflation_factor

#find design matrix for linear regression model using 'rating' as response variable 
y, X = dmatrices('rating ~ points+assists+rebounds', data=df, return_type='dataframe')

#calculate VIF for each explanatory variable
vivid = pd.DataFrame()
vive['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
vivid['variable'] = X.columns

#view VIF for each explanatory variable 
lively

	       Variable VIF
0 101.258171 Intercept
1 1.763977 points
2 1.959104 assists
3 1.175030 rebounds

각 설명 변수에 대한 VIF 값을 관찰할 수 있습니다.

  • 포인트: 1.76
  • 어시스트: 1.96
  • 리바운드: 1.18

참고: 이 값은 관련이 없으므로 템플릿의 “가로채기”에 대한 VIF를 무시하십시오.

VIF 값을 해석하는 방법

VIF 값은 1부터 시작하며 상한이 없습니다. VIF를 해석하는 일반적인 규칙은 다음과 같습니다.

  • 값 1은 주어진 설명 변수와 모델의 다른 설명 변수 사이에 상관 관계가 없음을 나타냅니다.
  • 1과 5 사이의 값은 주어진 설명 변수와 모델의 다른 설명 변수 사이의 중간 정도의 상관 관계를 나타내지만 특별한 주의가 필요할 만큼 심각하지는 않은 경우가 많습니다.
  • 5보다 큰 값은 주어진 설명 변수와 모델의 다른 설명 변수 사이에 잠재적으로 심각한 상관 관계가 있음을 나타냅니다. 이 경우 회귀 결과의 계수 추정치와 p-값은 신뢰할 수 없을 가능성이 높습니다.

우리 회귀 모델의 설명 변수의 각 VIF 값은 1에 가깝기 때문에 우리 예에서는 다중 공선성이 문제가 되지 않습니다.

의견을 추가하다

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