Скрытые переменные воспроизводимости в рекомендательных системах: чек-лист предобработки данных
В мире исследований искусственного интеллекта расхождение между заявленными в научной статье результатами и собственными экспериментами остается распространенной проблемой. Чаще всего ищут ошибки в коде модели, однако практический опыт команды Sber AI Lab показал, что решающую роль играет этап подготовки данных. Статья описывает методологию аудита датасетов и презентует фреймворк SplitLight — инструмент, помогающий проверить адекватность разбивки данных на обучающие, валидационные и тестовые выборки до запуска тяжелых вычислений.

# Подготовка датасета для офлайн-оценки рекомендательных моделей
Вопрос воспроизводимости экспериментов в области рекомендательных систем стоит особенно остро. Команда «Рекомендательные системы и персонализация» Sber AI Lab регулярно сталкивается с ситуацией, когда, несмотря на полное совпадение архитектурных параметров модели (тип потерь, функция сэмплирования негативных примеров), полученные метрики кардинально отличаются от опубликованных в работах конкурентов или коллег.
Хотя интуитивно кажется, что причина кроется в ошибках реализации алгоритма, анализ показал обратное: ключевым фактором различий становится процедура подготовки данных. Даже строгая спецификация вроде «датасет Zvuk, глобальное разбиение по времени с квантилем 0,9» оставляет неясным множество критических деталей: какие именно фильтры применялись, как агрегировались события, как обрабатывались повторные взаимодействия и что именно входило в модель в момент предсказания. Два пайплайна с одинаковым названием разбиения могут на деле решать разные задачи, что делает невозможным корректное сравнение.
Почему названия разбиений вводят в заблуждение
Для проведения оценки качество рекомендации необходимо разделить данные на выборки: обучающую (train), входную историю для тестирования/валидации (input) и целевые события (target). В описании экспериментов часто указывается лишь тип разбиения (например, глобальное временное — GTS) и параметры (квантиль q=0,9). Это дает лишь общее представление, но не фиксирует реальную структуру пайплайна.
Рассмотрим GTS детально. Что именно является «таргетом» для оценки? Это может быть одно событие пользователя (первое или последнее после отсечки) или все последующие события. Как обрабатываются события, предшествующие отсечке — они передаются модели как контекст (input history) или отбрасываются? Что делать с пользователями и объектами, отсутствующими в обучающей выборке: удалять их или считать «холодными» для теста? Каждый из этих вариантов формально относится к GTS, но создает принципиально разные условия для оценки модели.
Самой эффективной структурой для хранения таких данных являются пары «входная история — таргет». Такой формат сразу выявляет, какие данные были доступны модели на момент предсказания и какие взаимодействия она должна была предсказать, исключая двусмысленность.
Критические параметры предобработки данных
Предобработка зависит от контекста: домена (музыка, товары, видео), конкретной бизнес-задачи и алгоритма. Инструмент SplitLight был создан не для навязывания одного «правильного» способа, а для оценки адекватности выбранных параметров. Базовый аудит начинается с анализа распределений:
* Объем и плотность: Важно проверять не только средние значения, но и медианы, квантили и гистограммы. Высокая средняя длина истории может быть следствием действий узкой группы супер-активных пользователей, тогда как у большинства аудитория будет мало событий. Фильтрация (например, 5-core) или сэмплирование существенно меняют эти характеристики. * Временная структура: Для последовательных моделей время имеет решающее значение. Помимо общего охвата датасета, анализируются интервалы между действиями и периоды активности. Опасно опираться только на временные рамки всего датасета: он может охватывать годы, но конкретная пользовательская сессия длится минуты. Также критична проверка коллизий временных меток — ситуаций, когда у нескольких событий одна и та же отметка времени, что делает невозможным восстановление реального порядка действий. * Повторные взаимодействия: В разных доменах частота повторений варьируется (музыка vs редкие покупки). Отдельно стоит отслеживать повторные взаимодействия (объект уже встречался ранее) и последовательные повторы (одинаковые объекты подряд). Последовательные повторы могут искусственно завышать метрики, так как модель «просто предсказывает» последнее действие, которое уже есть во входной истории.
Риски утечки данных и холодный старт
Особое внимание уделяется целостности разбиения на выборки.
Утечка данных по времени (Temporal Leakage): Самый опасный сценарий. Это может произойти из-за ошибок логирования, когда одни и те же события попадают и в обучение, и в тест. Более тонкая форма утечки возникает, если в обучающую выборку случайно попадают события, произошедшие позже целевого таргета в тестовой. При разбиениях типа leave-one-out для датасетов с глобальной динамикой это может приводить к завышенному оптимизму результатов. Модель учится запоминать глобальные паттерны, которые в реальной системе недоступны.
Холодный старт: Разбиение может сформировать выборку, состоящую исключительно из холодных пользователей или новых объектов (отсутствующих в обучении). Это проверяет совершенно другой режим работы модели по сравнению с рекомендациями в «теплой» фазе эксплуатации. Сравнение моделей коллаборативной фильтрации и гибридных систем на таких данных показывает их фундаментальные ограничения.
Сдвиги распределений: Если временной интервал между последним действием пользователя и целевым событием в тестовой выборке резко отличается от исторической нормы (например, таргеты взяты сразу после новой сессии), то модель оценивается в условиях, не отражающих реальный сценарий использования.
Практическая проверка на реальных датасетах
Команда применила разработанный инструмент SplitLight к популярным наборам данных: Beauty, Diginetica, Dressipi, MovieLens-1M и Zvuk. Результаты аудита выявили существенные расхождения между «на бумаге» и реальностью:
* MovieLens-1M: Охватывает около 2,8 года, но медианный период активности пользователя составляет около часа. Более 50% событий имеют одинаковые временные метки, что создает неоднозначность в порядке последовательности. * Diginetica: При использовании leave-one-out периоды обучения и оценки полностью перекрываются, и около 89% таргетов подвержены утечке данных. Разбиение GTS с q=0,9 оставляет 100% пользователей «холодными». * Zvuk: Высокая доля повторных взаимодействий (68%), из которых значительная часть — последовательные повторы. Удаление последовательных повторов существенно меняет статистику интервалов между событиями.
Эксперименты с моделью SASRec продемонстрировали чувствительность метрик NDCG@10 к мелким изменениям предобработки. Например, смена порядка событий с одинаковыми метками в MovieLens-1M привела к падению метрики на 10%, а сохранение последовательных повторов в Dressipi, хоть и подняло общий результат, привело к тому, что модель училась лишь предсказывать последнее действие сессии, теряя способность рекомендовать новое.
Что такое SplitLight
Фреймворк SplitLight объединяет описанные выше проверки в единый инструмент. Он поддерживает работу как через Python API для глубокого анализа, так и через веб-интерфейс Streamlit для быстрой оценки без программирования. Инструмент автоматически генерирует отчеты, указывающие на потенциальные утечки, проблемы с «холодным стартом» и аномальные распределения, позволяя исследователям принимать обоснованные решения о качестве эксперимента до запуска обучения.