실습에 사용될 데이터 : 보스턴 주택 데이터 Target Data -1978 보스턴 주택 가격 Feature Data CRIM: 범죄율 Boston_house.csv 0.03MB 다중회귀분석 OLS
결과여기까지는 전 게시글의 코드와 결과를 복습한 것이다. 이제 다른 변수들 또한 분석하며, 다중공선성 문제를 확인하는 여러 과정을 진행하겠다. 먼저 다중공선성은 절대적으로 어떤 방법으로 확인하는 것이 맞는지, 그리고 어떻게 하면 해결되는지 획일화된 방법이 없다. 그렇기에 아래 3가지 정도의 방법을 통해 다중공선성 확인 과정을 진행하고자 한다. (1) 결정계수(R^2)와 유의확률(p-value)을 활용한 다중공선성 확인 (2) 상관계수 및 산점도를 통한 다중공선성 확인 (3) VIF를 통한 다중공선성 확인 x_data2.head() 다중공선성이 발생했다고 판단되는 OLS결과(1) 결정계수(R^2)와 유의확률(p-value)을 활용한 다중공선성 확인 위의 많은 변수를 넣어서 검정한 OLS결과를 보면, "CRIM", "LSTAT", "RM" 세 개만 다중회귀분석을 진행했을 때 OLS결과와 다르다. 가장 큰 부분은 Warnigs에 [2]가 추가된 것이다. 이를 확인하면 강한 다중공선성 또는 다른 numerical 문제가 발생했다고 암시한다. OLS 검정을 통해보면 기존 3개 변수의 OLS와 비교할 때 R^2(결정계수)는 별로 증가하지 않았다. 게다가 3개 변수의 OLS에서 p-value를 확인하면 0.05보다 작기에 귀무가설(b1 = b2 = b3 = 0)이 기각된다. 하지만, 많은 변수를 넣었을 때, CRIM, AGE, NOX, INDUS 모두 0.05에서 영향이 없다고 판단된다. 하지만, 이 판단은 3개의 OLS검정의 결과와 다르다. 그렇기에 단순 다중공선성이 아니더라도, 변수를 선택할 필요가 있다고 생각된다. model1 parameter model2 parameter 3변수 모델 잔차 vs full 변수 모델 잔차(2) 상관계수 및 산점도를 통한 다중공선성 확인 x_data2.corr() 상관행렬 heatmap위의 상관행렬과 heatmap을 보면 변수간의 상관관계가 높은 경우가 많은 것을 확인 할 수 있다. 상관관계는 -1~1의 분포를 지니는데 여기서 0.5가 넘어가는 변수들간의 상관관계가 빈출되는 것은 충분히 다중공선성 발생을 의심할 수 있다. ※ seaborn은 시각화 라이브러리로 matplotlib처럼 여러 그래프들을 만들 수 있다. 보통은 상관관계를 위한 pairplot이나 heatmap을 위해서 사용하고, 나머지 boxplot, scatter, line plot 등은 matplotlib을 사용한다. 물론 개인의 편의에 따라 선택적 사용이 가능하다. x_data2의 pairplotpairplot은 변수간의 산점도를 나타낸 그래프이다. 위의 산점도를 보면 (0,0)~(9,9)로 대칭형태를 띈다. 즉, (0,1)과 (1,0)은 같은 그래프이다. 빨간 박스를 통해 음 또는 양의 상관관계가 시각적으로 보이는 몇개의 산점도를 표시했다. 이를 볼때 이 변수는 관계가 있다고 판단되어 다중공선성을 일으킬 가능성이 높다. (3) VIF를 통한 다중공선성 확인 VIF는 variance inflation factor의 줄임말로, 다중공선성을 확인할 때 쓰는 지표 중 하나다. variance inflation factor는 말그대로 "분산팽창요인"이다. 보통은 VIF가 10보다 크면 다중공선성이 있다고 판단한다. 하지만, 다른 과정을 함께 거쳐주는 것이 다중공선성 문제 확인의 신뢰성을 높인다. 변수들의 VIF※ RM, B, TAX, AGE, NOX, INDUS 변수들의 VIF가 10보다 크다. vif가 높은 변수가 하나씩 줄어들면 다른 변수들의 vif에도 영향을 미친다. 그래서 변수들을 한 번에 다 제거하기보다는 하나씩 제거하면서 확인해 나아가는 것이 바람직하다. NOX 제거 후 VIF전반적으로 약간씩 VIF가 줄어들었다. 하지만 RM은 여전히 매우 높기에 확실하게 제거할 필요가 있다. NOX, RM 제거 후 VIF이제 변수를 제거한 회귀모델을 적합하고 OLS를 확인해보자. NOX 변수 제거 후 OLS맨 처음 모든 변수를 다 더했을 때 OLS는 condition number가 1.04e+04 였는데 nox변수를 지우고 나서 8.44e+03으로 떨어진 것을 확인 할 수 있다. 다중공선성이 조금은 완화된 것을 확인할 수 있다. NOX,RM 제거 후 OLS위는 NOX와 RM 모두 제거 후 OLS검정 결과인데, 여기서 condition number는 3.85e+03으로 훨씬 더 낮아졌다. 물론 그렇다고 다중공선성이 완전하게 사라진 것은 아니다. 그래도 앞의 모델보다는 더 나은 결과를 보여준다. 시각화와 MSE를 통해 모델의 성능 확인하기 1. 시각화 학습 / 검증데이터 분할 feature와 target의 train/test shape pred와 true값의 분포
각 predict모델과 실제 값 비교2. MSE mse print 결과MSE print한 결과 변수 NOX만 제거했을 때 MSE가 가장낮고 예측성능이 가장 좋았다. 하지만, 이는 VIF로 확인한 결과와 다르다. "RM"은 "주택당 방의 수"로 Boston 집값의 영향을 충분히 끼칠 것으로 예상된다. 흔히 다중공선성이 발생하는 것은 모델의 예측성능을 떨어뜨린다고 판단하지만, 다중공선성을 명확하게 파악하고 제거하여 이상적인 분석결과를 도출하는 것은 case by case로 다르고, 어려운 일이다. 이처럼 데이터 분석을 할 때, 단순 통계지표를 맹신하는 것이 아니라 개인의 데이터에 대한 이해와 분석에 대한 가설, 그리고 변수를 보는 안목도 매우 중요하다. |