CatBoost
Библиотека градиентного бустинга по типу "деревья решений", которая умеет работать с категориальными признаками
CatBoost — это библиотека градиентного бустинга по типу "деревья решений", которая умеет работать с категориальными признаками и стабильно обучается без сложной ручной настройки. Такую модель можно быстро запустить на «грязных» табличных данных и сразу получить хороший результат.
Зачем появился CatBoost
Классический градиентный бустинг (XGBoost, LightGBM) отлично работает, но требует аккуратной подготовки данных:
— категориальные признаки нужно готовить вручную;
— порядок строк может влиять на результат;
— требуется много гиперпараметров.
CatBoost сам находит категориальные признаки, избавляя Дата-сайентиста от необходимости выполнять энкодинг (Label / One-Hot Encoding). Более того, он обучается так, чтобы не зависеть от порядка объектов и уменьшать Смещение (Bias) при обучении;
CatBoost обычно выигрывает, если:
— данные табличные;
— много категориальных признаков;
— данные небольшие или средние по размеру;
— важна скорость прототипирования.
Минимальный пример на Python
Рассмотрим пример бинарной классификации с категориальными признаками.
from catboost import CatBoostClassifier
import pandas as pd
Данные
data = pd.DataFrame({
"age": [25, 32, 47, 51, 23],
"city": ["Moscow", "SPb", "Moscow", "Kazan", "SPb"],
"salary": [50000, 60000, 120000, 90000, 45000],
"target": [0, 1, 1, 1, 0]
})
X = data.drop(columns="target")
y = data["target"]
Обучение модели
model = CatBoostClassifier(
iterations=200,
depth=6,
learning_rate=0.1,
loss_function="Logloss",
verbose=False
)
model.fit(
X, y,
cat_features=["city"]
)
Предсказание
preds = model.predict(X)
probs = model.predict_proba(X)
print(preds)
print(probs)
Почему CatBoost часто выбирают на практике
- минимальная подготовка данных
- высокая стабильность
- хорошие дефолтные параметры
- сильные результаты «из коробки»
Очень часто CatBoost — это:
лучший baseline для табличных данных.
Ограничения
CatBoost — не универсальное решение:
- не подходит для изображений и текста;
- может быть медленнее LightGBM на очень больших данных;
- модель «тяжелее» по размеру.