Ответ
Да, CatBoost — это градиентный бустинг, который изначально и эффективно работает с категориальными признаками. Одна из его ключевых особенностей — встроенная обработка таких признаков без необходимости в ручном One-Hot, Label или Target Encoding.
Как это работает:
- Вы указываете индексы категориальных столбцов при создании модели через параметр
cat_features. - CatBoost применяет упорядоченное кодирование (Ordered Target Encoding), которое вычисляет статистику на основе порядка объектов в датасете. Это помогает избежать target leakage (утечки целевой переменной) — частой проблемы при стандартном Target Encoding.
- Алгоритм эффективно обрабатывает редкие категории и новые значения, которые могли не встретиться в обучающей выборке.
Практический пример:
import pandas as pd
from catboost import CatBoostClassifier, Pool
# Данные с категориальным признаком 'city' и числовым 'age'
df = pd.DataFrame({
'city': ['London', 'Paris', 'London', 'Berlin', 'Paris'], # Категориальный
'age': [25, 30, 35, 28, 40],
'target': [1, 0, 1, 0, 1]
})
X = df[['city', 'age']]
y = df['target']
# Указываем, что первый признак (индекс 0) — категориальный
model = CatBoostClassifier(
cat_features=[0], # Индекс столбца 'city'
iterations=100,
verbose=False
)
model.fit(X, y)
# Предсказание для новых данных, включая новую категорию 'Madrid'
new_data = pd.DataFrame({'city': ['Paris', 'Madrid'], 'age': [33, 27]})
predictions = model.predict(new_data)
print(predictions)
Преимущества подхода CatBoost:
- Экономия времени: Нет этапа предобработки и кодирования.
- Качество: Специальные методы кодирования снижают риск переобучения.
- Удобство: Автоматическая обработка новых и редких категорий в тестовых данных.
- Производительность: Более эффективно по памяти, чем One-Hot Encoding для признаков с высокой кардинальностью.