앞에서 설명을 드렸지만 인공지능을 이용한 회귀분석은 수백 또는 수천개의 X 변수들을 이용하는 Big-Data분석의 경우가 많은 데 이들 변수들은 중복되거나 유사한 변수가 있을 수가 있다(다중공산성,Multicollinearity). 변수가 많아지면서 R-Squared는 높아지지만 전체적인 회귀분석의 질은 낮아지게 된다. 따라서 회귀분석 이전에 불필요한 변수들은 제게해야 하는데, 그 방법중에 하나가 Variance Inflation Factor(VIF)이다.
공식처럼 VIF는 변수간 상관관계를 이용한다. 만일 두개의 변수의 R_Squared가 1과 같이 매우 높다면 (두 변수는 서로 독립변수가 아니게 된다) 한다. VIF=1/(1-1) = inf 즉 VIF는 가령 10이상의 매우 큰 숫자가 된다. 반대로 두 변수간에 아무런 상관관계가 없다면
VIF=1/(1-0) = 1 과 같이 작은 숫자가 된다. 즉 Variance가 부풀려지지(Inflated) 않았다는 이야기가 된다.
이제 식을 이해했다면 실제로 Python code로 구현해 보자. 데이터는 500명의 키, 몸무게, 성별 등을 포함한 BMI(Body Mass Index) 를 이용했으며 csv을 첨부했다.
Logistic의 경우에는 VIF를 어떻게 사용하는가에 대한 설명자료가 부족하여 직접 코드를 짜서 Python의 statmodels library결과와 비교를 했다. 먼저 자동으로 계산한 코드를 보자.
여러 방법을 사용한 결과 y변수 (즉 index 변수)를 제외하고 나머지 3개의 X변수들만을 가지고 VIF를 계산했다. 이 방법은 Linear Regression에서 VIF를 구하는 방법과 동일하다.
여기에는 절편(Intercept)은 포함하지 않았다. 그리고 이들 3개의 계산결과가 자동으로 계산한 결과와 동일함을 알 수 있었다. 그리고 Height와 Weigt의 VIF가 10을 초과했으므로 서로 상관관계가 높으므로 X변수로 채택할 가치가 없음을 말하고 있다.
파이썬 코드도 첨부한다.