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

Neo4j курсы примеры обучение Data Science, лучшие практики разработки приложений с Neo4j, обучение Neo4j graph data science курсы примеры, курсы дата-аналитик Neo4j примеры обучение, обучение аналитике больших данных, Neo4j задачи на графах бизнес приложения примеры, аналитик разработчик Neo4j, обучение большим данным, Школа Больших Данных Учебный Центр Коммерсант

Развивая наш новый курс по графовой аналитике больших данных в бизнес-приложениях, сегодня рассмотрим американского медиаконгломерат 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/
Поиск по сайту