본문 바로가기
스터디/머신러닝

Catboost란?

by ag_zero 2022. 7. 21.
728x90

기존의 부스팅 기법

기존 부스팅 기법 동작
1. 실제 값들의 평균과 실제 값의 차이인 잔차(Residual)를 구한다.
2. 데이터로 이 잔차들을 학습하는 모델을 만든다.
3. 만든 모델로 예측하여, 예측 값에 Learning_rate를 곱해 실제 예측 값(평균 + 잔차 예측 값*lr) 을 업데이트한다.
4. 1~3 반복

 

 

문제점

1) 느린 학습 속도

배깅과 비교했을 때, 훨씬 느린 속도를 보인다.

배깅의 경우 여러 트리들이 병렬적으로 모델 학습을 수행하고 부스팅의 경우 순차적으로 모델 학습을 수행해나가니, 당연히 부스팅이 느릴 수밖에 없다.

 

 

2) 오버피팅

속도 문제는, 샘플링이나 알고리즘 최적화로 어느 정도 개선이 되었다면, 다음 진짜 문제는 오버 피팅이다.

부스팅이라는 개념 자체가 가지고 있는 문제인데, 위에서 설명한 부스팅 과정만 보더라도 왜 오버 피팅이 일어나는지 알 수 있다.
애초에 부스팅 자체가 '잔차'를 줄여나가기 위해 학습하는 모델이기 때문에 굉장히 High Variance 한 모델일 수밖에 없다.
그래서 새롭게 나오는 부스팅 모델들의 대부분은 이 오버 피팅을 해결하기 위한 기법들을 알고리즘에 포함시킨다.

 

 

 

Catboost의 특징

Level-wise Tree

XGBoost 와 더불어 Catboost 는 Level-wise 로 트리를 만들어나간다. (반면 Light GBM 은 Leaf-wise)

Level-wise 와 Leaf-wise 의 차이
Level-wise : BFS 같이 트리를 만들어나가는 형태
Leaf-wise : DFS 같이 트리를 만들어나가는 형태
물론 max_depth = -1 이면 둘은 같은 형태지만, 대부분의 부스팅 모델에서의 트리는 max_depth != -1 이기 때문에 이 둘을 구분할 수 있다.

Orderd Boosting

기존의 부스팅 모델이 일괄적으로 모든 훈련 데이터를 대상으로 잔차 계산을 했다면, Catboost는 일부만 가지고 잔차 계산을 한 뒤, 이걸로 모델을 만들고, 그 뒤에 데이터의 잔차는 이 모델로 예측한 값을 사용한다.

 

catboost 부스팅 기법 동작
1. CatBoost가 x5에 대한 잔차를 계산하기 위해 x1, x2, x3, x4 데이터를 활용해 학습을 시켜 모델을 만든다.
2. 학습한 모델을 가지고 x6에 대해 class label을 예측한다.
3. Step 1 ~ 2번을 반복한다. 예를 들어 x6에 대한 잔차를 계산하기 위해 x1, x2, x3, x4, x5 데이터를 활용해 학습을 시켜 모델을 만들고 x7에 대한 class label을 예측한다. 이러한 과정을 모든 데이터 포인트에 대해 반복한다.

Random Permutation

Ordered Boosting을 할 때, 데이터 순서를 섞어주지 않으면 매번 같은 순서대로 잔차를 예측하는 모델을 만들 가능성이 있다. 이 순서는 사실 우리가 임의로 정한 것임으로, 순서 역시 매번 섞어줘야 한다.

Catboost는 이러한 것 역시 감안해서 데이터를 셔플링하여 뽑아낸다. 뽑아낼 때도 역시 모든 데이터를 뽑는 게 아니라, 그중 일부만 가져오게 할 수 있다. 이 모든 기법이 다 오버 피팅 방지를 위해, 트리를 다각적으로 만들려는 시도이다.

 

Ordered Target Encoding

Target Encoding( = Mean Encoding =  Response Encoding)이라고 불리는 기법 (3개 다 같은 방법)을 사용한다.
범주형 변수를 수로 인코딩 시키는 방법 중, 비교적 가장 최근에 나온 기법인데, 간단한 설명을 하면 다음과 같다.

 

위 데이터에서 time, feature1으로 class_label을 예측해야 한다고 해보자.
feature1 의 cloudy는 다음과 같이 인코딩할 수 있다.

cloudy = (15 +14 +20 + 25)/4 = 18.5

즉, cloudy를 cloudy 를 가진 데이터들의 class_label의 값의 평균으로 인코딩하는 것이다.
이 때문에 Mean encoding이라 불리기도 한다.

 

그런데 위는 우리가 예측해야 하는 값이 훈련 셋 피처에 들어가 버리는 문제, 즉 Data Leakage 문제를 일으킨다. 이는 오버 피팅을 일으키는 주원인이자, Mean encoding 방법 자체의 문제이기도 하다.

 

그래서, Catboost는 이에 대한 해결책으로, 현재 데이터의 인코딩하기 위해 이전 데이터들의 인코딩 된 값을 사용한다.

- Friday 에는, cloudy = (15+14)/2 = 15.5로 인코딩 된다.

- Saturday 에는, cloudy = (15+14+20)/3 = 16.3로 인코딩 된다.

즉, 현재 데이터의 타깃 값을 사용하지 않고, 이전 데이터들의 타겟 값만을 사용하니, Data Leakage 가 일어나지 않는다.

 

 

Categorical Feauture Combinations

범주형 변수를 항상 Target Encoding 하는 것은 아니다. Catboost는 낮은 Cardinality 를 가지는 범주형 변수에 한해서, 기본적으로 One-hot encoding 을 시행한다. 

 

Optimized Parameter tuning

Catboost 는 기본 파라미터가 기본적으로 최적화가 잘 되어있어서, 파라미터 튜닝에 크게 신경 쓰지 않아도 된다고 한다. (반면 xgboost 나 light gbm 은 파라미터 튜닝에 매우 민감하다.)

 

Catboost의 한계

다음과 같은 한계를 지닌다.

  • Sparse Matrix 즉, 결측치가 매우 많은 데이터셋에는 부적합한 모델
     예를 들어, 추천 시스템에 자주 사용되는 사용자-아이템 행렬 데이터를 살펴보면 보통 Sparse 한 형태로 이루어져 있다. 만약 이러한 데이터를 활용하려면 Sparse한 특성이 없도록 Embedding을 적용한다던지 등 데이터를 변형한 후 CatBoost에 활용하는 것이 적합할 것이다
  • 데이터 대부분이 수치형 변수인 경우, Light GBM 보다 학습 속도가 느리다. ( 범주형 변수가 많을 때 적합한 알고리즘이라는 의미로 CatBoost의 Cat이 Categorical의 Cat이 아닐까 한다)