← Назад к вопросам

Какие знаешь особенности CatBoost?

2.0 Middle🔥 141 комментариев
#Машинное обучение#Опыт и проекты

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Особенности CatBoost

CatBoost (Category Boosting) - это gradient boosting фреймворк от Яндекса, разработанный специально для работы с категориальными признаками. Это мощный инструмент, особенно эффективный с табличными данными содержащими категории.

1. Встроенная обработка категориальных признаков

Главное отличие CatBoost - он автоматически обрабатывает категориальные признаки без one-hot encoding:

from catboost import CatBoostClassifier
import pandas as pd

X = pd.DataFrame({
    'age': [25, 30, 35, 40],
    'city': ['Moscow', 'SPB', 'Moscow', 'SPB'],
    'salary': ['low', 'medium', 'high', 'high']
})

y = [0, 1, 1, 0]

model = CatBoostClassifier(
    cat_features=['city', 'salary'],
    iterations=100,
    verbose=0
)

model.fit(X, y)

Преимущество: Не нужно предварительное кодирование категориальных признаков

2. Специальное кодирование категорий (Target Encoding)

CatBoost использует целевое кодирование с особой статистикой:

from catboost import CatBoostRegressor

model = CatBoostRegressor(
    cat_features=['product_category', 'region'],
    one_hot_max_size=2,
    iterations=100
)

X = pd.DataFrame({
    'product_category': ['A', 'B', 'A', 'C', 'B'],
    'price': [100, 200, 150, 300, 250],
    'region': ['North', 'South', 'North', 'East', 'South']
})

y = [500, 1200, 700, 1500, 900]
model.fit(X, y)

Каждое значение категории кодируется на основе статистики целевой переменной.

3. Обработка пропущенных значений

CatBoost отлично справляется с NaN:

import numpy as np

X = pd.DataFrame({
    'feature1': [1, 2, np.nan, 4, 5],
    'feature2': ['A', 'B', 'A', np.nan, 'B'],
    'feature3': [10, 20, 30, 40, np.nan]
})

y = [0, 1, 0, 1, 0]

model = CatBoostClassifier(
    iterations=50,
    nan_mode='Min',
    verbose=0
)

model.fit(X, y)  # Пропуски обрабатываются автоматически

4. Уменьшение переобучения (Ordered Boosting)

CatBoost использует специальную схему обучения Ordered Boosting:

model = CatBoostClassifier(
    iterations=100,
    learning_rate=0.03,
    depth=6,
    boosting_type='Ordered',
    grow_policy='SymmetricTree',
    verbose=0
)

# Обычно требует меньше итераций для достижения качества
model.fit(X_train, y_train)

5. Высокая скорость обучения

CatBoost оптимизирован для GPU и имеет быстрое обучение на CPU:

# GPU обучение
model = CatBoostClassifier(
    iterations=200,
    task_type="GPU",
    devices='0',
    verbose=0
)

# CPU с параллелизмом
model = CatBoostClassifier(
    iterations=200,
    thread_count=8,
    verbose=0
)

6. Работа с дисбалансом классов

model = CatBoostClassifier(
    iterations=100,
    scale_pos_weight=3,
    auto_class_weights='Balanced',
    verbose=0
)

model.fit(X_train, y_train)

7. Feature Importance

CatBoost предоставляет несколько способов оценки важности:

model.fit(X_train, y_train)

# Встроенная важность
imp = model.get_feature_importance()

# Визуализация дерева
model.plot_tree(tree_idx=0)

# SHAP значения
import shap
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)

8. Встроенная кросс-валидация

from catboost import cv, Pool

cv_data = cv(
    pool=Pool(X_train, y_train, cat_features=['city']),
    params={
        'iterations': 100,
        'depth': 6,
        'loss_function': 'Logloss'
    },
    fold_count=5,
    stratified=True
)

9. Использование весов выборки

from catboost import Pool

sample_weights = [1, 1, 2, 1, 2]

pool = Pool(X_train, y_train, weight=sample_weights)
model = CatBoostClassifier(iterations=100, verbose=0)
model.fit(pool)

10. Восстановление обучения

model = CatBoostRegressor(
    iterations=500,
    learning_rate=0.05,
    depth=7,
    train_dir='catboost_info',
    save_snapshot=True
)

Сравнение с конкурентами

ПараметрCatBoostXGBoostLightGBM
КатегорииВстроенныеТребует кодированияТребует кодирования
СкоростьВысокаяСредняяОчень высокая
ПереобучениеМеньшеСреднееМожет переобучать
ПростотаВысокаяСредняяСредняя
GPUДаДаДа

Когда использовать CatBoost?

  • Много категориальных признаков в данных
  • Нужно быстро получить baseline с хорошим качеством
  • Данные содержат пропуски
  • Нужна хорошая интерпретируемость
  • Важна скорость обучения

CatBoost особенно популярен в kaggle соревнованиях благодаря мощности на табличных данных.

Какие знаешь особенности CatBoost? | PrepBro