본문 바로가기

R-PAGO 노트

회귀모델의 변수 선택(Variable Selection) 방법

설명변수가 많은 데이터의 의미있는 변수를 선택하는 것은 논란의 여지가 많다. 일단, 설명변수를 선택하는 대표적인 방법은 다음의 3가지이다. 


1.진진 선택법 (forward selection): 절편만 있는 모델에서 기준 통계치를 가장 많이 개선시키는 변수를 차례로 추가하는 방법


2.후진 소거법(backward elimination): 모든 변수가 포함된 모델에서 가장 도움이 되지 않는 변수(p값)를 하나씩 제거하는 방법


3.단계 선택법(stepwise selection): 모든 변수가 포함된 모델에서 출발하고 기준통계치에 가장 도움이 되지 않는 변수를 삭제하거나 모델에서 빠져있는 변수 중에서 기준 통계치를 가장 개선시키는 변수를 추가함. 이러한 변수의 추가 또는 제거를 반복함.


[] 수 선택|작성자 

RDA이"

신뢰하는 책, 통계의 힘 저자인 니시우치 히로무는 전진(forward), 후진(backward) 보다 단계별(stepwise) 선택을 추천한다. 이 때 변수 선택의 기준은 느슨한 p값(0.1 이하)이다. 그러나 Johns Hopkins 대학교 자료는 p 값 대신 Criterion 기준의 전수 조사 방법을 추천한다. 여기서 기준이란 AIC, BIC, Cp를 말한다. 논란이 있는 기준인 p값을 사용하지 않으면서 모든 경우의 수를 Criterion을 통해 살펴보는 것이 최선이라는 이유 때문이다.(아래 첨부 pdf)


Columbia 대학교에서 제공하는 변수 선택 Guide 역시 전진, 후진, 단계별 방법을 추천하나 기준은 AIC, BIC인 것으로 보아 "p 값 기준의 단계 선택법"보다는 "Criterion을 통해 적합한 변수를 선택하는 것"이 합리적이라 판단된다.(아래 첨부 pdf)


이 글에서는 다중 선형 회귀 모델에서의 Criterion 방법을 통해 모델 선택 Guideline을 Step by Step으로 제시하고자 한다. 본 Guideline을 이해하기 위해서는 앞서 설명한 Criterion에 대한 선행 이해가 필요하다.



AIC(Akaike Information Criterion), BIC(Bayes Information Criterion)


AIC = -2log(likelihood) + 2p

BIC = -2log(likelihood) + plog(n)

p: 변수의 갯수, n: 데이터 갯수

선형 회귀의 경우 AIC는 nlog(RSS/n) + 2p, BIC는 nlog(RSS/n) +plog(n)이다.
(상기 log는 자연로그이다.) 


변수가 많은 모델이라면(p가 큰) RSS는 작아지게 된다. 결국 AIC, BIC를 최소화 한다는 뜻은 우도(likelihood)를 가장 크게 하는 동시에 변수 갯수는 가장 적은 최적의 모델(parsimonious & explainable)을 의미하게 된다. Bias는 변수를 제거하면서 생기는 오류이고 Variance는 변수가 증가하면서 생기는 오류이다. 상기 AIC와 BIC 식의 좌변을 bias, 우변을 variation으로 부르는 이유이기도 하다. 아래 그림의 변수 갯수에 따른 bias와 variance 관계는 최적 모델 선택을 위한 균형점을 제시한다.




BIC의 경우 변수가 많을 수록 AIC보다 더 페널티를 가하는 성격을 가진다.(BIC의 우변 plog(n)에서 보통 n이 8이상이므로 log(8)>2가 된다. 따라서 AIC 우변 보다 변수 증가에 더 민감하다) 따라서 변수 갯수가 작은 것이 우선 순위라면 AIC보다 BIC를 참고하는게 좋다.



Mallow's Cp



좋은 모델을 선택 할 때 MSE(Mean Squared Error)는 적절한 기준이 된다.(MSE는 RSS/n)

Cp값은 조정된 R2과 AIC와 밀접한 관련이 있다.(최소제곱 모델에서만: Cp와 AIC는 비례한다.) 또한 Cp 값은 모든 변수가 다 포함 될 경우에 p값과 같게 된다. 따라서 나쁜 모델은 Cp값이 p값보다도 클 때이며 좋은 모델은 최소한 p값 보다 작을 때 이다.  


