본문 바로가기

머신러닝, 딥러닝

트리 모델에서 Ordinal 대신 Nominal 인코딩을 해야 하나?

A : 트리 모델에서는 Nominal 특성을 가진 범주에도 Ordinal 인코딩을 해도 된다.

 

트리 모델에서는 지니 불순도를 낮추는 특성이 중요하게 여겨져, 트리 모델의 상위 노드에서 분할이 일어난다. 

만약 트리 모델에서 원핫 인코딩을 하면 cardinality가 높은 범주형 특성들이 상위 특성에서 선택될 가능성이 줄어든다.

미국의 50개 주를 담은 States라는 feature가 있으면, 원핫 인코딩 시 State_NY, State_WT... 등 50개의 feature로 쪼개지기 때문이다. 그래서 State_NY인가? 하는 노드에는 이진형인 0,1 만의 답이 있고, 그러한 feature가 50개다보니 States를 원핫 인코딩을 하고 트리 모델에 넣을 경우

다음과 같은 분포를 보일 수밖에 없다. 트리가 한 방향으로만 자라게 된다. 출처 https://towardsdatascience.com/one-hot-encoding-is-making-your-tree-based-ensembles-worse-heres-why-d64b282b5769

하지만 Ordinal 인코딩을 하면 cardinality가 높은 범주형 특성들이 중요하게 분류된다.

 

또한, Ordinal 인코딩을 통해 순위가 없는 Nominal 특성을

여자 : 1, 남자 : 2
주거 형태 - 주택 소유 : 1, 임대 : 2

등으로 분류해버리면 인코딩 시 순서적인 정보가 들어가게 된다.

하지만, 트리 모델에서는 노드를 나눌 때 각 옵션(여자, 남자 / 주택 소유, 임대, 미소유)들을 다 고려하여, 특정 옵션에 가중치를 주지 않기 때문에 (여자 : 1, 남자 : 2 / 주거 형태 - 주택 소유 : 1, 임대 : 2순서적인 정보가 상관이 없어지게 된다.

트리 모델에서는 남자가 2로 인코딩 되었다고 1로 인코딩 된 여자보다 2배의 중요도를 가지지 않는다.

하지만 항상 그런 건 아니니 주의하자. 

일부 모델은 수치 및 범주형 변수에 서로 다른 논리를 적용하므로, 사용 중인 라이브러리에 대해 범주형 변수를 적절하게 인코딩하는 것이 가장 좋다고 한다.

출처 https://stackoverflow.com/questions/45139834/why-tree-based-model-do-not-need-one-hot-encoding-for-nominal-data

 

...