Search
Write a publication
Pull to refresh
73.45
Холдинг Т1
Многопрофильный ИТ-холдинг

Data Fusion Contest 2025: разбор и итоги серии соревнований

Level of difficultyMedium
Reading time14 min
Views424

Привет, Хабр!

В этом году Т1 совместно с ВТБ организовал соревнование Data Fusion Contest 2025 — ставшее ежегодной традицией событие, которого с нетерпением ждут и участники, и мы сами. Ссылка на фотографии.

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

В 2025 году увеличились и число задач, и призовой фонд — участники бились уже за 3 000 000 рублей:

  1. Задача Labelcraft: категоризация текстов в контейнерном формате с призовым фондом 2 000 000 рублей.

  2. Задача 4Cast: прогнозирование временных рядов в классическом табличном формате с призовым фондом 1 000 000 рублей.

  3. Образовательная задача Distribution: предсказание распределений клиентских трат в классическом табличном формате с призами в виде мерча.

Давайте разбираться, что из этого получилось в итоге и какие идеи реализовали участники, занявшие топовые места в призовых индустриальных задачах!

Первая задача, LabelCraft

В этом году в главной задаче соревнования участникам было необходимо разработать алгоритм категоризации товаров по их названию и атрибутам.

Изюминка задачи заключалась в её максимальном приближении к реальной практике — данные были неполными, разметки не хватало, а получить работающее решение всё равно требовалось.

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

Так как мы живём в 2025 году, решать ситуацию с неполной разметкой предполагалось с помощью больших языковых моделей (LLM). На первом митапе организаторы соревнования провели воркшоп, где продемонстрировали участникам, как это можно было сделать с помощью локально развернутых моделей.

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

Постановка задачи

Категоризация товаров по их описанию — это, в контексте соревнования, задача multi‑class классификации на 1896 классов. Еще одной отличительной особенностью задачи является то, что категории были организованы в виде иерархического дерева (до 5 уровней вложенности).

Метрикой в соревновании выступала Hierarchical Discounted Accuracy (HDA). По сути, это почти как привычный Accuracy, но учитывающий структуру дерева категорий. Например, если конечная категория была предсказана неверно, но при этом ветвь дерева была выбрана правильно, то вместо 0 данное предсказание получало некоторое число от 0 до 1 (подробнее лучше посмотреть на странице соревнования).

Эта задача решалась в контейнерном формате: участникам нужно было собрать свой Docker‑образ и отправить архив с моделями и кодом. Решения запускались в изолированной от интернета среде на закрытых тестовых данных. Учитывая актуальность применения языковых моделей в этой задаче, все необходимые решениям модели должны были уместиться внутри контейнера и по памяти, и по времени.

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

Второе место, Андрей Кузнецов

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

Данных было достаточно много: порядка 700 000 размеченных товаров, и столько же товаров без разметки. Несмотря на свой немалый размер, из размеченной части данных можно было выжать больше пользы:

  • Первым делом были удалены дубликаты (порядка 53 000 товаров).

  • Затем была добавлена появившаяся в середине соревнования дополнительная разметка. Она достаточно сильно повышала качество решения, поэтому была добавлена в двух копиях (2 х 25 000 товаров).

  • Еще больше разметку можно расширить за счёт атрибутов товаров. У порядка 109 000 товаров был атрибут «Название», который отличался от основного официального названия товара. Эти товары также были повторно использованы как дополнительная разметка.

Также к строке с названием добавлялись атрибуты и их значения в порядке встречаемости в данных. Чтобы сэкономить длину строки, из неё убирались все числа и слова «да». Атрибуты помогли модели лучше предсказывать редкие категории. И в самом конце итоговая строка приводилась к нижнему регистру.

Важной чертой победных решений было то, что они учитывали особенности иерархической классификации:

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

  • Так как истинные метки категорий могут быть на разных уровнях дерева, необходимо внести поправку на длину пути. Сделать это можно простым извлечением корня.

  • Эти идеи окажутся равносильны тому, чтобы минимизировать среднее арифметическое кросс‑энтропий среди кандидатов на каждом уровне дерева.

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

