#学习记录
一、需求分析
二、案例分析(用户分层分析-RFM模型)
看数据集
先构建模型
R:取用户最后一次销售 时间,然后获取相差的天数
#透视表的使用(index相当于groupby,values指取出的数据列,aggfuns中的KEY值必须在VALUES中,才能聚合
rfm=df4.pivot_table(index='顾客编号',
values=['销售数量','销售金额','日期'],
aggfunc={
'日期':'max',#最后一次消费时间
'销售数量':'sum',
'销售金额':'sum'
})
#这里假设今天的日期为2015年05月18日
from datetime import datetime
now = datetime(2015, 5, 18)
#当前时间-每个用户的最后一次购买时间。最后再转换成天数,小数保留一位
rfm['R']=(now-rfm['日期'])/np.timedelta64(1,'D')#取相差的天数,保留一位小数
F:再计算每个用户消费的频次
#计算用户的消费频次
rfm['F']=df4.groupby(by='顾客编号')['顾客编号'].count()
M:计算每个用户消费的总金额
#计算用户消费的总金额
rfm['M']=df4.groupby(by='顾客编号')['销售金额'].sum()
再分别计算RFM各自的平均值
'''
#计算RFM的平均值
rfm['Rmean']=rfm[['R']].apply(lambda x:x-x.mean())
rfm['Fmean']=rfm[['F']].apply(lambda x:x-x.mean())
rfm['Mmean']=rfm[['M']].apply(lambda x:x-x.mean())
#然后再计算每个值对均值差是否大于0(R-Rmean), 大于0为1 否则就为0
rfm[['R','F','M']].apply(lambda x:x-x.mean())
然后再根据RFM所拼接的110 001 这些来给用户进行分类
则可以简略上面的值平均值
计算呢方式如下
'''
#根据数字拼接,进行用户分类函数
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_func(x)函数
rfm['label']=rfm[['R','F','M']].apply(lambda x:x-x.mean()).apply(rfm_func,axis=1)
客户分类完成后,可以对RFM任意两个值进行可视化,如R-F做的散点图
#客户分层可视化 散点图
for label ,grouped in rfm.groupby('label'):
print(label,grouped)
x=grouped['F']
y=grouped['R']
plt.scatter(x,y,label=label)
plt.legend()
plt.xlabel('F')
plt.ylabel('R')
plt.tight_layout()
plt.show()
三、RFM模型结论
由此图可以看出,重要保持客户是占大多数 ,则说明来这里消费的客户的核心能力都是比较强的,但是又不能排除季节性情况,因为该份数据是1-4月份的数据,存在春节用户消费较高阶段,运营策略的还需用其他季节性做AB测试