이번 포스팅은 Boosting 알고리즘의 마지막 주제인 CatBoost에 대해 알아보겠습니다. 가장 최근 알고리즘이기 때문에 개인적으로 기대가 컸습니다. 결과부터 말하자면 실제 알고리즘 비교 테스트를 해 본 결과 일반적인 데이터에서는 성능이 좋지 않았습니다. CatBoost 알고리즘의 경우 논문에서 말하는 것처럼 categorical 피처에서만 사용하는이 좋아 보입니다.
CatBoost
CatBoost는 처음 "CatBoost: unbiased boosting with categorical features"라는 논문으로 알려졌습니다. Yandex에서 개발한 머신러닝 라이브러리 중 하나입니다. Yandex는 러시아의 대표적인 IT 기업 중 하나로, 다양한 인터넷 서비스 및 소프트웨어를 개발하는 회사입니다.
앞에서 포스팅한 LightGBM(LGBM)은 DFS(depth-first-search, 깊이 우선 탐색)라고 해서 트리를 우선적으로 깊게 형성하는 방식을 취하며, XGBoost는 BFS(breadth-first-search, 너비 우선 탐색)로 우선적으로 넓게 트리를 형성하는 방식입니다.
CatBoost도 XGBoost처럼 BFS 방식 즉, Level-wise 방식으로 트리를 형성하나 Feature를 모두 동일하게 대칭적인 트리 구조를 구성합니다. 이런 Symmetric Binary Tree 구조 방식을 취함으로써 예측 시간을 감소시킬 수 있었습니다.
두가지 문제 제기
- Prediction Shift : Training과 Test 데이터셋의 output의 분포에 차이가 생기게 되고 오버피팅이 발생 => Ordered Boosting 방법을 사용
- Target Leakage(타겟 누수) : Test 데이터셋의 피처를 계산하는데 Target 밸류를 사용함으로써 타겟 누수가 생김 => Ordered Target Encoding 사용, 여기서 Target Leakage란 타겟(예측 값)의 정보를 일부 사용함으로써 예측 정확도에 좋지 않는 영향을 미치는 현상을 말함
Ordered Boosting
기존의 부스팅 모델은 모든 훈련 데이터 전체 잔차계산을 하게되어 Overfitting이 발생했습니다. Catboost 알고리즘은 일부만 가지고 잔차계산을 한 뒤, 모델을 생성합니다. 그리고 잔차는 이 모델로 예측한 값을 사용합니다. 순서에 따라 모델을 만들고 예측하는 방식입니다. (순열 기반)
- x1의 잔차 모델 학습 → x2의 잔차 예측
- x1, x2 의 잔차 모델 학습 → x3, x4 의 잔차를 예측
- x1, x2, x3, x4 의 잔차로 모델 학습 → x5, x6, x7, x8 의 잔차를 예측
- 1~3 반복
Ordered Target Encoding
Target 값이 train set 피처에 들어가버리는 문제가 있습니다. 즉 Target Leakage 문제 해결을 위해 인코딩을 한다는 의미입니다.
- cloudy = (15 +14 +20 + 25)/4 = 18.5 ← 전체(빨간색 전체 4개)
- Friday 에는, cloudy = (15+14)/2 = 15.5 ← 앞 2개만(파란색 점선 네모)
- Saturday 에는, cloudy = (15+14+20)/3 = 16.3 ← 앞 3개만(빨간색 앞에 3개)
결론적으로 현재 데이터의 타겟 값을 사용하지 않고, 이전 데이터들의 타겟 값만을 사용하니, Target Leakage 가 일어나지 않는 것입니다.
장점
- Catboost는 다른 GBM에 비해 상대적으로 Overfitting이 적습니다.
- 범주형 변수 자동 전처리(Categorical Feauture Combinations)가 됩니다.
- 범주형 변수에 대해 특정 인코딩 방식으로 인하여 모델의 정확도와 속도가 좋습니다.(예측 성능 높여줌)
- One-hot Encoding, Label Encoding 등 encoding 작업을 하지 않고도 그대로 모델의 input으로 사용할 수 있습니다.(내부적 처리 알고리즘 존재)
- 시계열 데이터 효율적 처리합니다.(XGBoost 8배 빠름)
단점
- 결측 데이터(Missing data)를 처리해주지 않습니다.(XGBoost, LightGBM은 처리함)
- Sparse Matrix 처리불가 즉, 결측치가 많은 데이터셋에는 부적합한 모델입니다.
- 예를 들어, 추천시스템에 자주 사용되는 사용자-아이템 행렬 데이터를 살펴보면 보통 Sparse한 형태로 이루어져 있음
- 만약 이러한 데이터를 활용하려면 Sparse한 특성이 없도록 Embedding을 적용한다던지 등 데이터를 변형한 후 CatBoost에 활용하는 것이 적합함
- 데이터 대부분이 수치형 변수인 경우, LightGBM(LGBM)보다 학습 속도가 느립니다.
- 대부분이 범주형 변수인 경우 사용하는 것을 추천합니다.
- 아직 검증이 많이되지 않는 알고리즘입니다.
하이퍼파라미터 튜닝
Catboost는 하이퍼파라미터(hp) 튜닝에 크게 신경쓰지 않아도 됩니다. 부스팅 모델들이 파라미터 튜닝하는 이유는 트리의 다형성과 오버피팅 문제를 해결하기 위해서 입니다. CatBoost는 이를 내부적인 알고리즘으로 해결하고 있습니다. 굳이 한다면 learning_rate, random_strength, L2_regulariser과 같은 파라미터 튜닝이 가능합니다. 실제 테스트를 진행 본 결과는 큰 차이가 없다고 알려 있습니다.
XGBoost vs LightGBM vs CatBoost
- 정확도 측면에서는 3개의 알고리즘이 비슷한 성능을 보여줌
- Training Time에서 LightGBM, Catboost가 좋음
- Prediction Time은 Catboost가 월등히 좋음
- 파라미터 튜닝 시간도 Catboost가 좋음
'데이터 분석' 카테고리의 다른 글
[머신러닝] Feature Selection 방법 - Filter, Wrapper, Embedded (0) | 2023.10.06 |
---|---|
[머신러닝] 차원 축소(Dimensionality Reduction) 이유 및 방법 (0) | 2023.10.06 |
Boosting 알고리즘 - Light GBM 특징(GOSS, EFB, 장단점) (2) | 2023.10.04 |
Boosting 알고리즘 - GBM(Gradient Boosting) 특징과 동작 원리 (0) | 2023.09.25 |
Boosting 알고리즘 - Adaboost 동작 원리 (0) | 2023.09.24 |