CatBoost adalah gradient boosted tree dari Yandex yang sangat kuat untuk fitur kategorikal. Dengan ordered target statistics dan pohon simetris (oblivious), akurasi tinggi bisa dicapai dengan preprocessing minimal.
Model ini cepat konvergen meski learning rate kecil, serta cukup robust terhadap missing value dan pergeseran distribusi, sehingga populer di produksi maupun kompetisi.
1. Cara kerja CatBoost #
Encoding kategorikal
Memakai Ordered Target Statistics dengan pengacakan data dan pembaruan rata-rata secara berurutan, sehingga menghindari leakage dan kelemahan one-hot atau label encoding.Oblivious tree
Setiap level memakai fitur dan ambang yang sama, menghasilkan (2^d) leaf pada kedalaman (d). Struktur ini ramah GPU dan cepat saat inferensi.Ordered boosting
Gradien dihitung dari permutasi berbeda untuk menekan overfitting dan membuat pelatihan lebih stabil.Fitur lengkap
Mendukung class weighting, fitur teks, monotonic constraints, dan metrik gabungan.
2. Melatih klasifier di Python #
from catboost import CatBoostClassifier, Pool
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, roc_auc_score
# Data kredit (campuran kategorikal dan numerik)
data = fetch_openml(name="credit-g", version=1, as_frame=True)
X = data.data
y = (data.target == "good").astype(int)
categorical_features = X.select_dtypes(include="category").columns.tolist()
X_train, X_valid, y_train, y_valid = train_test_split(
X, y, test_size=0.2, stratify=y, random_state=42
)
train_pool = Pool(
X_train,
label=y_train,
cat_features=categorical_features,
)
valid_pool = Pool(X_valid, label=y_valid, cat_features=categorical_features)
model = CatBoostClassifier(
depth=6,
iterations=1000,
learning_rate=0.03,
loss_function="Logloss",
eval_metric="AUC",
random_seed=42,
early_stopping_rounds=50,
verbose=100,
)
model.fit(train_pool, eval_set=valid_pool, use_best_model=True)
proba = model.predict_proba(X_valid)[:, 1]
pred = (proba >= 0.5).astype(int)
print("ROC-AUC:", roc_auc_score(y_valid, proba))
print(classification_report(y_valid, pred, digits=3))
Cukup berikan daftar kolom kategorikal ke Pool; target encoding dan ordering
diterapkan otomatis.
3. Hiperparameter utama #
| Parameter | Peran / tips |
|---|---|
depth | Kedalaman pohon. Pada oblivious tree, depth=6 menghasilkan 64 leaf. Terlalu dalam bisa overfitting. |
iterations | Jumlah boosting round. Kombinasikan dengan early_stopping_rounds. |
learning_rate | Semakin kecil biasanya semakin akurat, tapi perlu lebih banyak iterasi. |
l2_leaf_reg | Regularisasi L2 pada leaf; makin besar makin halus. |
border_count | Jumlah bin untuk numerik (default 254). Lebih sedikit lebih cepat tetapi kurang presisi. |
bagging_temperature | Mengatur randomisasi sampling; mendekati 0 berarti deterministik. |
class_weights | Bobot kelas untuk data tidak seimbang. |
4. Feature importance dan SHAP #
importance = model.get_feature_importance(type="PredictionValuesChange")
for name, score in sorted(zip(X.columns, importance), key=lambda x: -x[1])[:10]:
print(f"{name}: {score:.3f}")
shap_values = model.get_feature_importance(valid_pool, type="ShapValues")
# shap_values[:, -1] adalah baseline; matplotlib bisa membuat ringkasan.
PredictionValuesChangemengukur perubahan prediksi; tanda menunjukkan arah kontribusi.- Nilai SHAP tersedia via
type="ShapValues"dan berguna untuk penjelasan per sampel.
5. Teknik khas CatBoost #
- Kombinasi kategori:
one_hot_max_sizedancombinations_ctypesmembuat interaksi otomatis. - Fitur teks: gunakan
text_featuresdan aturtext_processing(TF-IDF, BM25). - Monotonic constraints:
monotone_constraintsuntuk model harga atau risiko. - CV bawaan:
cvmenjalankan cross-validation yang dioptimalkan untuk ordered boosting.
6. Kapan memilih CatBoost #
- Data dominan kategorikal dan ingin minim preprocessing → CatBoost.
- Data dominan numerik dan ingin banyak eksperimen cepat → LightGBM sering lebih cepat.
- Data besar dan sparse →
DMatrixXGBoost bisa lebih efisien memori. - Dalam ensemble, menambah CatBoost meningkatkan performa pada fitur kategorikal.
7. Ringkasan #
- CatBoost memproses kategori secara otomatis dan menstabilkan training lewat ordered boosting.
- Kunci performa ada pada keseimbangan
depth,iterations,learning_rate, danl2_leaf_reg. - Dukungan SHAP dan fitur teks membuatnya fleksibel dalam stack ensemble.