기존 Gradient Boosting 방법의 문제점
1. Target Leakage
Target Leakage란 범주형 변수에서 범주형 값을 수치로 바꿔서 모델링하는데 수치로 바꾸는 과정에서 target value가 포함이 되어버리는 것이다. 즉, 학습할 데이터에 정답이 사용이 되어버려 학습 데이터에서는 잘 맞지만 나중 테스트 데이터에서 예측값에 문제가 나오는 것
학습 과정에서 미리 target(정답)이 유출되어 버려 Target Leakage라고 한다.
다음 예를 보자.

범주 A는 A에 대응되는 y값(target값)의 평균인데 위 표에서는 가 된다. 마찬가지로 B는 , C는 이다.
(참고로 범주형 데이터에서 값을 수치로 바꾸는데 target의 평균값을 많이 쓴다고 한다.)
범주형 변수의 값을 수치로 바꿀 때 target의 평균을 사용한다는 것 자체가 이미 feature의 값에 target값이 포함이 되었다는 것이다.
2. Prediction Shift

학습 데이터(training data)가 많이 쌓일 수록 실제 test data와 결과가 유사하게 나와야 하는데, 실제 돌려보니 그렇지 못하고 학습 데이터에 대한 조건부 확률(확률 분포)과 테스트 데이터에 대한 조건부 확률(확률 분포)이 다르게 나옴
기존의 문제점을 해결하기 위한 대안
- Target Leakage -> Ordered Target Statistics
- Prediction Shift -> Ordered Boosting
1. Ordered Target Statistics
범주형 변수를 수치로 바꾸는 방법론과 Target Leakage가 나오는 이유, 그리고 Ordered Target Statistics를 설명한다.
one-hot encoding
처음에는 one-hot encoding으로 접근했으나 이렇게 하면 feature의 수가 늘어나는 문제점이 있다.
group categories by target statistics
같은 범주끼리 묶어서 target값의 통계값(평균, 분산 등)을 공통으로 적용한다. 이 방법은 앞에서도 말했듯이 'Target Leakage'가 발생한다.
이 방법에는 smoothing 기법도 같이 적용하는데 다음의 예를 보면
| y=1 | y=0 | maen(TS) | |
| A | 10 | 10 | 0.5 |
| B | 40 | 10 | 0.8 |
| C | 10 | 40 | 0.2 |
| D | 25 | 25 | 0.5 |
| E | 1 | 0 | 1 |
범주 E의 경우 단 1개만 있는데도 불구하고 값이 1로 할당이 된다. 이렇게 이상치(noise)의 영향을 줄이기 위해서 smoothing이 필요한 것이다.
Ordered Target Statistics
ordered TS는 feature의 data들이 시간 순서와는 상관이 없지만 각 데이터 마다 가상의 시간(artificial time)을 부여하여 부여된 시간 순서대로 범주형 데이터의 값을 설정해 준다.
그리고 학습을 할 때마다 데이터들을 random permutation하여 순서를 섞어주고 섞은 다음에 다시 가상의 시간을 부여하고 범주형 데이터의 값을 설정한다. random permutation하는 이유는 뒤에 설명하겠지만 설정된 값이 시간 순서에 종속적이기 때문에 이를 방지하기 위해 매 학습할 때마다 순서를 다시 섞어준다.
설명을 위해 다음의 예를 보자.
| ... | xi | ... | TS | y | |
| ... | A | ... | 0.000 | 1 | |
| ... | B | ... | 1.000 | 1 | |
| ... | C | ... | 1.000 | 1 | |
| ... | A | ... | 1.000 | 0 | |
| ... | B | ... | 0.977 | 1 | |
| ... | C | ... | 0.982 | 1 | |
| ... | B | ... | 0.992 | 0 | |
| ... | C | ... | 0.986 | 1 | |
| ... | C | ... | 0.992 | 0 | |
| ... | C | ... | 0.748 | 1 |
은 시간순서를 말하고 TS는 Target Statistics에 의해 정해진 변환된 값이다. 는 i번째 feature x를 말한다.
- 일 때 :
이전의 데이터가 없기 때문에 분자,분모의 합계쪽은 모두 0이고 p도 0이다. - 일 때 :
이전에 B 범주가 없다. 분모의 합계부분은 0이고 분자의 y평균값은 0이다. p=1/1=1이다.
정리하면 Target Leakage를 해결하는 Ordered Target Statistics는 1) 자신의 범주값에 Target의 값을 사용하지 않는다. 2) 가능한 모든 data set를 사용한다는 전제 조건을 만족시켰다.
2. Ordered Boosting
Ordered Boosting은 Prediction Shift를 해결하고자 하기 위해서 제안한 방법으로, Prediction Shift는 학습 데이터(training data)의 잔차의 기대값(좀 더 정확히는 잔차의 제곱의 기대값)과 테스트 데이터(test data)의 잔차의 기대값이 다른 것을 말한다. 정상적인 모델이라면 이 둘의 차이가 없어야 한다.(아니면 아주 작거나)
앞의 ordered TS에서 범주값을 구할 때마다 random permutation을 한다고 했는데 이것과 같은 permutatioin을 ordered boosting에 동일하게 적용한다.
ex)
Ordered Boosting은 oblivious tree를 만든다

Asymmetric tree는 무조건 information gain이 가장 큰 것만 기준으로 tree를 확장한다.
반면 Oblivious tree는 항상 동일한 레벨로 tree를 확장하는 것으로 overfitting을 방지할 수 있다.
그리고 알고리즘상 계산 속도가 더 빠르다.
- Categorical Feature에 대해서 학습이 잘 되도록 설계되어 있음
- 오랜 연구로 Default Parameter 설계가 잘 되어 있어, Parameter Tuning이 쉬움
- GPU 사용 최적화가 잘 되어 있음
- 전체 데이터 중 Categorical Feature가 50% 이상인 경우 CatBoost를 고려해보자.
CatBoost 중요 파라미터
파라미터 튜닝 (for Perfomance)
- iterations : n_estimators와 같은 개념, 50 ~ 50000
- learning_rate : 0.3 ~ 0.01
- depth : max_depth와 같은 개념, 5 ~ 25
- border_count : 254 or 32 or 128, CPU -> 254, GPU -> 32
파라미터 튜닝 (for Speed up)
- rsm : random subspace method, 0.5 ~ 0.8
'ML' 카테고리의 다른 글
| #7 앙상블 기법 LightGBM (LGBM) (0) | 2023.09.22 |
|---|---|
| #6 앙상블 기법 XGBoost(Extreme Gradient Boosting) (0) | 2023.09.22 |
| #5 앙상블 기법 Gradient Boosting Machine(GBM) (0) | 2023.09.22 |
| # 4 앙상블 기법 AdaBoost (0) | 2023.09.22 |
| # 3 앙상블 기법 랜덤 포레스트(Random Forest) (0) | 2023.09.21 |