RFM模型

1 模型原理

        RFM模型是衡客户价值和客户创造利益能力的重要工具和手段。在众多的客户关系管理(CRM)的分析模式中,RFM模型是被广泛提到的。该模型通过一个客户的近期购买行为、购买的总体频率以及花了多少钱3项指标来描述该客户的价值状况。

 模型指标:   

        R(Recency): 最近一次消费

        F(Frequency): 消费频率 

        M(Monetary): 消费金额 

对RFM的各个维度分别进行二分,最终形成8种不同的组合,并对8种组合进行不同的定义。

最终形成模型如下:

2 运营策略

  • 重要价值用户:最近一次消费时间近、消费频次和消费金额都高,属于优质用户,需要保持,定期提供VIP服务。
  • 重要发展用户:最近一次消费时间近、消费金额高,但消费次数少,忠诚度不够,需要通过相关激励,提高复购频率,定期用户回访,提高用户黏性。
  • 重要保持用户:消费金额和消费频次都高,但最近一次消费时间远,属于很长时间没来的忠实用户,需要主动和其进行互动,及时唤回。
  • 重要挽留用户:消费金额高,但最近一次消费时间远、消费频次低,说明消费能力强,是潜在的价值客户,需要重点维持。
  • 一般价值用户:最近一次消费时间近、消费频次高,但消费金额低,属于低客单价群体,可以尝试逐步推广消费金额比较高的产品。
  • 一般发展用户:最近一次消费时间近,但消费频次和消费金额低,说明属于意向用户,属于探索期用户,可以主动介绍产品,保持联络。
  • 一般保持用户:消费频次多,最近一次消费时间远、消费金额低,总体贡献不大,一般维持即可。
  • 一般挽留用户:最近一次消费时间远、消费频次和消费金额也都低,贡献度最小,如果不需要额外的运营预算和精力,也可适当进行维护

3 模型实现

3.1 实现思路

  1. 对单个用户原始数据进行计算R、F、M三个指标值;
  2. 对R、F、M三个指标分别进行价值计算,并将其分为1到5个段;
  3. 分别单个用户的R、F、M的各个指标的价值进行判断,如果低于总用户平均分则标记为“低”,高于平均分则“高”;
  4. 根据分类规则表将用户打上相应的标签;

3.2 具体实现

3.2.1 数据源


工作台 - Heywhale.comicon-default.png?t=O83Ahttps://www.heywhale.com/mw/dataset/63f995627f5ec36e16e810be/file

3.2.2 数据预处理

  1. 过滤掉有退款交易;
  2. 将付款时间转换成订单日期;
  3. 过滤付款金额小于0的交易;
  4. 按用户进行汇总聚合,单个用户取最后交易时间,交易总条数,总金额;
import pandas as pd
from matplotlib import pyplot as plt


data = pd.read_excel("/Users/yiche1/Desktop/数据分析/study-data/order2021.xlsx")

data = data[data['是否退款']=='否']

data = data[['订单号','用户名','付款金额','付款时间']]

data['订单日期'] = pd.to_datetime(data['付款时间'],format='%Y-%m-%d').dt.date

data = data[data['付款金额'] >=0]

data1 = data.groupby(['用户名','订单日期']).agg(amount = ('付款金额','sum')).reset_index()

data_rfm = data1.groupby(['用户名']).agg(R = ('订单日期','max'),F = ('订单日期','count'), M =('amount','sum')).reset_index()

 3.2.3 计算R的分布值

data_rfm['R'] = data_rfm['R'].apply(lambda x: date - x)

data_rfm['R'] = data_rfm['R'].dt.days

R_bin_list = [0 + i * 10 for i in range(54)]  #生成R划分列表,以10为划分区间

data_rfm_R = data_rfm[['用户名','R']]

data_rfm_R.loc[:,'R_type'] = pd.cut(data_rfm_R['R'],bins=R_bin_list,right=False)

data_rfm_Rcount = data_rfm_R.groupby('R_type')['用户名'].count()

print(data_rfm_Rcount)

