Ранее мы рассмотрели механизм функционирования рекомендательных систем и самостоятельно написали ядро рекомендательной систему на основе метода коллаборативной фильтрации. Сегодня мы рассмотрим вариант развертывания готовых рекомендательных систем из популярных Python-модулей, оценим их эффективность и даже попробуем немного улучшить рекомендательную систему на основе SVD-алгоритма, известного как победитель конкурса на лучшую рекомендательную систему стриминговой компании “Netflix”. В RBC Group мы открыты для обмена опытом в разработке так называемых мета-гибридных рекомендательных систем для решения реальных бизнес-проблем.
Стоит напомнить, что магия рекомендательной системы ( на основе памяти) заключается в следующем:
Таким образом, для повышения точности рекомендательной системы коллаборативной фильтрации нужно:
Эти улучшения превратят вашу рекомендательную систему на основе памяти в гибридную, что означает неизбежное усложнение модели и потребность во внешних источниках данных, т.е. данных из профилей пользователей, онлайн-сессий и/или текстовое и визуальное представление товаров.
В компании RBC Group, мы разработали и успешно применили в нескольких проектах своеобразную технику, чтобы сохранить баланс между сложностью рекомендательных систем, их интерпретируемостью и ресурсоэффективностью, назвав такой подход мета-гибридной рекомендательной системой.
Наш особый подход предполагает (1) предварительную кластеризацию товаров на основе их описательных характеристик (метаданные) и (2) последующую обработку разделеных на кластера матриц оценок с помощью преднастроенной рекомендательной системы коллаборативной фильтрации.
При таком методе “соседи” каждого пользователя эффективно определяются за счет построения векторов признаков внутри каждого кластера. Такие вектора имеют меньшую дисперсию, поскольку пользователи из одного кластера, вероятно, имеют схожий опыт взаимодействия с товарами. Таким образом, такие векторы, как правило, лучше отражают фактические предпочтения/антипатию пользователей.
Кроме того, предложенный метод существенно снижает потребление ОЗУ во время обучения и выдачи прогноза моделью. Вот почему мы говорим о ресурсоэффективности (с т.з. ОЗУ) нашей мета-гибридной рекомендательной системы.
Как и в предыдущем посте, мы продемонстрируем все ранее описанное на наборе данных “ml-laest-small” от “MovieLens”, который содержит рейтинги фильмов (по 5-ти бальной системе) и произвольные теги к ним. Мы будем использовать все эти данные для первоначальной кластеризации набора данных.
Во-первых, давайте преобразуем жанровую информацию в dummy-переменные:
Как один из предикторов для последующей кластеризации мы извлекли год выпуска фильма и преобразовали его с помощью метода частотного кодирования.
Давайте далее извлечем и создадим некоторые полезные предикторы из тегов. После объединения списка тегов с текстом заголовка мы можем использовать эту комбинацию для построения векторов TD-IDF:
Все основные этапы предварительной обработки, включая снижение размерности, упакованы в конвейер данных:
Перед применением простого метода кластеризации k-средних мы определили оптимальное число кластеров:
Давайте присвоим произвольные метки кластерам и посмотрим на распределение фильмов:
Похоже, теперь мы готовы провести наш главный эксперимент. Мы собираемся применять алгоритм сингулярного разложения (от Python-модуля surprise) к (1) исходным данным, а затем к (2) каждому сегменту кластеризованных данных в цикле. Каждый раз мы будем измерять распределение точности и вспоминать для сравнения результатов:
Очевидно некоторое превосходство мета-гибридной рекомендательной системы. Кроме того, такой подход также эффективен с точки зрения памяти, как было указано ранее:
Для лучшего понимания того, что происходит внутри механизма рекомендательной системы в этом конкретном примере — вам следует просмотреть весь код.
Таким образом, наш главный посыл довольно простой: когда вы начинаете думать о рекомендательной системе (на основе коллаборативной фильтрации) как об алгоритме, который некоторым образом прогнозирует взаимодействие пользователя А с неизвестным товаром Х (прогнозный рейтинг товара) на основе сходства пользователя А с другими пользователями, которые уже имели опыт взаимодействия с товаром Х, то Вы сразу понимаете, что такое коллаборативная фильтрация, и насколько сильно точность такого прогноза зависит от точности измерения сходства между пользователями. Одним из способов повышения точности измерения такого сходства (за пределами чисто математических методов) является ограничение набора пользователей, которых вы собираетесь сравнивать, до некоторого подмножества (мета-кластера), представители которого де-факто обладают общими характеристиками.