CatBoost
Материал из MachineLearning.
| | Статья написана с использованием LLM Claude Opus 4.8 и проверена участником Nikita Saveliuk 12:27, 26 июня 2026 (MSD) |
|
CatBoost (от англ. Categorical Boosting) — алгоритм градиентного бустинга на решающих деревьях, разработанный компанией Яндекс и представленный в открытом доступе в 2017 году[1]. Метод предназначен в первую очередь для работы с табличными данными, содержащими категориальные признаки, и решает две взаимосвязанные проблемы классического бустинга: корректное кодирование категорий без ручной предобработки и устранение систематического смещения оценки градиента, возникающего из-за того, что одни и те же объекты используются и для построения модели, и для оценки её ошибки.
В отличие от других популярных реализаций бустинга — XGBoost и LightGBM — CatBoost строит обструктурированные (симметричные) деревья и применяет принципиально иную схему вычисления остатков, названную авторами упорядоченным бустингом (англ. ordered boosting). Теоретическим основанием метода служит понятие смещения предсказания (англ. prediction shift): авторы показали, что стандартная процедура бустинга порождает оценку градиента, систематически отклоняющуюся от истинной, и предложили способ построения несмещённой оценки[1].
Благодаря разумным значениям гиперпараметров «из коробки», встроенной обработке категорий и устойчивости к переобучению на малых выборках CatBoost стал одним из стандартных инструментов в прикладных задачах — наряду с XGBoost и LightGBM он входит в число наиболее используемых алгоритмов на табличных данных в соревнованиях по машинному обучению.
Историческая справка
Градиентный бустинг как общий метод оптимизации функционала в пространстве функций был предложен Джеромом Фридманом (Friedman, 2001) на основе более ранних работ по бустингу (Freund, Schapire)[1]. На протяжении 2000-х годов бустинг на деревьях стал основным инструментом ранжирования в поисковых системах; в частности, обструктурированные деревья (англ. oblivious decision trees), позднее ставшие основой CatBoost, применялись в системах ранжирования ещё с конца 2000-х.
К середине 2010-х годов сложилась проблема: высокопроизводительные реализации бустинга (XGBoost, 2014; LightGBM, 2016) не имели нативной поддержки категориальных признаков и требовали ручного кодирования, которое либо взрывало размерность (One-hot encoding), либо порождало утечку целевой переменной (Target encoding). Команда Яндекса под руководством А. Гулина и А. В. Дорогуш представила CatBoost в 2017 году[1], а в 2018 году вышла работа Л. Прохоренковой с соавторами, в которой был формализован эффект смещения предсказания и предложены упорядоченный бустинг и упорядоченное кодирование категорий как способ его устранения[1]. Эта статья и считается основным теоретическим источником метода.
Постановка задачи
Пусть дана выборка из независимых одинаково распределённых наблюдений, где
— вектор признаков (часть координат может быть категориальной),
— целевая переменная.
Требуется построить функцию
из
в
, минимизирующую ожидаемые потери
,
где — дифференцируемая функция потерь.
Градиентный бустинг строит приближение итерационно:
, где базовый предиктор
аппроксимирует антиградиент функционала на текущем приближении, а
— темп обучения.
Смещение предсказания
Ключевое наблюдение авторов CatBoost состоит в следующем.
На шаге в качестве цели для обучения
на объекте
используется градиент
.
Но модель
сама была обучена с использованием объекта
, поэтому значение
зависит от
.
В результате условное распределение градиента
на обучающей выборке отличается от его распределения на новом объекте
того же распределения.
Это расхождение авторы называют смещением предсказания; оно накапливается с числом итераций и ведёт к переобучению, особенно заметному на выборках малого объёма.
Алгоритм
Упорядоченный бустинг
Чтобы получить несмещённую оценку градиента, CatBoost вводит искусственную «временну́ю» структуру на выборке.
Фиксируется случайная перестановка объектов, и для каждого объекта остаток вычисляется по модели, обученной только на предшествующих ему в этой перестановке объектах:
,
где — модель, построенная по множеству объектов
.
Поскольку при вычислении остатка для
сам объект не участвовал в обучении, оценка градиента оказывается несмещённой.
Прямая реализация этой идеи потребовала бы хранить различных моделей (по одной для каждого префикса перестановки), что неприемлемо по памяти и времени.
На практике поддерживается логарифмическое число вспомогательных моделей, а для снижения дисперсии оценки используется несколько независимых перестановок
, между которыми алгоритм чередуется в ходе обучения.
Упорядоченное кодирование категорий
Та же идея перестановки применяется к категориальным признакам.
Простое кодирование средним по целевой переменной (англ. target statistics) вида «средний по всем объектам данной категории» использует
при вычислении признака для
и потому даёт утечку.
CatBoost вычисляет статистику только по предшественникам объекта в перестановке:
,
где — значение категориального признака объекта
,
— априорное значение (обычно среднее целевой переменной по всей выборке),
— параметр сглаживания.
Для объектов с малым числом предшественников той же категории оценка «притягивается» к априору
, что обеспечивает устойчивость на редких категориях.
Кроме того, CatBoost автоматически порождает комбинации категориальных признаков (англ. feature combinations): при разбиении в дереве уже использованные категории объединяются в составные, что позволяет улавливать взаимодействия признаков (например, «город» × «тип устройства») без ручной инженерии.
Обструктурированные деревья
В качестве базовых предикторов CatBoost использует обструктурированные (симметричные) деревья (англ. oblivious decision trees): на каждом уровне глубины применяется одно и то же условие разбиения ко всем узлам уровня.
Дерево глубины полностью задаётся набором пар «признак—порог»
, а индекс листа для объекта
определяется битовым вектором
.
Дерево имеет ровно листьев, и предсказание есть значение в листе с номером
, интерпретированным как двоичное число.
Свойства
Преимущества
- Устойчивость к переобучению. Упорядоченный бустинг и упорядоченное кодирование устраняют смещение предсказания, что особенно заметно на выборках малого и среднего объёма, где конкурирующие реализации склонны переобучаться[1].
- Нативная обработка категорий. Достаточно указать индексы категориальных столбцов; ручное кодирование не требуется.
- Малое число настраиваемых гиперпараметров. Значения по умолчанию дают разумный результат на широком классе задач; нередко достаточно настроить лишь темп обучения и число деревьев.
- Эффективность обструктурированных деревьев. Симметричная структура ускоряет вычисление предсказания (путь сводится к набору независимых сравнений) и хорошо ложится на параллельные и GPU-вычисления; она же играет роль регуляризатора, ограничивая сложность отдельного дерева.
Ограничения
- Скорость обучения. Поддержка нескольких перестановок и вспомогательных моделей делает обучение на CPU медленнее, чем у LightGBM; разница заметна на выборках в десятки миллионов объектов.
- Потребление памяти. Хранение статистик по перестановкам увеличивает расход оперативной памяти.
- Неуниверсальность преимущества. На сильно разреженных данных (например, текстах с TF-IDF-представлением) выигрыш в качестве относительно LightGBM и XGBoost, как правило, отсутствует.
- Ограниченная гибкость деревьев. Симметричность снижает выразительность отдельного дерева; на некоторых задачах асимметричные деревья дают лучший результат при той же глубине.
Применение
CatBoost применяется прежде всего в задачах с большим числом категориальных признаков высокой кардинальности:
- Ранжирование и рекомендации. Алгоритм поддерживает попарные и списочные функции потерь для обучения ранжированию и исторически использовался в поисковых и рекомендательных системах.
- Кредитный скоринг и оценка риска. Признаки вида «регион», «тип занятости», «категория транзакции» естественно являются категориальными.
- Предсказание вероятности клика (CTR). Задачи онлайн-рекламы с высококардинальными категориями (идентификаторы пользователей, доменов, объявлений).
- Прикладные задачи на табличных данных. Регрессия и классификация в областях, где данные не обладают пространственной или временно́й структурой, удобной для нейросетевых моделей.
См. также
Ссылки
Литература
- Prokhorenkova L., Gusev G., Vorobev A., Dorogush A. V., Gulin A. CatBoost: unbiased boosting with categorical features // Advances in Neural Information Processing Systems (NeurIPS). — 2018. — С. 6638–6648.
- Dorogush A. V., Ershov V., Gulin A. CatBoost: gradient boosting with categorical features support // Workshop on ML Systems at NeurIPS. — 2017.
- Friedman J. H. Greedy function approximation: a gradient boosting machine // The Annals of Statistics. — 2001 T. 29. — С. 1189–1232.
- Hastie T., Tibshirani R., Friedman J. Boosting and Additive Trees // The Elements of Statistical Learning: Data Mining, Inference, and Prediction (2nd ed.). — Springer, 2009.

