Python에서 다중 공선성을 테스트하는 방법


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

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

회귀 모델에서 다중 공선성을 탐지하는 가장 간단한 방법은 분산 팽창 인자(흔히 VIF 라고 약칭함)라고 알려진 측정항목을 계산하는 것입니다.

VIF는 모델의 예측 변수 간 상관 관계의 강도를 측정합니다. 1과 양의 무한대 사이의 값을 사용합니다.

우리는 VIF 값을 해석하기 위해 다음과 같은 경험 법칙을 사용합니다.

  • VIF = 1: 주어진 예측 변수와 모델의 다른 예측 변수 간에 상관 관계가 없습니다.
  • 1과 5 사이의 VIF: 주어진 예측 변수와 모델의 다른 예측 변수 사이에 중간 정도의 상관 관계가 있습니다.
  • VIF > 5 : 주어진 예측 변수와 모델의 다른 예측 변수 간에 강한 상관 관계가 있습니다.

다음 예에서는 모델의 각 예측 변수에 대한 VIF 값을 계산하여 Python의 회귀 모델에서 다중 공선성을 탐지하는 방법을 보여줍니다.

예: Python의 다중 공선성 테스트

다양한 농구 선수에 대한 정보가 포함된 다음과 같은 pandas DataFrame이 있다고 가정합니다.

 import pandas as pd

#createDataFrame
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 DataFrame
print (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 regression model using 'rating' as response variable 
y ,

#create DataFrame to hold VIF values
vive_df = pd. DataFrame ()
vive_df[' variable '] = X.columns 

#calculate VIF for each predictor variable 
vive_df[' VIF '] = [variance_inflation_factor(X. values , i) for i in range(X. shape [1])]

#view VIF for each predictor variable 
print (viv_df)

	       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 값은 1에 가깝기 때문에 모형에서는 다중공선성이 문제가 되지 않습니다.

추가 리소스

다음 튜토리얼에서는 Python에서 다른 일반적인 작업을 수행하는 방법을 설명합니다.

Python에서 단순 선형 회귀를 수행하는 방법
Python에서 다중 선형 회귀를 수행하는 방법
Python에서 잔차 플롯을 만드는 방법

의견을 추가하다

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