Python의 분산 인플레이션 계수
이 기사에서는 VIF(분산 팽창 계수)와 영향력 있는 관찰을 감지하는 성능에 대해 설명하고 통계 모델
을 사용하여 Python에서 VIF를 사용하는 방법을 보여줍니다.
Python의 분산 인플레이션 계수
분산 인플레이션 계수(VIF)는 다중 회귀 모델에서 예측 변수 간의 공선성의 양을 측정합니다. 그리고 잔차의 분산에 대한 주어진 예측 변수의 분산의 비율로 계산됩니다.
1
의 분산 인플레이션 계수는 공선성이 없음을 나타냅니다. 대조적으로 1
보다 더 중요한 VIF는 공선성이 있음을 나타냅니다. VIF는 다중 회귀 모델에 주어진 예측 변수의 포함이 보증되는지 여부를 평가하는 데 사용할 수 있습니다.
주어진 예측 변수의 VIF가 높으면 예측 변수가 모델의 다른 예측 변수와 중복됨을 나타낼 수 있습니다. 모델 적합도에 영향을 주지 않고 제거할 수도 있습니다.
적절한 분산 인플레이션 계수(VIF)는 특정 컨텍스트 및 데이터 세트에 따라 달라집니다. 그러나 일반적으로 VIF는 데이터의 다중 공선성과 관련된 잠재적인 문제를 식별하는 데 유용한 도구가 될 수 있습니다.
영향력 있는 관찰 감지에서 VIF의 성능
회귀 분석에서 영향력 있는 관찰을 탐지하는 방법에는 여러 가지가 있습니다. 한 가지 표준 방법은 분산 인플레이션 계수(VIF)를 계산하는 것입니다.
VIF는 모델의 다른 예측 변수와의 공선성으로 인해 예측 변수의 분산 정도를 측정합니다. 높은 VIF는 다른 예측 변수가 모델의 예측 변수에 큰 영향을 미친다는 것을 나타냅니다.
따라서 회귀 모델은 각 예측 변수에 대한 VIF를 계산할 수 있습니다. 1
의 VIF는 다른 예측자가 모델의 예측자에 영향을 미치지 않음을 나타냅니다.
1
보다 더 중요한 VIF는 다른 예측 변수가 모델의 예측 변수에 영향을 미친다는 것을 나타냅니다. VIF는 범주형 예측 변수 간의 공선성을 감지하는 데 특히 유용합니다.
VIF는 회귀 모델에서 가장 영향력 있는 예측 변수를 식별할 수 있습니다. 그러나 VIF는 공선성의 척도일 뿐이며 반드시 모델에서 예측자가 필수적이라는 것을 나타내지는 않는다는 점을 기억해야 합니다.
Python에서 분산 인플레이션 계수(VIF) 계산
Python에서 VIF를 사용하려면 statsmodels
라이브러리를 사용할 수 있습니다. 먼저 VIF는 linear_model.LinearRegression
클래스를 사용하여 계산됩니다.
먼저 선형 회귀 모델을 데이터에 맞춘 다음 상호 작용 항을 사용하여 새로운 선형 회귀 모델을 만듭니다. 그런 다음 각 모델에 대한 VIF를 계산하여 두 모델을 비교합니다.
교호작용 항이 포함된 모델은 VIF가 더 높아 교호작용 항이 다중 공선성을 유발하고 있음을 나타냅니다. VIF는 모델의 각 예측 변수에 대해 계산된 다음 모델의 전체 적합도를 결정하는 데 사용됩니다.
VIF는 다음 공식을 사용하여 계산할 수 있습니다.
VIF = \frac{1}{(1-R^{2})}
여기서 R^2
는 예측 변수에 대한 결정 계수입니다.
VIF는 일반적으로 선형 회귀 모델에서 다중 공선성을 평가하는 데 사용됩니다. 그러나 로지스틱 회귀 및 포아송 회귀와 같은 다른 회귀 모델에서도 사용할 수 있습니다.
VIF는 모델의 전반적인 적합도를 평가하고 예측 변수를 식별하는 데 사용할 수 있습니다. 그리고 예측 변수는 모델의 다른 예측 변수와 높은 상관 관계가 있습니다.
통계에서 모든 데이터 포인트에는 분산이라는 오류가 있습니다. 그러나 데이터 세트의 충돌이 데이터 세트의 가변성을 가장 잘 측정하는 것은 아닙니다.
분산 인플레이션 계수(VIF)는 회귀 분석에서 다중 공선성의 영향을 통계적으로 측정한 것입니다. VIF = (λ 1 / λ 2 ) – 1
, 여기서 λ 1
은 회귀 모델의 변수에 대한 VIF이고 λ 2
는 두 번째 회귀 모델의 변수에 대한 VIF입니다.
VIF > 10
은 독립 변수 간의 다중 공선성을 나타냅니다. 아래 Python 코드 예제를 통해 VIF를 배워봅시다.
예제 코드:
import numpy as np
import pandas as pd
import seaborn as sns
import statsmodels.api as sm
import statsmodels.tools.tools as smt
import statsmodels.stats.outliers_influence as smo
hp = sm.datasets.get_rdataset(dataname="HousePrices", package="AER", cache=True).data
print(hp.iloc[:, 0:5].head(3))
ivar = hp.iloc[:, 1:5]
print(ivar.head(3))
ivarc = smt.add_constant(data=ivar, prepend=False)
vif_lotsize = smo.variance_inflation_factor(exog=ivarc.values, exog_idx=0)
print(vif_lotsize)
출력:
price lotsize bedrooms bathrooms stories
0 42000.0 5850 3 1 2
1 38500.0 4000 2 1 1
2 49500.0 3060 3 1 1
lotsize bedrooms bathrooms stories
0 5850 3 1 2
1 4000 2 1 1
2 3060 3 1 1
1.047054041442195
우리가 배운 것처럼 사용 가능한 수많은 VIF 계산기가 있습니다. 또한 VIF는 두 변수 간의 관계를 이해하는 데 도움이 되는 많은 지표 중 하나입니다.
VIF는 이론적인 개념이 아니라 실제적인 개념이라는 것을 아는 것이 중요합니다. 다중 공선성이 문제가 되는지 여부를 결정하는 것은 VIF 값입니다.
Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn