Разбор решений финалистов Чемпионата по искусственному интеллекту 🤖 RuCode 2025

🔹 00:01 — 00:09 — Решение команды «КАКАПО» (1 место, Юниоры).
Подход: команда школьников сфокусировались на признаках контента, а не пользователей.
Ключевые фичи:
Текстовые embedding: склеили все категориальные текстовые признаки (жанр, режиссер и т.д.) и применили TF-IDF.
Z-score длительности: учли, что длительность контента сильно зависит от его типа (например, детский контент короче).
Модель: XGBoost показал лучший результат, обойдя CatBoost, так как лучше работал с шумными embedding-ами.
Сложности: попытки добавить временные фичи (разница между просмотрами) не дали прироста. Заполнение пропусков ухудшало качество, поэтому NANы оставили как отдельную категорию.
🔹 00:14 — 00:19 Решение команды «Oр_11_фей» (1 место, Профессионалы)
EDA — это всё: команда провела детективное расследование данных.
«Попугаи» вместо секунд: общая длительность (total_duration) была в непонятных единицах. Они выяснили, что для фильмов она сильно коррелирует с таргетом, и нашли аналитический порог в 3000 «попугаев» для 50% просмотра. Это дало +0.2 к метрике!
Временной дрейф: обнаружили и исправили «путешественников во времени» — пользователей, которые смотрели контент из будущего.
Модель: CatBoost на всего 7 признаках. Ансамблирование 5 моделей дало финальный результат.
👉 Вывод: глубокий анализ данных (EDA) и создание осмысленных фичей часто важнее сложности модели.
💳 Задача 2 от Сбера «Поиск инвесторов»
Условие: предсказать, откликнется ли клиент на инвестиционное предложение. Метрика — F1.
🔹 00:25 — 00:31 — Решение команды «Bot.Zavod» (1 место, Профессионалы)
Предобработка: One-Hot Encoding для категориальных признаков и StandardScaler для числовых.
Важный момент: чтобы избежать утечки данных, масштабирование обучалось только на train, а на test применялся только .transform().
Модель: GradientBoostingClassifier из Sklearn. Гиперпараметры подбирались через GridSearchCV.
Сложность: фиксация SEED для воспроизводимости и борьба с несоответствием колонок после OHE между train и test.
👉 Вывод: корректная предобработка и внимание к мелочам (как утечка данных при масштабировании) — критически важны для успеха.
🛡 Задача 3 от Сбера «Финансовый щит»
Условие: Определить мошеннические транзакции в реальном времени. Метрика — PR-AUC.
🔹 01:00 — 01:06 — Решение команды «Мертвые души»
EDA: выявили сильный дисбаланс классов и то, что мошенничество часто происходит через канал P2P.
Модель: после базовых модель (логистическая регрессия, CatBoost) команда создала нейросеть с двумя линейными слоями, BatchNorm и Dropout.
Ключевая идея: использование BCEWithoutLogitLoss вместо стандартной дало прирост в 5%, так как мошенничество — это аномалия, и логиты могли терять важную информацию.
🔹 01:07 — 01:11 — Решение команды «Oр_11_фей» (1 место)
Борьба с дисбалансом: разбили majority-класс на 14 частей, соединили каждую с minority-классом и обучили 14 моделей CatBoost, затем применили бэггинг.
Валидация: учли временной дрейф, разбив данные по дате.
Фичи: создали признак «отношение суммы транзакции к средней за 7 дней» и нормализовали его по правилу трех сигм.
👉 Вывод: для задач с сильным дисбалансом требуются специальные техники (апсэмплинг, взвешивание классов, ансамблирование).
📊 Задача 4 от Группы компаний «Астра»: классификация затрат (CAPEX/OPEX)
Условие: по описанию задачи отнести ее к капитальным (CAPEX) или операционным (OPEX) расходам. Метрика — F1 Macro.
01:19 — 01:24 — Решение Ивана Савкина (1 место)
Простота — ключ к успеху: лучшее решение с F1=1.0 — это линейная модель (SVC) в пайплайне.
Фичевый инжиниринг:
Тексты: векторизация task_subject с помощью TF-IDF на основе предобученного токенайзера (RuBERT). Это помогло учесть морфологию русского языка.
Важность признаков: линейная модель показала, что task_subject дает 97% результата. Остальные признаки (task_type, hours и т.д.) были добавлены с меньшим весом.
Результат: модель весит 3.5 МБ и обучается менее чем за секунду!
👉 Вывод: не всегда нужны трансформеры и градиентный бустинг. Всегда начинайте с простых моделей и тщательного фичевого инжиниринга — это может дать панацею.
🎯 Общие выводы для всех участников:
Глубокий EDA решает. Лучшие команды потратили больше всего времени на анализ и понимание данных, а не на перебор моделей.
Осмысленные фичи > сложные модели. Аналитически найденные пороги (как «попугаи» от «Oр_11_фей») дают огромный прирост.
Доверяйте, но проверяйте. Всегда проверяйте данные на временной дрейф, утечку информации и корректность разбиения.
Катбуст — король табличных данных, но XGBoost может выиграть на шумных или текстовых признаках.
Решайте проблему, а не задачу. Участники думали о природе данных: почему контент важнее пользователя? почему есть «попугаи»? что на самом деле означают признаки?
Поздравляем всех финалистов и благодарим партнеров (MWS, Сбер, Группу компаний «Астра») за крутые и практические задачи 🙌
Было полезно? Ставь лайк и делись с друзьями, кто хочет прокачаться в Data Science ❤
#RuCode #ИскусственныйИнтеллект #AI #DataScience #MachineLearning #MTS #Сбер #Астра #Образование #Соревнования