티스토리 뷰

Study/AI

[ML] Multiple Linear Regression - Intuition

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

지난 포스트에서 다뤘던 simple Linear Regression과 다르게 Multiple Linear Regression은 Independent Variable(IV)가 여러개이다. 

 - Simple Linear Regression : y = b_0 + b_1 * x_1
 - Multiple Linear Regression : y = b_0 + b_1 * x_1 + b_2 * x_2 + ... + b_n * x_n

그렇기 때문에 지난번에 다뤘던 예제처럼 경력만으로 연봉이 결정되는 극단적인 케이스가 아닌, 여러가지 환경변수를 추가해서 결과에 미치는 영향을 파악할 수 있는 게 Multiple Linear Regression이다. 

위의 예제가 앞으로 다룰 예제인데, 여기서 우리는 Dependent Variable인 Profit을 예측하기 위해서 Independent Variable인 R&D Spend, Administration, Marketing Spend, State라는 요소를 고려한다. 위의 수식에다 그대로 대입해보면

Profit = b_0 + b_1 * R&D Spend + b_2 * Administration + b_3 * Marketing Spend + b_n * State

그런데 위의 변수중 State 변수는 다른 변수들과 다르게 String 형식으로 되어 있다. 사실 이 State에 정의되어 있는 값은 다른 수치값과 같이 높고 낮음이 정해져 있는 값이 아닌, 서로간을 구분짓기 위한 일종의 Label 형식의 변수들이다. 이런 데이터를 보통 Categorical Variable이라고 표현한다. 그리고 위에서 보다시피 String 형식으로 되어 있기 때문에 뭔가 학습을 시키기 위한 수치적 값으로 변환하는 작업이 필요하다. 이럴때는 일종의 Flag와 같이 Binary 변수를 두어 처리하는데 이때 이 변수를 Dummy Variable이라고 한다. 가령 위와 같이 State의 종류에는 New York과 California, Florida이렇게 3개로 나눠지면 Dummy Variable 3개로 위의 State를 표현할 수 있게 된다. 

 논리적으로 따지면 당연한 이야기이겠지만 위의 변수들은 중복되지 않는다. 즉 한 data가 New York이거나 California 일수 없다는 것이다. categorical variable을 표현하기 위해 만든 dummy variable 중 하나가 1이면 다른 dummy variable은 자연스럽게 0이 된다는 것이다. 맨 위의 예시에 그대로 반영하면 다음과 같이 된다.

여기까지 생각하면 어떤 사람은 딱 이런 생각이 들 수 있다. '굳이 dummy variable을 3개 쓸 필요가 있을까?'
 사실 New york이 1 이면 New york인 것이고, California가 1이면 California인 것이다. 그러면 florida는 당연히 Florida가 1일때가 정상적인 논리이겠지만, 반대로 생각해서 New york도 0이고, California도 0일때도 Florida라고 표현할 수 있지 않을까? 이런식으로 생각해보면 결국 Dummy variable도 굳이 Categorical Variable을 모두 표현하기 위해서 해당 category 만큼 필요한게 아니라는 의미가 된다. 

 이렇게 바라본 것은 직관적인 이야기이지만, 이런식으로 dummy variable을 줄이려고 하는 것은 바로 Dummy Variable Trap 이라는 현상을 줄이기 위해서이다. 내가 이 현상을 이해한 내용으로는 비슷한 성격의 변수를 학습에 포함시킬 경우, 학습된 결과에 잘못된 영향을 줄 수 있다는 것으로 받아들였는데, 앞에서도 말한 것처럼 florida라는 변수가 1이라는 의미와 New york이 0이고 California가 0인 의미가 중첩된다. 이 두 변수를 모두 우리가 지금 다루는 Regression으로 학습을 시킬 경우,해당 영향이 결과에 과도하게 미칠 수 있다는 것으로 이해하면 될 것 같다. 다시 말해 위의 의미가 중첩되는 변수 중 하나는 우리가 맨앞에서 다뤘던 Multiple Linear Regression 수식 중 제일 앞에 있는 b_0, 즉 상수라고 생각하고 나머지 dummy variable에 대해서만 계산에 반영하자는 것이다. 그러면 이런 내용을 전부 반영한 전체 수식은 다음과 같을 것이다.

Profit = b_0 + b_1 * R&D Spend + b_2 * Administration + b_3 * Marketing Spend + b_4 * P_newyork + b_5 * P_california
(P_florida는 b_0에 포함됨)

 그래서 보통 categorical variable이 포함된 dataset을 학습시킬 때, 생성되는 dummy variable은 일반적으로 전체 category 갯수에서 하나가 빠진 형태가 된다. 
(이걸 수학적으로 표현한 내용이 Multicollinearity 인것 같은데, 지식이 짧아서;;)

그런데 사실 실제로 코딩을 할때는 이런 부분을 고려하지 않아도 된다. 뭔가 내부를 직접 구현하는 사람이라면 모르겠지만, 뭔가 실무에 적용하기 위해 위의 Encoding 과정이 구현된 API를 쓰고 싶다. 그냥 scikit-learn에 구현되어 있는 LabelEncoder와 OneHotEncoder를 사용하면 된다. 이걸 사용하면 굳이 dummy variable trap을 고려해서 하나 빼고 그런 생각을 할 필요없이 알아서 다 해준다. 

- 참고 : Machine Learning A-Z : Multiple Linear Regression - Intuition

댓글