Найти тему
10,2 тыс подписчиков

🔍 Выявление неявных связей при анализе графов или как увидеть незримое


Неявные связи в графах. Что это и как с ними работать, разберу на примерах.

Граф — множество узлов, объединенных множеством ребер.

С узлами все понятно, взяли города России, клиентов банка или компьютеры в сети, и получили множество объектов, которые и будут узлами для графа.

Что же с ребрами? На первый взгляд все просто: города соединены дорогами, клиенты совершают переводы денежных средств, а компьютеры постоянно обмениваются информацией. Все, что было перечислено, относится к явным типам связей.

Существует факт взаимосвязи между объектами: если дороги нет, то ребро между узлами отсутствует.
Что же относится к неявным связям? Неявные связи сложнее, они могут зависеть от явных связей или же быть самостоятельными.

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

Теперь перейдем к практическому примеру.
Есть 2 файла:

◾️Данные о мошенниках, их номерах телефонов, а также периоды их активности;
◾️Данные о клиентах и номерах телефонов с периодами активности.
◾️Данные с номерами телефонов сложно найти в открытом доступе, придется сгенерировать их самостоятельно. Код для генерации необходимых данных расположен по ссылке.

Следующим этапом будет создание графа. Для этой задачи понадобятся следующие python-библиотеки:

▪️Pandas – для работы с файлами;
▪️NetworkX – для создания графа связей, его визуализации;
▪️Matplotlib и Numpy – нужны для настройки визуализации графа;
▪️Datetime – для операций над временными данными.

Перед созданием графа взглянем на данные, с которыми нам предстоит работать.

Описание данных:

📍index – id клиента / мошенника;
📍numbers – номер телефона;
📍Date_start – начало периода активности;
📍Date_end – окончание периода активности.

1 минута