데이터를 분석하면 간혹 data type이 'object'로 표현되는 것들이 있습니다.

Object feature들은 numeric feature와 달리, 그대로 모델에 집어넣으면 에러가 발생합니다.
그렇다면 이 feature들을 어떻게 다루어야 할까요?
보통 Object Type Feature가 주어지면, 다음 방법 중 하나를 사용하여 학습 가능한 feature로 변환하곤 합니다:
- Label Encoding
- One-Hot Encoding
- Target Encoding
- Categorical Type으로 변환 (CatBoost 한정)
Label Encoding, One-Hot Encoding, 그리고 Target Encoding
Label Encoding이란, obejct type에서 unique value를 모은 후 이를 0 ~ n-1까지의 숫자로 라벨링을 하는 것입니다.
One-Hot Encoding이란, object type에서 모은 unique value를 각각 one-hot vecot방식으로 라벨링을 부여하는 것입니다.
Target Encoding이란, 데이터의 target 값을 object type의 unique 값을 기준으로 묶은 후 평균을 낸 값으로 라벨링을 한 것입니다. (평균 뿐만 아니라 최빈값, 중앙값 등 다른 대푯값으로 표현해도 무관합니다.)
가방 값을 예측하는 모델에서 Color Feature를 각 방법으로 인코딩해보겠습니다:
ID | Color | Price |
1 | Red | 100 |
2 | Green | 210 |
3 | Red | 120 |
4 | White | 60 |
5 | Blue | 140 |
6 | Blue | 110 |
7 | Red | 80 |
8 | Green | 250 |
9 | White | 20 |
10 | Green | 320 |
Color | Label Encoding | One-Hot Encoding | Target Encoding |
Red | 0 | 1000 | 100 |
Green | 1 | 0100 | 260 |
Blue | 2 | 0010 | 125 |
White | 3 | 0001 | 40 |
어떤 방법을 사용해야 할까?
각 방법은 저마다의 장단점을 갖고 있어, 모델을 만들 때는 데이터와 사용하는 학습 알고리즘의 특성을 고려하여 최적의 방법을 골라 사용할 필요가 있습니다.
장/단점
Label Encoding은 구현이 간단하지만, label 간의 거리가 Feature 간의 관계를 잘 표현하지 못한다는 치명적인 단점이 있습니다.
One-Hot Encoding은 구현이 간단하며, label 간의 거리가 일정하여 categorical 특성을 잘 표현할 수 있지만, 표현해야 할 범주가 많을수록 컴퓨터 연산에 부하를 준다는 단점이 있습니다.
Target Encoding은 label 간의 거리에 target과의 상관관계를 부여하여 모델 성능을 향상시키는 데에 큰 기여를 할 수 있지만, 과적합의 위험이 있습니다.
Label 간 거리가 갖는 의미
조금 더 자세히 설명해보겠습니다.
우리가 흔히 사용하는 머신러닝 모델은 숫자로 인코딩한 feature를 일반 numeric feature과 동일하게 처리합니다.
하지만 숫자는 크기나 순서를 내포하기 때문에, 이 경우 머신러닝 모델이 잘못된 관계를 학습할 가능성이 큽니다.
예시로 과일 종류를 Label Encoding 해보겠습니다.
Fruit | Label Encoding |
사과 | 0 |
바나나 | 1 |
포도 | 2 |
딸기 | 3 |
이렇게 Encoding 해버릴 경우, 모델은 이 순서에 특별한 의미가 있다고 판단하여 이를 학습하려고 할 것입니다.
과일의 크기가 사과 < 바나나 < 포도 < 딸기 순이라고 잘못 학습할 수도, 혹은 과일의 가격이 사과 < 바나나 < 포도 < 딸기 순이라고 잘못 학습할 수도 있는 거죠.
실제로는 아무런 의미가 없는, 단순 카테고리임에도요.
이러한 불상사를 방지하기 위해서는 각 category 간의 거리가 동일하도록 맵핑해야합니다.
수학에서는 이걸 등거리 분포 문제 (Equidstant Distribution Problem)이라고 부르는데요,
n개의 벡터에 대해 이 문제를 해결하기 위해선 최소 n차원에 벡터를 배치해야 한다고 알려져 있습니다.
※ 자세한 내용이 궁금하다면 정규 심플렉스 (Regular Simplex) 이론을 찾아보세요.
이 이론에 입각해 만들어진 방법이 One-Hot Encoding 입니다.
하지만 One-Hot Encoding은 두 가지 치명적인 단점이 있습니다.
첫 번째, 모든 Feature 간의 거리가 동일하여 만약 feature 간에 특별한 상관관계가 있을 경우, 그걸 표현할 수 없다는 단점이 있습니다.
두 번째, feature의 unique값이 하나 증가할 때 마다 한 차원씩 늘려야하기 때문에, unique값이 큰 feature에서는 컴퓨터 연산에 과부하를 줄 수 있습니다.
이를 차원의 저주 (curse of dimensionality)라고 부릅니다.
예를 들어보겠습니다.
'행정동' Feature를 one-hot encoding 하게 되면 단순히 0과 1만으로는 그 지역이 갖는 경제적, 사회적 특성이나 target feature와의 관계를 파악하기 어려워질 것입니다.
이러한 단점을 해결하기 위해 Target Encoding이 등장했습니다.
Target Encoding은 특정 범주값을 갖는 데이터에서 그 범주값을 가장 잘 표현하는 target의 통계량으로 feature encoding을 하는 방법입니다.
통계량은 평균, 최댓값, 최솟값, 최빈값, 중앙값, upper fence 등등.... 뭐든 괜찮습니다만, 보통 평균값을 가장 많이 사용합니다.
Target Encoding은 target을 사용해 직접 feature를 표현한 것인만큼 여러 장점이 있습니다.
첫 번째, label encoding에서 발생했던 무작위 순서에 의한 잘못된 관계 학습을 예방할 뿐만 아니라, 각 범주와 target값 사이 실제 관계를 적극 반영해줍니다.
두 번째, encoding 값이 유사한 것들끼리는 그룹핑 해주는 효과를 내, 노이즈를 어느정도 제거해줄 수도 있습니다.
세 번째, 차원의 저주가 해결되는 건 말할 것도 없고요.
그렇다면 과연 Target Encoding은 만능열쇠일까요?
그렇지 않습니다.
Target Encoding 역시 두 가지 치명적인 단점이 있습니다.
첫 번째, 과적합이 일어날 가능성이 상당히 높아집니다.
데이터 내에 샘플 수가 적은 범주의 경우, 그 범주의 target 대푯값이 우연히 노이즈에 큰 영향을 받은 값일 수 있습니다.
이 경우 그 범주는 신뢰할 수 없는 값으로 encoding되어 모델에 과적합을 일으킬 수 있습니다.
두 번째, 데이터 leakage 현상이 발생해 다른 feature의 영향력을 해칩니다.
다른 관점에서 보면 Target Encoding은 target값으로부터 나온 파생 feature입니다.
즉, feature에 target의 패턴이 어느정도 반영되는 셈입니다. 이렇게 되면, 모델이 실제로 predict해야하는 정보를 모델이 미리 학습하는 꼴이 될 수 있습니다.
이는 모델의 평가와 검증 결과의 신뢰도가 매우 떨어지는 결과를 초래할 수 있습니다.
쉽게 말해, 학생이 시험공부를 하는데 문제 푸는 방법을 공부하는게 아니라 문제집의 정답 분포만 보고 답을 찍는 모양새가 되는 겁니다.
학생이 아무리 문제집 모의고사에서 만점을 받는대도, 실제 시험에서 만점을 받을 지는 장담할 수 없을 거예요.
도움이 되었다면 하트 눌러주세요 :)
구독하시면 더 많은 데이터사이언스 정보와 대회풀이를 보실 수 있습니다!

'머신러닝 입문' 카테고리의 다른 글
[머신러닝 대회 입문] 머신러닝 Workflow: 머신러닝이란? 머신러닝 과정, 데이터 분석하기 (1) (1) | 2025.01.04 |
---|