Введение

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

Наш набор данных

Набор данных шуток взят из набора данных шуток Университета Беркли [1]. Имеет рейтинг 100 шуток от 73421 покупателя. Немногие шутки имеют много рейтингов (около 73 000) и несколько шуток с небольшим рейтингом (чуть более 20 000). Общее количество оценок не дает четкой картины, поэтому углубимся в тип оценок (положительные или отрицательные). Немногие шутки имеют большое количество положительных оценок и лишь немногие имеют большое количество отрицательных оценок (оба около 55000). Немногие шутки очень нравятся и имеют около 80% положительных оценок, в то время как немногие очень не нравятся и имеют только около 30% положительных оценок.

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

Это тип совместной фильтрации, в котором используется сходство элементов, полученное в результате взаимодействия пользователя с элементом. Сходство основано не на содержании элемента, а скорее на оценках элемента, отзывах, кликах и т. д. Основное предположение состоит в том, что пользователю должны нравиться элементы, которые были оценены так же, как элементы, ранее понравившиеся пользователю. Это отлично работает в зависимости от сценария. Amazon — одна из крупнейших компаний в мире, и они открыто говорят об использовании совместной фильтрации товаров для своей системы рекомендаций. Линден и др. [4] из Amazon.com рассказывают о том, насколько хорош этот алгоритм для их бизнеса.

Алгоритм

Основы алгоритма взяты из реализации Сарвара и др. [2].

Входные данные: матрица оценок пользователей и идентификатор пользователя.

Вывод: рекомендации для пользователя

1. Прочитайте матрицу рейтингов пользовательских элементов, идентификатор пользователя.

2. Вычислить сходство между элементами (я использовал косинусное сходство)

3. Рассчитайте средний рейтинг каждого элемента

4. Для выбранного пользователя проверьте, какие товары не были оценены (Нет смысла рекомендовать уже купленные/понравившиеся/прочитанные товары)

5. Для каждого из этих новых элементов рассчитайте взвешенное сходство с элементами, которые пользователь ранее оценил (сходство * (нормализованный рейтинг — средний рейтинг) для предыдущих элементов).

6. Разделите его на сумму весов сходства для комбинации элементов, использованных на шаге 5.

7. Оценка рекомендации получается путем сложения среднего рейтинга нового элемента.

8. Затем система рекомендует топ-k шуток с наивысшим рейтингом рекомендаций.

Выбор, который я сделал, и его аргументация

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

2. Нормализация: рекомендация может быть выполнена без нормализации. Но, по-моему, это очень важно. Мы должны учитывать качество шутки, а также ее сходство с другими. Шутка может быть более или менее похожа на шутки, которые понравились пользователю, но она очень высоко оценивается. Так что это следует учитывать при рекомендации. Вот почему следует также учитывать средний рейтинг каждого элемента.

3. Выбор соседства: для расчета я выбрал всех соседей. Во-первых, набор данных содержит всего 100 элементов (шуток). В среднем пользователи оценили около 50 шуток, поэтому мне нужно рассмотреть только 50 шуток. Это не займет много вычислительного времени. Во-вторых, я считаю, что непохожесть также должна быть использована. Если два предмета не похожи (это основано на оценках 73421 пользователей — так что обычно это правильно) и пользователю нравится предмет 1, есть большая вероятность, что ему/ей не понравится предмет 2. Если я рассматриваю окрестности, будут только похожие предметы. рассматривать, а не разнородные предметы.

Результаты

Прежде чем развертывать модель, мы должны посмотреть, насколько она хороша. Мы не можем дождаться запуска модели и посмотреть, как отреагируют клиенты. Это может иметь катастрофические последствия. Итак, как это сделать — как проверить правильность рекомендаций? Один из способов — разделить наши данные на обучающие и тестовые наборы. Но я выбрал другой путь. Я предсказал рекомендательные баллы для уже оцененных шуток. Затем я выбрал топ-10 рекомендаций для каждого пользователя и проверил, понравилась им шутка или нет. Для 73421 пользователя средняя точность рекомендации составила 7,32 из 10, т.е. в среднем пользователю понравилось 7,32 шутки из топ-10 рекомендаций для него из ранее оцененных шуток. Производительность может быть и лучше, но это тоже удовлетворительно.

Подводные камни совместной фильтрации Item-Item

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

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

3. Нет сведений о недавних действиях пользователя: временная метка не используется. Пристрастия пользователя могут меняться со временем. Но это не будет учитываться при совместной фильтрации элементов.

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

1. http://eigentaste.berkeley.edu/dataset/ [последнее посещение — 9.09.2020]

2. Бадрул Сарвар, Джордж Карипис, Джозеф Констан и Джон Ридл. «Алгоритмы рекомендаций по совместной фильтрации на основе элементов». WWW10, 1–5 мая 2001 г., Гонконг.

3. Курсера. Курс «Совместная фильтрация ближайших соседей», Университет Миннесоты. Неделя 3 и Неделя 4.

4. Грег Линден, Брент Смит и Джереми Йорк, «Рекомендации Amazon.com по межэлементной совместной фильтрации», Отраслевой отчет, 2003 г.