CatBoost는 순서(order)를 통해 타겟 누수(target leakage)를 극복한다: Ordered Target Statistics
요약
CatBoost가 타겟 누수(target leakage)를 방지하기 위해 사용하는 'Ordered Target Statistics'와 'Ordered Boosting'의 원리를 설명합니다. 범주형 인코딩과 부스팅 과정에서 발생하는 과적합 문제를 순서(ordering) 개념을 통해 해결하는 방법을 다룹니다.
핵심 포인트
- 범주형 변수 인코딩 시 현재 행을 제외한 이전 행들의 평균을 사용하여 타겟 누수 방지
- Ordered Target Statistics는 무작위 순열을 통해 데이터의 순차적 처리를 구현
- 부스팅 과정에서 해당 행으로 훈련되지 않은 모델을 사용하여 예측 이동(prediction shift) 해결
- 훈련 데이터와 검증 데이터 간의 격차를 줄여 모델의 일반화 성능 향상
XGBoost는 그래디언트 부스팅 (gradient boosting)에 엄격한 2차 목적 함수 (second-order objective)를 부여했고, LightGBM은 동일한 부스팅을 빠르게 만들었습니다. CatBoost는 더 미묘한 적, 즉 **타겟 누수 (target leakage)**를 공격함으로써 이 삼총사를 완성합니다. CatBoost는 정확한 g, h 그래디언트 부스팅 엔진을 유지하면서도, 레이블 (label)이 훈련 과정에 조용히 스며드는 두 가지 지점에 집착합니다. 그리고 이 두 지점에 대한 해결책은 모두 동일한 한 단어, 즉 _순서 (ordering)_입니다. 저는 라이브러리 없이 JS로 이 모든 것을 실시간으로 계산하는 데모를 처음부터 직접 구축했습니다. 따라서 슬라이더를 움직임에 따라 누수가 열리고 닫히는 것을 직접 관찰할 수 있습니다. 다음은 데모가 보여주는 내용입니다.
범주형 인코딩 (categorical encoding)에서의 누수
사용자 ID, 우편번호, SKU와 같이 카디널리티 (cardinality)가 높은 범주형 변수는 해당 카테고리의 타겟 평균 (mean target)으로 인코딩하고 싶은 유혹을 느끼게 합니다. 하지만 단순한 평균 (naive mean) 방식은 _현재 행을 포함_하므로, 한 번만 나타나는 카테고리의 경우 그 평균은 본질적으로 해당 행의 레이블 그 자체가 됩니다. 이 피처 (feature)는 y의 위장된 복사본이 된 것입니다. 카디널리티를 높이면 (카테고리당 행 수가 적어지면) 누수는 폭발적으로 증가합니다.
Ordered Target Statistics는 행을 무작위 순열 (random permutation)로 처리하고, 사전 확률 (prior)로 스무딩 (smoothing)된, 해당 행 _이전_에 나온 행들의 누적 타겟 평균 (running target mean)만으로 각 행을 인코딩함으로써 이를 해결합니다. 어떤 행도 자신의 인코딩에 기여하지 않습니다.
def ordered_target_stats(cat, y, a=1.0, prior=None, seed=0):
prior = y.mean() if prior is None else prior
perm = np.random.default_rng(seed).permutation(len(cat))
...
데모는 각 인코딩에 대해 아주 작은 로지스틱 모델 (logistic model)을 훈련시키고 그 징후를 보여줍니다. 단순 인코딩 (naive encoding)의 훈련 정확도는 치솟는 반면 검증 (validation) 정확도는 평탄하게 유지됩니다. 이는 과적합 (overfitting)의 특징인 거대한 훈련-검증 격차를 나타내며, corr(naive enc, y)는 1.0을 향해 상승하여 피처가 레이블 그 자체가 되어버립니다. Ordered TS는 훈련 ≈ 검증 상태를 유지합니다. 훈련 수치는 더 낮을 수 있지만, 새로운 데이터에서도 살아남는 정직한 수치입니다. 주목해야 할 것은 원시 훈련 점수가 아니라 바로 이 격차입니다.
부스팅에서의 동일한 누수
부스팅에서의 동일한 누수
클래식 부스팅 (Classic boosting)은 각 새로운 트리를 잔차 y − F(x)에 맞춥니다. 하지만 F는 이 행을 포함하여 훈련되었기 때문에, 그 잔차는 편향되게 작게 나타납니다. 즉, 모델이 스스로의 노이즈를 쫓게 되는 것입니다. 이것이 바로 "예측 이동 (prediction shift)"입니다. Ordered boosting은 해당 행으로 훈련된 적이 없는 모델을 사용하여 모든 행의 잔차를 계산합니다. Out-of-fold 버전도 이와 동일한 누수 없는 원칙을 포착합니다:
def leak_free_residuals(x, y, F, folds):
upd = np.zeros_like(F)
for k in np.unique(folds):
...
데모에서는 두 개의 실제 그래디언트 부스팅 (gradient-boosting) 훈련을 나란히 실행하고 라운드당 테스트 MSE를 그래프로 나타냅니다. 탐욕적 (greedy) 곡선은 급격히 떨어졌다가 자신의 노이즈에 과적합 (overfit)됨에 따라 다시 상승하는 반면, ordered 곡선은 낮은 상태를 유지합니다. CatBoost는 모든 순열(permutation)에 대해 약 log(n)개의 접두사 모델 (prefix models)을 유지하여 이 모든 과정의 비용을 합리적인 수준으로 유지합니다.
대칭 (oblivious) 트리
CatBoost의 세 번째 아이디어는 모델이 성장시키는 유일한 트리 형태입니다. 일반적인 CART 트리는 모든 노드에서 독립적으로 최적의 분할 (split)을 선택하므로, 동일한 깊이에 있는 노드들이 서로 다른 규칙으로 분할됩니다. 이는 유연하지만 과적합되기 쉽습니다. 대칭 (oblivious) 트리는 각 레벨 (level) 마다 하나의 (특성, 임계값)을 선택하여 해당 레벨의 모든 노드에 적용합니다. 깊이 d인 트리는 d개의 예/아니오 테스트에 의해 인덱싱되는 정확히 2ᵈ개의 균형 잡힌 리프 (leaf)를 가지므로, 추론 (inference)은 분기 (branching) 없이 d번의 비교만으로 이루어지며, 이러한 경직된 형태는 강력한 내장 정규화 도구 (regularizer) 역할을 합니다:
def leaf_index(x, levels):
idx = 0
for f, thr in levels: # d번의 비교, 분기 없음
...
데모에서는 동일한 데이터에 대해 노드별 CART 트리와 oblivious 트리를 모두 성장시킨 후 그 결정 영역 (decision regions)을 비교합니다. 이는 들쭉날쭉하고 비대칭적인 모습과 2ᵈ개의 셀로 이루어진 깔끔한 그리드 형태의 대비로 나타납니다.
이 삼총사가 위치한 곳
| XGBoost | LightGBM | CatBoost | |
|---|---|---|---|
| 핵심 아이디어 (Signature idea) | 2차 목적 함수 (2nd-order objective) | 원시 속도 (raw speed) | 누수 없는 학습 (leakage-free training) |
| ... |
실제로 여러분은 cat_features를 통해 가공되지 않은 문자열 컬럼을 CatBoost에 직접 전달할 수 있습니다. 수동적인 원-핫 인코딩 (one-hot encoding)이나 누수가 발생하는 인코딩 (leaky encoding) 없이도 기본 설정을 신뢰할 수 있는데, 이는 순서 기반 타겟 통계 (ordered TS)와 순서 기반 부스팅 (ordered boosting)이 기본적으로 활성화되어 있기 때문입니다. CatBoost의 강점은 소규모에서 중규모 데이터셋에 있는 지저분한 범주형 데이터 (categorical data)이며, 이러한 데이터셋에서는 거의 별도의 튜닝 없이도 기본 설정만으로 우수한 성능을 발휘합니다. XGBoost, LightGBM과 함께 CatBoost는 대부분의 정형 데이터 (tabular) 경진대회를 석권하는 3대 부스터 중 하나입니다.
슬라이더를 움직여 보면, 순서 기반 방식 (ordered)은 평탄하게 유지되는 반면 단순한 방식 (naive)은 훈련/검증 (train/val) 간의 격차가 크게 벌어지는 것을 확인할 수 있습니다:
https://dev48v.infy.uk/ml/day43-catboost.html
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기