독립성을 위반하는 경우이다. 회귀분석에서 독립변수들이 서로 독립적이어야 한다는 가정은 통계적 기법에서 기본 조건으로 간주한다.
독립변수가 많아질수록 모델의 적합도는 향상될 수 있지만, 변수들 간 상관성이 높아지면 모델의 적합도와 예측력이 현저히 떨어질 수 있다. 이러한 현상을 다중공선성이라고 한다. 다중공선성은 모델의 해석을 어렵게 만들고, 회귀계수의 추정치가 불안정해지는 문제를 초래한다.
다중공선성을 확인하고 해결하는 방법 중 하나는 Variance Inflation Factor(VIF)이다. VIF는 특정 변수를 종속변수로 놓고 나머지 변수를 독립변수로 사용하여 회귀분석을 수행한 후, 해당 회귀분석의 결정계수(R²)의 역수를 취하여 계산한다. VIF 값이 높을수록 해당 변수는 다중공선성 문제가 있다고 판단할 수 있다.
요약하자면:
1. 다중공선성은 독립변수들 간의 높은 상관성으로 인해 발생하며, 이는 회귀분석의 기본 가정을 위반하는 경우이다.
2. 독립변수가 많아지면 모델의 적합도는 향상될 수 있지만, 변수들 간 상관성이 높아지면 적합도와 예측력이 떨어질 수 있다.
3. 다중공선성 문제를 진단하는 방법 중 하나로 VIF가 있으며, 이는 결정계수의 역수를 사용하여 계산한다.
여기서 는 와 나머지 독립변수들 간 결정계수이다.
from statsmodels.stats.outliers_influence import variance_inflation_factor as vif
def rid_vif(data, option = 2):
vif_1 = pd.DataFrame()
vif_1['features'] = data.columns
vif_1['vifs'] = [vif(data.values, i) for i in range(len(data.columns))]
if option == 1:
result = data.drop(vif_1[vif_1['vifs'] > 10].iloc[:,0], axis = 1)
elif option == 2:
result = vif_1
return result
# data는 Y를 제외한 설명변수들 이다.
# option은 1을 넣었을 때 이 설명변수들 중 다중공선성이 10이 넘는 애들을 제거한 나머지 data
# option = 2는 변수들의 다중공선성을 나타내는 표이다.
data = data불러오기
data_x = data[features]
data_y = data[목표]
data_x_scaled = rid_vif(data_x, 1)