Модели брались с лидерборда бенчмарка мультиязычных эмбеддеров MTEB. Изначально, в качестве базовой модели, использовалась multilingual‑e5-small, которая была лучшей среди моделей малого размера:

  • Использовался префикс «query» для товаров, и «passage» для самих категорий.

  • Максимальная длина была 192 токена.

  • Так как разметка была неидеальной, во время обучения использовался label smoothing в 0.1, чтобы не сильно терять вклад редких категорий.

Ближе к концу соревнования была взята еще одна модель, несколько больше: sergeyzh/BERTA. У нее использовались другие префиксы: search_query и search_document. Хоть максимальная длина в токенах уменьшилась до 128, с помощью этой модели удалось подрасти на 1% на лидерборде, то есть с седьмого места на четвертое.

И финальным шагом было вспомнить про неразмеченную часть товаров и pseudo‑labelling:

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

  • Если предсказания категорий от обеих моделей полностью совпадали (в 90% случаев), то эти товары шли как итоговое дополнение разметки. То есть, это увеличило обучающую выборку почти в 2 раза.

  • Итоговым решением была базовая модель, обученная в том числе и на псевдо‑разметке.

Первое место, Никита Трифонов

Главная сложность в этой задаче — научиться предсказывать категории, для которых отсутствуют размеченные товары в обучающей выборке. Справиться с этим может помочь Zeroshot подход:

  • Мы не будем сами обучать какие‑либо модели, а возьмем готовые предобученные LLM.

  • Будем использовать предобученные модели для получения эмбеддингов текстов: как для самих товаров, так и для категорий.

  • Ожидается, что если товар принадлежит категории, то вектора эмбеддингов будут похожи. Например, будут иметь высокую косинусную близость.

  • Из этого просто сделать классификатор: посчитать вектора для всех категорий, сравнить вектора товара и каждой из категорий, и выбрать наиболее близкую из них.

  • В качестве модели для получения эмбеддингов выбрал alibaba‑nlp/gte‑qwen2–7b‑instruct. Модель показывала высокие результаты как на бенчмарках, так и на задаче соревнования.

Для классификации известных категорий, для которых имелась разметка, использовался типовой подход на основе BERT‑подобных моделей, с парой доработок:

  • Брались готовые предобученные BERT модели, которые дообучались под нашу multi‑class задачу классификации.

  • Чтобы решить проблему дисбаланса классов, было добавлено сбалансированное семплирование (не более 5000 примеров на каждую категорию за эпоху).

  • Вместо кросс‑энтропии использовался Arcface loss. С ним модель на выходе вместо скоров или вероятностей даёт косинусные близости к классам. Это удобно при объединении этих моделей с Zeroshot подходом.

  • Использовались 4 BERT‑а: 2 мультиязычных и 2 русскоязычных модели.

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

  • Названия категорий тоже подавались как пример соответствующего класса (полезно для классов с малым количеством наблюдений);

  • Дополнительный loss на категорию второго уровня.

С этими 2 подходами мы имеем возможность рассчитать для любого товара косинусные близости как Zeroshot подходом, так и дообученными моделями. Осталось оба этих подхода объединить в одно решение:

  • Полученные близости от обоих подходов можно взвесить, улучшив тем самым качество. Причем взвешивать можно не только усреднением 50/50.

  • Можно посчитать согласованность 4 дообученных моделей: если все модели предсказывают разные категории, то мы считаем, что нужно больше доверять Zeroshot подходу и взвешивать его уже с пропорцией 70/30.

  • После взвешивания итоговых близостей делался простой пост‑процессинг: из‑за особенностей метрики было всегда выгодно предсказывать листовую (конечную) категорию. Поэтому нелистовые категории в предсказаниях заменялись на дочерние листовые категории, наиболее близкие для соответствующего товара.

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

  • В этом страховочном решении использовался простой бинарный классификатор на основе Catboost;

  • Задача классификатора — предсказать, принадлежит ли товар к известной и встречавшейся нам в размеченных данных категории, или нет;

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

