Matrix factorization
Отбор кандидатов: матричные факторизации и коллаборативные фильтрации
Матричная факторизация остается одним из самых популярных методов для создания рекомендательных систем. И например за то время пока я работаю в ритейле матричные факторизации сильно выиграют у нейросетей в определенных сферах бизнеса за их простоту, скорость и без излишеств.
В этой статье я бы хотел подробно сильно углубиться в матричные факторизации, коллаборативный сигнал, типы фитбека и разобраться почему же ALS все еще так хорош.
RecSys 101
Представим что у нас есть некоторый магазин где есть 5_000_000 пользователей, 100_000 товаров которые пользователи покупают регулярно.
Мы можем создать матрицу взаимодействий 𝑅 размером 𝑚 × 𝑛, где каждый элемент отражает взаимодействие пользователя 𝑖 с элементом 𝑗.
Это взаимодействие может называется feedback и оно может быть:
Для товара, что его положили в корзину
Для музыки, что ее дослушали
Для статьи, что ее лайкнули
Для видео, что его посмотрели больше чем на половину
etc
Explicit feedback
explicit feedback - это такие действия, которые выражают явное отношения пользователя к товару.
Как правило таких данных мало, но они намного качественнее
Так-же дизлайки могут не означать, что ему не подобный товар и категория товара, возможно ему не понравился конкретно этот товар или у него неприязнь к определенному автору, фильму.
Implicit feedback
implicit feedback - это любая другая информация, действия пользователя на сайте. Он не отражает явного отношения пользователя к товару, но является прокси-метрикой.
Таких данных достаточно много, но они очень шумные
Покупки тоже не означают явного отношения, например пользователь вынужден покупать данный товар, это может быть подарок или разовый случай.
Коллаборативная фильтрация это просто
Теперь когда мы чуть больше знаем о данных, на которых можно обучить рекомендательные системы давайте разберемся, как же нам использовать эти данные, что бы мы могли рекомендовать другим пользователь релевантные товары?
Для примера возьмем 4 пользователя и 10 товаров с нашего ритейл магазина.
Кате понравился 1, 4, 8 и не понравился 5 товар
Пете понравился 1, 3, 8, но не понравился 4 и 5 товар
Эти пользователи очень похожи по своей истории взаимодействий, так почему бы нам не порекомендовать 3 товар из истории Пети?
Идея коллаборативной фильтрации - хотим рекомендовать пользователю товары понравившиеся похожим на него пользователя.
А в более общем случае это некоторое семейство моделей, которые основаны на похожестях взаимодействий по истории между пользователями и товарами.
User2User
Метод рекомендаций на основе похожести пользователей является одной из простейших и наиболее интуитивных моделей коллаборативной фильтрации. Основная идея заключается в том, чтобы рекомендовать пользователю те элементы, которые понравились пользователям с похожими вкусами.
Такой пример мы уже разобрали, но давайте разберем поподробнее как это работает:
Шаг 1: Рассчитать меру схожести между пользователями
Для этого воспользуемся одной из популярных мер схожести — коэффициентом корреляции Пирсона. Мы будем рассчитывать, насколько похожи рейтинги пользователей, чтобы найти соседей для каждого пользователя.
Формула коэффициента Пирсона для двух пользователей u и v:
Где:
и — рейтинги пользователей u и v для элемента i,
и — средние рейтинги пользователей u и v,
— множество элементов, которые оценили оба пользователя.
Шаг 2: Определение соседей для пользователя
Используем расчетные меры схожести, чтобы выбрать соседей для пользователя u. Для этого выберем тех пользователей, у которых значение схожести выше некоторого порогового значения .
Шаг 3: Оценка рейтинга для непросмотренных элементов
Теперь, когда у нас есть схожие пользователи (соседи), мы можем предсказать рейтинг для элементов, которые пользователь (u) не оценивал, на основе рейтингов соседей:
Где:
— предсказанный рейтинг для элемента i пользователем u,
— реальный рейтинг элемента i соседом v.
Шаг 4: Рекомендация элементов
После оценки рейтингов для всех непросмотренных элементов, можно рекомендовать пользователю u те элементы, которые получили наивысшие предсказанные рейтинги.
Матрица схожести пользователей (результаты)
Катя наиболее схожа с Петей (схожесть ( s(Катя, Петя) = 0.577 )).
У Кати и Васи отрицательная схожесть (( s(Катя, Вася) = -0.5 )), что говорит о противоположных предпочтениях.
Маша и Вася не имеют значимой схожести с другими пользователями.
Предсказанные рейтинги для Кати
Item 3: 1.0 (высокая вероятность того, что Кате понравится этот элемент)
Остальные элементы получили предсказанный рейтинг 0.
Итог
На основе алгоритма user-to-user рекомендаций можно рекомендовать Кате Item 3, так как этот элемент получил наивысший предсказанный рейтинг.
Item2Item
Item-to-Item коллаборативная фильтрация — это подход, который предлагает рекомендации на основе схожести между элементами, а не пользователями.
Item-to-Item — это подход к коллаборативной фильтрации, который основан на нахождении схожести между элементами (товарами) для рекомендаций, вместо расчета схожести между пользователями. Этот метод получил широкое распространение благодаря его успешной реализации в системах рекомендаций Amazon.
Основная идея заключается в том, что элементы, которые пользователь уже оценил, могут быть использованы для поиска наиболее похожих на них товаров, которые пользователь ещё не оценивал. Такой метод более масштабируем по сравнению с User-to-User фильтрацией, так как количество товаров в системе, как правило, меньше, чем количество пользователей, что упрощает вычисление и улучшает точность.
Почему Item2Item эффективен?
Масштабируемость: User2User плохо масштабируется с увеличением числа пользователей, в то время как Item2Item более эффективно использует информацию о взаимодействиях пользователей с меньшим набором элементов.
Решение проблемы холодного старта: Благодаря агрегации пользовательских действий можно лучше обрабатывать новые элементы и улучшить рекомендации для новых пользователей.
Шаги:
Построим матрицу взаимодействий (user-item).
Рассчитаем схожесть между элементами (item-to-item).
Предскажем рейтинги для элементов, которые пользователь еще не оценил.
Выдадим рекомендации.
Особенности коллабортивной фильтрации
Холодный старт - коллаборативная фильтрация плохо работает с новыми пользователями и товарами из-за недостатка данных о их взаимодействиях. Это затрудняет создание точных рекомендаций.
Feedback loop - рекомендации основаны на предыдущих действиях пользователя, что может привести к повторению одних и тех же типов контента. Это замыкает пользователя в ограниченном круге интересов.
Feature engine - методы коллаборативной фильтрации не требуют дополнительных сведений о пользователях или товарах. Рекомендации строятся исключительно на основе их взаимодействий.
Как работают рекомендации под капотом?
Когда у нас есть маркетплейс с миллионами товаров, задача — выбрать наиболее релевантные рекомендации для каждого пользователя. Поскольку невозможно загружать все товары в оперативную память, процесс рекомендуется разделять на несколько этапов. Эти этапы включают работу с ранжирующими моделями, отбором кандидатов, использованием контекстной информации и финальным реранкингом рекомендаций.
База документов (Document Pool)
Первым шагом является хранение и доступ к огромному количеству элементов. В базе могут находиться миллионы товаров, фильмов, музыки и прочего контента. Это всё то, что можно предложить пользователю в качестве рекомендаций. На этом этапе набор данных огромен — порядка 10⁹ кандидатов.
Отбор кандидатов (Candidate Generation)
Чтобы эффективно и быстро предложить пользователю релевантные товары, нужно сузить круг возможных вариантов.
На этапе отбора кандидатов задача сводится к уменьшению числа потенциальных рекомендаций с миллионов до сотен. Ведь учитывать все комбинации пользователь-товар это огромное число, которое и не поместится в память и будет долго вычисляться. Так давайте возьмем Top-K товаров!
Этот процесс может учитывать интересы пользователя, историю покупок и просмотров.
Кандидаты — это потенциальные элементы (товары, фильмы и т.д.), которые система рассматривает для рекомендации.
Позитивы — это элементы, с которыми пользователь уже взаимодействовал положительно в прошлом. Они используются для обучения модели, чтобы предсказать, что пользователь может захотеть в будущем.
Негативы - это элементы, с которыми пользователь не хотел бы взаимодействовать или уже негативно провзаимодействовал когда-либо. Они так-же используются для обучения.
Методы отбора кандидатов
Но как нам отобрать нужных кандидатов? Есть ли какие-то способы как понять что для конкретного пользователя товар x лучше чем товар y?
Эвристические подходы: Самые популярные товары или товары, популярные среди конкретных групп пользователей.
Коллаборативные подходы: Методы вроде item2item или user2user для определения похожести.
Контентные подходы: Поиск элементов, близких по эмбеддингам. Для ускорения могут использоваться такие структуры данных, как HNSW и FAISS.
Учет бизнес-логики: Например, продвижение новых товаров или увеличение разнообразия.
Ранжирование (Ranking)
После отбора кандидатов необходимо присвоить каждому элементу оценку релевантности. Это может быть сделано с помощью традиционных алгоритмов или современных моделей машинного обучения. Оцениваются такие факторы, как актуальность, предпочтения и контекст.
Для ранжирования используется комбинированная модель, включающая:
Коллаборативные и контентные модели: У каждой из них свои плюсы и минусы, их можно комбинировать для улучшения качества рекомендаций.
Контекстуальная информация: Предпочтения пользователя могут меняться в зависимости от времени дня, дня недели и других факторов.
Признаки товаров: Важны такие атрибуты, как бренд, цена и другие характеристики товара.
На практике чаще всего используют ранжирующие модели, которые комбинируют различные признаки:
Предсказания базовых моделей (коллаборативные и контентные).
Признаки пользователя: Пол, возраст, история взаимодействий.
Признаки объекта: Цена, вес, жанр, характеристики взаимодействий.
Агрегационные признаки: За 7, 14, 30, n дней
Объединенные признаки: user-item, user-category, user-segment
Контекстуальная информация: День недели, погода, местоположение.
Задачи, на которые можно обучить модель:
Бинарная классификация: Определение наличия положительного взаимодействия.
Регрессия: Пример — предсказание времени просмотра видео для определения заинтересованности пользователя.
Ранжирование: Подходы pairwise и listwise помогают модели правильно упорядочивать объекты для пользователя.
Реранкинг (Re-ranking)
Реранкинг — это дополнительный шаг для улучшения финальных результатов. В процессе рекомендаций часто необходимо учитывать различные бизнес-требования, такие как ограничение на количество старых товаров или обеспечение разнообразия в списке рекомендаций.
После основного ранжирования объекты пересортировываются с учётом таких факторов, как цена, наличие товара, время доставки и другие атрибуты.
Реранкинг позволяет адаптировать финальные рекомендации к изменяющимся условиям в реальном времени.
Финальная рекомендация
После всех этапов пользователь получает финальный список рекомендаций, состоящий из небольшого числа наиболее релевантных товаров. Как правило, это десятки элементов, которые затем отображаются в интерфейсе пользователя.
Матричная факторизация
SVD
ALS
Alternative Least Squares (ALS) — это метод матричной факторизации, который достаточно часто применяется в рекомендательных системах.
Представьте себе, что у вас есть огромная матрица (таблица) с оценками пользователей на различные продукты в некотором сервисе. Так вот ALS помогает разбить нашу матрицу на простые компоненты.
Коллаборативная фильтрация
user KNN
item KNN
TF-IDF iKNN
TIFU
Дополнительные материалы
Last updated