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

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

Написание программы происходило на языке программирования Python и сначала нужно считать данные, которые хранились в формате csv.

import pandas as pd
data_file= pd.read_csv('transactions.csv')
data_file.head() 

Считать файл этого формата можно с помощью библиотеки pandas, а командой head() выведем шапку документа, что бы посмотреть и оценить данные, которые нужно кластеризовать.

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

Далее необходимо убрать столбцы с лишней информацией, так как ее оценивание не даст полезной информации для анализа. Команда drop() удаляет лишние столбцы, нам нужно оставить информацию id клиента, MCC код,  тип транзакции и ее сумму.  Для того что бы кластеризовать эти данные, можно воспользоваться методом к-средних, но для начала необходимо записать данные в виде массива и стандартизовать  его, что бы минимальное значение было 0, а максимальное 1.

from sklearn.preprocessing import StandardScaler
import numpy as np
X=file.values[:,1:]
X=np.nan_to_num(X)
Clus_dataSet=StandardScaler().fit_transform(X)

 Теперь наши данные можно кластеризовать с помощью метода KMeans из библиотеки sklearn.cluster.

from sklearn.cluster import KMeans
clasterNum=4
k_maens = KMeans(init="k-means++",n_clusters=clasterNum,n_init=12)
k_maens.fit(Clus_dataSet)
labels=k_maens.labels_

В массив labels записаны данные о том, к какому кластеру будет принадлежать каждый элемент. Далее необходимо к исходным данным добавить новую колонку (назовем ее Class_kl) и записать информацию из полученного массива. Чтобы посмотреть окончательный результат нужно провести группировку по значениям добавленной колонки. Это можно сделать с помощью команды groupby(). В итоге видим следующий результат.

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

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

На этом графике хорошо видно операции какого типа используются чаще всего, это покупка технических условий, выдача наличных, платежи онлайн, перевод денежных средств, возвраты средств за покупки, переводы через АТМ и POS и списание налогов.

Так же можно заметить, что хорошо видно только 3 кластера из 4 и теперь данные нужно отобразить в трехмерном пространстве с помощью библиотеки mpl_toolkits.mplot3d.

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

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