На основе классификатора принималось решение по порогу: если вероятность, что товар относится к известной категории, больше 10%, то делаем все, как в основном решении. В противном случае делаем предсказание Zeroshot подходом исключительно среди неизвестных категорий.

Вторая задача, 4Cast

Вторая задача, с призовым фондом в 1 000 000 рублей, была про прогнозирование. Участникам было необходимо по истории транзакций клиентов банка ВТБ предсказать объем исходящих транзакций для каждого клиента на следующие 12 недель.

Главная особенность этой задачи — абсолютно рекордный объем данных транзакций, которые передавались участникам — более 250 000 000 штук. В этом соревновании участники работали с транзакциями юридических лиц (компаний), что делало задачу интереснее. Самих компаний было более 50 000, и временной ряд нужно было спрогнозировать для каждой из них.

Беспрецедентный объем данных открывал возможность строить огромное количество дополнительных временных рядов. Помимо этого, участникам были предоставлены данные о профилях компаний, что также могло быть полезным для более точного прогноза.

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

Постановка задачи

Прогнозирование на следующие 12 недель удобнее всего рассматривать как задачу многомерной регрессии. По каждому клиенту, на основе из истории транзакций за последние 2 года, требуется предсказать следующие 12 недель их суммарных переводов со счетов в ВТБ.

В качестве метрик использовалась RMSLE, которая сперва считалась на уровне отдельных клиентов, а уже после — усреднялась по всем клиентам. Публичный и приватный тесты, следуя классике прогнозирования, были разделены по времени: 4 недели паблик, а оставшиеся 8 — приват.

Второе место, Кирилл Кривошеев

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

  • Данные были переразбиты на 118 небольших файлов, по 1 файлу на каждую неделю исторических данных.

  • Последовательная работа с файлами по одному позволила существенно снизить нагрузку на память во всем решении.

  • Для максимально быстрой работы с данными используем библиотеки cudf и polars.

  • В результате сборка выборки со всеми признаками занимала не более 20–30 минут.

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

  • Так как требовалось прогнозировать на 12 недель вперед, эти 12 будущих лагов собирались в 12 целевых переменных.

  • Для локальной валидации использовались последние 20 недель.

  • Сами признаки собирались за предыдущие 70 недель.

То есть, для каждой недели, используемой для сборки целевой переменной, собирались 12 блоков с признаками от 1 до 12 недель назад. Затем эта процедура повторялась для всех недель, что в результате давало 12 отдельных выборок для каждой целевой переменной.

В качестве модели использовался только xgboost, которому готовилось около 300 признаков. Обучение бустинга проводилось на gpu. Признаки строились по следующей, привычной для соревнований с временными рядами, схеме:

  • Для каждого клиента использовались его временные ряды по целевой переменной (переводы во вне со своих счетов в ВТБ), переводы на счета в любом банке, а также количество уникальных ИНН которым совершались переводы со счетов ВТБ.

  • У этих рядов использовались их лаги от 1 до 70 недель.

  • Также использовались средние, максимумы и минимумы этих признаков по всем 70 неделям.

  • Все числовые признаки преобразовывались через логарифм.

  • Из дополнительных данных использовались только 4 категориальных признака из данных профилей.

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

  • Для каждой недели добавлялось или вычиталось некоторое число, чтобы сделать среднее предсказание равным выбранной на основе нескольких последних недель константе.

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

  • Это среднее значение корректировалось для недель с нестандартным количеством рабочих дней. То есть, если было 6 рабочих дней, то константа увеличивалась, а если их, например, 2, то наоборот снижалась.

И последняя часть решения — отдельная модель, предсказывающая переводы на аномальной новогодней неделе:

  • Так как эта неделя была в тестовых данных, эту аномалию нужно было каким‑то образом обработать.

  • Если построить целевую переменную не по неделям, а по дням, можно будет отчетливо разделить дни на 2 группы: обычные рабочие дни, и выходные/праздничные дни.

  • Решением оказалось построить отдельную модель, обучаемую на тех же самых признаках, но использовав только транзакции за праздничные и выходные дни. Именно с помощью этой модели и было получено предсказание на новогоднюю неделю.

