Подробное руководство о том, как работают рекомендательные системы на основе элементов и как их реализовать в реальной рабочей среде.

Системы рекомендаций существуют вокруг нас уже довольно давно. Youtube, Facebook, Amazon и многие другие дают своим пользователям какие-то рекомендации. Это не только помогает им показывать релевантные продукты пользователям, но и позволяет им выделяться на фоне конкурентов.

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

Если вас также интересует оценка производительности рекомендательных систем, ознакомьтесь с этой статьей, в которой объясняется, как оценивать производительность рекомендательных систем.

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

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

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

Давайте разберемся в этом на примере. Предположим, наш пользователь Jhone хочет купить DVD с фильмом. Наша задача - порекомендовать ему фильм на основе его прошлых предпочтений. Сначала мы будем искать фильмы, которые Джон смотрел или любил, назовем эти фильмы «A», «B» и «C». Далее мы будем искать другие фильмы, похожие на три фильма. Предположим, мы выяснили, что фильм «D» очень похож на «C», следовательно, весьма вероятно, что Джону также понравится фильм «D», потому что он похож на тот, который уже понравился Джону. Поэтому мы предложим Джону фильм «Д».

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

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

Поиск сходства между элементами

Допустим, у нас есть таблица пользователей и их рейтинги фильмов (ссылка):

Давайте выберем два фильма (Id 1: История игрушек и Id 2: Star Wars), для которых мы должны вычислить сходство, то есть насколько эти два фильма сопоставимы друг с другом с точки зрения сходства пользователей. Чтобы вычислить это, мы:

Сначала несколько оценок обоих фильмов друг с другом и суммирование результата. Назовем это значение A.

Во-вторых, мы суммируем возведенные в квадрат рейтинги фильмов и извлекаем из них квадратный корень. Итак, возведите все рейтинги фильма 1 в квадрат, просуммируйте их, а затем извлеките квадратный корень, чтобы получить окончательное значение (проделайте то же самое с фильмом 2). Это даст нам два значения, то есть значение квадратного корня из фильма 1 и фильма 2. Умножьте оба значения. Мы называем это окончательное значение "B".

В-третьих, разделите A и B, это даст нам оценку, которая показывает, насколько близки друг к другу фильм 1 и фильм 2 (ссылка).

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

Вот как описанный выше процесс изображается в математической форме.

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

Добавление ярлыков к буквам облегчит понимание каждой части уравнения.

Начиная с метки 1 (синий слева), выше показано, что для вычисления сходства между элементом i и элементом j (рассматривайте i и j как идентификаторы фильма 1 и 2) несколько всех оценок. элементов «i» и «j», заданных пользователем «u», и просуммируйте их. Разделил результат на произведение квадратного корня из суммы возведенных в квадрат оценок отдельных элементов, заданных пользователем «u».

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

Косинусное сходство работает, но не учитывает оптимистичное поведение пользователей. Разные пользователи могут оценивать один и тот же элемент по-разному в зависимости от того, насколько они оптимистичны. По пятибалльной шкале один может поставить 5 баллов, а другой - 3, даже если им обоим очень понравился этот предмет. Чтобы учесть это, мы должны внести небольшое изменение в нашу формулу подобия. Вот как это выглядит:

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

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

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

Рассчитать рейтинг рекомендаций

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

u = пользователь, для которого мы создаем рекомендацию
i = рассматриваемый элемент, т.е. следует ли этот элемент рекомендовать или нет
score (u, i) = генерирует балл, который покажет, насколько сильна рекомендация элемент «i» для нашего пользователя - «u».
j = элементы, аналогичные основному элементу i.

Приведенное выше уравнение показывает, что для расчета рекомендательной оценки элемента 'i' для пользователя 'u' суммируйте умножение сходства элемента 'i' и 'j' с разницей в рейтинге, присвоенном пользователем 'u' элементу. 'j' и средний рейтинг элемента 'j'. Разделите результат на сумму сходства элементов «i» и «j», сложите результат со средней оценкой пользователя «u».

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

Реализация IBCF с использованием R

Давайте посмотрим выше в действии с использованием R (кодовая ссылка). Это позволит нам лучше понять IBCF.

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

С учетом сказанного, давайте начнем с загрузки необходимых библиотек и набора данных рейтинга фильмов.

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

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

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

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

Наконец, мы передадим аналогичный список элементов, список истории оценок пользователей для аналогичных элементов и средний рейтинг аналогичных элементов в нашу функцию оценки «calScore». Результат будет добавлен к средней оценке пользователя. Это приведет к получению баллов, которые укажут, какой элемент и каким пользователям рекомендовать. Чем выше оценка, тем больше вероятность того, что пользователь купит этот товар.

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

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

Реализация IBCF с использованием Recommender Lab

Теперь давайте реализуем IBCF с помощью RecommenderLab.

RecommenderLab работает с набором данных «реальной рейтинговой матрицы», поэтому мы должны сначала преобразовать в него наш фрейм данных.

Затем мы разбиваем наш набор данных на обучающий и тестовый наборы. Мы будем использовать обучающий набор, чтобы построить модель для IBCF и оценить ее результат на тестовом наборе.

Пришло время внедрить систему рекомендаций элемент-элемент с помощью RecommenderLab.

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

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

Заключение

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

Подобное чтение





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

[1] Рейтинговые данные:



[2] Ссылка на код: