1. Основы CatBoost и подготовка данных: работа с классом Pool и нативными категориальными признаками
Основы CatBoost и подготовка данных: работа с классом Pool и нативными категориальными признаками
Добро пожаловать в курс «Мастерство CatBoost». Мы начинаем погружение в одну из самых мощных библиотек градиентного бустинга, разработанную компанией Яндекс. Если вы хотите научиться предсказывать сложные события — будь то исход футбольного матча, кредитный скоринг или погода — CatBoost станет вашим главным инструментом.
В этой статье мы разберем фундамент: что такое CatBoost, как правильно готовить данные (фичи) для спортивной аналитики и как использовать класс Pool для максимальной эффективности.
Что такое CatBoost и почему он особенный?
CatBoost (сокращение от Categorical Boosting) — это библиотека градиентного бустинга на деревьях решений. Его главная «суперсила» — умение работать с категориальными данными (названия команд, имена судей, стадионы) «из коробки», без долгой и мучительной предобработки.
Кратко о магии градиентного бустинга
Представьте, что вы пытаетесь предсказать исход матча «Спартак» — «Зенит». Вы можете спросить одного эксперта, но он может ошибиться. А что, если собрать совет из тысячи экспертов, где каждый следующий учитывает ошибки предыдущих?
Градиентный бустинг строит ансамбль (группу) слабых моделей — обычно это неглубокие деревья решений. Каждое следующее дерево исправляет ошибки, допущенные предыдущими.
Математически процесс обновления предсказания на шаге можно записать так:
Где:
Простыми словами: мы не пытаемся сразу построить идеальную модель. Мы строим простую, смотрим, где она ошиблась (например, переоценила шансы хозяев), и строим следующую модель специально для исправления этой ошибки.
!Визуализация принципа бустинга: сложение множества простых моделей для создания одной мощной.
Подготовка данных: какие фичи нужны для футбола?
Прежде чем скармливать данные модели, их нужно правильно собрать. В машинном обучении данные делятся на признаки (фичи) и целевую переменную (таргет).
Для футбольного матча хорошим набором данных будут:
Класс Pool: фундамент данных в CatBoost
Многие новички передают в CatBoost обычные pandas.DataFrame. Это работает, но для профессиональной разработки лучше использовать специальный класс — Pool.
Зачем нужен Pool?
Pool — это оптимизированная структура данных CatBoost. При её создании:
Практика: Создаем Pool для футбольного матча
Допустим, мы хотим предсказать победу домашней команды (1 — победа, 0 — нет).
Работа с категориальными признаками
Это главная причина выбрать CatBoost для нашей задачи. В футболе много категорий: сотни команд, десятки судей. В других библиотеках вам пришлось бы делать One-Hot Encoding (создавать колонки is_Spartak, is_Zenit...), что раздуло бы таблицу до огромных размеров.
CatBoost использует Ordered Target Statistics. Он превращает категорию (например, «Spartak») в число, основываясь на том, как часто эта команда побеждала в прошлом.
Суть метода (упрощенно) описывается формулой сглаживания:
Где:
Что это значит для вас?
Вам не нужно думать, как превратить «Зенит» в цифры. Вы просто отдаете строку «Зенит» в cat_features, и CatBoost сам вычисляет её «силу» на основе статистики побед.
Важные правила:
pandas колонки с командами имеют тип string или object.Обучение модели
Для предсказания победы (да/нет) мы используем CatBoostClassifier.
Тонкости параметров:
* iterations: В футболе много шума (случайных факторов). Не ставьте слишком мало итераций, дайте модели найти закономерности. Обычно начинают с 1000. * learning_rate: Если поставить слишком большой (например, 0.5), модель будет «скакать» и не найдет оптимум. Если слишком маленький (0.001) — будет учиться вечно. 0.03–0.1 — хороший старт. * depth: Глубина 6–8 оптимальна. Если поставить 10+, модель может начать запоминать конкретные матчи (переобучение), а не общие правила игры.
Обработка пропусков (Missing Values)
В футбольной статистике часто бывают дыры. Например, для матча второй лиги нет данных о владении мячом.
CatBoost имеет встроенный параметр nan_mode:
* 'Min': Считать пропуск минимальным значением (как будто владение было очень низким).
* 'Max': Считать максимальным.
* 'Forbidden': Выдать ошибку (если вы уверены, что пропусков быть не должно).
По умолчанию CatBoost сам решает, в какую ветку дерева (левую или правую) отправить объект с пропуском, чтобы минимизировать ошибку предсказания.
Резюме
Сегодня мы научились основам работы с CatBoost на примере футбольных матчей:
CatBoostClassifier отлично подходит для задач «победит / не победит».В следующей статье мы разберем, как оценивать качество нашей футбольной модели и что делать, если она предсказывает победу любимой команды слишком оптимистично (переобучение).