![7ff11c08c69cb3974bbc7c760577a485.png](https://img-blog.csdnimg.cn/img_convert/7ff11c08c69cb3974bbc7c760577a485.png)
数据还是前文中的数据,这次换一种方式来打标签,通过pandas的pivot_table(数据透视表)方法,结合自定义函数的方式来直接整理RFM模型数据,将用户划分为8个类别。
![4d3bc800c6e6bad79530b87375d46f0e.png](https://img-blog.csdnimg.cn/img_convert/4d3bc800c6e6bad79530b87375d46f0e.png)
一、数据概况
- 特征变量数:4个。用户ID、订单日期、订单ID、订单金额
- 数据记录数:86135
- 是否有NA值:有
- 是否有异常值:有
![64832ca7a108ef0a28a15a580a2893a8.png](https://img-blog.csdnimg.cn/img_convert/64832ca7a108ef0a28a15a580a2893a8.png)
- USERID: 用户ID,每个用户的ID唯一,由纯数字组成
- ORDERDATE: 订单日期,格式为YYYY/MM/DD
- ORDERID: 订单ID,每个订单的ID唯一,由纯数字组成
- AMOUNTINFO: 订单金额,浮点型数据
数据下载链接:https://pan.baidu.com/s/1EQODFE3Y96hEcCfmzUezgw 密码:rz4r
二、用RFM模型将用户分成8类,并打标签
经过上文(萧萧:案例:用python实现RFM用户价值度分层(python022))中的数据预处理:删除空值、去掉极小值、数据变换后,得到sales_data,如下:
![f243e2992f316b2e9d2039b40938f681.png](https://img-blog.csdnimg.cn/img_convert/f243e2992f316b2e9d2039b40938f681.png)
接着,通过pandas的pivot_table(数据透视表)方法来直接整理RFM模型数据。
#数值转换
df = sales_data.reset_index().copy()
df['month'] = df['ORDERDATE'].astype('datetime64[M]')
# 用数据透视表提取rfm
rfm = df.pivot_table(index=['month','USERID'],
values=['Amount','ORDERDATE','Orders'],
aggfunc={'ORDERDATE':'max',
'Amount':'sum',
'Orders':'sum'})
# 将最近一次消费时间转换成“距今长度”(本例用最后一个消费记录时间)
rfm['R'] = (rfm.ORDERDATE.max()-rfm.ORDERDATE).dt.days
#重命名列名
rfm.rename(columns={'Amount':'M','Orders':'F'},inplace=True)
rfm.head()
![965be25b1631eed08355abd297651129.png](https://img-blog.csdnimg.cn/img_convert/965be25b1631eed08355abd297651129.png)
先求R,F,M与平均值的差,将>1的数据负值为‘1’,<=1赋值为‘0’。这个过程分别将三个维度的数据人工地分为两部分。接着将RFM三个值组合拼接,得到8个数值:111、011、101、110、001、010、100、000;再将8个数值赋值为8类标签。按照金额大小负值为一般客户与重要客户;按照消费频率和消费次数区分为价值客户、保持客户、发展客户和挽留客户。
# 求R、F、M与平均值的差
#rfm[['R','F','M']].apply(lambda x:x-x.mean())
# 对用户分类,设置标签
def rfm_func(x):
level = x.apply(lambda x: "1" if x >= 1 else '0')
label = level.R + level.F + level.M
d = {
'111':'重要价值客户',
'011':'重要保持客户',
'101':'重要发展客户',
'001':'重要挽留客户',
'110':'一般价值客户',
'010':'一般保持客户',
'100':'一般发展客户',
'000':'一般挽留客户'
}
result = d[label]
return result
rfm['label'] = rfm[['R','F','M']].apply(lambda x:x-x.mean()).apply(rfm_func,axis=1)
rfm.groupby('label').count()
![a5809f43970d40cc624d53d5859e1c07.png](https://img-blog.csdnimg.cn/img_convert/a5809f43970d40cc624d53d5859e1c07.png)
三、可视化
rfm.label.value_counts().plot.bar(figsize=(10,4))
plt.xticks(rotation=0)
![c3a880fd7496d8905610dace609a33b1.png](https://img-blog.csdnimg.cn/img_convert/c3a880fd7496d8905610dace609a33b1.png)
再这八类用户中,重要挽留客户、一般挽留客户、重要价值客户可一般价值客户需要重点关注,是运营和营销活动的主要对象。