Этот документ является справочником по данным и формату файла решения.
Основной формат исходных данных: CSV с разделителем запятая (,) для обработанных файлов. Исходные метаданные используют разделитель точка с запятой (;).
Данные находятся на странице https://ods.ai/competitions/nto25-26-2-team/dataset/ в виде zip архива "stage2_team_data"
| Файл | Описание |
|---|---|
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. |
Временное разделение: Данные разделены на обучающую и тестовую выборки по единой временной отсечке T_global. Все взаимодействия в train.csv имеют timestamp <= T_global, а все взаимодействия в тестовом периоде (используемые для формирования candidates.csv и solution.csv) имеют timestamp > T_global.
Фильтрация "теплых" пользователей: В тестовую выборку (targets.csv) попадают только те пользователи, которые имеют достаточную историю в обучающей выборке: не менее 1 прочитанной книги ИЛИ не менее 3 запланированных книг в train.csv.
Формирование кандидатов: Для каждого пользователя из targets.csv в candidates.csv включаются:
Общее количество кандидатов не превышает 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 (если пользователь ничего не прочитал в тестовом периоде) до нескольких десятков (в зависимости от реальной активности пользователя).
| Поле | Тип | Описание |
|---|---|---|
user_id | int64 | Уникальный идентификатор пользователя. |
book_id | int64 | Уникальный идентификатор книги. |
has_read | int64 | Флаг прочтения: 0 — книга в списке "на прочтение", 1 — книга прочитана. |
rating | float64 | Оценка книги пользователем (0-10). Для has_read=0 обычно равен 0. |
timestamp | datetime | Временная метка взаимодействия. Предоставляется для анализа истории взаимодействий пользователей. |
| Поле | Тип | Описание |
|---|---|---|
user_id | int64 | Уникальный идентификатор пользователя, для которого необходимо сформировать предсказание. |
| Поле | Тип | Описание |
|---|---|---|
user_id | int64 | Уникальный идентификатор пользователя. |
book_id_list | str | Строка, содержащая список book_id, разделенных запятыми (,). Список состоит из: (1) всех книг, с которыми пользователь взаимодействовал в тестовом периоде (и прочитанные, и запланированные), (2) "холодных" кандидатов — до 15 дополнительных книг, сгенерированных ALS-моделью. Количество кандидатов варьируется, но не превышает 20. |
Пример строки в candidates.csv:
user_id,book_id_list
210,"971259,1281035,1673950,2225251,2274394"
| Поле | Тип | Описание |
|---|---|---|
book_id | int64 | Уникальный идентификатор книги (первичный ключ). |
title | str | Название книги. |
author_id | int64 | Уникальный идентификатор автора. |
author_name | str | Имя автора. |
publication_year | int64 | Год публикации. |
language | int64 | Числовой код языка книги. |
avg_rating | float64 | Средняя оценка книги, рассчитанная только на основе обучающей выборки. |
publisher | int64 | Числовой код издательства. |
| Поле | Тип | Описание |
|---|---|---|
user_id | int64 | Уникальный идентификатор пользователя (первичный ключ). |
gender | int64 | Пол пользователя (1 — мужской, 2 — женский). |
age | int64 | Возраст пользователя. |
| Поле | Тип | Описание |
|---|---|---|
genre_id | int64 | Уникальный идентификатор жанра (первичный ключ). |
genre_name | str | Название жанра. |
books_count | int64 | Общее количество книг в данном жанре в активной выборке. |
| Поле | Тип | Описание |
|---|---|---|
book_id | int64 | Идентификатор книги (внешний ключ к books.csv). |
genre_id | int64 | Идентификатор жанра (внешний ключ к genres.csv). |
| Поле | Тип | Описание |
|---|---|---|
book_id | int64 | Идентификатор книги (внешний ключ к books.csv). |
description | str | Текстовое описание книги. |
Файл с решением должен быть представлен в формате 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
Пояснение к примеру:
Важно: В отличие от формата candidates.csv, где book_id_list может содержать переменное количество книг, в файле решения (submission.csv) для каждого пользователя должно быть до 20 книг (или все доступные кандидаты, если их меньше 20). Это означает, что если у пользователя в candidates.csv всего 5 книг, то в submission.csv для него должно быть 5 книг. Если у пользователя больше 20 кандидатов, то в submission.csv должно быть 20 наиболее релевантных книг.
Порядок ранжирования: Книги должны быть упорядочены по убыванию релевантности. Идеальный порядок:
Файл solution.csv содержит эталонные значения для оценки решения. Он находится в приватной директории и недоступен участникам до завершения соревнования. Однако участники могут сгенерировать его аналогично самостоятельно для проверки через evaluate.py.
Структура колонок: user_id,book_id_list_read,book_id_list_planned,stage
Описание полей:
| Поле | Тип | Описание |
|---|---|---|
user_id | int64 | Уникальный идентификатор пользователя. |
book_id_list_read | str | Строка, содержащая список book_id прочитанных книг (has_read=1), разделенных запятыми (,). Если пользователь ничего не прочитал, строка пустая. |
book_id_list_planned | str | Строка, содержащая список book_id запланированных книг (has_read=0), разделенных запятыми (,). Если пользователь ничего не запланировал, строка пустая. |
stage | str | Индикатор этапа оценки: "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
Пояснение к примеру:
Важно: Все книги из 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