RFM模型
R:购买时间间隔
F:购买频次
M:客单价
主讲关于RFM模型PYTHON实现
构造虚拟数据表order.xlsx
KEY:关注随机函数的应用
具体代码:
import pandas as pd
df=pd.read_excel(“d:\order.xlsx”)
#剔除未成交订单
df=df.loc[df[“订单状态”]==“成交”,:]
#根据需求取数
df=df[[“姓名”,“购买时间”,“总额”]]
#R:购买时间间隔
r=df.groupby(“姓名”)[“购买时间”].max().reset_index()
r[‘R’]=(pd.datetime.today()-r[“购买时间”]).dt.days
r=r[[‘姓名’,‘R’]]
#F:购买频次
f=df.groupby(“姓名”)[“购买时间”].count().reset_index()
f.columns=[‘姓名’,‘F’]
rf=pd.merge(r,f,on=“姓名”)
#M:客单价
m=df.groupby(“姓名”)[“总额”].sum().reset_index()
m.columns=[“姓名”,“总客价”]
m[‘M’]=m[‘总客价’] / rf[‘F’]
m=m[[‘姓名’,‘M’]]
rfm=pd.merge(rf,m,on=“姓名”)
rfm[“r-score”]=(rfm[‘R’]<rfm[‘R’].mean())*1
rfm[“f-score”]=(rfm[‘F’]>rfm[‘F’].mean())*1
rfm[“m-score”]=(rfm[‘M’]>rfm[‘M’].mean())*1
rfm[‘综合评分’]=rfm[‘r-score’]*100+rfm[‘f-score’]*10+rfm[‘m-score’]*1
def result_fun(x):
if x111:
result=“重要价值客户”
elif x110:
result=“一般价值客户”
elif x101:
result=“重要发展客户”
elif x100:
result=“一般发展客户”
elif x11:
result=“重要保持客户”
elif x10:
result=“一般保持客户”
elif x==1:
result=“重要挽留客户”
else:
result=“一般挽留客户”
return result
rfm[“人群价值”]=rfm[‘综合评分’].apply(result_fun)
rfm.to_csv(“d:/rfm.csv”,encoding=“gbk”)
第二种评分机制:
关于RFM模型的一点儿思考:
评分机制问题
按照普遍的做法属于‘分数’制
示例:R数值bins=[0,5,10,15],labels=[5,4,3]
打分结果:(labels > labels.mean()) * 1
理解:根据分值高低,分值越高说明最近有购买行为 当分数大于平均分数 结果为1 【(labels > labels.mean()) * 1】结果为1
本例:不采用‘分数’制
打分结果:(R < R.mean())*1
理解:根据R数值与其均值对比,如果小于均值,说明他最近有购买情况 结果为1 【(R<R.mean())*1】 结果为1
最近有购买行为 如何判别‘最近’这个概念
最近一天,最近两天,最近三天,最近四天?
所以不难理解
分数制更优
虽然本例中省了一步
但是从效果而言 分数制更加严谨