"Начиная"

Упрощенная совместная фильтрация: основы науки, лежащие в основе систем рекомендаций

Введение

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

Системы рекомендаций используют данные, полученные на основе поведения пользователя, чтобы делать выводы о предпочтениях пользователя. В Spotify пользовательские данные могут быть выбором песен, в то время как Amazon часто основывает рекомендации на просмотренных пользователем продуктах, приобретенных продуктах и ​​обзорах продуктов. Специфика реализации системы рекомендаций определяется вариантом использования, но существуют установленные общие методы для генерации рекомендаций. Наиболее заметным и мощным методом является совместная фильтрация, которую мы сейчас исследуем дальше.

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

Совместная фильтрация использует большой набор данных о взаимодействиях пользователей для создания набора рекомендаций. Идея совместной фильтрации заключается в том, что пользователи с одинаковыми оценками определенных элементов будут пользоваться одними и теми же вещами как сейчас, так и в будущем [2]. Например, предположим, что пользователю A и пользователю B понравились элементы X и Y. Основываясь на этой информации, мы можем предположить, что у пользователей A и B схожие предпочтения. Таким образом, если пользователю B понравился элемент Z, мы можем рекомендовать элемент Z пользователю A. Этот процесс поиска рекомендаций на основе сходства между пользователями является причиной того, что этот метод называется «совместной» фильтрацией.

Данные взаимодействия, обеспечивающие работу системы совместной фильтрации, могут быть получены от пользователей с помощью явной подсказки или неявно взяты из поведения пользователя. В случае явных данных пользователь предоставляет четкие и прямые данные о том, насколько им понравился товар. Обычно это будет оценка «нравится» или оценка по шкале (см. Рисунок ниже), которую пользователю было явно предложено указать [5]. Данные о пользовательских предпочтениях также могут быть собраны неявно. Это влечет за собой вывод о том, предпочитает ли пользователь элемент косвенно, на основе отслеживаемого поведения. Это поведение может включать в себя, какие страницы просматривает пользователь, где он щелкает, сколько времени он тратит на просмотр чего-либо и многое другое [3]. Например, если пользователь просматривает элемент в течение длительного периода времени, это часто означает, что он ему нравится или он им интересен.

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

Факторизация матрицы

Чтобы понять матричную факторизацию, мы должны понять, как работает матричное умножение. Матрица - это набор чисел, расположенных в строках и столбцах, образующих массив. Когда две матрицы перемножаются, результирующая матрица имеет такое же количество строк, что и первая матрица, и такое же количество столбцов, как вторая. Для каждого элемента в результирующей матрице мы берем соответствующую строку в первой матрице и соответствующий столбец во второй. Затем мы умножаем соответствующие элементы выбранной строки и столбца и суммируем результаты. На рисунке ниже показан пример того, как работает этот процесс. Значение 75 в матрице результатов находится в первой строке, поэтому мы выбираем первую строку первой матрицы. Значение 75 также находится в первом столбце, поэтому мы выбираем первый столбец второй матрицы. Соответствующие значения в строке и столбце затем умножаются, и результаты складываются вместе, в результате получается значение 75.

Умножение в том, что оно может быть отменено посредством факторинга. Например, умножение 3 и 4 дает число 12. Число 12 затем можно разложить на множители 3 и 4, так как они умножаются вместе, чтобы получить 12. То же самое можно сделать с матрицами. Для большинства матриц существует два матричных фактора, которые умножаются вместе, чтобы получить ту же самую матрицу или матрицу, которая очень близка. На рисунке выше третья матрица может быть разложена на первые две матрицы. Это потому, что умножение этих двух матриц вместе дает третью матрицу. Этот процесс нахождения двух факторов для данной матрицы известен как матричная факторизация.

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

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

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

Матрица взаимодействия была включена в матрицы встраивания как для пользователей, так и для элементов. Числа в двух новых матрицах делают так, что умножение двух матриц вместе дает матрицу взаимодействий. Например, чтобы получить верхнее левое значение матрицы взаимодействия, мы суммируем произведения соответствующих элементов первой строки пользовательской матрицы и первого столбца в матрице внедрения элементов. Это значение 1 * 1 + 0 * 0 = 1, что соответствует значению взаимодействия в верхнем левом углу. Обратите внимание, что ранее неизвестные синие значения теперь можно получить, применив тот же процесс. Например, значение того, насколько пользователю Пользователь 2 понравится Бэтмен, можно рассчитать, используя вторую строку пользовательской матрицы и второй столбец матрицы элементов.

Изучение значений взаимодействия покажет, что наше приложение совместной фильтрации сработало! Обратите внимание, что у пользователей 1 и 2 схожие предпочтения, так как обоим понравился Супермен, а не «Холодное сердце». Таким образом, поскольку пользователю 1 нравится Бэтмен, пользователю 2, вероятно, понравится и Бэтмен, что подтверждается синим сгенерированным значением 1 в месте. И наоборот, обратите внимание, что пользователь 3 имеет очень разные предпочтения от пользователей 1 и 2. Таким образом, поскольку обоим пользователям понравился Бэтмен, пользователю 3, вероятно, не понравится Бэтмен, что подтверждается нашим синим сгенерированным значением 0 в этом месте. Этот простой пример демонстрирует, как факторизация матрицы определяет, понравится ли элемент пользователю. Эту информацию можно превратить в рекомендации, порекомендовав то, что пользователю, скорее всего, понравится. На практике наборы данных будут больше, а расчеты - более сложными. Хотя значения для этого примера были разработаны вручную, вычисления для системы рекомендаций производственного уровня будут выполняться автоматически с использованием библиотеки со встроенными функциями машинного обучения [4].

