Датасет: ссылка
Проблематика, кейс: необходима разработка интеллектуальной рекомендательной системы для интернет-магазина, которая позволит увеличить продажи
Исходя из данных о поведении посетителей на сайте интернет-магазина, необходимо разработать модель для рекомендации товаров пользователям. Модель должна предсказывать топ 25 товаров, которые пользователь купит с наибольшей вероятностью в следующие 3 дня (период тестового датасета). Метрикой качества является Recall по купленным товарам. Пользователи, не купившие ни одного товара в вашей выдаче, в расчете метрики не учитываются.
Например, в сформированном вашей моделью списке из 25 товаров, оказалось 3 из 4х, которые пользователь реально купил. Recall, таким образом, составит ¾ = 0.75.
При этом, топ товаров составляется для топ 1000 пользователей, которые с наибольшей вероятностью совершат покупку. По топу пользователей рассчитывается отдельная метрика - Precision по факту покупки хотя бы одного товара.
В распоряжении имеется 4 набора данных, содержащий следующие поля:
stokman_catalog_preprocessed.pq
- add_date - дата добавления товара в магазин
- shop_id - идентификатор магазина
- product_id - идентификатор товара
- category_id - идентификатор категории товаров
- price - цена
- title - закодированное название товара (в файле vectors.npz содержатся эмбединги оригинальных названий)
- old_price - старая цена
train_actions.pq
- user_id - идентификатор пользователя (формируется по cookies. Один пользователь может заходить с разных сайтов или устройств и иметь разные ID)
- loc_user_id -
- action - код действия пользователя
- date - дата и время события
- products - массив идентификаторов товаров
- pageId - идентификатор страницы веб-сайта
catalog_vector_mapping.pq
- product_id - идентификатор товара
- vector_id - идентификатор вектора содержащего эмбединг названия товара из файла vectors.npz
- vectors.npz - файл содержащий эмбединги названий товаров.
Признак action
в train_actions.pq
имеет следующую расшифровку:
- 0 - view (просмотр товара)
- 1 - like (лайк товара)
- 2 - addB (добавление товара в корзину)
- 3 - delB (удаление товара из корзины)
- 4 - clearB (удаление всех товаров из корзины)
- 5 - order (оформление заказа)
- 6 - listB (посещение страницы корзины и вывод списка товаров в корзине)
- 7 - visit (посещение страницы с товаром)
- 8 - visitCategory (посещение страницы с группой товаров)
- 9 - search (поиск товара)
- Эксперимент, его результирующие артефакты и модель должны логироваться в MLFlow
- Код (пайплайн) предобработки данных и обучения модели должен быть разбит на отдельные скрипты, запускающиеся с помощью одной команды в нужной последовательности. Можно реализовать через собственный Python или консольный скрипт. Предпочтительно использовать workflow manager использующий DAG (snakemake или DVC)
- Код должен быть написан в соответствии с PEP8
- Зависимости проекта должны находиться под управлением одного из известных менеджеров и должны обеспечивать воспроизводимость эксперимента (pip, poetry)
- Репозиторий должен быть обеспечен подробной инструкцией по запуску эксперимента в Readme файле
- Презентация решения должна отражать
- Описание исходных данных
- Используемый технологический стек и инструменты
- Методологию проведения экспериментов
- Методы обработки исходных данных
- Основные гипотезы, проверяемые в ходе экспериментов
- Описание проверяемых алгоритмов/архитектур
- Подбор гиперпараметров
- Результаты валидации моделей
- Репозиторий с Readme (на Github/Gitlab), включающий:
- Инструкции по развертыванию и установке решения для инференса (если требуется)
- Инструкции по запуску пайплайнов обработки даннных и обучения модели
- Модель и артефакты эксперимента в MLFlow или другом registry для хранения моделей