Анализ процессов, Графы

Применение технологии graph mining в аудите банковских транзакций

Время прочтения: 2 мин.

Визуализация с помощью графа может отобразить значительно больше информации чем простая таблица. Одной из библиотек для построения графов в языке программирования Python является networkx.

Библиотека Networkx представляет концепцию сетевых графов, которые показывают взаимосвязи между набором различных объектов. Применение технологии графов позволяет быстро построить и визуализировать набор данных, хранящихся в табличном представлении через небольшое количество строк кода.

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

matrix = need_transaction[['ИД пл.', 'ИД пол.']].drop_duplicates()
matrix['ИД пл.'] = matrix['ИД пл.'].apply(lambda x: x.replace(' ', ''))
matrix['ИД пол.'] = matrix['ИД пол.'].apply(lambda x: x.replace(' ', ''))

Процесс создания графа состоял из нескольких этапов:

fig = plt.figure(figsize=(40,40))
G = nx.Graph()
for i in range(matrix.shape[0]):
    G.add_edge(matrix.iloc[i]['ИД пл.'], matrix.iloc[i]['ИД пол.'])
nx.draw(G, node_size=50, pos=nx.spring_layout(G), node_color='blue')
plt.draw()

Построенный граф получил следующий вид:

Для определения различных категорий клиентов, были предложены цветовые обозначения. С этой целью был создан массив для записи значений цвета, а затем использован в функции nx.draw.

color_map = []
for node in G:
    if  node in group_1:
        color_map.append('green') #группы клиентов №1
    elif node in group_2:
        color_map.append('red') #группа клиентов №2
    elif node in group_3: 
        color_map.append('blue')#группа клиентов №3
    else:
        color_map.append('black')
        
edges = G.edges()
colors=[G[u][v]['color'] for u,v in edges]
pos = nx.spring_layout(G,k=0.15,iterations=20)
nx.draw(G,pos,node_color=color_map, edges=edges, edge_color=colors)

plt.draw()

Граф с измененными цветами вершин выглядит следующим образом:

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

Применение инструментов библиотеки network, позволило ускорить процесс определения взаимодействий клиентов, а графическая визуализация помогла аудитору выяснить участников транзакций — получателей и отправителей денежных средств.

Советуем почитать