Объяснение рекомендаций посредством матричной факторизации

Netflix — популярная онлайн-платформа потокового вещания, которая предлагает своим подписчикам широкий выбор фильмов, документальных фильмов и сериалов. Чтобы улучшить взаимодействие с пользователями, Netflix разработал сложную систему рекомендаций, которая предлагает фильмы на основе вашей прошлой истории просмотров, оценок и предпочтений.

Система рекомендаций использует сложные алгоритмы, которые анализируют огромные объемы данных, чтобы предсказать, что, скорее всего, понравится пользователям. Система рекомендаций Netflix, насчитывающая более 200 миллионов подписчиков по всему миру, является ключевым фактором ее успеха и устанавливает стандарты для индустрии потокового вещания. Ниже приведен источник о том, как Netflix добился 80% времени трансляции с помощью персонализированной ссылки.

Итак, что такое система рекомендаций?

Система рекомендации – это система обучения без учителя, в которой используется фильтрация информации, чтобы предлагать продукты или контент пользователям на основе их предпочтений, интересов и поведения. Эти системы широко используются в электронной коммерции и настройках потоковой передачи в Интернете, а также в других приложениях, помогая находить новые продукты и контент, которые могут заинтересовать пользователей.

Рекомендательные системы обучены понимать предпочтения пользователя и продукта, прошлые решения и характеристики с использованием собранных данных о взаимодействиях пользователя с продуктом.

Существует два типа рекомендательных систем:

Контентная фильтрация

Рекомендация основана на атрибуте пользователя или элемента в качестве входных данных для алгоритма. Затем содержимое общего пространства атрибутов используется для создания профилей пользователей и элементов.

Например, Человек-паук: Нет пути домой и Человек-муравей и Оса: Квантовая магия имеют схожие атрибуты, поскольку оба фильма относятся к жанру боевик/приключение. Мало того, оба являются частью Marvel. Поэтому, если Алиса смотрела фильм о Человеке-пауке, система рекомендаций на основе контента может порекомендовать фильмы с такими же атрибутами, как боевики/фильмы Marvel.

Совместная фильтрация

Основано на нескольких пользователях, у которых были похожие прошлые взаимодействия. Ключевой идеей этого подхода является использование концепции сотрудничества для создания новой рекомендации.

Например, Алиса и Боб имеют схожие интересы в определенном жанре фильмов. Система рекомендаций по совместной фильтрации может рекомендовать Алисе элементы, которые Боб просматривал ранее, что является новым для Алисы, поскольку они оба имеют довольно схожие предпочтения. И обратное верно и для Боба.

Подробнее о совместной фильтрации

Существует множество типов моделей системы рекомендаций, как показано на рисунке ниже, но сегодня эта статья будет посвящена совместной фильтрации (CF) с матричной факторизацией.

Совместная фильтрация с матричной факторизацией

Проще говоря, матричная факторизация — это математический процесс, который преобразует сложную матрицу в пространство меньшей размерности. Одним из наиболее популярных методов матричной факторизации, используемых в рекомендательных системах, является разложение по сингулярным значениям (SVD), неотрицательная матричная факторизация (NMF) и вероятностная матричная факторизация.

Ниже приведена иллюстрация того, как концепция матричной факторизации способна предсказывать рейтинг пользовательского фильма.

Этап 1: матричная факторизация случайным образом инициализирует число и устанавливает количество факторов (K). В этом примере мы положим K = 5

  • Пользовательская матрица (зеленая рамка) представляет связь между каждым пользователем и функциями.
  • Матрица элементов (оранжевая рамка) представляет связь между каждым элементом и функциями.

Здесь, например, мы создаем 5 функций (k=5) для представления персонажа фильма m_1: комедия как 2.10, ужасы как 0,88, действие – 0,04, руководство для родителей – 0,02 и семейный – 0,04. И обратное верно для user_matrix. User_matrix представляет характер пользователя, такой как предпочитаемые актеры или режиссеры, любимые фильмы и многое другое.

Этап 2. Прогноз рейтинга рассчитывается на основе скалярного произведения матрицы пользователей и матрицы элементов.

где R — истинный рейтинг, P — пользовательская матрица, Q — матрица элементов, в результате R’ — прогнозируемый рейтинг.

В более удобном математическом представлении прогнозируемый рейтинг R’ можно представить в виде следующего уравнения:

Этап 3. Квадрат ошибки используется для расчета разницы между истинным рейтингом и прогнозируемым рейтингом.

После того, как у нас есть эти шаги, мы можем оптимизировать наши параметры, используя стохастический градиентный спуск. Затем он вычислит производную от этого значения

На каждой итерации оптимизатор вычисляет соответствие между каждым фильмом и каждым пользователем, умножая их с помощью скалярного произведения, а затем сравнивает его с фактической оценкой, которую пользователь дал фильму. Затем он вычислит производную от этого значения и обновит веса, умножив их на скорость обучения ⍺. Поскольку мы повторяем этот процесс много раз, потеря улучшится, что приведет к лучшим рекомендациям.

Одна из моделей матричной факторизации, широко используемая в рекомендательных системах, известна как разложение по сингулярным значениям (SVD). Сам SVD имеет широкое применение, включая сжатие изображений и подавление шума при обработке сигналов. Кроме того, SVD обычно используется в рекомендательных системах, где он отлично подходит для решения проблемы разреженности, присущей большим матрицам пользовательских элементов.

В этой статье также будет представлен обзор реализации SVD с использованием пакета Surprise.

Итак, давайте запачкаем руки реализацией!!

Реализация Содержание

  • Импорт данных
  • Предварительная обработка данных
  • Реализация №1: матричная факторизация в Python с нуля
  • Реализация № 2: матричная факторизация с пакетом Surprise

Полный блокнот по реализации матричной факторизации доступен здесь.

Импорт данных

Поскольку мы разрабатываем рекомендательную систему наподобие Netflix, но у нас может не быть доступа к их большим данным, мы собираемся использовать для этой практики отличный набор данных от MovieLens [1] с разрешения. Кроме того, вы можете прочитать и просмотреть их файлы README, чтобы узнать о лицензиях на использование и других деталях. Этот набор данных включает миллионы фильмов, пользователей и ранжирование пользователей в прошлом.

После распаковки zip-файла будет 4 файла csv:

Предварительная обработка данных

Кстати, у Collaborative Filtering есть проблема с холодным запуском пользователя. Проблема холодного запуска относится к ситуации, в которой система или алгоритм не могут сделать точные прогнозы или рекомендации для новых пользователей, элементов или объектов. который не имеет предварительной информации. Это может произойти, когда для новых пользователей или элементов доступно мало или совсем нет исторических данных, что затрудняет понимание системой их предпочтений или характеристик.

Проблема «холодного старта» — распространенная проблема в рекомендательных системах, где система должна предоставлять персонализированные рекомендации для пользователей с ограниченной историей взаимодействий или без нее.

На этом этапе мы собираемся выбрать пользователей, которые взаимодействовали как минимум с 2000 фильмов и фильмов, которые были оценены 1000 пользователей (это может быть хорошим способом уменьшить размер данных и с меньшим количеством нулевых данных. Кроме того, мой ОЗУ никогда не справится с массивной таблицей)

На самом деле, вы также можете использовать небольшое подмножество из 100 000 рейтингов, которое предоставляет MovieLens. Я просто хочу максимально оптимизировать ресурсы своего компьютера с меньшим количеством нулевых данных.

Как обычно, мы разделим данные на две группы: обучающую выборку и проверочную выборку — с помощью метода train_test_split.

Хотя необходимая нам информация присутствует, она не представлена ​​таким образом, чтобы людям было полезно ее понять. Однако я создал таблицу, в которой те же данные представлены в более понятном для людей формате.

Реализация №1: матричная факторизация в Python с нуля

Вот фрагмент Python для реализации матричной факторизации с градиентным спуском. Функция matrix_factorization возвращает две матрицы: nP (матрица пользователей) и nQ (матрица элементов).

Затем подгоните набор обучающих данных к модели, и здесь я установил n_factor K = 5. После этого прогнозы можно вычислить путем умножения nP и транспонирования nQ с использованием метода скалярного произведения, как показано на фрагмент кода ниже.

В результате вот окончательный прогноз, который дает matrix_factorization

Прогноз по тестовому набору

Следующий фрагмент использует данные nP (матрица пользователей) и nQ (матрица фильмов), чтобы сделать прогноз на тестовом наборе.

Оценка эффективности прогнозирования

Хотя существуют различные оценочные показатели для рекомендательных систем, такие как Precision@K, Recall@K, MAP@K, и этот список можно продолжить. В этом упражнении я буду использовать базовую метрику точности, а именно RMSE. О других метриках оценки я, возможно, напишу более подробно в следующей статье.

В результате RMSE на тестовом наборе составляет 0,829, что вполне прилично даже до реализации гипернастройки. Определенно, мы можем настроить несколько параметров, таких как скорость обучения, n_factor, шаги эпох, для лучших результатов.

Реализация № 2: матричная факторизация с пакетом Surprise

В этом сегменте мы выбрали библиотеку Python, а именно пакет-сюрприз. Пакет-сюрприз — это библиотека Python для создания и оценки рекомендательных систем. Он предоставляет простой и удобный интерфейс для загрузки и обработки наборов данных, а также реализации и оценки различных алгоритмов рекомендаций.

Импорт данных и обучение модели

Генератор лучших N рекомендаций

для UserId: 231832 ниже приведен список 10 лучших рекомендуемых фильмов:

m_912, m_260, m_1198, m_110, m_60069, m_1172, m_919, m_2324, m_1204, m_3095

Краткое содержание

Использование матричной факторизации в современных развлечениях, таких как Netflix, помогает понять предпочтения пользователей. Затем эта информация используется для рекомендации наиболее релевантного товара/продукта/фильма конечному пользователю.

Вот краткое изложение иллюстрации матричной факторизации, которую я создал, на случай, если однажды мне понадобится объяснить ее своим внукам…

Ссылка

[1]Максвелл Харпер и Джозеф А. Констан. 2015. Наборы данных MovieLens: история и контекст. Транзакции ACM в интерактивных интеллектуальных системах (TiiS) 5, 4: 19: 1–19: 19. https://doi.org/10.1145/2827872