Одна вещь, которую мы не рассмотрели, - это то, как эти рекомендации были сделаны без определения какой-либо информации о фильмах. В нашем примере мы знаем, что Бэтмен и Супермен - это боевики, а «Холодное сердце» - фильм, больше ориентированный на семью. Однако мы никогда не определяли жанры фильмов, но каким-то образом изучение поведения пользователей все же привело к предсказаниям, которые, казалось, учитывали жанры фильмов. Возможность рекомендовать предметы, не имея определенной информации о них, стала возможной благодаря скрытым функциям. Скрытые функции - это особенности элементов или пользовательских предпочтений, которые мы явно не определили. Однако при нахождении набора значений матрицы внедрения, которые могут объяснить наши данные о взаимодействии, вычисления, используемые при матричной факторизации, непреднамеренно обнаруживают набор релевантных функций. Это связано с тем, что скрытые функции в первую очередь повлияли на взаимодействие с пользователем. Эти функции могут быть любыми, от информации о жанре до цены. Невозможно явно узнать, какие функции вступят в силу, но мы обычно можем предположить их, основываясь на типе элемента, который мы рекомендуем [5]. Скрытые функции обеспечивают истинную мощь совместной фильтрации, поскольку они упорядочивают большой набор данных. В конечном итоге это приводит к рекомендациям для пользователя, которые могут быть точными.

Проблема холодного старта

И последнее, на что следует обратить внимание при совместной фильтрации, - это ее самый большой недостаток - проблема холодного запуска. Возможно, вы заметили в нашем предыдущем примере, что мы смогли определить, насколько пользователям 2 и 3 понравится Бэтмен, потому что мы знали, насколько он понравился пользователю 1. Однако, если бы мы не знали, что пользователь 1 думает о фильме, как бы мы сделали прогнозы для других 2 пользователей? Конечно, мы могли понять, что Бэтмен - это боевик, похожий на Супермена. Это будет означать, что пользователю 2 это, вероятно, понравится, а пользователю 3 - нет. Однако это лишает смысла использование скрытых функций в совместной фильтрации. Эта проблема, связанная с попытками делать прогнозы относительно элементов без данных о взаимодействии, называется проблемой холодного старта.

Когда система совместной фильтрации создается впервые, она часто оказывается неэффективной из-за отсутствия информации о пользовательских предпочтениях. Это снижает производительность системы рекомендаций этого типа и может сделать ее неэффективной в ситуациях с небольшой базой пользователей или со слишком большим количеством элементов. Обычно это может быть решено путем сохранения некоторой релевантной явной информации о характеристиках каждого фильма (например, жанр, рейтинг и т. Д.) И сопоставления ее с прошлыми предпочтениями пользователя. Такой гибридный подход часто случается в реальном мире из-за проблемы с холодным запуском.

Начиная

Теперь, когда мы рассмотрели основы, вы можете приступить к изучению некоторых инструментов и создать свою собственную систему рекомендаций. Для создания системы рекомендаций можно использовать многие языки программирования, но наиболее распространенным является Python. У Python есть отличные инструменты, такие как pandas и NumPy, которые позволят вам преобразовать данные взаимодействия в форму, готовую для вычислений. Такие инструменты, как TensorFlow и PyTorch, имеют встроенные функции для обработки мощных вычислений, необходимых для совместной фильтрации.

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

ПРИМЕЧАНИЕ. Эта статья была посвящена основам совместной фильтрации и предоставила упрощенный пример того, как она работает. В будущем вы можете ожидать еще несколько дополнительных статей, в которых будут рассмотрены технические шаги по созданию функциональной системы рекомендаций!

использованная литература

[1] К. Андервуд, Примеры использования систем рекомендаций в бизнесе - текущие приложения и методы, Emerj, 4 марта 2020 г. [Онлайн]. Доступно: https://emerj.com/ai-sector-overviews/use-cases-recommendation-systems/. [Доступ: 10 октября 2020 г.].

[2] В. Курама, Простое введение в совместную фильтрацию, Built In, 4 сентября 2019 г. [Онлайн]. Доступно: https://builtin.com/data-science/collaborative-filtering-recommender-system. [Доступ: 10 октября 2020 г.].

[3] С. Луо, Введение в рекомендательную систему: совместная фильтрация, Medium, 6 февраля 2019 г. [Онлайн]. Доступно: https://towardsdatascience.com/intro-to-recommender-system-collaborative-filtering-64a238194a26. [Доступ: 10 октября 2020 г.].

[4] Совместная фильтрация | Системы рекомендаций | Разработчики Google , Google. [Онлайн]. Доступно: https://developers.google.com/machine-learning/recommendation/collaborative/basics. [Доступ: 10 октября 2020 г.].

[5] П. Панди, Системы рекомендаций в реальном мире, Medium, 25 мая 2019 г. [Онлайн]. Доступно: https://towardsdatascience.com/recommendation-systems-in-the-real-world-51e3948772f3. [Доступ: 10 октября 2020 г.].