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

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

Используемые данные — это данные о посетителях торгового центра, которые будут сгруппированы с использованием метода k-средних.

#Импорт библиотек
import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import colors
import seaborn as sns
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import StandardScaler
from yellowbrick.cluster import KElbowVisualizer
import matplotlib.pyplot as plt, numpy as np
из mpl_toolkits.mplot3d импортировать Axes3D
из sklearn.cluster импортировать AgglomerativeClustering
из matplotlib.colors импортировать ListedColormap
из sklearn импортировать метрики
импортировать предупреждения
импортировать sys

Отсюда мы удалим столбец «CustomerID», переименуем столбец «Годовой доход (k$)» в «Доход», а столбец «Оценка расходов (1–100)» переименуем в «sp_score».

# Измените название столбцов для удобства
data.rename(columns={"Годовой доход (тыс.$)":"Доход", "Оценка расходов (1–100)":"sp_score"}, inplace=True)< br /> data.drop (столбцы = ['CustomerID'], inplace = True)

Это информация из фрейма данных

#Информация о характеристиках
data.shape
data.info()
data.isnull().sum()

Пропущенных значений в данных не обнаружено. Данные готовы для дальнейшего анализа!

Кластеризация работает с числовыми данными, поэтому столбец «Пол» мы опустим. Ниже приведены последние данные

Далее мы проведем подход к анализу данных

# создать гистограмму для числовых переменных
data_num.hist()
plt.show()
data_num.boxplot()

Гистограмма для числовых переменных

Блочная диаграмма для числовых переменных

Кластеризация K-средних — это алгоритм обучения без учителя, который представляет собой итеративный алгоритм, который делит немаркированный набор данных на k разных кластеров таким образом, что каждый набор данных принадлежит только к одной группе со схожими свойствами.

На приведенной ниже диаграмме объясняется работа алгоритма кластеризации K-средних.

Кластеризация K-средних

из sklearn.cluster импортировать KMeans
из sklearn.preprocessing импортировать Normalizer
из sklearn.preprocessing импортировать OneHotEncoder
из sklearn.compose импортировать ColumnTransformer
импортировать scipy.cluster.hierarchy as sch

Сегментация с использованием показателя годового дохода и расходов

Определение оптимального количества кластеров методом локтя

X=data[['Income','sp_score']]
sse = {}
for k in range(1, 11): # выберите диапазон для k
kmeans = KMeans( n_clusters=k, random_state=42) # построить модель
kmeans.fit(X) # подобрать модель
sse[k] = kmeans.inertia_
plt.title('Метод локтя ')
plt.xlabel('K')
plt.ylabel('Сумма квадратов ошибок (SSE)')
plt.plot(list(sse.keys()), list (sse.значения ()))

Если вы уменьшите масштаб этой кривой, то увидите, что последний изгиб приходится на k=5. НАКОНЕЦ-ТО МЫ ПОЛУЧИЛИ k=5!!!

# построить модель для k=5
model = KMeans(n_clusters=5, random_state=42)
model.fit(X)
y_predicted = model.fit_predict(X)
data ['кластер'] = y_predicted
X = X.values

Визуализация кластеров для k=5

plt.scatter(X[y_predicted==0,0],X[y_predicted==0,1],s=50, c='purple',label='Cluster1')
plt.scatter(X[ y_predicted==1,0],X[y_predicted==1,1],s=50, c='blue',label='Cluster2')
plt.scatter(X[y_predicted==2,0 ],X[y_predicted==2,1],s=50, c='green',label='Cluster3')
plt.scatter(X[y_predicted==3,0],X[y_predicted= =3,1],s=50, c='голубой',label='Cluster4')
plt.scatter(X[y_predicted==4,0],X[y_predicted==4,1], s=50, c='yellow',label='Cluster5')
plt.scatter(model.cluster_centers_[:,0], model.cluster_centers_[:,1],s=200,marker='s ', c='red', alpha=0.7, label='Centroids')
plt.title('Сегменты клиентов')
plt.xlabel('Годовой доход клиента')
plt.ylabel('Годовые расходы клиента на сайте')
plt.legend()
plt.show()

Из приведенного выше графика видно, что кластеров 5.

· Средний доход — клиенты со средним баллом. Из приведенного выше графика видно, что клиенты, принадлежащие к этому кластеру, имеют доход в диапазоне 40–80 и имеют балл расходов в диапазоне 40–60.

· Клиенты с высоким доходом — с низким баллом: на приведенном выше графике видно, что клиенты, принадлежащие к этому кластеру, имеют диапазон доходов > 65 и имеют показатель расходов менее 40.

· Низкий доход — клиенты с низким баллом: Из приведенного выше графика видно, что клиенты, принадлежащие к этому кластеру, имеют диапазон доходов ‹ 40 и имеют показатель расходов менее 40.

· Низкий доход — клиенты с высоким баллом: Из приведенного выше графика видно, что клиенты, принадлежащие к этому кластеру, имеют диапазон доходов ‹ 40 и имеют показатель расходов выше 60.

· Высокий доход — клиенты с высоким баллом: Из приведенного выше графика видно, что клиенты, принадлежащие к этому кластеру, имеют диапазон доходов > 70 и имеют показатель расходов выше 60.

Целью торгового центра является увеличение числа клиентов, представленных в кластере «Высокий доход — Высокий балл», за счет сокращения клиентов, присутствующих в кластере «Высокий доход — Низкий балл», а также миграция клиентов, присутствующих в кластере «Средний доход — Средний балл» к более высоким баллам расходов.