profile-img
The merit of an action lies in finishing it to the end.
slide-image

다중공선성이란?

회귀분석을 할 때 다중공선성을 고려해야 한다고 하는데, 과연 다중공선성이란 무엇일까?

다중공선성(Multicollinearity)는 회귀분석 시 독립변수들 간의 강한 상관관계가 나타날 때를 일컫는 용어다. 만약 변수들 간 다중공선성이 높다고 판단되면, 이 변수들은 더이상 독립변수라고 보기 어렵다. 회귀분석의 전제인 독립변수 X들을 통해 Y를 예측한다는 가정이 성립할 수 없게 되므로 다중공선성은 회귀분석의 심각한 문제 중 하나로 손꼽힌다.

 

VIF

Variance Inflation Factor의 약자인 VIF는 한국어로 번역하면 분산 팽창 인수다. 이 값은 독립변수의 다중공선성을 판단하기 위한 지표로 사용되며 계산식은 다음과 같다.

r_i는 i번째 변수를 제외한 회귀식의 R^2값이다.

보통 VIF 값이 10을 초과하면 다중공선성이 유의미하게 높다고 판단하여 제거한다. 왜 하필 10일까?

VIF > 10 식을 위에 나온 수식으로 대체하여 계산할 경우, r_i > 0.9 라는 결과가 나온다. 즉 i번째 변수가 식에서 빠져도 나머지가 Y를 90% 이상 설명할 수 있다는 뜻이다. 즉 제거해서 다른 값들로 대체해도 유의미하게 예측이 달라지지 않는다.

 

VIF in python

파이썬에서 VIF를 구하기 위해 모듈을 이용한다.

from statsmodels.stats.outliers_influence import variance_inflation_factor as vif

특정 데이터프레임에서 독립변수별로 VIF를 구하는 방법은 다음과 같다.

vif_factors = [vif(X.values, i) for i in range(0, X.shape[1])]
vif_report = pd.DataFrame({"variable": X.columns, "VIF Factors": vif_factors})

vif_report는 각 독립변수별 VIF가 저장된 데이터프레임이므로, 이를 확인하면 어떤 독립변수의 VIF가 큰지 작은지 알 수 있다. 그것을 보고 VIF가 10을 초과한다면 값을 제거하면 된다.

 

다른 회귀분석에서도 다중공선성을 고려해야 할까?

이 부분에 대해서 명확한 답을 찾지 못했다. 인터넷 자료를 뒤져봐도 선형회귀를 제외한 다른 회귀분석(예를 들어 로지스틱 회귀)에 다중공선성을 고려해야하는지에 관한 문제에 모두 다른 답을 내놓았기 때문이다.

그렇지만 다중공선성의 본질과 회귀분석의 가정을 생각해본다면, 다중공선성으로 인해 독립변수들 간의 독립성이 보장되지 않을 가능성이 있으므로, 모든 회귀분석에서 다중공선성을 고려해야 할 것이라고 판단하였다.

사실 내 말이 옳지 않을 수도 있다. 이 부분은 논문 같은 자료를 더 찾아볼 필요가 있다.

'CS study/머신러닝' Related Articles +