Нажимая кнопку «Отправить решение», вы соглашаетесь с Правилами участия в соревновании.
Обратите внимание: до дедлайна выбора финальных сабмитов второго этапа участник заполняет форму: https://forms.yandex.ru/u/6912ff409029024866e7cbce/ — с указанием UID на ods.ai, ID на talent.kruzhok.org и ссылкой на артефакты.
Форму можно отправлять повторно; к проверке принимается последняя подача до дедлайна. Отсутствие формы или её подача после дедлайна означает, что даже при достаточном результате на лидерборде ODS переход в следующий этап реализован не будет.
Контекст: Книжная платформа различает два типа пользовательской активности: добавление книги в «планы» (has_read=0) и фактическое прочтение (has_read=1). Это сигналы разной силы: намерение прочесть не всегда приводит к реальному действию.
Цель: Разработать модель, которая сможет правильно упорядочить смешанный список книг-кандидатов по трехуровневой иерархии релевантности:
has_read=1)has_read=0)Для каждого пользователя в candidates.csv предоставляется смешанный список, состоящий из его реальных взаимодействий в тестовом периоде (и прочитанных, и запланированных) плюс "холодные" кандидаты. Задача модели — правильно упорядочить этот список так, чтобы прочитанные книги оказались на самых первых позициях, запланированные — ниже прочитанных, но выше "холодных" кандидатов.
Это задача предсказания конверсии (conversion prediction) с элементами "cold start", замаскированная под Learning-to-Rank (LTR). Модель должна научиться выделять "золото" (прочитанные), "серебро" (запланированные) и "пустую породу" ("холодные" кандидаты), проверяя навыки построения моделей, способных различать силу сигналов взаимодействия и предсказывать конверсию из интереса в фактическое потребление контента.
Временное разделение: Обучающая выборка (train.csv) содержит историю взаимодействий пользователей до определенного момента времени (T_global), а тестовые данные (кандидаты для ранжирования) относятся к более позднему периоду. Это обеспечивает реалистичность задачи: участники должны предсказать будущие взаимодействия на основе прошлых.
Смешанные кандидаты: Для каждого пользователя в candidates.csv предоставляется смешанный список, состоящий из:
Это делает задачу более сложной и реалистичной: участники должны не только отличать прочитанные книги от запланированных, но и отфильтровать "холодных" кандидатов, которые не представляют реального интереса пользователя.
Временные метки: В обучающей выборке (train.csv) присутствуют временные метки (timestamp), что позволяет участникам строить временные модели и анализировать паттерны взаимодействий. Однако в candidates.csv временные метки не предоставляются, что требует использования других признаков для ранжирования и усложняет задачу.
Изоляция данных: Пользователи Stage 2 полностью изолированы от пользователей Stage 1, что гарантирует независимость этапов соревнования.
Для быстрого старта предоставлено бейзлайн-решение, которое можно и нужно использовать в качестве отправной точки для разработки собственного решения.
Бейзлайн расположен по ссылке: https://github.com/Orange-Hack/nto-ai-25-26-team-baseline. Если вы предпочитаете работу в Jupyter Notebook'ах (.ipynb) -- см. страницу соревнования "Данные". Там лежит ноутбук, дублирующий функционал репозитория и который удобно запустить в Google Colab.
Рекомендация: Для старта работы рекомендуется сделать Fork репозитория. Это позволит бесшовно получать обновления бейзлайна через синхронизацию с оригинальным репозиторием.
Бейзлайн содержит:
Полностью рабочий пайплайн обучения и предсказания
Примеры feature engineering (агрегированные признаки, работа с текстом через TF-IDF и BERT)
Структуру проекта и необходимые утилиты для валидации решения
Рекомендуется изучить бейзлайн перед началом работы над задачей.
Участникам предоставляется набор файлов, содержащий историю взаимодействий, пулы кандидатов для ранжирования и необходимые метаданные.
Основные файлы:
train.csv — обучающая история взаимодействий (с временными метками)targets.csv — список пользователей для ранжированияcandidates.csv — пулы кандидатов для каждого пользователя (без временных меток)books.csv, users.csv, genres.csv, book_genres.csv, book_descriptions.csv — метаданныеПодробное описание состава файлов, структуры таблиц, полей и принципов формирования данных вынесено в сопроводительный документ: «Этап 2Б: Описание данных и формата решений».
Файл с решением должен быть представлен в формате CSV с разделителем запятая (,).
Подробные требования к структуре колонок, типам данных и ограничениям описаны в сопроводительном документе: «Этап 2Б: Описание данных и формата решений».
Итоговый балл рассчитывается по метрике NDCG@20 (Normalized Discounted Cumulative Gain at 20) — стандартной метрике для задач ранжирования с многоуровневой релевантностью.
NDCG@20 идеально подходит для нашей задачи, потому что:
Поддерживает многоуровневую релевантность: Метрика создана для оценки ранжирования, где элементы имеют разную "ценность" (в нашем случае: 2 балла за прочитанные, 1 за запланированные, 0 за "холодных" кандидатов).
Наказывает за неправильный порядок: Если вы поставите запланированную книгу (1 балл) выше прочитанной (2 балла), метрика сильно снизится. Это гарантирует, что модель правильно понимает иерархию ценности взаимодействий.
Учитывает позиции: Чем выше в списке находится релевантная книга, тем больше она вносит вклад в метрику. Это поощряет правильное ранжирование не только по уровням, но и внутри каждого уровня.
Справедливость: Метрика нормирована на идеальный результат, что позволяет сравнивать пользователей с разным количеством взаимодействий.
Для каждого пользователя рассчитывается NDCG@20 на основе трехуровневой релевантности:
Шаг 1: Присвоение баллов релевантности Для каждой книги в вашем ранжированном списке присваивается балл релевантности:
book_id_list_read)book_id_list_planned)Шаг 2: Расчет DCG (Discounted Cumulative Gain)
Шаг 3: Расчет IDCG (Ideal DCG) Идеальный DCG рассчитывается для идеального ранжирования, где все книги отсортированы по убыванию релевантности:
где rel_ideal — это список баллов релевантности, отсортированный по убыванию (сначала все двойки, потом все единицы, потом все нули).
Шаг 4: Нормализация
Итоговая метрика — среднее значение по всем пользователям:
Обработка edge case: Если все релевантности равны 0 (например, пользователь не прочитал и не запланировал ни одной книги из кандидатов), метрика равна 0.0.
Обозначения:
Итоговый балл равен NDCG@20:
Чем выше Score, тем лучше результат. Лидерборд сортируется по убыванию значения Score.
Пусть для пользователя u:
[A, B, C, D, E, F, G, H, I, J]{E, F} (2 книги, релевантность = 2){A, C} (2 книги, релевантность = 1){B, D, G, H, I, J} (6 книг, релевантность = 0)Вариант 1: Правильный порядок
Ваш submission: [E, F, A, C, B, D, G, H, I, J]
Relevance scores: [2, 2, 1, 1, 0, 0, 0, 0, 0, 0]
DCG@20:
DCG = 2.0 + 1.261 + 0.5 + 0.431 = 4.192
IDCG@20: Для идеального ранжирования (сначала все двойки, потом единицы, потом нули) — такой же результат: 4.192
NDCG@20 = 4.192 / 4.192 = 1.0 ✓
Вариант 2: Неправильный порядок
Ваш submission: [A, B, C, D, E, F, G, H, I, J] (запланированные выше прочитанных!)
Relevance scores: [1, 0, 1, 0, 2, 2, 0, 0, 0, 0]
DCG@20:
DCG = 1.0 + 0 + 0.5 + 0 + 0.774 + 0.712 = 2.986
IDCG@20: Все еще 4.192 (идеальное ранжирование)
NDCG@20 = 2.986 / 4.192 = 0.712 ✗
Как видите, неправильный порядок (запланированные выше прочитанных) сильно снижает метрику, даже если все книги найдены.
Подробнее см. Правила участия
Our website uses cookies, including web analytics services. By using the website, you consent to the processing of personal data using cookies. You can find out more about the processing of personal data in the Privacy policy