Что такое ordered boosting в CatBoost?
Ответ от нейросети
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-подход для построения статистик и градиентов, чтобы уменьшить смещение и переобучение на обучающей выборке.
Если разложить по шагам:
- Передаются признаки и целевая переменная.
- Указываются категориальные столбцы.
- Модель обучается как градиентный бустинг по деревьям.
- Для части внутренних вычислений CatBoost использует ordered logic, чтобы не использовать информацию из текущего объекта раньше времени.
Ключевые моменты:
- Ordered boosting уменьшает leakage при обучении бустинга.
- Он особенно полезен для табличных данных с категориальными признаками.
- В CatBoost помогает строить более честные target statistics.
- Обычно даёт более устойчивое качество и меньше переобучается на train.
- Это одна из причин, почему CatBoost часто хорошо работает “из коробки” на табличках.