Как мы провели Новогодний ML-марафон Codenrock: задачи, формат, итоги

Новогодний ML-марафон — это онлайн-соревнование на Codenrock с автоматическим скорингом, лидербордом и 4 ML-задачами из разных направлений, объединёнными новогодним сюжетом в формате «решил за вечер».

Мы хотели сделать лёгкое праздничное событие без лишнего формализма, но с реальной практикой, чтобы участники прокачали навыки, получили понятную обратную связь по решениям и дошли до финала.

Коротко о проекте:

  • Цель: праздничное ML-соревнование с высокой вовлечённостью и короткими заданиями.
  • Формат: 4 задачи, авто-скоринг, лидерборд. Первые 2 задания открыты сразу, остальные — волнами.
  • Что сделали: концепция и сюжет, постановки задач, датасеты и метрики, шаблоны сабмита и правила, коммуникации через бот и email, сопровождение участников.
  • Результат: 507 регистраций, 422 обученные модели, 60 участников закрыли все задачи, около 40% дошли до финиша.

Формат марафона и правила

Новогодний ML-марафон был организован в формате онлайн-соревнования с несколькими этапами. Участники решали четыре тематические ML-задачи, объединённые общей новогодней концепцией, но различные по типу данных и постановке. 

Такой ритм помогал не перегружать участников: можно было закрывать задачи по одной и возвращаться к прошлым, чтобы улучшать результат.

Первые два задания были открыты с начала марафона. Остальные добавлялись с интервалом в несколько дней. Участники могли получить сертификат за текущее задание, пока не открылся доступ к следующему. Ранее открытые задачи оставались доступны до конца соревнования, и конкурсанты могли возвращаться к ним, чтобы повышать итоговый результат. Финальный рейтинг формировался на основе суммарных баллов по всем заданиям — по нему определялись лидеры марафона. . 

Дополнительно мы собрали рейтинг университетов по активности участников, чтобы добавить дружескую конкуренцию между вузами. Сперва он считался по каждой задаче отдельно: для вуза учитывались 15 лучших результатов его студентов. Баллы начислялись за решение лучше бейзлайна и за призовые места в лидерборде. Затем баллы по четырём задачам суммировались в итоговый рейтинг вузов.

Подготовка задач марафона

Для марафона команда Codenrock сформировала концепцию мероприятия, подготовила методологию задач и их техническую реализацию. Главная цель при разработке задач — найти баланс между доступностью и интересом. Задания должны были быть достаточно простыми, чтобы участник мог разобраться и собрать рабочее решение за вечер, но при этом давать пространство для экспериментов и соревнования. 

При подготовке задач команда опиралась на стандартный подход к проведению ML-соревнований, адаптируя его под формат короткого марафона с новогодней тематикой. 

  • Быстрый старт. Каждое задание опиралось на знакомые участникам классы задач: табличная классификация и регрессия, рекомендательные системы, компьютерное зрение, обработка текстов. 
  • Ограниченный, но реалистичный объём данных. Датасеты подбирались так, чтобы с ними можно было комфортно работать локально, но они сохраняли свойства реальных данных: шум, пропуски, перекрытия объектов, дисбаланс классов.
  • Фокус на вероятностях и ранжировании. В задачах использовались метрики, чувствительные к качеству ранжирования и калибровке предсказаний (ROC-AUC, NDCG, Macro-F1).  
  • Новогодняя атмосфера. Все задачи получили лёгкий сюжетный контекст, связанный с праздниками, бытом и повседневными ситуациями. История не подменяла собой ML-суть задачи: она делала условия более запоминающимися и помогала интуитивно понять, почему требуется такое предсказание или ранжирование.

Эксперты по ML-соревнованиям Codenrock отвечали за полный цикл подготовки задач:

  • формирование идеи; 
  • подготовку и валидацию датасетов;
  • выбор метрик и сценариев оценки;
  • разработку шаблонов сабмитов и проверок форматов;
  • тестирование заданий на базовых решениях, чтобы убедиться, что они решаемы в разумные сроки.

