一 本文目的
聚类分析是把相似的分析对象,根据各自特征分成不同的组别的统计方法。最常见的聚类分析应用场景是客户分群(segmentation),并由此衍生出对客户的画像工作。
本文目的旨在用python对数据进行处理,并根据客户的RFM进行KMeans聚类,达到组内顾客特征相似,同时不同组的顾客之间的特征差异较为明显的目的。
二 理解数据
本文数据来源于kaggle网站:
Online Retail Data Set from UCI ML repowww.kaggle.com其中,数据的时间范围从2010年12月1日到2011年12月9日,一共8个字段,541909条记录。
字段分别为:InvoiceNo、StockCode、Description、Quantity、InvoiceDate、UnitPrice、CustomerID、Country;分别对应: 订单号、产品号、产品描述、每笔交易量、交易时间、产品、单价、用户ID、用户所在国家。
三 数据导入与预处理
1 数据导入
2 查看简要信息
3 修改列名
4 删除空值
上图可知,用户ID以及产品描述有空值,删除这两列的空值。
5 删除重复值
8列所有数据都一样的作为重复值,删除。
6 删除异常值
交易量,以及产品产品单价必定是大于0的,小于0的为异常值。
最后,剩下397884行。
7 特征延展
后期要用到M的值,因此新增一列交易金额;新增两列,两列数据来自于分别提取交易时间中的日期与时间。
8 求R
8.1 求出每个用户最近一次消费
用数据中的最后一天,减去最近一次消费时间
9 求F
相同的单号进行去重,求出每个用户的购买次数。
10 求M
11 构建表格
四 特征处理
1 对数化
观察数据,RF是1-400的数,M的取值范围是1-280206,我们先对三个数取对数,尽可能保留数据特征。
2 归一化/标准化
我们定义函数model:如果是True,表示进行归一化处理,False表示进行标准化处理。
这一步的目的是:到最后给KMeans模型进行评分时,进行调参。在此,我们先全部归一化处理。
五 模型构建
KMeans的关键是定义究竟分几类,也就是找到使平方误差函数最小的簇。
那么首先,我们计算出,如果切分为1-8类,对应的簇内误差平方和。
可知,聚类数目到3时,曲线逐渐开始平缓。因此,K=2即为最佳聚类数目。
因为KMeans是基于切割的聚类,在此我们也可以计算轮廓系数,进行对比衡量聚类效果。
如上,结果确实是n=2最好。
有了以上的轮廓系数,以及簇内误差平方和,我们可以反复调参,最后达到最好的效果。
六 得出结果
经过调节,最后得出:“r=False,f=True,m=False”时,n=3,效果最好。
此时,分类后的群体,RFM的平均值,贡献的总金额大小,以及个数如下: