Как известно, всего есть два основных подхода к созданию рекомендаций: collaborative filtering, базирующийся на матрице оценок пользователь - продукт и content-based рекомендации. Наши предыдущие эксперименты были основаны на применении метода collaborative filtering.
Хотя классическая постановка задачи подразумевает использование матрицы оценок "пользователь-товар", вследствие невозможности доступа к данным о покупках или оценках была использована информация о просмотрах и помещении товара в корзину.
Были рассмотрены две модели - ALS(Alternating Least Squares) и BPR(Bayesian Personalized Ranking), основанные на факторизации матрицы для предсказания рекомендуемых товаров. Для BPR было дополнительно сделано грубое допущение, что отсутствие просмотра эквивалентно отрицательному отзыву. Для реализации моделей была использована библиотека implicit v 0.4.4.
В результате было установлено, что данные методы являются допустимыми для использования(хоть и не самыми лучшими) и они были включены в наш ансамбль моделей.
Нами был сделан вывод о целесообразности использования другого подхода к созданию рекомендаций - а именно рекомендаций content-based(на основе контента). Идея content-based подхода заключается в том, чтобы по истории действий пользователя создать для него вектор его предпочтений(в дальнейшем профиль) в пространстве предметов и рекомендовать товары, близкие к этому профилю.
Стоит напомнить, какими данными мы располагаем. Заказчик предоставляет данные двух видов: список предметов, находящихся в продаже в интернет магазине и лог активности всех пользователей в интернет-магазине за определенный период. Список предметов представляет собой файл .json, содержащий информацию по каждому предмету в интернет-магазине, включая внутренний id товара, цену, имя, и набор фильтров(facets), которым отвечает товар. Данный набор фильтров можно использовать в качестве признаковых описаний.
Модель IP(ItemProfile)
Путем парсинга списка товаров автоматически создается репрезентация данных ItemProfileStorage: описание для каждого товара из списка составлено методом one-hot encoding всех фильтров и их возможных значений, с добавлением дополнительной колонки - цены товара.
В основе этой модели лежит принцип поиска товаров, похожих на наиболее просматриваемые товары данного пользователя. Модель использует алгоритм NearsestNeighbours на основе KDTree(k-dimensional tree) из библиотеки scikit-learn v0.24.2. Обучение происходит без учителя(unsupervised learning).
Для получения рекомендаций, модель находит наиболее популярные товары для текущего пользователя в порядке убывания популярности, и для каждого такого товара добавляет в финальную рекомендацию не более чем N похожих на него соседей(N была выбрана как 3 экспериментально).
Модель UIP(UserItemProfile)
По логу активности формируется история взаимодействия пользователя/товара(ItemsByUsersStorage), отсортированная по количеству взаимодействий пользователя с тем или иным товаром. Соответственно, используя ItemProfileStorage и ItemsByUsersStorage мы можем определить профиль пользователя как алгебраическую сумму профилей всех товаров которые он посмотрел или положил в корзину. Здесь колонка цены товара задается как среднее арифметическое цены товаров, с которыми взаимодействовал пользователь.
В основе этой модели лежит рекомендация товаров, которые покупали пользователи, имеющие профиль, схожий с профилем данного пользователя. Модель также использует алгоритм NearsestNeighbours на основе KDTree(k-dimensional tree) из библиотеки scikit-learn v 0.24.2. Обучение происходит без учителя(unsupervised learning).
Для получения рекомендаций модель находит набор пользователей, наиболее похожих на текущего, и добавляет в финальную рекомендацию не более чем N самых популярных товаров похожего пользователя(N была выбрана как 3 экспериментально).
Результаты
Для оценки результата был, как и ранее, использован механизм разделения данных на различные временные промежутки - train и test. В train вошли записи за 2 года, в test - за две последние недели. Данное разделение подобрано экспериментально с учетом требований заказчика. Число необходимых рекомендаций = 30. Были использованы следующие метрики: DCG(Distributed Continued Gain) HappyUsersRatio - процент пользователей, которым система порекомендовала товар, который они в дальнейшем просмотрят/положат в корзину в числе первых 5 порекомендованных товаров. IOU(Intersection Over Union) MAP(Mean Average Precision)
Сводная таблица метрик:
По пожеланию заказчика, наиболее важной метрикой является HappyUsersRatio.
Наилучшая модель - модель UIP на данный момент времени. В дальнейшем будут добавлены другие модели.