Первое место, Иван Савкин

Решение Ивана, занявшего первое место, на самом деле заслуживает отдельной развернутой статьи.

Начать стоит с подготовки данных, так как именно на этом этапе принимались дальнейшие решения о структуре модели:

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

  • Для преобразования целевой переменной использовался не логарифм, а преобразование Бокса‑Кокса, с подогнанным параметром лямбда (в районе 0.15). Это близко к логарифму, но не совсем. В итоге все данные далее преобразовывались именно этим способом.

В качестве входов для своей модели использовались 4 временных ряда по каждому клиенту, а также его категориальные признаки из данных профилей:

  • Целевой временной ряд, суммы исходящих транзакций со счетов в банке ВТБ.

  • Суммы исходящих транзакций по другим банкам (все кроме ВТБ).

  • Входящие транзакции для счетов в ВТБ.

  • Входящие транзакции для счетов всех банков кроме ВТБ.

  • Данные из профиля клиента: регион, ОКВЭД, стаж в банке, и флаг ЮЛ/ИП.

В итоге получилась нейросеть с архитектурой как на графике:

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

  • Несмотря на свой устрашающий вид, эта архитектура собиралась по кусочкам на протяжении соревнования.

  • Архитектура началась с небольшого перцептрона с 12 выходами. После чего было решено добавлять резидуальные слои по 128 нейронов с ReLU.

  • Если присмотреться, 16 параллельных путей, по сути, реализуют bagging внутри структуры модели, что тоже повышает точность и позволяет лучше справиться с шумом и смещением модели.

Стоит немного подробнее показать из чего модель состоит внутри, то есть в каждой из 16 параллельных сеток (смотреть нужно слева‑направо):

  • На вход подаются 94 недели из 4 временных рядов (после преобразования Бокса‑Кокса).

  • Далее они все конкатенируются и передаются на обычный простой dot product attention (не multi‑head).

  • После слоя с вниманием передаем результаты на полносвязные слои. Полносвязная часть смешивает по измерению эмбеддингов, а не измерению времени.

  • Далее, это повторно конкатенируется с предыдущим слоем и опять подается на простой dot product attention.

  • Затем все снова сжимается в 1 слой, конкатенируется с изначальной целевой переменной, с эмбеддингом свойств клиентов (из профилей), и вновь передается на полносвязный слой.

  • Резидуальность реализуется через конкатенацию, а не через суммирование как в трансформере.

«Голова» модели устроена следующим образом:

  • Все 16 предсказаний с параллельных сеток усредняются и передаются на головной слой из 12 нейронов (по числу недель).

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

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

Итоги

В этом году соревнование обновило свои рекорды: более 1500 data scientist‑ов на протяжении двух месяцев отправили суммарно почти 12 000 решений.

Ссылка на фотографии.

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

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

Data Fusion Contest развивается, мы с нетерпением ждём новых лиц — студентов, начинающих специалистов, опытных аналитиков и исследователей. Независимо от уровня подготовки, участие в конкурсе — это возможность попробовать силы в задачах высокого уровня, пообщаться с единомышленниками, получить обратную связь и расширить профессиональные горизонты.

Надеемся, что с каждым годом наши соревнования будут становиться все масштабнее и интереснее. Следующий сезон запланирован на февраль — апрель 2026 года. По традиции вас ждут не только увлекательные задачи, но и онлайн‑митапы с экспертами, разборы решений, возможность задать вопросы организаторам — и, конечно, призовые и подарки для самых активных и успешных участников.

Присоединяйтесь! Вместе мы делаем Data Fusion Contest не просто соревнованием, а площадкой для роста, общения и вдохновения.

Tags:
Hubs:
0
Comments3

Articles

Information

Website
t1.ru
Registered
Founded
Employees
over 10,000 employees
Location
Россия
Representative
ИТ-холдинг Т1