KMeans在RFM模型上的应用
RFM模型到底是个啥,建议先参考百度百科以及知乎的解释。
KMeans算法又是个啥,一言以蔽之:无监督学习的聚类算法(也就是俗话讲的物以类聚,人以群分)。
废话不多说,开始上手
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
data = pd.read_excel('./consumption_data.xls', index_col='Id')
data.head()
解释下这个数据集:字段R表示最近一次消费(Recency),字段F表示消费频率(Frequency),字段M表示消费金额(Monetary)
- 字段R:最近一次消费指上一次购买的时间——用户上一次是什么时候下的单、用户上一次是什么时候订购的服务,或在线下门店中用户上一次进店购买是什么时候。
- 字段F:消费频率指的是顾客在限定的期间内所购买的次数。一般而言,最常购买的用户,也是满意度/忠诚度最高的顾客,同时也是对品牌认可度最高的用户。
- 字段M:消费金额是电商相关业务数据库的支柱,也可以用来验证“帕雷托法则”——公司80%的收入来自20%的顾客。M值带有时间范围,指的是一段时间(通常是1年)内的消费金额。对于一般电商店铺而言,M值对客户细分的作用相对较弱(因为客单价波动幅度不大)。
R | F | M | |
---|---|---|---|
Id | |||
1 | 27 | 6 | 232.61 |
2 | 3 | 5 | 1507.11 |
3 | 4 | 16 | 817.62 |
4 | 3 | 11 | 232.81 |
5 | 14 | 7 | 1913.05 |
data.shape
(940, 3)
data.index
Int64Index([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
...
933, 934, 935, 936, 937, 938, 939, 940, 941, 942],
dtype='int64', name='Id', length=940)
数据标准化
data_std = 1.0 * (data - data.mean()) / data.std()
data_std.head()
R | F | M | |
---|---|---|---|
Id | |||
1 | 0.764186 | -0.493579 | -1.158711 |
2 | -1.024757 | -0.630079 | 0.622527 |
3 | -0.950217 | 0.871423 | -0.341103 |
4 | -1.024757 | 0.188922 | -1.158432 |
5 | -0.204824 | -0.357079 | 1.189868 |
k =8 # k-1个簇
iteration = 500 # 聚类最大循环次数
inertia = [] # 簇内误差平方和
for i in range(1, k):
model = KMeans(n_clusters=i, n_jobs=4, max_iter=iteration, random_state=1234