Объяснение рекомендательных систем

Простое руководство по работе с рекомендательными системами на английском языке

Я потратил много времени на то, чтобы писать о том, как различные алгоритмы и концепции науки о данных работают на фундаментальном уровне. Но многие из наших заинтересованных сторон не хотят или не нуждаются в таком уровне детализации. Поэтому сегодня я пытаюсь сделать обратное - четко (и кратко) объяснить на высоком уровне, как рекомендательные системы, популярное приложение для машинного обучения, делают то, что они делают.

Соответствие пользователей и товаров

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

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

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

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

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

Расчет профилей продуктов

Как мы узнаем профиль каждого из наших продуктов? Профиль продукта должен отражать основные основные характеристики продукта, особенно те, которые волнуют пользователей.

Очень простой профиль продукта будет просто категорией. Например, для книг профили будут: история, фэнтези, научная фантастика, документальная литература, биография, романтика, юмор и т. Д. Количественно книги будут представлены примерно так:

Lord of the Rings
History:    0  *
Fantasy:    1  ----------*
Sci Fi:     0  *
Nonfiction: 0  *
Biography:  0  *
Romance:    0  *
Humor:      0  *
Twilight
History:    0  *
Fantasy:    0  *
Sci Fi:     0  *
Nonfiction: 0  *
Biography:  0  *
Romance:    1  ----------*
Humor:      0  *

И мы постарались выяснить, какие категории (жанры) любили читать наши клиенты. Мы можем сделать это одним из нескольких способов:

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

Предположим, мы придерживаемся подхода 2 - Джереми дает нам список из 7 книг в жанре фэнтези и 3 романов. Тогда любимым жанром Джереми должно быть фэнтези, верно? Значит, мы можем отправить его в раздел фэнтези и покончить с ним? Не так быстро! Он также рассказал нам о трех романах, которые ему очень нравятся. Это тоже полезная информация. Джереми, кажется, предпочитает смесь фантазии и романтики, когда читает книги.

Можем ли мы создать более подробные профили продуктов, которые не относятся к категориям «все или ничего» и которые лучше соответствуют вкусам Джереми? Если вы читали серию о Гарри Поттере, то знаете, что в этих книгах столько же о магии и битве с Волан-де-Мортом, сколько о взрослении. Зная это, лучшим профилем для Гарри Поттера может быть:

Harry Potter
History:    0   *
Fantasy:    0.7 -------*
Sci Fi:     0   *
Nonfiction: 0   *
Biography:  0   *
Romance:    0.3 ---*
Humor:      0   *

Таким образом, профиль продукта должен основываться не только на его общей категории, но и на содержании, если мы хотим давать более подробные рекомендации. Обратите внимание на разницу:

  • Если рассматривать чисто по категориям, Гарри Поттер будет считаться фэнтези, поскольку его фэнтезийное содержание имеет самые высокие оценки (и перевешивает его романтическое содержание).
  • Но когда мы позволяем книгам быть комбинациями категорий (или тем), мы можем охарактеризовать Гарри Поттера как 70% фэнтези и 30% романтики (в зависимости от текста содержания), что затем оказывается идеальной книгой для рекомендации Джереми. .

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

Один из способов, которым мы можем придумать темы, - это NLP (обработка естественного языка). Мы могли бы запустить НЛП на объединенном тексте всех книг в нашем инвентаре или, по крайней мере, на их описаниях или конспектах. Результатом такого анализа НЛП будут скрытые темы, охватываемые всеми книгами в корпусе (наш перечень книг), и тематическая нагрузка каждой книги. Подробнее о НЛП читайте в моем сообщении здесь.

А если нам нужно больше, чем темы, мы можем провести кластерный анализ результатов нашего анализа НЛП (который дал нам темы). Это позволит нам узнать, к каким комбинациям тем обычно относятся книги на нашем сайте. Например, мы можем обнаружить, что наш сайт в основном продает следующие 3 типа книг:

Values below are for the centers of each cluster
Cluster 1 (Fantasy with a Dash of Romance)
History:    0   *
Fantasy:    0.7 -------*
Sci Fi:     0   *
Nonfiction: 0   *
Biography:  0   *
Romance:    0.3 ---*
Humor:      0   *
Cluster 2 (Romance with a Dash of Vampires)
History:    0   *
Fantasy:    0.1 -*
Sci Fi:     0   *
Nonfiction: 0   *
Biography:  0   *
Romance:    0.9 ---------*
Humor:      0   *
Cluster 3 (Funny Biographies)
History:    0   *
Fantasy:    0   *
Sci Fi:     0   *
Nonfiction: 0   *
Biography:  0.5 -----*
Romance:    0   *
Humor:      0.5 -----*

Видя это, мы, вероятно, пришли бы к выводу, что нам нужно увеличить разнообразие книг. Но также мы могли бы знать, что нужно сосредоточить наши маркетинговые усилия на пользователях, которые могут быть заинтересованы хотя бы в одном из трех наших нишевых кластеров. Но как узнать, кому это интересно?

Выявление вкусов и предпочтений пользователей