Такой формат позволил участникам попробовать себя сразу в нескольких типах задач и получить удовольствие от процесса. Для марафона был написан пролог: он задал новогоднее настроение, связал задания единым сюжетом и помог вовлечь конкурсантов ещё до старта. 

Задача 0. Пролог

История начинается с того, что молодой разработчик Вениамин в канун Нового года возвращается в родной городок. Он ещё не знает, что многочисленные победы в ML-соревнованиях сделали его местной легендой. Впереди — серия бытовых проблем, которые ему предстоит решить с помощью машинного обучения.

Узнать историю

«Внимание, внимание! Поезд Москва — Екатеринбург отправляется с 8 пути», — устало произнёс динамик женским голосом.

Вениамин вздрогнул от неожиданности и чуть не выронил сумку со своей главной драгоценностью — новеньким макбуком, который ещё ни разу не подвёл и на работе, и на хакатоне. Парень так привык к столичным цифровым табло и синтетическим фразам «Алисы», что живая речь на вокзале звучала чуждо и при этом неожиданно… по родному?

«Повторяю, поезд Москва — Екатеринбург…», — не унимался диктор, пока пассажир покидал платформу и направлялся к ближайшему автобусу.

Последние пару остановок Вениамин решил пройти пешком. Небольшой городок, затерявшийся посереди двух агломераций, почти не изменился с последнего визита: двухэтажки под высоченными деревьями приветливо мигали гирляндами, где-то неравнодушные соседи украсили ёлку во дворе. Только пунктов выдачи Ozon стало ещё больше.

И лишь увидев старый, уже давно опавший и такой знакомый тополь у подъезда панельки на Ленина, 24 (ведь в каждом российском городе есть улица Ленина), Вениамин наконец осознал: «Я дома».

Мама обняла быстро, крепко, а потом сразу отстранилась, чтобы разглядеть как следует. Отец выглянул из кухни и кивнул:

— Ну, здравствуй, звезда.
— Началось, — наигранно недовольным тоном ответил Вениамин.
— А как не начаться, — оживилась мама. — Тут уже решили: если что с компьютерами, так это к тебе. Ты ж про…

«Только не это!» — промелькнула мысль у парня.

— Про свои победы нам рассказал, — как ни в чём ни бывало продолжила она. — Мы с соседями поделились гордостью: и про кино, и про ту историю, где ты самого умного помощника для программистов сделал. Но это всё в Новом году. А теперь — за стол!

Только сейчас Вениамин понял, как сильно скучал по дому.

Задача 1. Выживет ли ёлка до 18 января?

Актуальность. В городок приехал известный режиссер снимать новогодний фильм. Для одной из сцен декораторам срочно нужны тысячи украшенных ёлок, которые ещё выглядят свежо. Соседям очень хотелось попасть на большой экран, поэтому они обратились к Вениамину с вопросом: могут ли современные технологии подсказать, с какой вероятностью ёлка в их квартире доживёт до даты съемок. 

Задача. Разработать модель машинного обучения, которая по характеристикам квартиры и условиям содержания новогодней ёлки предсказывает вероятность того, что она простоит в приемлемом виде до 18 января.  Целевая переменная — survived_to_18jan, которая принимает значение от 0 до 1. Чем выше число, тем больше шансов, что ёлка успешно противостоит сухому воздуху, котам и рискам от активного использования гирлянды. 

Данные. Задача требует работы с разнородными признаками: параметрами жилья, микроклимата, человеческого фактора и характеристиками самой ёлки. Участники получили классический ML-набор:

  • Обучающая выборка — признаки квартиры и ёлки.
  • Тестовая выборка — данные по всем 18 000 квартирам.
  • Шаблон сабмита.

Целевая метрика — ROC-AUC по вероятности. Важно не просто предсказать факт «простоит / не простоит», а корректно оценить шансы исхода, чтобы можно было ранжировать квартиры по степени сохранности ёлок.

Задача 2. Холодильник после праздников

Актуальность. В большом семейном холодильнике после Нового года осталось много еды. И это отлично, ведь после праздника силы на готовку на нуле. Но как распределить салаты, бутерброды и мандарины между многочисленными гостями и членами семьи, чтобы никто не ушёл обиженным? Вениамину предстояло разобраться с этой задачей.

Задача. Разработать рекомендательную модель, которая для каждого запроса из тестовой выборки формирует топ-5 блюд, упорядоченных по убыванию вероятности выбора пользователем. Модель должна учитывать контекст конкретного открытия холодильника и выдавать рекомендации строго из доступных кандидатов: для каждого запроса задан список из 20 блюд, которые реально находились в холодильнике в этот момент. 

Важно не просто угадать еду, а корректно расставить приоритеты и давать разнообразные рекомендации — повторы занимают слоты и ухудшают результат.

Данные. Для решения контекстной рекомендательной задачи необходимо учитывать разнородные признаки: характеристики гостей, состав блюд, ситуации выбора и ограниченный набор кандидатов. Участникам предоставлены следующие файлы:

  • Справочник блюд (200 позиций) с категориями, калорийностью, вкусовыми тегами и аллергенами. 
  • Профили 15 000 пользователей, включая предпочтения, ограничения и пищевые привычки.
  • Обучающая выборка, включающая более 300 000 событий, где каждому запросу соответствует одно фактически выбранное блюдо. 
  • Тестовые запросы — около 20 000.
  • Шаблон сабмита.

Целевая метрика — NDCG@5 по одному правильному блюду на запрос. Такой подход поощряет модели, которые не только угадывают блюдо, но и ставят его как можно выше в списке рекомендаций, что делает задачу ранжирования ключевой.

Задача 3. Колбаса или конфетти?

Актуальность. Праздник удался на славу, все гости счастливы! Кроме любимой бабули Вениамина — она места себе не может найти из-за своих ковров, которые она заботливо расстелила по всему дому. Они испачканы колбасой и конфетти, для их стирки нужны разные режимы, а сортировка займёт вечность. Вениамин вызвался решить эту проблему с помощью машинного обучения. 

Задача. Разработать модель компьютерного зрения, которая для каждого изображения оценивает видимые объекты двух типов:

  • долю пикселей, занятых конфетти;
  • долю пикселей, занятых кружочками колбасы.

Обе величины принимают значения от 0 до 1 и отражают, какую часть изображения занимают соответствующие объекты. Задание сводится к регрессии по изображению, где требуется корректно оценить относительные площади объектов в условиях шума и перекрытий.

Данные. Для решения задачи участникам предоставлен набор изображений и разметка с целевыми значениями:

  • Обучающие изображения с разметкой долей видимых объектов.
  • Таблица с целевыми значениями (c и s) для обучающей выборки.
  • Тестовые изображения для генерации предсказаний.
  • Шаблон сабмита.

В датасете присутствуют сложные случаи: близкие цвета объектов и фона, визуальный шум, размытие и частичные перекрытия. Это требует от модели умения различать объекты, а не полагаться на усреднённые оценки.

Целевая метрика. Качество решения оценивалось по ошибке предсказания двух долей, преобразованной в итоговую оценку в диапазоне от 0 до 1, где больше — лучше. 

Задача 4. Чат дома

Актуальность. Семья Вениамина зашла в домовой чат после Нового года и ужаснулась. Не все жители дома устроили себе социальный детокс на время праздников — за первые две недели набрались тысячи сообщений. Нельзя же проигнорировать эту переписку, вдруг там что-то важное? Вениамин решает разобрать все происходящее в домовом чате по полочкам. 

Задача. Разработать модель обработки естественного языка, которая по тексту из чата и простым временным признакам определяет, к какой теме относится сообщение. Для каждой сущности требуется выбрать ровно один доминирующий класс из 14 возможных. Если в сообщении затронуто сразу несколько тематик, модель должна определить основную. Поэтому участникам было необходимо учитывать как содержание сообщения, так и контекст времени его отправки.

Данные. Для решения задачи конкурсантам предоставлена история сообщений чата за период с 1 по 14 января, включающая текст и простые временные признаки. В набор данных входят:

  • Обучающая выборка — сообщения с текстом, временем отправки и размеченной темой.
  • Тестовая выборка — сообщения без указания темы.
  • Шаблон сабмита.

Каждое сообщение представлено текстом на русском языке и двумя дополнительными признаками: днём месяца и часом суток, которые могут помогать модели лучше различать контекст обсуждений.

