Ordered boosting устраняет target leakage — каждое дерево обучается только на «прошлых» точках случайной перестановки. Нативная поддержка категориальных признаков без ручного encoding.
Наблюдайте как ordered encoding и симметричные деревья работают на каждом шаге
Датасет
Таблица первых 6 точек с ordered и naive encoding, остатками и предсказаниями.
Как ordered boosting устраняет target leakage и почему симметричные деревья быстрые
⚠️ Наивный подход (с утечкой)
Преподаватель проверяет сочинения и выводит «средний балл по теме» — включая само это сочинение. Студент знает, что его оценка влияет на среднее, которым его же и оценивают. Это накручивает результат.
✓ Ordered подход (CatBoost)
Студентов рассадили в случайном порядке. Оценка каждого считается как среднее только тех, кто сдал раньше него в этой же очереди. Первый студент получает «пустой» ориентир (глобальное среднее) — и это честно.
CatBoost делает то же самое: для каждой итерации генерируется случайная перестановка σ, и каждая точка кодируется через среднее предшественников в σ, а не через всё множество. Никакой утечки целевой переменной.
На каждой итерации генерируется перестановка σ. Дерево для точки σ(i) обучается только на {σ(1)...σ(i-1)} — никакой утечки целевой переменной.
Категория кодируется через среднее y только «прошлых» точек в σ. Первая точка получает глобальное среднее (prior). Честно, без циклической зависимости.
Симметричные деревья: все узлы одного уровня используют один порог. Предсказание — просто поиск листа по d бинарным вопросам. Быстро и регулярно.
В стандартном бустинге точка i используется и для обучения дерева h_m, и для вычисления резидуала, на котором h_m обучается. Это создаёт «самоссылку» — модель видит свои же ошибки и «читерит». CatBoost разрывает этот круг через перестановку.
| Критерий | GBM | LightGBM | CatBoost |
|---|---|---|---|
| Категориальные признаки | Ручной encoding | Ручной encoding | ✅ Встроенный ordered |
| Структура дерева | Симметричное / асим. | Leaf-wise (асим.) | Oblivious (симм.) |
| Target leakage | ⚠️ Возможен | ⚠️ Возможен | ✅ Устранён ordered |
| Скорость обучения | Медленный | ✅ Быстрый | Средний |
| Защита от overfitting | Средняя | Средняя | ✅ Высокая |
CatBoost использует ordered boosting: каждое дерево обучается на подмножестве «прошлых» точек перестановки. Это действует как встроенная регуляризация — variance растёт медленнее, чем у стандартного бустинга, потому что каждое дерево видит меньше точек и меньше «подгоняется» под шум.
Оборотная сторона: bias снижается чуть медленнее, чем у LightGBM с leaf-wise ростом. Зато оптимум по n_estimators шире — модель менее чувствительна к точному количеству деревьев, что удобно в продакшне.
Ordered boosting удерживает variance низким — кривая Total Error имеет широкое плато. Это означает, что CatBoost менее чувствителен к переобучению при большом числе деревьев.
| Параметр | Bias | Variance | Рекомендация |
|---|---|---|---|
| depth ↑ | ↓ снижает | ↑ повышает | Начни с 4, увеличивай осторожно |
| learning_rate ↑ | ↓ снижает | ↑ повышает | Малый lr + больше деревьев = стабильнее |
| lambda ↑ | ↑ повышает | ↓ снижает | Явная регуляризация листьев; default=3 |
| n_estimators ↑ | ↓ снижает | ~ медленно | Ordered boosting замедляет рост variance |
Ordered encoding, симметричные деревья и L2-регуляризация листьев
Ordered target encoding для категориального признака:
Предсказание симметричного дерева глубины d:
Значение листа (L2-регуляризованное):
Правило обновления (как в GBM):
Обозначения — наведи мышкой для объяснения:
Вход: D = {(x_i, cat_i, y_i)}, η, M, depth, λ, w# датасет и параметрыF₀ ← mean(y)# начальное предсказаниедля m = 1..M:# основной цикл бустингаσ_m ← random_permutation(n, seed=m)# новая перестановка каждый разenc ← orderedTargetEncode(cat, y, σ_m, w)# честный encoding без leakager_i ← y_i − F_{m−1}(x_i) для каждого i# псевдо-остаткиT_m ← buildObliviousTree([x, enc], r, depth, λ)# симметричное дереволистья: ω_b ← Σ_{i∈leaf_b} r_i / (|leaf_b| + λ)# L2-регуляризованные значенияF_m(x) ← F_{m−1}(x) + η · T_m(x)# обновление ансамблявернуть F_M# итоговый ансамбль
Ключевое отличие от GBM: на каждом шаге m генерируется новая перестановка σ_m и для неё пересчитывается ordered encoding. Это предотвращает накопление bias от leakage.
5 домов, 3 раунда, η=0.3, λ=3, prior_weight=1.0 — считаем каждый шаг с ordered encoding.
Датасет. У нас 5 домов с двумя признаками: числовая площадь и категориальный район (A или B).
| i | площадь | район | цена (y) |
|---|---|---|---|
| 1 | 50 | A | 3.2 |
| 2 | 80 | B | 4.5 |
| 3 | 60 | A | 3.5 |
| 4 | 100 | B | 5.8 |
| 5 | 70 | A | 4 |
Шаг 1 — начальное предсказание F₀. Как и в GBM, стартуем с константы — среднего целевой переменной:
Шаг 2 — проблема с категориями. Категориальный признак «район» нельзя передать в дерево напрямую. Нужен числовой encoding. Наивный способ — среднее y по всем точкам с тем же районом:
Это target leakage: encoding точки 4 (B, y=5.8) зависит от самой цены 5.8. Дерево "видит будущее" — оно обучается предсказывать то, что уже зашито в признаки. CatBoost решает это через ordered encoding.
Что важно запомнить
| Ситуация | Рекомендация |
|---|---|
| Датасет с категориальными признаками | ✅ CatBoost — встроенный честный encoding |
| Небольшой датасет (<50K строк) | ✅ Ordered boosting уменьшает variance |
| Нужна скорость inference | ✅ Oblivious trees = d сравнений + lookup |
| Очень большой датасет (>1M строк) | ⚠️ LightGBM быстрее обучается |
| Только числовые признаки | ⚠️ Преимущество CatBoost менее выражено |