Pull to refresh

Два сапога — пара, а три — уже community: как алгоритмы на графах помогают собирать группы товаров

Reading time14 min
Views22K

Привет, Хабр! Меня зовут Иван Антипов, я занимаюсь ML в команде матчинга Ozon. Наша команда разрабатывает алгоритмы поиска одинаковых товаров на сайте. Это позволяет покупателям находить более выгодные предложения, экономя время и деньги.

В этой статье мы обсудим кластеризацию на графах, задачу выделения сообществ, распад карате-клуба, self-supervised и unsupervised задачи — и как всё это связано с матчингом.

Читать далее
Total votes 127: ↑127 and ↓0+127
Comments33

Core Expansion community detection algorithm (обзор статьи + код на GitHub)

Reading time15 min
Views4.8K

Предлагается вниманию пересказ статьи Core expansion: a new community detection algorithm based on neighborhood overlap, вышедшей в журнале Social Network Analysis and Mining, номер 10, 30, (2020) с нашими комментариями. В этой статье описывается новый алгоритм для выделения сообществ в графе, основанный на Jaccard index.



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


Наша имплементация написана на Java и доступна в GitHub под MIT-лицензией. Возможно использование как в качестве отдельного приложения командной строки, так и в качестве разделяемой Java-библиотеки.


В конце этой статьи мы расскажем, где и для каких целей мы анализируем графы в Райффайзенбанке.

Читать дальше →
Total votes 20: ↑20 and ↓0+20
Comments9

Обнаружение пересекающихся сообществ в Instagram для определения интересов пользователей

Reading time8 min
Views17K
Сколько может рассказать о человеке профиль в соцсети? Фотографии, посты, комментарии, подписки – непаханное поле для анализа. Сегодня поговорим о том, как мы определяем интересы пользователей на основе их подписок в сети Instagram.

image
Источник
Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments11

Кластеризация графов и поиск сообществ. Часть 2: k-medoids и модификации

Reading time11 min
Views23K
image Привет, Хабр! В этой части мы опишем вам алгоритм, с помощью которого были получены цвета на графах из первой части. В основе алгоритма лежит k-medoids — довольно простой и прозрачный метод. Он представляет собой вариант популярного k-means, про который наверняка большинство из вас уже имеет представление.

В отличие от k-means, в k-medoids в качестве центроидов может выступать не любая точка, а только какие-то из имеющихся наблюдений. Так как в графе между вершинами расстояние определить можно, k-medoids годится для кластеризации графа. Главная проблема этого метода — необходимость явного задания числа кластеров, то есть это не выделение сообществ (сommunity detection), а оптимальное разбиение на заданное количество частей (graph partitioning).

С этим можно бороться двумя путями:
Читать дальше →
Total votes 29: ↑27 and ↓2+25
Comments4

Кластеризация графов и поиск сообществ. Часть 1: введение, обзор инструментов и Волосяные Шары

Reading time10 min
Views47K
Привет, Хабр! В нашей работе часто возникает потребность в выделении сообществ (кластеров) разных объектов: пользователей, сайтов, продуктовых страниц интернет-магазинов. Польза от такой информации весьма многогранна – вот лишь несколько областей практического применения качественных кластеров:

  1. Выделение сегментов пользователей для проведения таргетированных рекламных кампаний.
  2. Использование кластеров в качестве предикторов («фичей») в персональных рекомендациях (в content-based методах или как дополнительная информация в коллаборативной фильтрации).
  3. Снижение размерности в любой задаче машинного обучения, где в качестве фичей выступают страницы или домены, посещенные пользователем.
  4. Сличение товарных URL между различными интернет-магазинами с целью выявления среди них групп, соответствующих одному и тому же товару.
  5. Компактная визуализация — человеку будет проще воспринимать структуру данных.

С точки зрения машинного обучения получение подобных связанных групп выглядит как типичная задача кластеризации. Однако не всегда нам бывают легко доступны фичи наблюдений, в пространстве которых можно было бы искать кластеры. Контентые или семантические фичи достаточно трудоемки в получении, как и интеграция разных источников данных, откуда эти фичи можно было бы достать. Зато у нас есть DMP под названием Facetz.DCA, где на поверхности лежат факты посещений пользователями страниц. Из них легко получить количество посещений сайтов, как каждого в отдельности, так и совместных посещений для каждой пары сайтов. Этой информации уже достаточно для построения графов веб-доменов или продуктовых страниц. Теперь задачу кластеризации можно сформулировать как задачу выделения сообществ в полученных графах.
Читать дальше →
Total votes 38: ↑36 and ↓2+34
Comments17

Конкурс GraphHPC-2016 на самую быструю реализацию параллельного алгоритма Community Detection

Reading time1 min
Views5.8K


Совсем скоро, в рамках третьей научно-технической конференции GraphHPC-2016, стартует конкурс GraphHPC, посвященный проблемам параллельной обработки больших графов с использованием суперкомьютеров. В этот раз участникам предстоит найти самую быструю реализацию задачи Community Detection (поиск сообществ) в неориентированном графе с весами.
Читать дальше →
Total votes 10: ↑9 and ↓1+8
Comments4

Конкурс GraphHPC-2016 на самую быструю реализацию параллельного алгоритма Community Detection: Итоги

Reading time2 min
Views6.5K

В рамках конференции GraphHPC-2016, прошедшей 3 марта 2016 года в МГУ им. М.В. Ломоносова на факультете ВМК, проводился конкурс на самую быструю реализацию задачи Community Detection — поиска сообществ в неориентированном графе с весами.
Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments4