CatBoost – градиентный бустинг от Яндекса

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение в CatBoost

CatBoost (Categorical Boosting) — это современный алгоритм градиентного бустинга, разработанный компанией Яндекс. Он оптимизирован для эффективной работы с категориальными признаками и предназначен для решения задач классификации, регрессии и ранжирования.

Алгоритм построен на принципах градиентного бустинга по решающим деревьям и отличается высокой точностью, стабильностью и простотой использования. Благодаря встроенной обработке категориальных данных, CatBoost особенно полезен при работе с реальными табличными датасетами.


Преимущества CatBoost

  • Обработка категориальных признаков без предварительного кодирования.

  • Высокая точность и устойчивость к переобучению.

  • Поддержка как CPU-, так и GPU-обучения.

  • Возможность использования для небольших и больших наборов данных.

  • Совместимость с Pandas, NumPy, Scikit-learn.

  • Интеграция с визуализацией процесса обучения и анализа признаков.


Отличительные особенности алгоритма

  • Поддержка категориальных признаков без one-hot encoding или label encoding.

  • Использование специального метода обработки категорий — статистическая агрегация по истории (CTR).

  • Обучение симметричных деревьев, что обеспечивает стабильность и производительность.

  • Возможность работы с текстовыми признаками и временем.


Установка и подключение библиотеки

Установка через pip:

bash
pip install catboost

Импорт модуля:

python
from catboost import CatBoostClassifier, Pool

Для GPU необходимо наличие соответствующих библиотек и драйверов.


Подготовка данных и работа с категориальными признаками

CatBoost способен автоматически обрабатывать категориальные данные, если передать список номеров категориальных признаков или их имена:

python
cat_features = ['gender', 'region']

Также библиотека поддерживает cat_features в формате индексов столбцов.


Пример обучения модели классификации

python
from catboost import CatBoostClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score import pandas as pd # Пример с фиктивными данными df = pd.DataFrame({ 'gender': ['M', 'F', 'F', 'M'], 'age': [21, 45, 33, 50], 'label': [1, 0, 1, 0] }) X = df.drop('label', axis=1) y = df['label'] cat_features = ['gender'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) model = CatBoostClassifier(iterations=100, learning_rate=0.1, verbose=0) model.fit(X_train, y_train, cat_features=cat_features) y_pred = model.predict(X_test) print("Accuracy:", accuracy_score(y_test, y_pred))

Основные параметры и их настройка

  • iterations: количество итераций (деревьев)

  • learning_rate: скорость обучения

  • depth: глубина деревьев

  • loss_function: функция потерь (Logloss, RMSE, CrossEntropy)

  • eval_metric: метрика для оценки (AUC, Accuracy, MAE)

  • early_stopping_rounds: остановка обучения при отсутствии улучшений

  • cat_features: список категориальных признаков


Метрики оценки качества моделей

CatBoost поддерживает стандартные метрики классификации и регрессии:

  • Классификация: Accuracy, AUC, F1, Precision, Recall

  • Регрессия: RMSE, MAE, R2

Можно задать собственную метрику через параметр custom_metric.


Визуализация обучения и важности признаков

Встроенные функции позволяют отслеживать процесс обучения:

python
model = CatBoostClassifier(verbose=100, plot=True)

Для отображения важности признаков:

python
model.get_feature_importance(prettified=True)

Сохранение и загрузка моделей CatBoost

Сохранение модели:

python
model.save_model("catboost_model.cbm")

Загрузка модели:

python
from catboost import CatBoostClassifier model = CatBoostClassifier() model.load_model("catboost_model.cbm")

Интеграция с Pandas и Scikit-learn

CatBoost легко встраивается в Scikit-learn pipeline:

python
from sklearn.pipeline import Pipeline pipeline = Pipeline([ ('model', CatBoostClassifier(verbose=0)) ]) pipeline.fit(X_train, y_train)

Также можно использовать GridSearchCV для подбора параметров.


Примеры реального применения CatBoost

  • Ранжирование результатов поиска и рекомендаций.

  • Предсказание оттока клиентов.

  • Модели кредитного скоринга.

  • Прогнозирование конверсии в e-commerce.

  • Классификация и анализ медицинских данных.


Часто задаваемые вопросы

