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

Разбор решений финалистов Чемпионата по искусственному интеллекту 🤖 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 #Сбер #Астра #Образование #Соревнования



Report Page