# 画R柱形分布图
plt.figure(figsize=(30,8))
data_rfm_Rcount.plot(kind='bar', color='g', alpha=0.8, width=0.4, rot=0)

# R的累计分布图
lj = data_rfm_Rcount.cumsum()/data_rfm_Rcount.sum()
lj.plot(style='--ko',secondary_y=True)

plt.show()

3.2.4 计算F的分布值

data_rfm_F = data_rfm[['用户名','F']]
F_bin_list = [1,2,3,4,5,6,7,8]
data_rfm_F.loc[:,'F_type'] = pd.cut(data_rfm_F['F'], bins=F_bin_list, right=False)

data_rfm_Fcount = data_rfm_F.groupby('F_type')['用户名'].count()
plt.figure(figsize=(30,8))
data_rfm_Fcount.plot(kind='bar', color='g', alpha=0.8, width=0.4, rot=0)

lj = data_rfm_Fcount.cumsum()/data_rfm_Rcount.sum()
lj.plot(style='--ko',secondary_y=True)

plt.show()

3.2.5 计算M的分布值

M_bin_list = [0 + i * 200 for i in range(51)]
M_bin_list.append(1000000)
data_rfm_M = data_rfm[['用户名','M']]
data_rfm_M.loc[:,'M_type'] = pd.cut(data_rfm_M['M'], bins=M_bin_list, right=False)
data_rfm_Mcount = data_rfm_M.groupby('M_type')['用户名'].count()

plt.figure(figsize=(30,8))
data_rfm_Mcount.plot(kind='bar', color='g', alpha=0.8, width=0.4, rot=0)

lj = data_rfm_Mcount.cumsum()/data_rfm_Mcount.sum()
lj.plot(style='--ko',secondary_y=True)

plt.show()

3.2.6 数据打标

        根据拐点法定义数据价值区间,对R、F、M分别进行区间划分;比较价值分与总用户平均分的大小,打上“高、低”价值标签;通过影射表关联用户标签;

# 定义区间边界
r_bins = [-1,30,60,150,240,370]
f_bins = [0,1,2,3,4,7]
m_bins = [-1,600,1400,2600,5000,1000000]

# RFM分箱得分
data_rfm['R_score'] = pd.cut(data_rfm['R'], r_bins, labels=[i for i in range(len(r_bins)-1,0,-1)]).astype('int') #计算R得分
data_rfm['F_score'] = pd.cut(data_rfm['F'], f_bins, labels=[i+1 for i in range(len(f_bins)-1)]).astype('int') #计算F得分
data_rfm['M_score'] = pd.cut(data_rfm['M'], m_bins, labels=[i+1 for i in range(len(m_bins)-1)]).astype('int') #计算M得分

data_rfm['R_value'] = data_rfm['R_score'].apply(lambda x:'1' if x>=data_rfm['R_score'].mean() else '0')
data_rfm['F_value'] = data_rfm['F_score'].apply(lambda x:'1' if x>=data_rfm['F_score'].mean() else '0')
data_rfm['M_value'] = data_rfm['M_score'].apply(lambda x:'1' if x>=data_rfm['M_score'].mean() else '0')
data_rfm['result'] = data_rfm['R_value']+data_rfm['F_value']+data_rfm['M_value']


data_label = pd.DataFrame([['111','重要价值用户'],
                           ['101','重要发展用户'],
                           ['011','重要保持用户'],
                           ['001','重要挽留用户'],
                           ['110','一般价值用户'],
                           ['100','一般发展用户'],
                           ['010','一般保持用户'],
                           ['000','一般挽留用户']],
                          columns=['result','user_label'])

# 数据与标签join
data_rfm_result = pd.merge(data_rfm,data_label, on='result', how='left')

print(data_rfm_result)

