본문 바로가기
AI/Machine-Learning

[statsmodels] variance_inflation_factor() - VIF

by Wikinist 2023. 9. 7.

statsmodels.stats.outliers_influence.variance_inflation_factor 함수는 다중 선형 회귀 분석에서 다중공선성(Multicollinearity)을 평가하는 데 사용되는 함수입니다. 이 함수는 statsmodels 라이브러리의 statsmodels.stats.outliers_influence 모듈에 포함되어 있습니다.

시그니처

시그니처(함수의 형태)는 다음과 같습니다.

variance_inflation_factor(exog, exog_idx)


exog: 설명 변수(explanatory variables 또는 독립 변수)로 구성된 데이터 프레임이나 배열입니다. 이 변수들 간의 다중공선성을 평가하려는 데이터 세트입니다.
exog_idx: 평가하려는 설명 변수의 인덱스 또는 위치를 지정합니다. 이 매개변수는 한 번에 하나의 변수만 평가하는 데 사용됩니다. 다른 변수들과의 다중공선성을 측정하려면 이 매개변수를 각 변수에 대해 반복적으로 호출해야 합니다.
variance_inflation_factor 함수는 주어진 설명 변수의 다중공선성을 평가하기 위해 분산 팽창 계수(Variance Inflation Factor, VIF)를 계산합니다. VIF는 해당 변수가 다른 설명 변수들로 얼마나 설명될 수 있는지를 나타내며, 값이 크면 다중공선성이 높다는 것을 나타냅니다. 일반적으로 VIF가 1보다 큰 경우 다중공선성이 발생한다고 판단됩니다. 따라서 VIF 값이 낮을수록 설명 변수 간의 다중공선성이 낮다고 할 수 있습니다.

다중공선성은 회귀 분석 결과의 신뢰성을 저해할 수 있으므로, 이 함수를 사용하여 다중공선성을 평가하고 문제가 발견되면 해당 변수를 수정하거나 제거하여 모델을 개선할 수 있습니다.

예제

다중공선성을 평가하기 위해 variance_inflation_factor 함수를 사용하는 간단한 예제를 보여드리겠습니다. 이 예제에서는 Python의 pandas와 statsmodels 라이브러리를 사용합니다.

먼저, 필요한 라이브러리를 가져옵니다.

import pandas as pd
from statsmodels.stats.outliers_influence import variance_inflation_factor

다음으로, 가상의 데이터 프레임을 생성하겠습니다.

data = {'X1': [1, 2, 3, 4, 5],
        'X2': [2, 4, 6, 8, 10],
        'X3': [1, 1, 2, 2, 3]}
df = pd.DataFrame(data)

이제, variance_inflation_factor 함수를 사용하여 각 변수의 VIF 값을 계산할 수 있습니다. 예를 들어, 'X1' 변수의 VIF 값을 계산하려면 다음과 같이 합니다.

vif_x1 = variance_inflation_factor(df.values, df.columns.get_loc('X1'))
print(f"VIF for X1: {vif_x1}")

이제 'X1' 변수의 VIF 값을 확인할 수 있습니다. 이를 다른 변수에 대해서도 반복적으로 수행하여 모든 변수의 다중공선성을 평가할 수 있습니다.

다중공선성이 높은 변수의 VIF 값이 크다면, 해당 변수를 수정하거나 다른 변수와의 관계를 고려하여 모델을 개선할 수 있습니다.

VIF 테이블 커스텀 함수

def get_vif(formula, df):
    y, X = dmatrices(formula, df, return_type="dataframe")
    
    vif = pd.DataFrame()
    vif["VIF Factor"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
    vif["features"] = X.columns
    return vif

참고

 

 

다중 선형 회귀와 절차

다중 선형 회귀 다중 선형 회귀는 하나의 종속 변수(Y)와 둘 이상의 독립 변수(X1, X2, ..., Xn) 간의 선형 관계를 모델링하는 통계적 기법입니다. 다중 선형 회귀는 종속 변수와 독립 변수 간의 선형

wikinist.tistory.com

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'AI > Machine-Learning' 카테고리의 다른 글

중요한 피쳐 탐색(중요도)  (2) 2023.09.07
[Pandas] interpolate()  (0) 2023.09.07
[patsy] dmatrices  (0) 2023.09.07
[NumPy] nditer()  (0) 2023.09.07
모델별 적합한 상황과 장단점  (0) 2023.09.04