Системы рекомендаций, зависящие от времени (часть 1) ⏱️

В своих предыдущих постах (здесь и здесь) я делал обзор современных общих рекомендательных систем. Однако в этих моделях не учитывались временные зависимости: то есть порядок, в котором пользователь взаимодействовал с элементами. Но не волнуйтесь! В этой серии постов мы глубоко погрузимся в мир рекомендательных систем, зависящих от времени.

Зачем уделять время нашей системе рекомендаций?

Время влияет на предпочтения пользователя несколькими способами. Основные эффекты:

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

В этой серии статей я буду:

➡️ Опишите использованный набор данных + Раскройте основные автономные показатели, которые мы рассмотрим для оценки наших моделей + Обсудите теорию, реализацию и результаты базовых методов (часть 1)
➡️ Раскройте пять современных методов, которые используйте глубокое обучение, обсудите интуицию / теорию и результаты по сравнению с базовым уровнем (часть 2)
➡️ Сравните результаты, преимущества и недостатки последних реализованных здесь методов совместной фильтрации с зависимыми от времени методами, разработанными в части 1 и часть 2.

Каждый пост можно читать независимо. Не стесняйтесь хлопать, если вам это нравится 👏!

Набор данных: MovieLens 20M

Исходный набор данных

Для анализа воспользуемся всем известным датасетом MovieLens 20M.

Этот набор данных содержит более 20 миллионов оценок от MovieLens, службы рекомендаций фильмов. Ниже представлен образец фрейма данных:

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

Фильтрация набора данных

Мы немного фильтруем его. Мы отфильтровываем все сеансы, которые слишком короткие или слишком длинные (5–300 фильмов), и отфильтровываем все элементы, которые не были просмотрены достаточным количеством пользователей (5 пользователей). Таким образом, мы имеем:

Number of users:  97096
Number of items:  13512
Sparsity: 0.5589%

Набор данных Train-Validation-Test

Чтобы оценить качество наших моделей, мы разделим набор данных на 3 подмножества: один для обучения, один для проверки и один для тестирования. Мы будем использовать первое подмножество для обучения модели, второе для выбора лучшей модели во время обучения и последнее для получения окончательных показателей.

Каждый из наборов имеет непересекающиеся наборы пользователей.

Метрики: HR, NDCG, MRR и MAP

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

Для показателей ниже мы будем использовать разные обозначения: I - индикаторная функция, elemᵢ - i-й элемент в упорядоченной рекомендации, и тестируем набор элементов, которые мы хотим получить в наших рекомендациях (наша цель, если хотите).

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

Частота попаданий (ЧСС)

Первым показателем будет частота посещений (HR). Показатель попаданий просто определяется как:

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

Следовательно, этот показатель изменяется от 0 (рекомендуемые элементы не являются релевантными) до 1 (все рекомендованные элементы актуальны).

Нормализованная дисконтированная совокупная прибыль (NDCG)

Второй показатель будет NDCG. Сначала нам нужно определить дисконтированную совокупную прибыль (DCG). Чем выше DCG, тем лучше. DCG @ k определяется как:

NDCG является нормализованным родственником DCG, что означает, что мы прогнозируем оценки от 0 до 1, чтобы они переводились между моделями:

Средний взаимный ранг (MMR)

Третьей метрикой будет MRR. MRR просто определяется как ранг первого соответствующего рекомендованного элемента:

MRR - это величина, обратная рангу первого соответствующего элемента, который мы порекомендовали.

Следовательно, это происходит от:

  • 0: ни один из рекомендованных пунктов не актуален
  • 1 / k: первый соответствующий элемент - последний рекомендованный элемент.

  • 1: Первый соответствующий элемент также является первым рекомендуемым элементом

Средняя средняя точность (MAP)

Последней метрикой будет MAP. Чтобы определить MAP, нам сначала нужно определить точность в точке отсечки k или P (k). Точность определяется как число из наших k наиболее релевантных рекомендаций, которые являются частью ожидаемого набора, сверх k.

Тогда MAP определяется как:

Как всегда, этот показатель изменяется от 0 (рекомендуемые элементы не используются) до 1 (все рекомендованные элементы актуальны).

Пример

Чтобы проиллюстрировать эти довольно абстрактные метрики, вот небольшой пример:

Обратите внимание, что в рекомендациях есть порядок.

Простые методы

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

Обучение этим методам будет осуществляться путем присвоения баллов s (от 0 до 1) каждой паре пунктов a и b: s (a, b). А затем для прогноза мы просто выбираем последний элемент i в последовательности элементов, которые видел пользователь, и выводим k элементов с наивысшей оценкой s (i, u) для u в элементах. Точнее, если у пользователя есть последовательность увиденных элементов [i₁, i₂, i₃,…, iₙ], мы выведем:

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

Простая ассоциация

Это самый простой метод, который мы увидим во всей этой серии. Ниже я использовал новое обозначение # (a, s). Это количество раз, когда ‘a’ появляется в последовательности s:

