Рекомендательные системы есть везде. Они присутствуют, когда выбирают, какой фильм смотреть на Netflix, какую книгу купить на Amazon, находить друзей на Facebook ...

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

Явная обратная связь x Неявная обратная связь

Легко понять их приложения и почему рекомендательные системы так популярны. Хотя существует множество статей с примерами для изучения, большинство из них предназначены для прямой обратной связи - например, звездный рейтинг фильмов на IMDB. Понятно, какой контент нравится пользователю (рейтинг 5 звезд), а что не нравится (рейтинг 1 звезда). В этом случае мы могли бы попытаться предсказать рейтинг, который пользователь поставит невидимому фильму, и порекомендовать те, которые близки к 5 звездам.

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

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

Алгоритмы

Есть три основных способа создания рекомендательной системы:

  • Основанное на содержании

Использует описания элементов для построения профиля предпочтений пользователя.

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

На основе предположения, что люди, которые соглашались в прошлом, согласятся в будущем, и что им понравятся предметы того же типа, что и в прошлом.

  • Гибрид

Сочетает в себе совместную фильтрацию, фильтрацию на основе содержимого и другие подходы.

В этом посте мы подробнее рассмотрим совместную фильтрацию, а также то, как оценить нашу модель.

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

Существует два типа совместной фильтрации: по пользователям и по элементам.

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

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

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

Оценка

После построения нашей модели мы должны провести оценку, чтобы проверить ее качество. Мы могли бы использовать стандартные метрики, такие как MSE для явной обратной связи и F1-score для неявной обратной связи.

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

Представьте, что вы что-то искали в Google, и то, что вы искали, было только на 2-й странице. Если мы посмотрим на такие показатели, как Recall, это будет немного наивно.

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

КАРТА @ K

По этой причине более подходящей метрикой оценки является MAP @ K. Это означает Средняя средняя точность @ (отсечка) K.

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

Краткий обзор определения точности и отзывчивости:

В контексте системы рекомендаций для фильмов это будет:

Точность = из общего числа рекомендованных фильмов, # фильмов, которые понравились пользователю.

Напомним = из общего количества фильмов, которые хотел бы пользователь, # фильмов, которые мы порекомендовали.

Эти два отличных показателя, но они, похоже, не заботятся о порядке. Именно тогда на помощь приходят MAP @ K и MAR @ K.

Представьте, что вы берете наш ранжированный список рекомендаций размера N и рассматриваете только первый элемент, затем только первые два, затем только первые три и так далее… Мы можем вычислить точность для каждого отсечения, как показано ниже. (Мы могли бы также вспомнить, что в итоге дало бы нам MAR @ K).

Затем мы усредняем эти точности P (k = i) для каждого i, которое было действительно правильным, то есть:

где rel (k) равно 1, если элемент k ᵗʰ был правильным, в противном случае - 0.

Для каждого пользователя мы рассчитываем AP @ N. Вот пример с N = 3:

Пользователь А: [0 * (0) + 0 * (0) + 1 * (1/3)] / 3 = (1/3) * (1/3) = 0,11

Пользователь Б: [0 * (0) + 1 * (1/2) + 1 * (2/3)] / 3 = (1/3) * [(1/2) + ( 2/3)] = 0,38

Пользователь C: [1 * (1/1) + 1 * (2/2) + 0 * (2/3)] / 3 = (1/3) * [(1/1) + (2/2)] = 0,66

Мы видим, что, несмотря на то, что мы получили 2 правильных пункта как для пользователя B, так и для пользователя C, рекомендации для пользователя C были лучше, потому что они появились раньше.

Наконец, мы берем всех наших пользователей и берем среднее (среднее)!

В этом случае наша модель будет иметь MAP @ 3, равное 0,3833.

Код

Используя Turicreate в Python, мы можем построить простую рекомендательную систему всего из нескольких строк кода. Подробнее об этом вы можете прочитать в документации.

Для оценки можно использовать пакет ml_metrics, а простую демонстрацию можно найти здесь.

Набор данных Instacart Market Basket Analysis от Kaggle - отличный набор данных, с которым можно поиграть, чтобы попытаться предсказать, какие продукты будут в следующем порядке пользователя.

Повеселись! :-)

дальнейшее чтение

  • Википедия:


  • Стэнфордская онлайн-книга: