欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python如何做RFM模型分析

程序员文章站 2024-01-21 10:47:22
...

RFM模型是一个比较经典的用户分析模型,现在互联网企业一直在使用,特别是电商领域,使用频率会比较高,对用户进行精细化运营,分辨出高价值用户。
一、RFM模型是什么
RFM模型是衡量客户价值和客户创利能力的重要工具和手段。在众多的RFM模型是衡量客户价值和客户创利能力的重要工具和手段。该模型通过一个客户的近期购买行为、购买的总体频率以及花了多少钱3项指标来描述该客户的价值状况。
R(Recency)最近一次消费时间:表示用户最近一次消费距离现在的时间。消费时间越近的客户价值越大。1年前消费过的用户肯定没有1周前消费过的用户价值大。
F(Frequency)消费频率:消费频率是指用户在统计周期内购买商品的次数,经常购买的用户也就是熟客,价值肯定比偶尔来一次的客户价值大。
M(Monetary)消费金额:消费金额是指用户在统计周期内消费的总金额,体现了消费者为企业创利的多少,自然是消费越多的用户价值越大。
Python如何做RFM模型分析
从上面可知可以将用户价值分成8个等级:
Python如何做RFM模型分析
如果某个用户最近一次消费时间距今比较久远,没有再消费了,但是累计消费金额和消费频次都很高,说明这个用户曾经很有价值也就是RFM模型中的重要保持客户,我们不希望他流失,所以运营人员就会专门针对这类型用户设计召回策略,这也就是RFM模型的核心价值。
二、Python模型实现逻辑

1.计算各个分项的数值

R_V:距离当前日期越近,得分越高,最高5分,最低1分

F_V:交易频率越高,得分越高,最高5分,最低1分

M_V:交易金额越高,得分越高,最高5分,最低1分

2.计算总分

RFM = 100*R+10*F+M(说明:这个公式可以根据公司和情况定,如有业务场景量小价高就可改成RFM = 100*R+10*M+F)
三、案例分析

本案例样本为某天猫商家2011年3月至5月的交易数据,包含了如下几个字段,其pur_time为交易时间,price为交易金额。
Python如何做RFM模型分析
1、先处理数据

df = pd.read_excel(r'C:\Users\didi\Desktop\卖家交易表.xlsx','Sheet1')
df['diff']= df.pur_time-datetime.datetime(2011,6,1)#因为excel里面就是日期格式,所以直接引用,如果不是可以进行格式转换
df['diff']=df['diff'].dt.days
r_data = df.groupby('buyer_id').agg({'diff':'min'})#最近的一次交易
r_data = r_data.reset_index()
f_data = df.groupby('buyer_id').agg({'goods_id':'count'})#交易次数
f_data = f_data.reset_index()
m_data = df.groupby('buyer_id').agg({'price':'sum'})#交易金额
m_data = m_data.reset_index()
#将数据进行合并
data=pd.merge(r_data,f_data,on='buyer_id',how='left')
data = pd.merge(data,m_data,on='buyer_id',how ='left')
print(data)

Python如何做RFM模型分析
2、RFM各小项目得分和总分的换算

因为要分出五个不等同级的分数,最简单的方法就是取百分位数进行换算,主要用到两个方法是pd.quantile和pd.cut

binsr = data['diff'].quantile([0,0.2,0.4,0.6,0.8,1])
r_s = pd.cut(data['diff'],binsr,labels=[1,2,3,4,5])
binsf = data['goods_id'].quantile([0,0.93,0.98,0.993,0.997,1])#因为数据样本原因为就没有进行等分布
f_s = pd.cut(data['goods_id'],binsf,labels=[1,2,3,4,5],right=False)#right进行左开右闭
binsm =data['price'].quantile([0,0.2,0.4,0.6,0.8,1])
m_s = pd.cut(data['price'],binsm,labels=[1,2,3,4,5])
data['r_s'] =r_s
data['f_s'] =f_s
data['m_s'] =m_s
data['rfm']=data['r_s'].values.astype(int)*100+10*data['f_s'].values.astype(int)+data['m_s'].values.astype(int)
print(data)

Python如何做RFM模型分析
3.得出用户的不同等级

与上面操作思路大致相同


bins = data['rfm'].quantile([ 0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1])
label =['一般挽留客户','一般保持客户','一般发展客户','一般价值客户','重要挽留客户','重要保持客户','重要发展客户','重要价值客户']
levels = pd.cut(data['rfm'],bins,labels =label)
data['levels']=levels
data =data.rename({'diff':'recently','goods_id':'frequently','price':'measure'},axis =1)
print(data)

Python如何做RFM模型分析
已开通微信账号,欢迎关注数据分析小栈交流,如需本案例的数据可以联系:
Python如何做RFM模型分析