CatBoost는 이름에서 알 수 있 듯 Categorical 변수에 특화된 모델입니다.
왜 범주형 변수를 잘 처리하는지, 그 전 GBDT 모델들과는 뭐가 다른지에 대해 정리해보려 합니다.
CatBoost를 구성하는 키워드는 크게 3가지입니다.
Orderded Boosting, Ordered Target Encoding, Feature Combination
1. Ordered Boosting
CatBoost은 다른 GBDT모델과 다르게 전체 데이터를 사용하지 않고, 순서대로 데이터를 늘려가며 사용합니다.
먼저 동일한 순서대로 학습하지 않도록 데이터를 섞어서 사용합니다. ( 오버피팅을 방지하기 위해서 )
그리고 순서대로 데이터를 이용합니다.
1. 첫번째 데이터의 잔차를 이용해 학습한다.
2. 학습된 모델로 다음 데이터를 예측한 후 잔차를 구한다.
3. 앞의 두 개의 잔차를 이용해 학습한 후, 다음 데이터의 잔차를 구한다.
이 과정을 반복하며 학습을 이어나가게 됩니다.
이는 계속해서 같은 데이터셋을 가지고 학습하는 기존의 GBDT의 오버피팅 문제를 해결하기 위해서 입니다.
데이터도 섞고, 순서대로 사용하여 다양한 트리를 만들려는 방법이라고 이해할 수 있습니다.
2. Ordered Target Encoding
Target Encoding, Mean Encoding, Response Encoding 와 같이 다양하게 불리는 방법은,
target의 값을 이용해 categorical feature를 encoding 시키는 기법입니다.
그림 2와 같은 데이터셋이 있을 때 sunny, cloudy, mostly_cloudy는 다음과 같이 인코딩할 수 있습니다.
- sunny -> ( 35 + 32 ) / 2
- cloudy -> ( 15 + 14 + 20 + 25 ) / 4
- mostly_cloudy -> 10 / 1
다만 이는 target 값을 사용한다는 점에서 data leakage 문제를 유발하고, 이는 오버피팅으로 이어집니다.
이를 해결하기 위해 순서를 이용합니다.
즉 order boosting 과정에서 그 전에 사용한 데이터의 값을 이용합니다.
그 예로 time이 fri인 cloudy의 경우, (15 + 14) / 2로 인코딩되고,
time이 sat인 cloudy의 경우 ( 15 + 14 + 20 ) 3으로 인코딩됩니다.
이 때 한 가지 의문점이 생깁니다. 맨 처음에 있는 값은 어떻게 정하지?
이를 해결하기 위해 prior이라는 값을 정하고 가중지 a를 정해 인코딩 값을 변화시켜간다
이때 prior의 최적을 구하기 위해서 다른 트리들을 이용해 얻는다고 합니다.
이를 Laplace smooting 방법이라고 합니다. ( 저도 이 부분은 잘 모르겠습니다.)
이 방법을 통해 범주형 데이터를 좀 더 효율적으로 처리할 수 있다고 합니다.
( 실제로 모델 안에서 처리할 때 속도가 증가하고, 피처의 수가 증가하지 않으며, 과거 타겟의 정보를 가지고 피처를 생성할 수 있다는 점에서 )
3. Categorical Feature Combinations
마지막으로 CatBoost는 상관관계가 있는 피처들은 하나로 묶어 처리한다고 합니다.
그림3을 보면 country-haircolor는 높은 상관관계를 보임을 알 수 있습니다.
이를 무시하고 수치화한다면, 이런 정보를 무시하게 됩니다.
따라서 CatBoost는 두 변수를 조합해 새로운 변수를 만들게 됩니다.
조합하는 방식은 greedy한 방식으로 다양한 조합을 시도하며 최적의 조합을 찾는다고 합니다.
앞서 언급했듯 이를 통해 범주형 변수간에 상관관계를 고려할 수 있고, 피처를 좀 더 효율적으로 처리할 수 있습니다.
4. 정리
- 장단점
장점
- 범주형 처리에 유리하다.
- 시계열 데이터를 효율적으로 처리한다.
- 빠르다.
- 파라미터 세팅에 둔감하다.
단점
- sparse matrix는 처리하지 못한다.
- 대부분 수치형 변수인 경우 LGBM보다 느리다.
이름처럼 Categorical 변수에 LightGBM이나 XGBoost보다 뛰어난 성능을 보일 것이라고 예측됩니다.
그 이유를 범주형 변수를 인코딩하는 방식에서 찾아볼 수 있습니다.
Ordered Target Encoding 방식으로 과거의 타겟변수의 값을 반영하고
Categorical Feature Combination 방식으로 피처 간의 상관관계를 고려해 인코딩할 수 있습니다.
다만 수치형 변수가 많을 경우 속도가 느려지는 단점이 있으니, 대부분의 피처가 범주형일 때 적용해볼 법한 모델이라고 생각합니다.
Reference
- https://julie-tech.tistory.com/119
- https://dailyheumsi.tistory.com/136
- https://gentlej90.tistory.com/100
출처
- 그림 1: https://www.google.com/imgres?imgurl=https%3A%2F%2Fdrek4537l1klr.cloudfront.net%2Fkunapuli%2Fv-5%2FFigures%2F08image010.png&tbnid=QXnOa2WM4bgKJM&vet=12ahUKEwiAwYzVpLOAAxXlm1YBHVBIC0kQMygLegUIARDXAQ..i&imgrefurl=https%3A%2F%2Flivebook.manning.com%2Fbook%2Fensemble-methods-for-machine-learning%2Fchapter-8%2Fv-5%2F&docid=iGClaRBxtnKKCM&w=1147&h=370&itg=1&q=ordered%20boosting&ved=2ahUKEwiAwYzVpLOAAxXlm1YBHVBIC0kQMygLegUIARDXAQ
- 그림2 :
'DataScience > MachineLearning' 카테고리의 다른 글
[eXplainable Method] 필요한 이유, Local vs Global Feature Importance Score (0) | 2023.07.30 |
---|---|
[유사도지표] Gaussian kernel (0) | 2023.07.30 |
[트리계열 이해하기] 6. LightGBM (0) | 2023.07.29 |
[트리계열 이해하기] 5. XGBoost (0) | 2023.07.29 |
[트리계열 이해하기] 4. GBM (0) | 2023.07.29 |
댓글