Как улучшить рекомендательную систему с Neo4j: кейс Meredith

Автор Категория ,
Как улучшить рекомендательную систему с Neo4j: кейс Meredith

Развивая наш новый курс по графовой аналитике больших данных в бизнес-приложениях, сегодня рассмотрим американского медиаконгломерат Meredith Corporation по персонализации пользовательских профилей с помощью графовой СУБД Neo4j и алгоритма непересекающихся множеств (Union-Find).

Постановка задачи: сложности идентификации анонимных клиентов

Различными контент-продуктами конгломерата Meredith Corporation ежемесячно пользуется более 180 миллионов человек через приложения, веб-сайты, подкасты и видео. Meredith стремится предоставлять каждому из них релевантный контент, персонализированный специально для отдельного клиента. Однако, идентифицировать клиента – не самая простая задача, если пользователь не входит в систему под своей учетной записью и может потреблять контент с разных устройств.

Meredith идентифицирует анонимных пользователей с помощью уникальных файлов cookie, которые сохраняются на устройстве пользователя. Но потеря файлов cookie или их блокирование в браузерах, а также различные устройства усложняют получение полной информации о клиенте. Кроме того, cookie-файлы имеют короткий срок службы. Поэтому ML-модели в рекомендательных системах, использующие идентификаторы cookies, становятся недостаточно эффективны и не окупают вложенные в их разработку усилия. Пример простой реализации рекомендательной системы в Neo4j средствами ее языка запросов Cypher без применения сложных нейросетевых моделей, смотрите в нашей новой статье.

Широкий ассортимент продуктовой линейки медиаконтента Meredith генерирует несколько разрозненных потоков данных, которые необходимо совместно анализировать. Поэтому нужны способы идентификации пользователей в этих разных потоках. Задача сводится к кластеризации пользователей, что можно решить путем нахождения групп с похожими интересами, представив события пользовательского поведения в виде графа. Для этого была использована специализированная аналитическая СУБД Neo4j, о чем мы поговорим далее.

Анализ данных пользовательских интересов с Neo4j

После внесения данных о поведении пользователей в Neo4j Enterprise Edition на AWS с библиотекой Graph Data Science, был получен граф из нескольких миллиардов узлов. Простое сопоставление с образцом показало, что файлы cookie, предназначенные для идентификации уникальных пользователей, иногда повторялись в разных потоках данных. Чтобы уточнить этот инсайт, в граф были добавлены данные от сторонних провайдеров. Сторонние провайдеры продают предлагают идентификационные данные из файлов cookie и запускают их в соответствии со своим собственным графом удостоверений, возвращая расширенные профили пользователей. Но эти результаты сложно назвать достоверными, поскольку механизм их формирования непрозрачен и скрыт на стороне поставщика. Дополнительную трудность создает анонимность трафика.

Поэтому с помощью алгоритмов библиотеки Graph Data Science в Neo4j были проведены анализ и визуализация данных от сторонних провайдеров. Это позволило выявить подозрительные паттерны, такие как гиперсоединения на графе, что свидетельствовало о недостоверности данных. Таким образом команда Meredith смогла выявить недобросовестных провайдеров и отказаться от их услуг.

Для выявления похожих пользовательских профилей был выбран алгоритм Union Find, который идентифицирует уникальные подграфы внутри большего графа. Подграфы показывают данные, связанные с конкретным пользователем. Алгоритм присваивает этому подграфу уникальное целое число; это целое число стало идентификатором профиля пользователя Meredith или идентификатором MUP.

Алгоритм Union Find также называют системой непересекающихся множеств (Disjoint Det Union, DSU). В библиотеке Graph Data Science Neo4j он реализован методом слабо связанных компонент (Weakly Connected Components, WCC). Алгоритм WCC находит группы узлов, в которых каждый узел доступен из любого другого узла в той же группе, независимо от направления отношений. Он обеспечивает почти постоянное время выполнения операций независимо от размера входных данных для добавления новых групп, объединения существующих групп и определения того, находятся ли два узла в одной группе. Этот метод часто используется в сочетании с другими алгоритмами, особенно для высокопроизводительной группировки. А на этапе предварительной обработки неориентированных графов он помогает быстро идентифицировать несвязанные группы. О других алгоритмах анализа социальных связей в Neo4j мы писали здесь.

После обогащения графа поведения пользователей данными от надежных провайдеров, Neo4j-база Meredith стала содержать более 4,4 терабайт данных по 30 миллиардам узлов, 67 миллиардам свойств и 35 миллиардам отношений. Средняя продолжительность точек взаимодействия пользователя с контентом увеличилась с 14 дней для файлов cookie до 241 дня для профилей пользователей. Среднее количество посещений возросло с 4 на файл cookie до 23,8 на профиль.

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

Больше реальных примеров применения Neo4j и других инструментов графовой аналитики больших данных для практических бизнес-задач вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков больших данных в Москве:

Источники

  1. https://neo4j.com/case-studies/meredith/
  2. https://en.wikipedia.org/wiki/Disjoint-set_data_structure
  3. https://neo4j.com/docs/graph-data-science/current/algorithms/wcc/