- CatBoost
- + LightGBM, k-fold кросс-валидация
- macro-F1
- Целевая метрика с подбором порога
- 5+
- Объединённых источников данных
Технологии
- Python
- pandas
- NumPy
- scikit-learn
- CatBoost
- LightGBM
- SHAP
Задача
Предсказать пол пользователя по набору разнородных поведенческих сигналов — география, векторы реферера и другие табличные признаки — распределённых по нескольким отдельным файлам, которые сначала нужно очистить и объединить в единый обучающий набор. Метрика оценки — macro-F1, поэтому модель должна работать хорошо по всем классам, а не только на преобладающем.
Подход
Я построил сквозной пайплайн: загрузка и очистка исходных файлов, объединение источников train / test / меток / гео / векторов реферера по ключам, инженерия признаков на объединённой таблице и обучение моделей градиентного бустинга (CatBoost и LightGBM). Модели проверялись k-fold кросс-валидацией, а порог принятия решения подбирался именно для максимизации macro-F1, а не общей точности, с сопоставлением результатов с более простыми базовыми решениями.
Результаты
Воспроизводимый пайплайн, который доводит сырые данные из нескольких источников до настроенного классификатора с кросс-валидацией. Подбор порога по macro-F1 заметно улучшил сбалансированное качество по сравнению со стандартной отсечкой 0,5, а анализ SHAP и кривых сделал поведение модели интерпретируемым.
Инженерные решения
- Сквозной пайплайн: загрузка, очистка и объединение источников train / test / меток / гео / векторов реферера.
- Инженерия признаков на разнородных входных данных, затем модели градиентного бустинга (CatBoost, LightGBM).
- k-fold кросс-валидация с подбором порога по macro-F1 и сравнением с базовыми решениями.
- Анализ через SHAP и оценка по кривым ROC и precision-recall.
Скриншоты и схемы
Реальные снимки интерфейса и графики — исходный код закрыт, бренды клиентов не показаны.
Подробный разбор
Самое интересное здесь — не выбор модели, а работа с данными и целевая метрика. Исходные данные приходят несколькими разрозненными файлами, которые нужно корректно объединить прежде, чем вообще начинать моделирование, а целевая метрика — macro-F1 — вознаграждает сбалансированное качество по классам. Это превращает задачу из «обучить классификатор» в «сконструировать чистые признаки и выбрать рабочую точку, максимизирующую сбалансированный F1» — а именно там и окупились подбор порога и кросс-валидация.