Ended 4 months ago

stage2_team_data

ZIP | 25.28 MB

email

baseline_team_task

IPYNB | 48.15 KB

email

НТО 2025/2026 — Профиль «Искусственный интеллект»

Командный этап

Этот документ является справочником по данным и формату файла решения.


1. Описание данных

Основной формат исходных данных: CSV с разделителем запятая (,) для обработанных файлов. Исходные метаданные используют разделитель точка с запятой (;).

1.0. Получение данных

Данные находятся на странице https://ods.ai/competitions/nto25-26-2-team/dataset/ в виде zip архива "stage2_team_data"

1.1. Состав предоставляемых файлов

ФайлОписание
train.csvОбучающая история взаимодействий пользователей с книгами. Содержит данные из хронологических срезов до временной отсечки T_global, включая флаги has_read=0 («в планах») и has_read=1 («прочитал»). Важно: содержит колонку timestamp для анализа временных паттернов взаимодействий.
targets.csvСписок user_id пользователей, для которых необходимо сформировать предсказание.
candidates.csvПулы кандидатов для ранжирования. Для каждого пользователя из targets.csv содержит список book_id, разделенных запятыми. Список состоит из: (1) всех его взаимодействий из тестового периода (и has_read=0, и has_read=1), (2) "холодных" кандидатов — до 15 дополнительных книг, сгенерированных базовой моделью ALS, с которыми пользователь никогда не взаимодействовал. Важно: количество кандидатов варьируется, но не превышает 20. Временные метки (timestamp) не предоставляются.
books.csvМетаданные книг (автор, год публикации, средняя оценка и т.д.).
users.csvМетаданные пользователей (пол, возраст).
genres.csvСправочник жанров.
book_genres.csvТаблица для связи книг и жанров (многие-ко-многим).
book_descriptions.csvТекстовые описания книг. Используется для извлечения признаков через TF-IDF и BERT.

1.2. Принципы формирования данных

Временное разделение: Данные разделены на обучающую и тестовую выборки по единой временной отсечке T_global. Все взаимодействия в train.csv имеют timestamp <= T_global, а все взаимодействия в тестовом периоде (используемые для формирования candidates.csv и solution.csv) имеют timestamp > T_global.

Фильтрация "теплых" пользователей: В тестовую выборку (targets.csv) попадают только те пользователи, которые имеют достаточную историю в обучающей выборке: не менее 1 прочитанной книги ИЛИ не менее 3 запланированных книг в train.csv.

Формирование кандидатов: Для каждого пользователя из targets.csv в candidates.csv включаются:

  1. Все его взаимодействия из тестового периода (и прочитанные, и запланированные)
  2. "Холодные" кандидаты — до 15 дополнительных книг, сгенерированных базовой рекомендательной моделью (ALS), с которыми пользователь никогда не взаимодействовал

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

Формирование решения: В solution.csv для каждого пользователя указаны два списка:

  • book_id_list_read: Книги, которые он действительно прочитал (has_read=1) в тестовом периоде
  • book_id_list_planned: Книги, которые он добавил в планы (has_read=0), но не прочитал

Если пользователь в тестовом периоде ничего не прочитал, то book_id_list_read будет пустой строкой. Если ничего не запланировал, то book_id_list_planned будет пустой строкой.

Критерий включения в тестовую выборку: В targets.csv, candidates.csv и solution.csv попадают все пользователи, которые имеют достаточную историю в обучающей выборке (не менее 1 прочитанной книги ИЛИ не менее 3 запланированных книг в train.csv) и имеют хотя бы одно взаимодействие в тестовом периоде. Это включает в себя как пользователей, которые прочитали книги в тестовом периоде, так и тех, кто только добавил книги в планы, но ничего не прочитал.

Важно: Для каждого пользователя из targets.csv в его истории в train.csv скрыты взаимодействия из тестового периода. Количество скрытых прочитанных книг (has_read=1) варьируется для разных пользователей: от 0 (если пользователь ничего не прочитал в тестовом периоде) до нескольких десятков (в зависимости от реальной активности пользователя).

1.3. Описание полей в метаданных

train.csv: История взаимодействий

ПолеТипОписание
user_idint64Уникальный идентификатор пользователя.
book_idint64Уникальный идентификатор книги.
has_readint64Флаг прочтения: 0 — книга в списке "на прочтение", 1 — книга прочитана.
ratingfloat64Оценка книги пользователем (0-10). Для has_read=0 обычно равен 0.
timestampdatetimeВременная метка взаимодействия. Предоставляется для анализа истории взаимодействий пользователей.

targets.csv: Целевые пользователи

ПолеТипОписание
user_idint64Уникальный идентификатор пользователя, для которого необходимо сформировать предсказание.

candidates.csv: Пулы кандидатов

ПолеТипОписание
user_idint64Уникальный идентификатор пользователя.
book_id_liststrСтрока, содержащая список book_id, разделенных запятыми (,). Список состоит из: (1) всех книг, с которыми пользователь взаимодействовал в тестовом периоде (и прочитанные, и запланированные), (2) "холодных" кандидатов — до 15 дополнительных книг, сгенерированных ALS-моделью. Количество кандидатов варьируется, но не превышает 20.