Cp값은 낮은 검정오차(test set)를 갖는 모델에 대해 작은 값을 가진다. 따라서 가장 낮은 Cp값을 선택하는 것은 훈련 오차(train)외에 가장 낮은 검정오차를 선택하게 되므로 이를 선택해야 한다. AIC, BIC모두 낮을 수록 낮은 검정 오차를 가지는 경향이 있다.


R2에 대한 해석은 모델의 적합성(goodness of fit)을 확인한다기 보다 잔차 중 설명 가능한 값이 어느 정도인가라 말하는게 옳다.[각주:1]


변수 선택 Guideline

: R 프로그램의 leaps과 faraway package 설치 + data는 swiss 사용

 

Step 1: 모든 가능한 조합의 Cp와 조정된 R2을 구하라


가능한 모든 설명변수 조합 별 Cp 값을 변수 갯수에 상응하게 Plot한다. 

또한 모든 가능한 설명변수 조합 별 조정된 R2값을 확인한다. 

절편 1, 기울기 1(Cp = p)인 직선 아래의 조합이면서 조정된 R2값이 큰 모델을 선택한다. 

상위 10개의 조정된 R2은 아래와 같다.

      1,4,5,6     1,2,4,5,6     1,3,4,5,6     1,4,5,6,7   1,2,3,4,5,6 

        0.713         0.706         0.706         0.706         0.699 

  1,3,4,5,6,7   1,2,4,5,6,7         4,5,6 1,2,3,4,5,6,7       2,4,5,6 

        0.699         0.699         0.694         0.692         0.689 



Step 2: 이상값 진단 후 Cp와 조정된 R2을 구하라


모든 설명변수를 포함하는 회귀 모델을 기준으로 이상값을 제거한다. 이상값 진단은 잔차 분석의 4개 plot을 통해 잔차의 정규성 및 Leverage를 확인해도 좋으나 단순히 상대적으로 hatvalue가 큰 데이터를 선택해도 된다. 이상값은 정량적인 기준뿐아니라 설명가능한 사유가 필요하다.

AK의 Cook's Distance가 1보다 크다.

hatvalue에 대한 결과 AK가 다른 주에 비해 월등히 높다.



이상값(AK) 제거 후 Step 1과 같은 방법으로 Cp와 조정된 R2을 확인하여 최적의 모델을 선택한다.

상위 10개의 조정된 R2는 아래와 같다.

    1,4,5,6,7       1,4,5,6   1,2,4,5,6,7     2,4,5,6,7   1,3,4,5,6,7 

        0.710         0.709         0.707         0.707         0.704 

    1,3,4,5,6     1,2,4,5,6 1,2,3,4,5,6,7   2,3,4,5,6,7       4,5,6,7 

        0.703         0.703         0.701         0.700         0.70



Step 3: 데이터 증폭이 큰 것은 Log를 사용하여 설명력을 높여라


하나의 변수안에 데이터 값 차이가 클 경우, 데이터 값에 Log취하면 설명력도 높고 이상값도 포용될 수 있다. 기준은 각 변수별 boxplot을 통해 데이터 분포가 기울어져(skewd) 있는지 확인하는 것이다.


결과 값:  boxplot.pdf


결과 값을 보면 Population, Area는 1.5 IQR(Inter Quartile Range) 밖의 데이터 존재로 분포가 기울어져 있다. Income은 1개의 데이터가 1.5 IQR 밖에 있으나 전체적으로 Skewed하지 않다고 판단된다.

반면 Illiteracy data는 1.5 IQR 밖의 데이터는 존재하지 않으나 데이터 분포가 한 쪽으로 치우쳐 있다. 


따라서 Population, Area, Illiteracy에 Log를 취한 후 plot하면 모든 변수가 치우치지 않음을 확인 할 수 있다. (Log를 취한 Area의 경우 1.5 IQR 밖에 점들이 많으나 한 쪽으로 치우치진 않는다.)


결과 값: boxplot_outlier_log.pdf


새로 정련된 값으로 Step 1을 시도한다.   

상위 10개의 조정된 R2은 아래와 같다.

      1,4,5,6     1,4,5,6,7     1,3,4,5,6     1,2,4,5,6   1,3,4,5,6,7 

        0.717         0.714         0.712         0.711         0.708 

  1,2,4,5,6,7   1,2,3,4,5,6       1,3,4,5 1,2,3,4,5,6,7     1,3,4,5,7 

        0.707         0.705         0.703         0.701         0.699 