Раньше, если бы Джереми прямо не назвал нам 10 своих любимых книг, как мы могли бы сделать выводы о его вкусах? Это зависит от того, сколько мы о нем знаем. В общем, у нас есть 4 возможных случая:

  1. Он прямо сказал нам, что ему нравится, с помощью опроса или анкеты (которые мы разработали для определения тематической нагрузки вкусов пользователей). В этом случае это просто: мы просто сопоставляем результаты опроса с вектором тематических нагрузок или конкретным кластером (предположим, для простоты, что мы используем тематические нагрузки для нашего рекомендателя). Назовем этот вектор вектором вкусов на будущее.
  2. Если мы знаем историю его покупок, то мы можем посмотреть на тематическую нагрузку всех или некоторых книг, которые он купил, чтобы вычислить вектор его вкусов - тоже довольно легко. Если Джереми имеет достаточно большую выборку прошлых покупок книг, этот временной ряд покупок сам по себе может использоваться как замещающий вектор вкусов.
  3. Мы не знаем его истории покупок (он новичок на нашем сайте), но нам известны некоторые данные о нем, такие как имя, возраст, работа, уровень образования и т. Д. Затем мы можем просмотреть историю покупок другие посетители нашего сайта, похожие на Джереми, исходя из того, что мы о нем знаем. Имея историю покупок похожих пользователей, мы можем угадать вектор вкусов и использовать его, чтобы дать некоторые первоначальные рекомендации. Затем, когда он принимает или отклоняет наши рекомендации (и, надеюсь, совершает некоторые покупки), мы можем дополнить вектор предполагаемых вкусов реальными данными Джереми.
  4. Наконец, что, если мы абсолютно ничего не знаем о нем? Затем нам нужно будет использовать данные, которые у нас есть, чтобы дать некоторые общие рекомендации. Мы, вероятно, захотим смешать некоторые популярные книги (которые, как правило, нравятся другим пользователям нашего сайта) с некоторыми дополнительными рекомендациями (предназначенными для сбора как можно большего количества информации о Джереми), чтобы мы могли рассчитать полезный вектор вкусов для Джереми как как можно быстрее.

Когда у нас есть вектор вкусов для Джереми, мы можем делать с ним разные классные вещи:

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

Рекомендации

Рекомендации - это место, где вкусы пересекаются с профилями продуктов. Идея состоит в том, чтобы просмотреть наш перечень продуктов и порекомендовать те, которые соответствуют вкусам рассматриваемого пользователя. Как мы упоминали выше, есть несколько популярных способов сделать это:

  • Мы можем найти похожих пользователей на основе их вкусов или истории покупок и порекомендовать продукты, приобретенные другими подобными пользователями. Этот тип системы рекомендаций называется совместной фильтрацией.
  • Мы можем использовать векторы вкусов пользователей и наши рассчитанные профили продуктов для моделирования взаимодействия продукта с пользователем. Мы можем использовать полученную модель, чтобы предсказать, насколько вероятно, что пользователь купит каждый продукт в нашем инвентаре. Затем мы будем использовать нашу модель, чтобы рекомендовать продукты, которые с наибольшей вероятностью купит данный пользователь. Это называется на основе содержания.
  • Нет причин, по которым эти методы нельзя комбинировать. Чем больше пользователи взаимодействуют с нашими продуктами и нашими рекомендациями, тем лучше они работают. Таким образом, эффективность совместной фильтрации обычно растет со временем по мере увеличения количества взаимодействий. Но когда мы впервые встречаемся с пользователем и знаем о нем очень мало (особенно с точки зрения покупок и поведения в Интернете), мы можем использовать методы на основе контента, чтобы давать рекомендации и узнавать о них больше.
  • Наша конечная конечная цель тоже имеет значение. Если мы просто пытаемся продвинуть продукт, то моделирования пользователей как вектора покупок продукта, вероятно, будет достаточно. Но если мы хотим узнать больше о наших пользователях с точки зрения того, что их движет и почему они делают то, что делают (чтобы мы могли предлагать больше услуг, расширять наши предложения продуктов или вообще открывать новое направление бизнеса), то анализируем и критически важным становится моделирование их вкусов и предпочтений, и контентный подход начинает выглядеть довольно привлекательно.
  • Еще одна практическая вещь, которую следует учитывать, - это ранжирование наших результатов. Мы можем ранжировать по релевантности, популярности, рейтингу (удовлетворенность продуктом по оценке наших пользователей) и т. Д. Выбранный нами показатель или показатели рейтинга также будут зависеть от нашей конечной цели.

В этом посте я пошел немного глубже, чем собирался. Моя первоначальная цель заключалась в том, чтобы объяснить рекомендации в 5 абзацах или меньше, но я потерпел неудачу, лол. Но, надеюсь, это было и приятно, и поучительно. Ваше здоровье!

Другие статьи, связанные с наукой о данных, от меня:

Общие сведения о перекрестной проверке

Что такое графики QQ?

Общие сведения о нормальном распределении

Соединение панд против слияния

Понимание теоремы Байеса