Поддерживает ли CatBoost категориальные признаки?

Да, без предварительного преобразования. Это основное преимущество библиотеки.

Подходит ли CatBoost для задач регрессии?

Да, доступны функции потерь для регрессии: RMSE, MAE и другие.

Как включить GPU-ускорение?

Указать параметр task_type='GPU' при создании модели.

Можно ли использовать CatBoost в production?

Да, модель можно сохранить и загрузить, а также использовать на сервере или в приложении.

Работает ли CatBoost с пропущенными значениями?

Да, библиотека автоматически обрабатывает пропуски.

Полный справочник по ключевым функциям и модулям библиотеки CatBoost для Python

Создание и обучение моделей

Функция / Класс Описание
CatBoostClassifier() Класс для обучения модели классификации.
CatBoostRegressor() Класс для обучения модели регрессии.
CatBoostRanker() Класс для ранжирования (ranking).
fit(X, y, cat_features=...) Обучает модель на обучающих данных, возможно указание категориальных признаков.
Pool(data, label=None, cat_features=None) Специальный объект для хранения данных и категориальных признаков. Используется для более гибкого обучения и предсказания.

Предсказание и оценка

Метод Описание
predict(X) Предсказывает метки классов или значения регрессии.
predict_proba(X) Предсказывает вероятности классов (только для классификации).
staged_predict(X) Возвращает прогнозы на каждом этапе бустинга.
eval_metrics(pool, metrics) Вычисляет метрики на заданном датасете.
score(X, y) Оценивает точность модели (встроенная метрика, зависящая от типа задачи).

Работа с моделями

Метод Описание
save_model(fname) Сохраняет модель в файл.
load_model(fname) Загружает модель из файла.
get_feature_importance() Возвращает важность признаков в обученной модели.
get_params() Возвращает текущие параметры модели.
set_params(**kwargs) Устанавливает новые параметры модели.

Настройка параметров

Параметр Описание
iterations Количество деревьев (итераций бустинга).
learning_rate Скорость обучения.
depth Глубина деревьев.
loss_function Функция потерь (Logloss, RMSE, MAE, и др.).
eval_metric Оценочная метрика (отлична от функции потерь).
cat_features Список индексов или названий категориальных признаков.
random_seed Устанавливает фиксированное значение генератора случайных чисел.
verbose Управление выводом процесса обучения.
early_stopping_rounds Останавливает обучение при отсутствии улучшений на валидации.

Кросс-валидация и автоматический подбор

Функция Описание
cv(params, pool, fold_count=...) Выполняет кросс-валидацию на данных Pool.
GridSearchCV / RandomizedSearchCV Совместимо с sklearn.model_selection для подбора гиперпараметров.
CatBoostClassifier().grid_search() Встроенный метод для подбора параметров (с версии 1.1).

Интероперабельность с другими библиотеками

Совместимость Описание
scikit-learn CatBoost реализует интерфейс fit/predict/score, что позволяет использовать его в пайплайнах sklearn.
ONNX Модель можно экспортировать в формат ONNX.
coreml Возможен экспорт в формат Core ML (iOS).
joblib, pickle Сериализация и десериализация моделей.

Визуализация

Функция Описание
plot_tree() Визуализирует отдельное дерево.
plot_importance() Строит график важности признаков.
plot_metrics() Визуализирует метрики в процессе обучения. (можно использовать через evals_result_ или лог-файлы)

Продвинутые возможности

Возможность Описание
Обработка пропусков CatBoost сам обрабатывает пропущенные значения.
Обработка категориальных Автоматически кодирует категориальные переменные, включая target-based encoding.
Snapshot сохранение Можно сохранять состояние модели во время обучения (параметр snapshot_file).
Мониторинг через TensorBoard Поддержка логгирования метрик в TensorBoard.

Заключение: когда стоит использовать CatBoost

CatBoost — это мощный и гибкий инструмент градиентного бустинга, идеально подходящий для работы с табличными данными, особенно с большим количеством категориальных признаков. Он обеспечивает высокую точность, простоту интеграции и эффективность как на этапе обучения, так и при инференсе. Выбор CatBoost особенно оправдан, если вы ищете решение "из коробки" для обработки сложных табличных данных с минимальной предобработкой.