Целевая метрика. Решения участников оценивались по Macro-F1 по 14 классам. Метрика одинаково учитывает все темы, включая редкие, поэтому модели важно не только хорошо справляться с популярными категориями, но и корректно различать менее частотные типы сообщений. 

Продвижение Новогоднего ML-марафона

Мы продвигали марафон как лёгкую практику на каникулах: короткие задачи, быстрый фидбек по результату и мотивация дойти до финала. Основные сообщения строились вокруг трёх причин участвовать:

  • Тренировка перед будущими конкурсами. Несмотря на шуточный формат, задания марафона — реальные практические задачи, с которыми сталкиваются ML-разработчики и в работе, и на соревнованиях. Формат помогает конкурсантам подготовиться к крупным мероприятиям по машинному обучению в 2026 году. 
  • Подтверждение своих навыков. Участники получали сертификаты, если занимали призовые места по итогам решения каждой задачи. Те, кто справился со всеми заданиями и стал победителем всего марафона, награждены дипломами. Награды станут приятным дополнением к резюме и подчеркнут практический опыт в ML.
  • Соревнование вузов. Каждый участник, выполняя задания, помогал своему вузу подняться в лидерборде. В конце марафона мы составили рейтинг активности университетов по результатам. 

Вся коммуникация с конкурсантами была выстроена через обновленного Telegram-бота Codenrock и email-рассылки. Помощник использовался для:

  • публикации анонсов новых задач;
  • напоминаний о правилах и сроках;
  • уведомлений об изменениях в лидерборде;
  • ответов на вопросы.

Такой подход позволил протестировать использование бота для общения и проверить, насколько эффективно он справляется с ролью основного коммуникационного канала в ML-мероприятиях.

В итоге Новогодний ML-марафон стал площадкой для экспериментов с форматами вовлечения и коммуникацией с участниками. Опыт соревнования показал, что интересные задачи, понятные правила и ценности способны заинтересовать и привлечь большую аудиторию. 

Итоги марафона

Этот Новый год запомнился и организаторам, и участникам по четырём задачам, сотням моделей и одному очень настойчивому ML-специалисту, который хотел подарить праздник всем. 

Главные цифры марафона: 

  • 507 участников зарегистрировались на марафон. 
  • 60 участников выполнили все задания.
  • 422 модели обучено за всё время соревнования. 
  • 12 конкурсантов получили сертификаты, заняв призовые места в каждой задаче в течение пяти дней после её открытия.
  • 5 победителей награждены дипломами в общем зачёте.

Для праздничного формата это редкий баланс: задачи были достаточно компактными, чтобы не утомлять, и достаточно интересными, чтобы участники возвращались и улучшали решения. Спасибо всем, кто провёл эти праздники вместе с Codenrock.

Отзывы организаторов

 Новогодний ML-марафон продолжил нашу традицию праздничных соревнований на Codenrock. Мы хотели подарить участникам новогоднее настроение и интеллектуальный драйв — и, похоже, у нас это получилось. Уровень вовлечённости оказался выше ожиданий. Мы думали, что многие ограничатся 1–2 часами в праздничные дни, но часть решений показала действительно высокий скоринг. На марафон пришли проактивные ребята разного уровня, и это ещё раз подтвердило: вокруг Codenrock сформировалось настоящее комьюнити. Что безусловно для нас лучший комплимент.

Анатолий Литвинов, методолог Codenrock, эксперт ML-марафона

Отзывы участников 

Иногда один честный разбор полезнее десятка отзывов. Участник марафона написал статью о том, как решал задачу про выживаемость ёлки: что пробовал, где ошибался, как боролся с переобучением и почему в итоге пришёл к рабочему подходу. Рекомендуем прочитать — много полезных наблюдений, которые пригодятся и в соревнованиях, и в работе: https://habr.com/ru/articles/987310/ 


    Оставьте заявку, мы подберем для вас лучшие решения для работы с ИТ-сообществом

    Будьте в курсе лучших кейсов хакатонов, ML-турниров, CTF и соревнований по спортивному программированию на Codenrock
    Добавить комментарий