Введение

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

В данном проекте предстояло работать с данными о клиентах, их покупках и атрибутах. Для того, чтобы провести сегментацию клиентов, использовались методы кластеризации. Кластеризация – это метод анализа данных, который используется для группирования объектов в подмножества (кластеры) таким образом, чтобы объекты внутри кластера были более похожи между собой, чем на объекты из других кластеров.

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

Описание методологии

Для начала работы с данными в R:

#указание местоположения файла
setwd("C:\\Users\\Acer\\Desktop\\DF")

#загрузка библиотек
library(readxl)
library(dtwclust)
library(factoextra)
library(stats)
library (cluster)

#выбор файла из местоположения
dd <- read_xlsx("DnD.xlsx")

#вынос столбцов с наименованиями в отдельную переменную
titles <- dd[1:2]
#View(dd)
#View(titles)

Затем, проводится обработка данных для дальнейшей работы. В обработку вошли:

#стандартизация данных
dd = scale(dd[3:15])
#View(dd)

#удаление столбца со значениями NaN и строк без данных
df <- subset(dd, select = - c(11))
df <- na.omit(df)

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

fviz_nbclust(df, kmeans, method = 'silhouette')

fviz_nbclust(df, kmeans, method = 'wss')

#gap_stat <- clusGap(df,
                    #FUN = kmeans,
                    #nstart = 25,
                    #K.max = 2,
                    #B = 50)

#fviz_gap_stat(gap_stat)

Можно заметить, что методы “silhouette” и “wss” указывают на число 10, как необходимое количество кластеров, однако стандартный метод локтя изгибается в точке “3”. Посредством “проб и ошибок” было выявлено, что наиболее логичным представляется взять 3 кластера, при выборке большего количества кластеров конечный график искажается и не имеет репрезентативности. Именно поэтому в анализе данных при разделении базы данных на “атрибутам” и “вооружение” было взято 2 кластера, количество которых было вычислено тем же методом “проб и ошибок” Ниже приведены итоги кластеризации в общей базе данных при выборке в 5, 7 и 10 кластеров

km <- kmeans(df, centers = 10, nstart = 25)
fviz_cluster(km, data = df)

km <- kmeans(df, centers = 7, nstart = 25)
fviz_cluster(km, data = df)

km <- kmeans(df, centers = 5, nstart = 25)
fviz_cluster(km, data = df)

Как заметно по обозримому коду - для проведения кластеризации использовался алгоритм К-Средних (K-Means). K-Means – это алгоритм кластеризации, который заключается в том, что изначально выбирается заданное количество центроидов, после чего точки, находящиеся ближе к одному центроиду, попадают в один кластер. Затем пересчитываются координаты новых центроидов, после чего точки снова распределяются по кластерам. Этот процесс повторяется до тех пор, пока центроиды не перестанут перемещаться.

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

Представление результатов

Для удобства работы с данными, фрейм был разделён на две части: атрибуты и вооружение. Это позволило найти закономерности в кластеризации между способностями и купленными вещами. Таким образом, в начале были кластеризированы скиллы персонажей:

#указание местоположения файла
setwd("C:\\Users\\Acer\\Desktop\\DF")

#загрузка библиотек
library(readxl)
library(dtwclust)
library(factoextra)
library(stats)
library (cluster)

#импорт таблицы
d_d <- read_xlsx("DnD.xlsx")

#отделение наименований от данных
titles <- d_d[1:2]
#View(d_d)

#стандартизация данных по скиллам
df_skl = scale(d_d[3:8])

#удаление строк без данных
df_skl <- na.omit(df_skl)

Для того, чтобы увидеть разделение кластеров, построена дендрограмма:

#построение дендрограммы для наглядности разделения кластеров
d_s = dist(df_skl)
h = hclust(d_s)
plot(h,labels = FALSE)

Далее необходимо узнать желательное количество кластеров методом локтя:

#выясняем необходимое количество кластеров
fviz_nbclust(df_skl, kmeans, method = 'wss')

Далее методов К-средних проводим первый этап кластеризации:

k=kmeans(df_skl,2)

k$cluster
k$centers
k=kmeans(df_skl,2)

#Построим график
fviz_cluster(k,df_skl)

И, наконец, выбрав оптимальное количество кластеров, проводим второй этап кластеризации:

#кластеризация с оптимальным значением K
km <- kmeans(df_skl, centers = 2, nstart = 25)
km

Получаем следующие данные:

Сила Ловкость Выносливость Интеллект Мудрость Харизма
-0.8955364 0.2163311 -0.7900413 0.8371802 0.8696913 -0.5605814
0.4826360 -0.1165884 0.4257809 -0.4511857 -0.4687071 0.3021170
#строим график
fviz_cluster(km, data = df_skl)

Используем функцию aggregate, чтобы найти среднее значение переменных в каждом кластере:

#получаем средние значения переменных
aggregate(df_skl, by = list (cluster=km$cluster), mean)
##   cluster       Сила   Ловкость Выносливость  Интеллект   Мудрость    Харизма
## 1       1 -0.8955364  0.2163311   -0.7900413  0.8371802  0.8696913 -0.5605814
## 2       2  0.4826360 -0.1165884    0.4257809 -0.4511857 -0.4687071  0.3021170

Далее проведём кластеризацию вооружения по такому же принципу:

#вносим новые данные
setwd("C:\\Users\\Acer\\Desktop\\DF")
library(readxl)
library(dtwclust)
library(factoextra)
library(stats)
library (cluster)

d_d <- read_xlsx("DnD.xlsx")
titles <- d_d[1:2]
#View(dd)

#стандартизация данных
df_wep = scale(d_d[9:15])
#View(df_wep)

#удаление столбца со значениями NaN и строк без данных
df_wep <- subset(df_wep, select = - c(5))
df_wep <- na.omit(df_wep)
#строим дендрограмму
d_w = dist(df_wep)
h = hclust(d_w)
plot(h,labels = FALSE)

#первый этап кластеризации
k = kmeans(df_wep,2)

k$cluster
k$centers
k = kmeans(df_wep,2)

#строим график
fviz_cluster(k,df_wep)

#кластеризация с оптимальным значением K
km <- kmeans(df_wep, centers = 2, nstart = 25)
km

Получаем следующие значения:

Легкие доспехи Средние доспехи Тяжелые доспехи Щиты Воинское оружие Фокусировки
0.266231 0.3315854 0.1674937 0.5024485 0.3160271 -0.1683808
-1.054359 -1.3131834 -0.6633281 -1.9898556 -1.2515677 0.6668413
#итоговая кластеризация
fviz_cluster(km, data = df_wep)

#получаем средние значения переменных
aggregate(df_wep, by = list (cluster=km$cluster), mean)
##   cluster Легкие доспехи Средние доспехи Тяжелые доспехи       Щиты
## 1       1     -0.4171135      -0.3121223      -0.6633281 -0.7872037
## 2       2      0.2662310       0.1992183       0.4233824  0.5024485
##   Воинское оружие Фокусировки
## 1      -1.2515677   1.0588917
## 2       0.7988381  -0.6758588

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

Выводы и рекомендации заказчику

Исходя из полученных данных, можно сделать следующие выводы:

  1. Несущественные взаимосвязи можно провести между некоторыми атрибутами и вооружением, которые, как могло бы показаться, подходят друг другу. К примеру, между “Силой” и “Тяжелыми доспехами” не так много пересечений, что не позволяет делать вывод о том, что силачи обязательно будут идти за тяжёлым вооружением 2.Более прочные связи можно заметить между атрибутами “Сила”, “Выносливость”, “Харизма”, тогда как “Интеллект” и “Мудрость” лежат в противоположной плоскости. Одним, выпадающим из группы атрибутом, является “Ловкость”, им пренебрегают как мудрецы, так и силачи, однако находится он, примерно, посередине, что показывает его, хоть и слабую, но принадлежность к обеим группам;

  2. Довольно неожиданным стало то, что в достаточно видимой связи находятся такие атрибуты как “Сила” и “Фокусировки”, “Мудрость” и “Воинское оружие”, “Интеллект” и “Щиты” и, так же “Ловкость” и “Тяжелые доспехи”. Эти данные дают следующую возможность для интерпретации: силачи пренебрегают доспехами и милитари вооружением, мудрецы всё больше стремятся к тому, чтобы защитить себя от атак противника, а ловкачи переходят с лёгких доспехов на средние и тяжёлые. Все это, скорее всего, связано с тем, что противника становится всё сложнее обойти в стандартных показателях, в связи с чем игроки ищут новые тактики и пытаются строить билд, используя не только присущие им атрибуты, но и прокачивая другие. Это касается, в том числе, и вооружения;

  3. Последним выводом является изобретательность покупателей в ходе построения билда: те, кто не обижены “Харизмой”, “Силой” и “Выносливостью” стремятся перейти в новую для них стезю - “Фокусировки”, то же самое можно сказать и о мудрецах, судя по данным, они стали меньше обращать внимание на “фокусировки” и более пристальное внимание направили на вооружение для защиты в ближнем бою.

Также следующие рекомендации выданы для сети магазинов розничной торговли предметов и артефактов из Dungeon and Dragons:

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

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

  3. Разработать более специализированные магазины, которые будут лучше соответствовать интересам конкретных кластеров клиентов. Например, создать магазин специализированных товаров для ролевиков, совмещающих несколько несоотвутствующих друг другу атрибутов;

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