Step 4:  Log 취한 데이터의 이상값을 진단하라 

plot 검토는 이상이 없으나 AK의 hatvalue가 Log사용 후에도 여전히 상대적으로 높아 AK를 제거 한다. 

hatvalues:

       AK        HI        ND        NM        NV        RI        DE        WA 

0.6187585 0.3597169 0.3596503 0.3480067 0.3457307 0.2705571 0.2656902 0.2283377 

       OR        CA 

0.2277518 0.2216055 

상위 10개의 조정된 R2은 아래와 같다. 

1,4,5,6     1,4,5,6,7     1,3,4,5,6   1,3,4,5,6,7     1,3,4,5,7 

 0.712         0.709         0.708         0.708         0.707 

1,3,4,5   1,2,4,5,6,7     1,2,4,5,6 1,2,3,4,5,6,7     2,4,5,6,7 

 0.706         0.706         0.706         0.706         0.705 


Step 5: 해석가능한 최적의 모델을 선택하라


Step 1은 이상값을 포함하고 있어 회귀 식 사용이 적절치 않다. 따라서 Step 2의 결과를 사용한다. 1,4,5,6 모델은 설명력이 1,4,5,6,7보다 약간 낮으나 변수가 하나 적기에 최적의 모델로 선정한다.(설명력: 70.9%)


Step 3 역시 이상값을 포함하고 있어 Step 4의 결론을 따른다. Step 4의 최적 모델은 1,4,5,6으로 Step 2의 결론보다 설명력을 0.6% 향상 시킨다.(설명력 0.712)


Step 4의 모델은 Log사용으로 설명력은 향상하나 해석상에 어려움이 있을 수 있다. 설명력 향상이 크지 않으므로 최종적으로 Step 2의 회귀식을 최종 선택 한다. Step 2 결론의 요약은 아래와 같다.



마지막으로 변수간 공선성을 VIF 검토를 통해 한다. 


Population     Murder    HS.Grad      Frost 

 1.222597   2.043817   1.480441   1.523796


최종 R Script

swiss_stepwise_criterion.R



참고 자료: AIC, BIC 기준 판별


변수가 많지 않을때: 


첫번째 방법은 변수가 많지 않을 때 모든 함수의 조합을 통해 R2과 BIC를 비교 후 최상의 변수를 선택할 수 있다. 아래 그래프는 조정된 R2을 plot한 것으로 검은색은 변수가 포함된 것이고 하얀색은 포함되지 않은 것이다. 

library(leaps)
leaps=regsubsets(Price~Size+Lot+Bedrooms+Baths+Taxes, data=Housing, nbest=10)
plot(leaps, scale="adjr2")
plot(leaps, scale="bic")


왼쪽 그래프의 가장 높은 조정된 R2은 모든 변수를 포함할 때이다. 반면 가장 작은 BIC(Bayes Information Criterion)를 가진 모델은 Size, Lot, Taxes만 가질 때이다. 조정된 R2만 놓고 보면 상위 4개간에 서로 차이가 크지 나지 않아 이것만으론 선택하기가 쉽지 않을 수 있다. 또한 조정된 R2의 상위 순위와 BIC차 최소인 상위 순위간에 서로 맞지 않는 모순이 발생하기도 한다. 


자동 접근법: 변수가 많을 때


따라서 변수가 많을 때는 자동 법 사용이 편하다. 단계별 선택법만 사용해도 무방하나 3 가지 방법을 서로 비교해 보고자 하면 아래 3줄 code 모두를 입력 후 비교해도 된다. 

결과는 AIC(Akaike Information Criterion)로 나타나지며 가장 작은 변수를 선택하면 된다.   


null=lm(Price~1, data=Housing)

full=lm(Price~., data=Housing

step(null, scope=list(lower=null, upper=full), direction="forward")

step(full, data=Housing, direction="backward")

step(null, scope = list(upper=full), data=Housing, direction="both")



참고 자료

http://www.statmethods.net/stats/regression.html

Columbia 대학교 자료: Variable Selection.pdf

Johns Hopkins 대학교 자료: ch10 Variable Selection Johnshopkins.pdf

NC state 대학교 자료 AIC_NC State university.pdf

http://blog.naver.com/ilustion/220287740191

  1. http://thestatsgeek.com/2014/02/08/r-squared-in-logistic-regression/ [본문으로]