VIF란?
다중공선성을 진단하기 위해 사용되는지수로
독립변수가 여러개 있을 때, 특정 독립변수를 종속변수로하고 나머지 독립변수를 독립변수로 하여 회귀분석을 수행한다. 각 회귀식의 결정계수를 계산하여 1/1-R^2값으로 VIF를 정의한다.
상관관계가 높은 독립변수는 추정된 계수가 분산이 커진다. 얼마나 커지는지 확인할 수 있는게 VIF값이고 VIF가 크다는것은 다른 변수들로 설명가능함을 나타낸다.
https://direction-f.tistory.com/46
http://web.vu.lt/mif/a.buteikis/wp-content/uploads/PE_Book/4-5-Multiple-collinearity.html
만약 데이터프레임 안에 범주형 변수가 3개이고, 수치형 변수가 3개인 경우에는 다음과 같이 GVIF 함수를 수정할 수 있습니다.
```python
def calculate_GVIF(all_vars, var):
"""
Calculate GVIF for one categorical variable (var) and other variables (all_vars)
"""
# Create correlation matrix (A) of the categorical variable (var)
A = pd.get_dummies(all_vars[var], drop_first=True).corr().to_numpy()
# Select the names of all other categorical variables
cat_columns = [col for col in all_vars.columns if all_vars[col].dtype == 'object' and col != var]
# Create correlation matrix (B) of other categorical variables
B = pd.get_dummies(all_vars[cat_columns], drop_first=True).corr().to_numpy()
# Select the numeric columns
num_columns = [col for col in all_vars.columns if all_vars[col].dtype in ['int64', 'float64']]
# Create correlation matrix (C) of numeric variables
C = all_vars[num_columns].corr().to_numpy()
# Calculate GVIF
GVIF = (np.linalg.det(A) * np.linalg.det(B)) / np.linalg.det(C)
return GVIF
```
이 함수는 범주형 변수에 대한 GVIF를 계산하는 함수이며, 다른 범주형 변수와 수치형 변수 간의 상호작용을 고려하여 GVIF를 계산합니다. 함수를 사용하기 전에, 데이터프레임에서 범주형 변수와 수치형 변수의 이름을 적절히 지정해주어야 합니다.
def calculate_GVIF(all_vars, var):
"""Calculate GVIF between one non-numeric variarble (var) and other variables (all_vars)"""
# Create correlation matrix (A) of non-numeric variable (var)
A = pd.get_dummies(all_vars[var], drop_first = True).corr().to_numpy()
# Seperate non-numeric variable name (var) from other variable names
columns = list(all_vars.columns)
columns.remove(var)
# Create correlation matrix (B) of other variables
B = pd.get_dummies(all_vars[columns], drop_first = True).corr().to_numpy()
# Create correlation matrix (C) of all variables
C = pd.get_dummies(all_vars, drop_first = True).corr().to_numpy()
# Calculate GVIF
GVIF = (np.linalg.det(A)*np.linalg.det(B)) / np.linalg.det(C)
return GVIF
'데이터분석 > 머신러닝' 카테고리의 다른 글
Multiclassification imbalance problem improvement (0) | 2023.08.02 |
---|---|
LightGBM multiclassification code (0) | 2023.06.20 |
LGBM 이해 (0) | 2023.06.18 |
엔트로피 (0) | 2023.06.16 |
TPE 알고리즘 (0) | 2023.06.12 |