RFM 模型 PYTHON 版

RFM模型
R:购买时间间隔
F:购买频次
M:客单价
主讲关于RFM模型PYTHON实现
构造虚拟数据表order.xlsx
RFM 模型 PYTHON 版_第1张图片
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[“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 x
110:
result=“一般价值客户”
elif x101:
result=“重要发展客户”
elif x
100:
result=“一般发展客户”
elif x11:
result=“重要保持客户”
elif x
10:
result=“一般保持客户”
elif x==1:
result=“重要挽留客户”
else:
result=“一般挽留客户”
return result

rfm[“人群价值”]=rfm[‘综合评分’].apply(result_fun)

rfm.to_csv(“d:/rfm.csv”,encoding=“gbk”)
第二种评分机制:

RFM 模型 PYTHON 版_第2张图片
关于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

最近有购买行为 如何判别‘最近’这个概念
最近一天,最近两天,最近三天,最近四天?
所以不难理解
分数制更优

虽然本例中省了一步
但是从效果而言 分数制更加严谨

你可能感兴趣的:(菜鸟计划)