数据分析 数据分析-RFM模型⽤户分析 模型⽤户分析 RFM模型 根据美国数据库营销研究所Arthur Hughes的研究,客户数据库中有3个神奇的要素,这3个要素构成了数据分析最好的指标: 最近⼀次消费 (Recency) 消费频率 (Frequency) 消费⾦额 (Monetary) 上⾯的三个标签通过字⾯意思⽐较好理解,顾名思义RFM模型中的,R=Recency,F=Frequency,M=Monetary RFM模型客户细分 1.数据筛选分组 为了得到客户最近⼀次消费(Recency)、消费频率(Frequency)、消费⾦额(Monetary)这三个指标的数值进⾏筛选分组(以下为⼀个⽰例)。 消费(Recency)——最近⼀次会员来店铺购买的时间 A、⼀周以前 B、2周以前 C、3周以前 D、⼀个⽉前 消费频率(Frequency)——⼀年内在店铺购买的次数 A、1次 B、1-3次 C、3-5次 D、5次以上 对于消费⾦额(Monetary)——单次消费⾦额 A、50元以下 B、50-150元 C、150-300元 D、300元以上 2.数据处理 处理步骤如下: 将所有客户按照Recency的值,由⼩到⼤排列,以50%为⼀群,依次给予2,1分。 再将所有客⼾按照Frequency的值,由⼤到⼩排列;以50%为⼀群,依序给予2,1分。 最后将所有客⼾按照Monetary的值,由⼤到⼩排列;以50%为⼀群,依序给予2,1分。 整合得到8种组合: 2-2-2:⾼价值客户; 2-1-2:重点发展客户 1-2-2:重点保持客户; 1-1-2:重点挽留客户; 1-1-1:⽆价值客户; 其余三种组合均属于⼀般客户。 现在我们来简单归纳⼀下,RFM模型中,我们重点研究的就是以上8种⽤户(⽤排列组合2*2*2=8种,很好理解)⾥⾯的有明显偏向的5种⽤户. 前⾯的4种⽤户,⼊选研究对象,总概括的就是愿意掏钱的客户. 这下就很好记了,RFM⾥⾯的M已经确定了,要选掏钱的,R,F各有两种选择,也就是总共4种类型 然后再按R来分,打分⾼的先排 2 2 2 这种客户"最近购买(r),⽽且经常购买(F),每次花钱的⾦额还挺⼤(M) 毫⽆疑问这个客户是⾼价值的 2 1 2 此客户最近购买,买的次数不多,但每次花费的⾦额⽐较⼤;那么遇到这种客户,证明他对特定品牌产品感兴趣,要做的是怎么让他经常来 买. 所以这种客户不难理解是应该重点发展的 1 2 2 此客户可能不是⼀直关注产品,但是买的次数⽐较频繁,每次花费的⾦额也挺⼤. 理解:证明这个客户是对产品的需求量⽐较⼤,也舍得掏钱,对品牌不是很关注的,也许今天到A品牌商家购买的,明天就到B品牌商家购买 去了.因此我们要做的是,要让客户保留对我们品牌产品的兴趣. 1 1 2 此客户⽐较明显就是那种⽐较懒惰型的客户,要⽤到的时候再买,⽽且⼀次性买⽐较多,平时就很少关注和购买了.对于这种客户,你不知 道他下⼀次购买的还是不是本公司品牌的产品,可能需要在他购买⼀段时间后提醒他我们产品有优惠活动,来提起他的购买欲望.因此属于需要 挽留型的客户 1 1 1 就不多说了,是临时过客 其他的客户没有明显的特征,主要是不怎么掏钱,是薅⽺⽑型的,你再怎么打主意都从他⾝上挣不到多少钱的,就归为⼀般客户. 理解完后,就根据打分,把所有客户分类好,然后提取出来我们重点研究的这⼏种客户来做相应的措施; 2 2 2⾼价值客户,基本上不⽤太担⼼,他会⾃⼰来购买 2 1 2 重点发展型的客户 想办法加⼤他的购买频率 1 2 2重点保持型客户 让他保持对我们品牌产品的兴趣 1 1 2重点挽留客户 发⼀些我们品牌的信息给他,等他想起来要购买类似产品的时候,第⼀时间想到的是我们品牌 1 1 1 ⽆价值的客户 不⽤花精⼒去跟进这种类型的客户,投⼊和产出⽐不值得.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值