Catboost

Jaykang·2022년 1월 16일
0

CatBoost는 gradient boosting 기반의 알고리즘이다. XGBoost, Light GBM과 함께 머신러닝 모델의 base로 많이 활용되며 성능도 좋은 편이다. catboost는 이름에서도 유추할 수 있게 categorical 변수들이 많을 때 좋은 성능을 보인다. 그리고 다른 부스팅 모델들보다 gpu사용하는게 간편해서 개인적으로 선호한다.

다른 gradient boosting 알고리즘과 다르게 하이퍼 파라미터를 튜닝하는데 민감하지 않은 로버스트한 모델이라고 한다. 딥러닝 모델들이 많은 task에서 좋은 성능을 내지만 hyper parameter를 튜닝하는건 정말 어렵고 오랜 시간동안 고생하면서 훈련을 시켰는데 성능향상이 엄청나지 않으면 비효율적이고 다른 사람들을 설득시키기 어려울 것 같다는 생각을 매번 한다.

그래서 머신러닝 모델들이 현업에서 많이 쓰이고 중요하다고 생각한다.

XGBoost, Light GBM

다른 부스팅 알고리즘들은 다음과 같은 순서로 구현된다.

1. 편향된 모델을 학습하기 위해서 모든 데이터를 고려
2. 각각의 데이터에 대해서 residual(error)를 계산
3. residual(error)를 target 값으로 데이터를 학습시킨다
4. 2, 3번을 반복

Catboost

다른 부스팅 모델들과 CatBoost의 차이점은 대칭 구조로 트리를 구현할 수 있어서 시간 효율성이 좋다는 것이다. CatBoost는 다음과 같은 순서로 구현된다.

1. 이전 시점까지 데이터로 훈련된 모델을 이용해서 각각의 데이터에 대한
residual을 계산한다.(5번째 순서의 데이터라면 4번째 까지 데이터를 이용하여)
다른 데이터에 대해서는 각각 다른 모델을 이용해서 residual을 계산하고
관찰되지 않은 데이터들을 이용해서 residual을 계산한다(t번째 데이터면 t-1개의 데이터로)

2. 각각의 데이터의 residual을 class값으로 설정하고 모델을 훈련
3. 1, 2번을 반복

효율성을 고려해서인지 n개의 데이터로 학습한 겨우는 다음 n개의 데이터에 대한 잔차를 계산하는데 사용된다고 한다.(1,2,3,4로 학습했으면 5,6,7,8 잔차구하는데 사용) 이러한 과정을 ordered boosting이라고 부른다.

catboost는 random하게 데이터 셋을 나눠서 오버피팅을 방지한다고 한다.
그리고 catboost는 이름에서 알 수 있듯이 categorical 변수들이 있을 때 성능이 좋은 편인데 그이유는 encoding에 있다고 한다. target encoding이라고 불리는 기법으로 categorical 변수들을 잘 표현해서 성능이 좋은 편이라고 한다. 범주형 변수들의 target값의 평균을 이용해서 encoding하는 방식이다. 하지만 알고리즘 구조자체가 이전 시점의 데이터만 사용하고 자기 자신을 활용하지 않기 때문에 overfitting문제나 data leakage문제를 방지할 수 있다.

f1 target
A    1
A    1
B    1
A    0
B    1
A    1
A    1

예를 들어 이런식으로 데이터가 있다면 4번째 index의 A는 (1+1) / 2 = 1로 encoding 된다. 마지막 A같은 경우는 (1+1+0+1) / 4 = 0.75로 encoding된다.

그리고 CatBoost는 자동으로 연관성이 있는 categorical 변수들을 처리해준다고 한다. 대학교 / 위치 이렇게 변수가 존재하면 묶어서 처리를 해주는 방식이라고 한다. 항상 묶는 것은 아니고 최적의 조합을 찾기 위해서 노력을 한다고 한다.

Numeric 변수들을 처리하는 방식은 다른 boosting 알고리즘들과 차이가 없다고한다. 그래서 Numeric 변수들이 많고 categorical 변수들이 별로 없다면 느리고 성능면에서도 이점이 없다고 한다. 그래도 XGBoost보다는 빠를 것 같다.

또 한가지 장점은 하이퍼파라미터에 덜 민감하단 것이다. 실제로 튜닝하는 과정은 귀찮고 시간도 오래걸린다. 그에비해서 성능향상이 드라마틱하게 되는 경우는 아직까지는 못 봤다. 딥러닝 모델에서는 잘 되는 편이지만 머신러닝 모델에서는 아직 경험해보지 못 했다. 그래서 하이퍼 파라미터에 로버스트 한 것은 정말 큰 장점이라고 생각한다.

이러한 점 때문에 정말 괜찮은 모델이라 생각했고 현업에서도 많이 쓰이거나 base model로 라도 많이 활용되지 않을까 생각한다.

profile
Just Do

0개의 댓글