Более конкретно, оценка - это количество одновременных вхождений двух элементов в последовательности.

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

Затем мы обучили модель на обучающем наборе и представили ниже метрики набора тестов:

  • MRR @ 100: 0,035
  • HR@100 : 0.033
  • NDCG @ 100: 0,025
  • MAP @ 100: 0.001

Цепи Маркова

Этот метод основан на концепции цепей Маркова. Оценка s (a, b) может быть вычислена как:

Более конкретно, оценка - это количество одновременных вхождений двух последовательных элементов в последовательности.

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

Затем мы обучили модель на обучающем наборе и представили ниже метрики набора тестов:

  • MRR @ 100: 0,076
  • HR@100 : 0.036
  • NDCG @ 100: 0,030
  • MAP @ 100: 0.001

Последовательные правила

Наконец, последний метод очень похож на первый, разница в том, что он будет уделять больше внимания во время тренировки близким предметам. Оценка s (a, b) может быть вычислена как:

Более конкретно, оценка - это количество одновременных вхождений двух элементов в последовательности, умноженное на коэффициент. Этот коэффициент представляет собой максимальную длину всех последовательностей (в нашем случае 300, поскольку мы отфильтровали более длинные последовательности) за вычетом расстояния между двумя элементами. Следовательно, чем ближе предмет, тем больше будет фактор и, следовательно, их оценка.

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

Затем мы обучили модель на обучающем наборе и представили ниже метрики набора тестов:

  • MRR @ 100: 0,036
  • HR@100 : 0.033
  • NDCG @ 100: 0,025
  • MAP @ 100: 0.001

Методы соседства🏠

Пункт-КНН (I-KNN)

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

Чтобы получить ближайший предмет, мы будем тренировать KNN на предметах. Сначала мы преобразуем каждый элемент в вектор размера количества пользователей и ставим «1» в позицию i, если i-й пользователь видел элемент «0», в противном случае. Во-вторых, используя это представление, чтобы узнать ближайший элемент, мы просто вычисляем расстояния (используя косинусное расстояние) между всеми элементами и получаем k наименьших расстояний (чтобы получить k рекомендаций). Чтобы упростить вычисления, можно использовать некоторые приемы, такие как хеширование с учетом местоположения (LSH).

Затем мы обучили модель на обучающем наборе и представили ниже метрики набора тестов:

  • MRR @ 100: 0,189
  • HR@100 : 0.310
  • NDCG @ 100: 0,167
  • MAP @ 100: 0.006

Последовательность-KNN (S-KNN)

(EDIT: обратите внимание, что этот метод НЕ зависит от времени. Поскольку это еще один метод соседства, я добавил его для полноты и сравнения)

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

Чтобы получить следующий элемент из входной последовательности s, мы обучим KNN этим последовательностям. Сначала преобразуйте каждую последовательность в вектор размера количества элементов, и мы ставим «1» в позицию i, если i-й элемент находится в последовательности «0», в противном случае. Во-вторых, используя это представление, мы получаем n ближайших последовательностей (назовем их S), вычисляя расстояния (используя косинусное расстояние) между всеми последовательностями. Наконец, мы можем получить новый вектор, суммируя все векторы в S и взвешивая их по их сходству с s. Следовательно, мы получаем новый вектор с размером количества элементов, чтобы получить следующий элемент, мы можем взять его argmax.

Затем мы обучили модель на обучающем наборе и представили ниже метрики набора тестов:

  • MRR @ 100: 0,088
  • HR@100 : 0.269
  • NDCG @ 100: 0,126
  • MAP @ 100: 0.003

Полученные результаты

Вот краткое изложение различных выступлений:

Мы видим, что наилучшие результаты дает метод I-KNN для MRR, HR, NDCG и MAP!

Заключение

Из этой статьи мы можем сделать вывод, что методы соседства намного лучше, чем «простые методы», которые я описал по каждой метрике! Но в более практическом смысле реализация I-KNN (лучший метод на данный момент 😜) может быть сложнее масштабировать и стать невозможным для расчета за разумное время без хеширования с учетом местоположения (LSH). Однако для производственных целей можно все же предпочесть простые методы, поскольку они легко реализуемы, понятны и могут быть намного быстрее с точки зрения вычислительного времени!

В моем следующем посте я представлю другие методы, такие как матричная факторизация, CNN и многое другое, так что следите за обновлениями!

Ссылки:

  1. ШУДЗИН ВАН, Сиднейский технологический университет; Университет Маккуори, Австралия LONGBING CAO, Технологический университет Сиднея, Австралия ЯН ВАНГ, Университет Маккуори, Австралия, Исследование рекомендательных систем на основе сеансов, февраль 2019 г.
  2. МАЛЬТЕ ЛЮДЕВИГ, Технический университет Дортмунд, Германия ДИЕТМАР ЯННАХ, AAU Клагенфурт, Австрия, Оценка алгоритмов рекомендаций на основе сеансов, октябрь 2018 г.