Пример строки в candidates.csv:

user_id,book_id_list
210,"971259,1281035,1673950,2225251,2274394"

books.csv: Информация о книгах

ПолеТипОписание
book_idint64Уникальный идентификатор книги (первичный ключ).
titlestrНазвание книги.
author_idint64Уникальный идентификатор автора.
author_namestrИмя автора.
publication_yearint64Год публикации.
languageint64Числовой код языка книги.
avg_ratingfloat64Средняя оценка книги, рассчитанная только на основе обучающей выборки.
publisherint64Числовой код издательства.

users.csv: Информация о пользователях

ПолеТипОписание
user_idint64Уникальный идентификатор пользователя (первичный ключ).
genderint64Пол пользователя (1 — мужской, 2 — женский).
ageint64Возраст пользователя.

genres.csv: Справочник жанров

ПолеТипОписание
genre_idint64Уникальный идентификатор жанра (первичный ключ).
genre_namestrНазвание жанра.
books_countint64Общее количество книг в данном жанре в активной выборке.

book_genres.csv: Связь книг и жанров

ПолеТипОписание
book_idint64Идентификатор книги (внешний ключ к books.csv).
genre_idint64Идентификатор жанра (внешний ключ к genres.csv).

book_descriptions.csv: Описания книг

ПолеТипОписание
book_idint64Идентификатор книги (внешний ключ к books.csv).
descriptionstrТекстовое описание книги.

2. Формат файла решения (сабмита)

Файл с решением должен быть представлен в формате CSV с разделителем запятая (,). Файл может содержать заголовок user_id,book_id_list, который будет проигнорирован при проверке.

Структура колонок: user_id,book_id_list

Требования:

  • user_id — идентификатор, соответствующий пользователю из файла targets.csv.
  • book_id_list — строка, содержащая упорядоченный список идентификаторов book_id, разделённых запятыми (,). Количество книг в списке: до 20 книг (или все доступные кандидаты, если их меньше 20). То есть для каждого пользователя отправляется топ-K, где K = min(20, количество кандидатов для данного пользователя).
  • Порядок важен: книги должны быть упорядочены по убыванию предполагаемой релевантности (наиболее вероятные для прочтения — в начале списка).
  • Уникальность: в списке не должно быть дубликатов book_id.
  • Состав: разрешено использовать только book_id из соответствующего пула кандидатов для данного пользователя (из candidates.csv).

Пример содержимого submission.csv:

user_id,book_id_list
201,123,987,42,56,19,301,77,5,444,222,333,12,8,90,61,700,701,702,703,704
202,21,22,23,24,25
203,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119

Пояснение к примеру:

  • Пользователь 201: 20 книг (топ-20 из его кандидатов)
  • Пользователь 202: 5 книг (все доступные кандидаты, так как их меньше 20)
  • Пользователь 203: 20 книг (топ-20 из его кандидатов)

Важно: В отличие от формата candidates.csv, где book_id_list может содержать переменное количество книг, в файле решения (submission.csv) для каждого пользователя должно быть до 20 книг (или все доступные кандидаты, если их меньше 20). Это означает, что если у пользователя в candidates.csv всего 5 книг, то в submission.csv для него должно быть 5 книг. Если у пользователя больше 20 кандидатов, то в submission.csv должно быть 20 наиболее релевантных книг.

Порядок ранжирования: Книги должны быть упорядочены по убыванию релевантности. Идеальный порядок:

  1. Сначала все прочитанные книги (релевантность = 2)
  2. Затем все запланированные книги (релевантность = 1)
  3. В конце "холодные" кандидаты (релевантность = 0)

3. Формат файла с эталонными значениями (solution.csv)

Файл solution.csv содержит эталонные значения для оценки решения. Он находится в приватной директории и недоступен участникам до завершения соревнования. Однако участники могут сгенерировать его аналогично самостоятельно для проверки через evaluate.py.

Структура колонок: user_id,book_id_list_read,book_id_list_planned,stage

Описание полей:

ПолеТипОписание
user_idint64Уникальный идентификатор пользователя.
book_id_list_readstrСтрока, содержащая список book_id прочитанных книг (has_read=1), разделенных запятыми (,). Если пользователь ничего не прочитал, строка пустая.
book_id_list_plannedstrСтрока, содержащая список book_id запланированных книг (has_read=0), разделенных запятыми (,). Если пользователь ничего не запланировал, строка пустая.
stagestrИндикатор этапа оценки: "public" (публичный лидерборд) или "private" (приватный лидерборд).

Пример содержимого solution.csv:

user_id,book_id_list_read,book_id_list_planned,stage
210,"971259,1281035,1673950","2225251,2274394,2447113",private
211,"",3015694,public
212,3988468,"",private

Пояснение к примеру:

  • Пользователь 210: прочитал 3 книги, запланировал 3 книги
  • Пользователь 211: ничего не прочитал, запланировал 1 книгу
  • Пользователь 212: прочитал 1 книгу, ничего не запланировал

Важно: Все книги из book_id_list_read и book_id_list_planned обязательно присутствуют в candidates.csv для соответствующего пользователя. "Холодные" кандидаты отсутствуют в обоих списках.

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