Sobes.tech
Back to questions
Middle — Senior
11

Что такое ordered boosting в CatBoost?

Companies where asked
Билайн

Answer from AI

sobes.tech AI

Что хотят услышать интервьюеры:

Ordered boosting в CatBoost — это способ обучать бустинг так, чтобы для каждого объекта предсказание строилось только по тем данным, которые могли быть известны до него. Это снижает target leakage и делает оценку категориальных признаков и градиентов менее смещённой. На практике это помогает CatBoost лучше работать на табличных данных, особенно с большим числом категорий.

Определение:

Ordered boosting — это схема обучения градиентного бустинга, в которой объекты обрабатываются в некотором порядке, а при вычислении статистик и предсказаний для текущего объекта используются только предыдущие объекты из этого порядка. Идея в том, чтобы не “подглядывать” в целевую переменную самого объекта и не использовать информацию из будущего, которая в обычном бустинге может приводить к переобучению.

В CatBoost это особенно важно для работы с категориальными признаками: целевые статистики для категорий считаются так, чтобы для каждого объекта использовать только историю до него. За счёт этого модель получает более честные признаки и более устойчиво обучается.

Пример использования:

Допустим, есть таблица с признаками клиентов банка, включая категорию city, и нужно предсказать, уйдёт ли клиент. Если считать средний отток по city сразу по всей выборке, то текущий объект “увидит” собственную метку, и качество на обучении будет завышено. Ordered boosting строит такие статистики последовательно, поэтому для клиента из города Moscow учитываются только предыдущие клиенты из Moscow, а не он сам.

from catboost import CatBoostClassifier

model = CatBoostClassifier(
    iterations=500,
    depth=6,
    learning_rate=0.1,
    loss_function='Logloss',
    # В CatBoost ordered boosting используется как одна из схем обучения
    # и помогает уменьшить leakage на табличных данных
)

model.fit(X_train, y_train, cat_features=[0, 3, 5])

Пояснение кода:

Код показывает типичное обучение классификатора CatBoost на табличных данных с категориальными признаками.
cat_features=[0, 3, 5] указывает, какие столбцы являются категориальными, и CatBoost обрабатывает их с учётом своих внутренних схем кодирования.
Внутри обучения CatBoost применяет ordered-подход для построения статистик и градиентов, чтобы уменьшить смещение и переобучение на обучающей выборке.

Если разложить по шагам:

  1. Передаются признаки и целевая переменная.
  2. Указываются категориальные столбцы.
  3. Модель обучается как градиентный бустинг по деревьям.
  4. Для части внутренних вычислений CatBoost использует ordered logic, чтобы не использовать информацию из текущего объекта раньше времени.

Ключевые моменты:

  • Ordered boosting уменьшает leakage при обучении бустинга.
  • Он особенно полезен для табличных данных с категориальными признаками.
  • В CatBoost помогает строить более честные target statistics.
  • Обычно даёт более устойчивое качество и меньше переобучается на train.
  • Это одна из причин, почему CatBoost часто хорошо работает “из коробки” на табличках.