TGViewer
Ebout Data Science | Дима Савелко Ebout Data Science | Дима Савелко @eboutdatascience · 7.55K subscribers
Post #671 1.89K
Вопрос с собеса ВТБ на 360к - как CatBoost кодирует категории под капотом?🦔

Зачастую на интервью 300к+ собеседующий не будет полчаса расспрашивать, как обучается бустинг - на таких собесах любят копать в детали, поэтому сегодня разбираем вопрос как CatBoost кодирует категории под капотом?

То, что CatBoost на спокойнычах хавает категориальные фичи из коробки, знают все, а вот на вопросе «а как именно?» посыпаться легко

Главная фишка - Ordered Target Statistics 🤨
Классический Target Encoding code ("Москва") = mean(y | city=="Москва") утекает: в код объекта зашит его собственный таргет, но CatBoost решает это перестановкой.

Формула из доки:

avg_target = (countInClass + prior) / (totalCount + 1)


- countInClass - сколько раз таргет превысил порог среди объектов с той же категорией, обработанных до текущего
- totalCount - сколько таких объектов встретилось до текущего
- prior - сглаживание, спасает редкие категории от вырождения в само значение (0, 1, 2, 3 и т.д.)


Допустим, таргет принимает значения 0 и 1 (бинарная классификация). Порог тут один: y == 1. Тогда:
- countInClass = сколько объектов с той же категорией до текущего имели y == 1
- totalCount = сколько объектов с той же категорией до текущего было всего
- avg_target = (countInClass + prior) / (totalCount + 1) — это просто доля единиц, но сглаженная и посчитанная без текущего объекта


CatBoost делает случайную перестановку выборки (вообще несколько перестановок) и для каждого объекта считает avg_target. Свой таргет в своё кодирование не попадает, а значит утечки нет по построению, несколько перестановок усредняют шум первых объектов.

Ещё есть параметр one_hot_max_size: если уникальных значений в категории мало, включается One-Hot, и avg_target не считается.

Вторая киллер-фича - CatBoost во время обучения сам строит комбинации признаков. Пара city и device склеивается в новый признак city|device, который кодируется тем же Ordered TS

Итог: По категориям считается avg_target по предшественникам на нескольких перестановках, если значений мало - One-Hot, плюс модель сама собирает комбинации категорий.

Наебеньте огней если нравится такой технически-анальный контент 🔥
  • 🔥 54
  • ❤ 7
  • ❤‍🔥 5
  • 🤣 1
More from @eboutdatascience
  1. Sep 22, 2026Найм, накрутка и ИИ всех заменит - эфир с лидом из Сбера 🌟 На созвонах с учениками и ребя…
  2. Sep 19, 2026Друзья, нужна ваша помощь У нашего ученика Вадима нашли рак ободочной кишки в 19 лет. Несм…
  3. Sep 16, 2026С помощью чего бедолаги получают оффер - коммьюнити 🥷 Что происходит под капотом получени…
  4. Sep 14, 2026ЖЁСТКОЕ Собеседование по DS/ML: Accuracy, Precision, Recall, F1, ROC-AUC, PR-AUC 👀 Почти…
  5. Sep 10, 2026Вопрос ответ - запись со стрима 😋 Помимо записи с декларацией Глеба, я в закрытый тгк выл…
  6. Sep 9, 2026Декларация до оффера 300к+ - часть 2, Глеба чуть не разорвали на четыре части 💪 Это втора…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →