【机器学习】使用K-Means聚类细分客户

构建在信息技术中的大多数平台都在生成大量数据。这些数据称为大数据,它带有大量的商业智能。这些数据跨越边界以满足不同的目标和机会。有机会应用机器学习为客户创造价值。

问题

  1. 我们在会计和物联网领域拥有基于大数据的平台,可以持续生成客户行为和设备监控数据。
  2. 识别目标客户群或基于不同维度导出模式是关键,并且确实为平台提供了优势。

理念

想象一下,你有1000个客户使用你的平台和大量不断产生的大数据,任何有关这方面的见解真的会增值。

作为Patterns7团队不断尝试的机器学习计划和创新事物的一部分,我们对K-Means集群进行了实验,并为客户带来的价值非常棒。

 

聚类是将一组数据点划分为少量聚类的过程。在本部分中,您将了解并学习如何实现K-Means聚类。

K-Means聚类

K均值聚类是一种常用于将数据集自动划分为k个组的方法。它是无监督学习算法。

K-Means目标

  • k均值的目的是最小化每个点与其对应的聚类质心的平方距离的总和。给定一组观测值(x1,x2,...,xn),其中每个观测值是d维实数向量,k均值聚类旨在将n个观测值划分为k(≤n)个集合S = {S1,S2, ...,Sk}以最小化聚类内的平方和,其中μi是Si中的点的平均值。
  • 保证k均值算法收敛局部最优。

业务用途

这是一种多功能算法,可用于任何类型的分组。用例的一些示例是:

  • 行为细分:按购买历史记录细分,按应用程序,网站或平台上的活动细分。
  • 库存分类:按销售活动分组库存。
  • 对传感器测量进行排序:检测运动传感器中的活动类型,组图像。
  • 检测机器人或异常:从机器人中分离出有效的活动组。

K-Means聚类算法

  • 第1步:选择群集的数量K.
  • 第2步:随机选择K点,质心。(不一定来自您的数据集)
  • 步骤3:将每个数据点分配给最近的质心 - >形成K个簇。
  • 第4步:计算并放置每个群集的新质心。
  • 步骤5:将每个数据点重新分配给新的最接近的质心。如果发生任何重新分配,请转到步骤4,否则转到FIN。

示例:在python中将K-Means聚类应用于客户费用和发票数据。

对于python我正在使用Spyder编辑器。例如,我们将展示K-means算法如何与客户费用和发票数据配合使用。我们有500个客户数据,我们将查看两个客户功能:客户发票,客户费用。通常,只要数据样本的数量远大于特征的数量,该算法就可以用于任何数量的特征。

第1步:清理和转换您的数据

对于此示例,我们已经清理并完成了一些简单的数据转换。作为pandas DataFrame的数据样本如下所示。在python中导入库即

  1. numpy数学工具在我们的代码中包含任何类型的数学。
  2. matplotlib.pyplot它有助于绘制漂亮的图表。
  3. 用于导入数据集和管理数据集的pandas。

 

第2步:我们希望在总费用和总发票上应用群集。因此,在X中选择所需的列。

下图显示了500个客户的数据集,其中x轴为总发票,y轴为总支出。

 

 

第3步:选择K并运行算法

选择K.

上述算法找到特定预选K的簇和数据集标签。为了找到数据中的簇数,用户需要针对一系列K值运行K均值聚类算法并比较结果。通常,没有用于确定K的精确值的方法,但是可以使用以下技术获得准确的估计。

通常用于比较不同K值的结果的度量之一是数据点与其聚类质心之间的平均距离。由于增加簇的数量将总是减少到数据点的距离,因此当K与数据点的数量相同时,增加K将总是减小该度量,达到零的极值。因此,该指标不能用作唯一目标。相反,绘制了作为K的函数的到质心的平均距离,并且可以使用减小率急剧变化的“肘点”来粗略地确定K.

使用肘方法,我们找到最佳簇数,即K = 3。对于此示例,使用Python包scikit-learn进行计算,如下所示:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# 客户费用发票数据集
dataset=pd.read_csv('Expense_Invoice.csv')
X=dataset.iloc[: , [3,2]].values

# 使用肘部方法找到最优的群集数
from sklearn.cluster import KMeans
wcss = []
for i in range(1, 11):
  kmeans=KMeans(n_clusters=i, init='k-means++', max_iter= 300, n_init= 10, random_state= 0)
  kmeans.fit(X)
  wcss.append(kmeans.inertia_)
plt.plot(range(1, 11),wcss)
plt.title('The Elbow Method')
plt.xlabel('Number of clusters K')
plt.ylabel('Average Within-Cluster distance to Centroid (WCSS)')  
plt.show()
  
# 在商场数据集上使用k表示
kmeans=KMeans(n_clusters=3, init='k-means++', max_iter= 300, n_init= 10, random_state= 0)
y_kmeans=kmeans.fit_predict(X)

# 集群可视化
plt.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s = 100, c = 'red', label='Careful(c1)')
plt.scatter(X[y_kmeans == 2, 0], X[y_kmeans == 2, 1], s = 100, c = 'green', label='Standard(c2)')
plt.scatter(X[y_kmeans == 1, 0], X[y_kmeans == 1, 1], s = 100, c = 'blue', label='Target(c3)')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 250, c = 'yellow', 
            label='Centroids')
plt.title('Clusters of customer Invoices & Expenses')
plt.xlabel('Total Invoices ')
plt.ylabel('Total Expenses')
plt.legend()
plt.show()

 

第4步:查看结果

下图显示了结果。在视觉上,您可以看到K-means算法根据发票功能拆分三个组。每个群集质心都标有黄色圆圈。现在客户分为

  1. “小心”谁的收入减少,他们花的钱也减少了。
  2. “标准”谁的收入是平均值,他们花费更少,
  3. “目标”谁的收入更多,他们花费更多。

 

原文:http://www.patterns7tech.com/customer-segmentation-using-machine-learning-k-means-clustering/

猜你喜欢

转载自blog.csdn.net/ChenVast/article/details/82848477