CatBoost
오늘은 분류 모델 catBoost 알고리즘에 대해 간단하게 리뷰해보려고 한다.
CatBoost는 범주형 변수로 이루어진 데이터셋에서 예측성능이 우수한 것으로 알려져있다.
CatBoost는 이름에서 알 수 있듯 Boosting방식에 기반한 알고리즘이다.
Boosting방식은 약한 분류기를 결합하여 강한 분류기를 만드는 알고리즘 인데, boosting알고리즘은 bias를 작게 만드는
장점을 가지고 있다.
하지만 머신러닝에서는 bias-variance Tradeoff가 존재하기 때문에 bias를 작게 하면 그만큼 variance가 커지게 되어
오버피팅이 발생하게 된다.
그렇다면 catboost는 어떻게 boosting의 장점을 가져가면서 오버피팅을 방지할까?
살펴보자!
CatBoost 알고리즘의 특징
1) 특이한 Categorical feature(범주형 변수) 처리의 특징
catboost는 다른 boosting기반 알고리즘과 달리 범주형 변수를 특별하게 처리한다.
예를들어 데이터가 다음과 같다고 가정해보자
Country | Eye color |
Korea | Black |
Korea | Black |
Korea | Black |
Norway | Blue |
Norway | Blue |
Norway | Blue |
Country에는 Korea와 Norway가 잇고 Eye Color에는 Black과 Blue가 있다.
그런데 이 데이터는 Korea일 때, 항상 Eye color가 Black이고 Norway일 때, Eye color가 Blue인 것을 알 수 있다.
이러한 경우에는 Country와 Eye color를 모두 사용할 필요 없이, 둘 중 한 변수만을 사용해도 된다.
CatBoost는 이 과정을 알아서 진행한다.
같은 패턴의 데이터가 주어진 경우 모델링에 사용한 변수를 하나만 선택하는 것이다.
2) Ordered Target Encoding
Weekday | Weather | Target |
Tues | Cloudy | 15 |
Wed | Cloudy | 14 |
Thurs | Sunny | 10 |
Fri | Cloudy | 20 |
Sun | Cloudy | 25 |
CatBoost는 범주형 변수를 그대로 모델에 넣어주면 알아서 Ordered Target Encoding을 진행한다.
Ordered Target Encoding은 말 그대로 Target Encoding의 아이디어를 가져온 것이다.
위의 데이터를 봤을 때, 일반적인 Target Encoding을 사용한다면 Cloudy를 feature로 가진 데이터의 featrue값은
(15+14+20+25)/4 = 18.5가 될 것이고, sunny는 10이 될 것이다.
하지만 여기에는 문제점이 있는데, 우리가 예측해야 할 Target의 정보도 포함이 되어있어 Target leakage문제가 발생할 수 있는 것이다.
따라서 CatBoost에서는 Target leakage 를 방지하기 위해 Target Encoding대신 Ordered Target Statistic을 사용한다.
Ordered Target Statistic의 수식은 다음과 같다.
예시를 봐보자
다음은 permutation을 통해 섞어 놓은 데이터를 표로 나타낸 것이다.
이 데이터들의 순서를 지정해놓고 현재 시점 이전에 같은 feature를 가진 데이터는 feature를 encoding할 때 참고하는 것이다.
위의 값을 예측할 때 현재 인코딩 해야하는 데이터를 제외한 이전시점의 데이터 셋을 D라고 하고 여기서 같은 feature를 가진 데이터의 개수 * y값 + ap를 같은 feature를 가진 데이터의 개수 * y값 + a로 나눠준 값으로 인코딩한다.
전체 과정을 표현하면 다음과 같다. (OTS표시)
1. Input: 범주형 feature가 포함된 데이터셋
2. 사전 처리
2-1. 데이터에 대한 여러 permutation 생성
2-2. 각 permutation에서 Ordered Target Encoding 수행 ← ✅ 여기!
3. 학습 반복 (m=1 to M)
3-1. 잔차(gradient) 계산
3-2. Oblivious Tree 구조로 새로운 weak learner 학습
3-3. 예측값 업데이트: F_m(x) = F_{m-1}(x) + η * h_m(x)
4. 최종 모델은 weak learner들의 앙상블
이렇게 만들어진 OTS 데이터셋으로 첫번째 tree를 만든 뒤 이후에는 residual에 기반한 트리를 만들어서
GBDT과정을 진행하는 것이다!
xgboost에 비해 catboost가 카테고리컬 변수 처리에 유리한 이유는
xgboost는 카테고리컬 변수를 Label Encoding하거나 One-Hot Encoding하는 반면, Catboost는 카테고리컬 변수를 OTS를 이용하여 Encoding하기 때문에 성능측면에서 더 유리하다. (target과의 관계로 encoding했기 때문)
Oblivious Tree = 대칭 트리 (Symmetric Decision Tree)
→ 트리 구조가 모든 경로에서 동일한 feature + 동일한 조건 순서로 split되는 결정 트리