# 다중공선성
# 다중공선성은 회귀분석에서 독립변수들 간에 강한 상관관계가 나타나는 문제로, 정확한 회귀계수 추정에 어려움이 됨
# 다중공선성이 발생하면, 변수를 제거하거나, 주성분분석을 진행하거나, ridge, lasso 등과 같은 정규화된 회귀분석 진행
# 독립변수들 간의 상관계수 : 0.9 이상이면 다중공선성이 있다고 판단
# 허용 오차(1-r^2)를 구했을 때, 0.1 이하면 다중공선성 문제가 심각하다고 판단
# 즉, 그 값이 작을수록 공선성이 높다고 볼 수 있음
# 분산팽창요인(VIF) : 허용오차의 역수로, VIF가 10 이상이면 공선성이 문제가 심각하다고 봄
import pandas as pd
Cars = pd.read_csv('../data/Cars93.csv')
Cars.info()
# 일단 상관계수를 보고, 0.9 이상인 것이 있는지 확인
from patsy import dmatrices
from statsmodels.stats.outliers_influence import variance_inflation_factor
Y, X = dmatrices('Price ~ EngineSize + RPM + Weight + Length', data = Cars, return_type = 'dataframe')
vif_list = []
for i in range(1, len(X.columns)):
vif_list.append([variance_inflation_factor(X.values, i), X.columns[i]])
pd.DataFrame(vif_list, columns = ['vif', 'variable'])
# 변수선택법
# 유의미한 독립변수들을 선택하여 최적의 회귀방정식 도출하는 것이 필요
# AIC 값이 낮다는 것은 모형의 적합도 높음을 의미
# 전진선택법
# 후진소거법
# 단계적선택법