XGBoost
Материал из MachineLearning.
| | Статья написана с использованием LLM Claude Opus 4.8 и проверена участником Nikita Saveliuk 00:57, 5 июля 2026 (MSD) |
|
XGBoost (от англ. eXtreme Gradient Boosting) — это масштабируемая реализация градиентного бустинга над решающими деревьями, объединяющая регуляризованную целевую функцию, разложение потерь второго порядка и набор инженерных приёмов для эффективной работы на больших и разреженных данных. Метод предложен Тяньци Ченом и Карлосом Гестрином в 2016 году и на протяжении нескольких лет оставался фактическим стандартом для задач обучения на табличных данных, регулярно принося победы в соревнованиях по машинному обучению (Chen, Guestrin, 2016).
Ключевое отличие XGBoost от классического градиентного бустинга Фридмана состоит в том, что каждое очередное дерево строится не по одному лишь градиенту функции потерь, а по её локальному квадратичному приближению — с учётом второй производной. Это даёт более точный шаг оптимизации на каждой итерации и, что важнее, позволяет вывести замкнутую формулу для оптимальных весов листьев и единую метрику качества структуры дерева. Регуляризация здесь встроена прямо в целевую функцию, а не добавляется постфактум, поэтому контроль сложности модели становится частью самого критерия расщепления.
Значимость XGBoost выходит за пределы конкретной библиотеки: сформулированный в ней подход — регуляризованный бустинг со вторым порядком и аппроксимированным поиском расщеплений — задал шаблон, который затем развивали LightGBM (Ke et al., 2017) и CatBoost (Prokhorenkova et al., 2018). Понимание XGBoost поэтому необходимо для осмысленного выбора между современными реализациями градиентного бустинга.
Историческая справка
Идея бустинга — последовательного построения ансамбля слабых моделей, каждая из которых исправляет ошибки предыдущих, — восходит к работам Шапире и Фройнда конца 1990-х годов (AdaBoost). Обобщение бустинга как градиентного спуска в пространстве функций дал Джером Фридман в 2001 году, введя Gradient Boosting Machine (GBM): очередная базовая модель приближает антиградиент функции потерь на текущих предсказаниях ансамбля.
К середине 2010-х градиентный бустинг над деревьями стал одним из самых результативных методов для табличных данных, однако существующие реализации плохо масштабировались: при большом числе объектов и признаков поиск оптимальных расщеплений требовал многократного прохода по всем данным. XGBoost, представленный Ченом и Гестрином на конференции KDD 2016 года, решал именно эту проблему. Авторы предложили не столько новую математическую модель, сколько цельную систему: регуляризованную постановку с разложением второго порядка, аппроксимированный алгоритм поиска расщеплений на основе взвешенного квантильного эскиза, учёт разреженности данных и низкоуровневые оптимизации доступа к памяти. Совокупность этих приёмов позволила обучать модели на миллиардах примеров при существенно меньших вычислительных ресурсах, чем у аналогов.
Библиотека быстро стала стандартом де-факто в прикладном ML и на платформах вроде Kaggle. Последовавшие LightGBM и CatBoost переняли базовую идеологию XGBoost, оптимизируя отдельные её компоненты — стратегию роста дерева, обработку категориальных признаков и борьбу со смещением предсказаний.
Постановка задачи
Рассматривается обучающая выборка из объектов с признаковыми описаниями
и целевыми значениями
. Модель XGBoost — аддитивный ансамбль из
решающих деревьев:
,
где каждое принадлежит пространству регрессионных деревьев. Дерево задаётся структурой, которая относит объект к одному из
листьев, и вектором весов листьев
; предсказание дерева на объекте
равно весу того листа, в который этот объект попадает.
Отличие постановки XGBoost от обычного бустинга — в форме оптимизируемого функционала. Минимизируется регуляризованная целевая функция:
,
где — дифференцируемая выпуклая функция потерь, измеряющая расхождение предсказания и цели, а
— штраф за сложность отдельного дерева:
,
Здесь — число листьев дерева,
— вес
-го листа,
штрафует за количество листьев (управляет обрезкой дерева),
задаёт
-регуляризацию весов. Именно наличие
внутри критерия отличает XGBoost: сложность модели ограничивается не эвристиками пост-обрезки, а самой оптимизируемой функцией.
Алгоритм
Ансамбль строится жадно и аддитивно: на итерации к уже накопленному предсказанию добавляется одно новое дерево
, минимизирующее целевую функцию при фиксированных предыдущих деревьях.
Разложение второго порядка
Обозначим предсказание ансамбля после
итераций. Целевая функция на шаге
равна:
,
Раскладывая потери в ряд Тейлора до второго порядка по приращению , получаем:
,
где и
— первая и вторая производные потерь по текущему предсказанию:
,
Величины (градиент) и
(гессиан) вычисляются один раз в начале итерации и полностью описывают вклад каждого объекта. Слагаемое
не зависит от
и как константа отбрасывается. В отличие от GBM Фридмана, использующего только первый порядок, здесь учитывается кривизна потерь, что делает шаг оптимизации ближе к ньютоновскому.
Оптимальные веса листьев и оценка структуры
Структура дерева задаётся функцией , относящей каждый объект к индексу листа. Обозначим через
множество объектов, попавших в лист
, то есть тех, для которых
:
,
Поскольку все объекты одного листа получают один и тот же вес , упрощённую целевую функцию (без константы) можно сгруппировать по листьям:
,
где введены суммарный градиент и суммарный гессиан листа:
,
При фиксированной структуре дерева каждое слагаемое — парабола по . Приравнивая производную к нулю, находим оптимальный вес листа:
,
Подставляя обратно, получаем оптимальное значение целевой функции для данной структуры:
,
Эта величина играет роль оценки качества структуры (structure score): чем она меньше, тем лучше дерево. Она аналогична индексу неоднородности для обычных деревьев, но выведена напрямую из функции потерь и регуляризации, а не постулирована. Знаменатель показывает роль
-регуляризации: она сглаживает веса листьев с малым суммарным гессианом, не давая модели переобучаться на малочисленных листьях.
Критерий расщепления
Перебирать все возможные структуры дерева невозможно, поэтому дерево наращивается жадно: начиная с одного листа, на каждом шаге лист расщепляется, если это уменьшает целевую функцию. Выигрыш от расщепления листа на левую () и правую (
) части выводится как разность структурных оценок до и после:
,
Первые два слагаемых в скобках — вклад дочерних листьев, третье — вклад исходного листа до расщепления. Параметр вычитается как порог: расщепление принимается, только если выигрыш превосходит стоимость добавления нового листа. Это встроенный механизм обрезки: при
расщепление отвергается.
Точный и аппроксимированный поиск расщеплений
Точный жадный алгоритм (exact greedy) перебирает все возможные пороги по всем признакам: для каждого признака объекты сортируются, и величина пересчитывается для каждой возможной точки разбиения. Это гарантирует нахождение наилучшего расщепления, но требует хранить данные в памяти отсортированными и плохо масштабируется.
Аппроксимированный алгоритм рассматривает не все пороги, а лишь набор кандидатов — квантили распределения значений признака. Кандидаты можно предлагать один раз на всё дерево (глобальный вариант) или заново на каждом расщеплении (локальный, более точный, но более затратный). Между кандидатами объекты агрегируются в гистограммы сумм и
, что резко сокращает число вычислений
.
Взвешенный квантильный эскиз. Неочевидный, но принципиальный момент: квантили для кандидатов берутся не по равному числу объектов, а с весами . Обоснование следует из переписывания упрощённой цели в виде взвешенной квадратичной ошибки. Выделяя полный квадрат:
,
Правая часть — это взвешенная квадратичная ошибка с «псевдо-метками» и весами
. Значит, каждый объект вносит в задачу вклад, пропорциональный своей второй производной, и разбивать диапазон признака на кандидаты нужно так, чтобы суммарный вес
между соседними кандидатами был примерно одинаков. Для этого авторы построили специальную структуру данных — взвешенный квантильный эскиз с гарантией точности, работающий в распределённой среде. Именно эта деталь связывает второй порядок разложения не только с весами листьев, но и с самим выбором точек расщепления.
Учёт разреженности
Реальные данные часто разрежены: пропуски, нулевые значения, признаки после one-hot-кодирования. XGBoost вводит для каждого узла направление по умолчанию: объекты с отсутствующим значением признака автоматически отправляются в одну из ветвей. Само это направление выбирается из данных — перебираются оба варианта, и берётся тот, что даёт больший . При этом в переборе участвуют только объекты с наличествующими значениями, поэтому сложность поиска расщепления пропорциональна числу непропущенных значений, а не всех объектов. Этот приём (sparsity-aware split finding) даёт многократное ускорение на разреженных матрицах.
Регуляризация и защита от переобучения
Помимо и
в целевой функции, XGBoost использует два приёма, заимствованных из смежных методов. Усадка (shrinkage): вклад каждого нового дерева умножается на коэффициент скорости обучения
:
,
Малое оставляет «пространство» для последующих деревьев и снижает переобучение ценой большего числа итераций. Подвыборка признаков (column subsampling), позаимствованная у случайного леса, при построении каждого дерева использует случайное подмножество столбцов; это ускоряет обучение и дополнительно снижает корреляцию деревьев.
Свойства
Преимущества
- Регуляризация встроена в целевую функцию, а не добавляется эвристически, что даёт систематический контроль сложности модели.
- Разложение второго порядка использует кривизну потерь и приближает ньютоновский шаг, обеспечивая быструю и устойчивую сходимость.
- Поддерживает произвольную дважды дифференцируемую функцию потерь — достаточно задать
и
, что делает метод применимым к регрессии, классификации, ранжированию.
- Аппроксимированный поиск со взвешенным квантильным эскизом и учётом разреженности обеспечивает масштабирование на миллиарды объектов.
- Низкоуровневые оптимизации (блочное хранение в сжатом столбцовом формате, кэш-ориентированный доступ, внеоперативные вычисления) дают высокую скорость на практике.
Ограничения
- Множество гиперпараметров (
, глубина,
,
, доли подвыборки и др.), требующих аккуратной настройки.
- Уровневый рост дерева (по умолчанию) менее эффективен по числу листьев, чем листовой рост LightGBM, на очень больших данных.
- Исходно категориальные признаки требовали ручного кодирования; нативная поддержка появилась позже и уступает по проработанности CatBoost.
- Как и всякий бустинг, чувствителен к шуму в целевой переменной и склонен к переобучению при чрезмерном числе итераций без усадки.
Сравнение с LightGBM и CatBoost
Все три метода реализуют один и тот же каркас — регуляризованный градиентный бустинг со вторым порядком, — но расходятся в трёх ключевых компонентах.
Рост дерева. XGBoost по умолчанию наращивает дерево по уровням (level-wise): расщепляются все листья текущего уровня. LightGBM (Ke et al., 2017) использует листовой рост (leaf-wise): расщепляется лист с максимальным выигрышем, что при равном числе листьев даёт меньшую ошибку, но повышает риск переобучения и требует ограничения глубины.
Ускорение поиска расщеплений. LightGBM добавляет две техники. GOSS (Gradient-based One-Side Sampling) отбрасывает часть объектов с малыми градиентами: раз вклад объекта в информационный выигрыш растёт с величиной градиента, объекты с большими градиентами сохраняются полностью, а с малыми — прореживаются случайно. EFB (Exclusive Feature Bundling) объединяет взаимно разреженные признаки в один, сокращая эффективную размерность. XGBoost достигает похожей цели иначе — через взвешенный квантильный эскиз и учёт разреженности.
Категориальные признаки и смещение. CatBoost (Prokhorenkova et al., 2018) сфокусирован на двух проблемах. Упорядоченные целевые статистики кодируют категориальный признак средним значением цели, но вычисленным только по предшествующим в некоторой перестановке объектам — так устраняется утечка целевой переменной. Упорядоченный бустинг (ordered boosting) той же идеей борется со смещением предсказаний, когда градиенты оцениваются на тех же объектах, на которых обучается модель. CatBoost также использует симметричные (oblivious) деревья, где на каждом уровне применяется единое условие расщепления. XGBoost этих механизмов не имеет и полагается на регуляризацию и усадку.
Практический итог: XGBoost — надёжный универсальный выбор со зрелой экосистемой; LightGBM обычно быстрее на очень больших данных; CatBoost выигрывает при обилии категориальных признаков и склонности данных к утечкам. Различия компонентов, а не «магия», объясняют, почему на конкретной задаче один из методов может заметно опережать остальные.
Применение
XGBoost применяется прежде всего там, где данные представлены таблицами «объект — признаки»: кредитный скоринг и оценка рисков, детекция мошеннических транзакций, прогнозирование оттока клиентов, ранжирование в поисковых и рекомендательных системах, прогнозирование спроса и цен. На табличных данных он часто превосходит нейронные сети при меньших затратах на обучение и настройку. Метод также используется как сильный базовый уровень в исследованиях и как компонент ансамблей и стекинга в соревновательном ML.
См. также
Ссылки
- Chen T., Guestrin C. XGBoost: A Scalable Tree Boosting System (arXiv)
- Официальная документация XGBoost
- Репозиторий XGBoost на GitHub
Литература
- Chen T., Guestrin C. XGBoost: A Scalable Tree Boosting System // Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD '16). — 2016. — С. 785–794.
- Friedman J. H. Greedy Function Approximation: A Gradient Boosting Machine // The Annals of Statistics. — 2001. — Т. 29. — № 5. — С. 1189–1232.
- Ke G., Meng Q., Finley T., Wang T., Chen W., Ma W., Ye Q., Liu T.-Y. LightGBM: A Highly Efficient Gradient Boosting Decision Tree // Advances in Neural Information Processing Systems (NeurIPS). — 2017. — Т. 30. — С. 3146–3154.
- 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. — Т. 31. — С. 6638–6648.

