티스토리 뷰

Study/AI

[ML] Stepwise Regression

생각많은 소심남 2018. 1. 22. 23:27

 지난 포스트에서 Dummy Variable Trap을 막기 위해서 모든 Category에 대해서가 아닌 1개를 뺀 만큼만 dummy variable을 만든다고 했었고, 그 의미가 Multicollinearity 인가 뭔가 하는 것때문이라고 했다.(조금 찾아봤는데 Multicollinearity는 다중공선성? 즉 독립변수간의 상관관계를 표현하는 성질이라고 한다.) 이런식으로 불필요한 변수는 제거해야 한다.

 사실 지난 포스트는 Categorical Variable를 예로 들어서 설명한 내용이었지만, 일반 Numerical Variable도 동일하다. 학습시킬때 위의 Multicollinearity도 고려해야 하기도 하고, 뭔가 결과를 얻는데 있어서 불필요한 변수는 학습시 배제시켜줘야 한다. 일반 사람이라면 뭔가 학습을 시킬 때, 그 결과에 영향이 미치는 모든 변수를 모두 학습시키고 싶어하겠지만, 그보다는 조금더 유의미한 변수들만 가지고 학습시키는게 그만큼 더 유의미한 결과를 얻을 수 있다. 그럼 결국 전체 변수들 중 유의미한 변수를 뺀 나머지를 제거(Elimination)해야 한다. 

 강의에서는 Linear Regression시 Linear model을 만드는 방법을 다음과 같이 소개하고 있다.

1. All-in (모든 환경 변수를 넣고 학습시킴)
2. Backward Elimination (변수를 하나씩 줄여가면서 무의미한 변수를 배제하면서 학습시킴)
3. Forward Selection (변수를 하나씩 추가하면서 학습시킴)
4. Bidirectional Elimination (?)
5. Score Comparison (전체 결과를 비교해 진짜 유의미한 변수를 선별함)

여기서 변수를 선정하는 과정인 2,3,4번을 Stepwise Regression이라고 표현하고 있었다.

우선 초기 상태는 All-in, 즉 결과에 영향을 미치는 모든 환경변수를 넣고 학습시키는 케이스이다. 물론 앞에서 이게 좋지 않다는 것을 언급했었지만, 변수간의 상관관계나 대략적인 예측 모델을 만들기 위한 초기단계로써 이 과정이 필요하다. 사실 이후 과정으로 소개된 Backward Elimination이나 Forward Elimination도 시작은 이와 같이 모든 변수를 넣은 상태(All-in)에서 시작한다.

Backward Elimination은 다음과 같은 과정을 거친다.

1) Model 상에서 boundary로 정할 Significance level(유의수준)을 정한다.
(예를 들어 SL = 0.05)

 : 이 Significance level(SL)은 보통 우리가 뉴스에서 나오는 설문조사에서 꼭 나오는 p-value(신뢰도)와 반대되는 개념이다. (p-value = 1 - SL) 다시 말해 우리가 정한 SL보다 높은 수치가 나온다는 말은 그만큼 신뢰할 수 없다는 뜻으로 해석할 수 있다.

2) 모든 변수들을 넣고 학습을 시킨후 각 변수별 p-value를 비교한다. 이중 p-value가 가장 높은 변수를 선정한다.

3) 해당 변수의 p-value가 SL보다 높은 경우 해당 변수를 제거한다. 만약 남아있는 모든 변수들의 p-value가 SL보다 낮을 경우 해당 과정을 종료한다.

4) 변수를 제거한 상태에서 다시 학습을 시키고 2번 과정을 다시 수행한다.

 말은 거창하게 했지만, Backward Elimination이 말하고자 한 바는 신뢰할 수 없는 변수는 하나씩 제거하면서 유의미한(Significant) 변수만 남기자는 것이다.

다음 과정은 forward Selection인데 이렇게 동작한다.

1) Model 상에서 boundary로 정할 Significance level을 정한다.

2) 각각의 변수별로 Simple Linear Regression을 수행한다.
 : 이때 Simple Linear Regression이란 각 변수 하나만 놓고 단항으로 Linear Regression을 수행하라는 것이다.

3) 각 변수에 대한 p-value를 비교한 후, p-value가 가장 낮은 변수를 선정한다. 

4) 해당 변수를 놔둔 상태에서 나머지 변수들을 추가하면서 다시 학습을 시킨다. 이때 p-value가 SL보다 높을 경우 해당 과정을 종료한다.

 : 이때 종료한 상태는 이미 p-value가 높은 변수가 반영되어 있는 모델이므로 해당 변수를 학습시키기 이전 model을 선택한다.

5) 변수를 하나씩 추가하면서 다시 학습시키고 4번 과정을 수행한다.

 이름에 달려있는 내용과 같이 유의미한(Significant) 변수들을 하나씩 늘려가면서 모델을 만들어가는 방법이 이 Forward Selection이 되겠다.

마지막으로 수행하는 과정이 Bidiectional Elimination인데, 위에서 언급한 Backward Elimination과 Forward Selection이 합쳐진 방법이다.

1) 변수를 넣거나 제거할 때 boundary로 사용할 Significance level을 정한다. (SL_Enter, SL_Stay)

2) Forward Selection을 수행해서 변수를 선정한다.

3) Backward Selection을 수행해서 선정된 변수 중 유의미한 변수만 남기고 제거한다.
  그리고 2번 과정을 다시 수행한다.

4) 변수가 추가되거나 제거할 케이스가 없는 경우 종료

이렇게 Significant variable을 찾아 Model을 만드는 과정을 Stepwise Regression이라고 한다. 구글링을 해보면 조금더 자세한 설명도 찾을 수 있고, 위에서 소개한 것과 다른 방향으로 표현된 그림도 있을텐데, 큰 맥락은 학습시 불필요한 변수를 제거하고 조금더 유의미한 Model을 만들고자 함에서 비롯된 과정이다. 

이외에도 Akaike Criterion(AIC)와 같은 특정 Criterion을 정한 후 모든 변수별로 모델을 모두 만드는 방법도 있을 수 있겠지만.. 실용성이 없다( 예를 들어 변수가 10개가 있는 경우 2^10 -1 인 1023개의 model을 모두 만들어서 각각 criterion에 맞는지 여부를 확인해야 한다.

참고 : Machine Learning A-Z : Building A Model (Step-By-Step)

댓글