导读:学习随笔,近期一直在研究关于用户的数据分析产品,网上翻阅了诸多文集,想想还是自己落笔记录下过程。该篇文章主要是针对RFM模型的介绍与实践,在研究理论的同时,亦学习巩固下Python的能力。
RFM模型的概念和用途
名词解释
• R(Recency):消费间隔,最近一次距离上次消费的时间间隔
• F(Frequency):消费频次,一段时间(1个月/1年...)内的消费总次数
• M(Monetary):消费金额,一段时间(1个月/1年...)内的消费总金额
RFM模型概念
RFM模型是用户价值研究中的经典模型,基于近度(Recency),频度(Frequency)和额度(Monetory)这3个指标对用户进行聚类,找出具有潜在价值的用户, 从而辅助商业决策,提高营销效率。RFM作为一种数据驱动的客户细分技术,可帮助营销人员做出更明智的战略性决策,使营销人员能够快速识别用户并将其细分为同类群体,并针对性制定个性化的营销策略,提高用户的参与度和留存率。
RFM建模所需要的数据源是相对简单的,只用到了购买记录中的时间和金额这两个字段。我们基于交易数据中用户的最后一次的购买时间,购买的次数以和频率,以及平均/总消费额对每个用户计算了三个维度的标准分。然后我们对于三个维度赋予了不同的权重,再基于加权后的分值应用K-Means进行聚类,根据每种人群三个维度与平均值之间的高低关系,确定哪些是需要保持用户,哪些是需要挽留的用户,哪些是需要发展的用户等。在将这些客户圈出之后,便可以对不同客户群使用不同针对性地营销策略(引导,唤醒等),提高复购率与转化率。值得注意的是,三个维度的权重制定并没有统一的标准,比较通用的方法是用层次分析法(AHP),实际场景结合行业以及具体公司的特点进行因地制宜、因人而异的优化。
RFM模型用途
RFM因素:
• R值越高,顾客的有效期越近,对商家活动的响应越积极
• F值越高,顾客的消费频次越高,对商家的忠诚度就越高
• M值越高,顾客的消费能力越高,对商家贡献度就越高
• 想要提高复购率和留存率,需要时刻警惕R值
RFM分析:
• 谁是您最有价值的客户?
• 导致客户流失率增多的是哪些客户?
• 谁有潜力成为有价值的客户?
• 你的哪些客户可以保留?
• 您哪些客户最有可能对参与度活动做出响应?
• 谁是你不需要关注的无价值客户?
• 针对哪些客户制定哪种发展、保留、挽回策略?
通过RFM模型,可以帮助营销人员实现客户细分;衡量客户价值和客户利润创收能力;识别优质客户;指定个性化的沟通和营销服务;为更多的营销决策提供有力支持。
基于RFM模型的实践
实验数据
数据来源:某知名餐饮品牌2019年起注册会员的消费数据
样本数据:会员id、订单id、消费日期、消费金额
数据总量:134683(其中会员数为62018)
数据示例(如下表所示):
member_id | order_id | curr_date | pay |
---|---|---|---|
912e64b3fdf945448505e6d4b8155 | 74b113d90174fc390bcb780a | 2020/10/6 | 58 |
981c4e0bd28a462d8953c01cbfe8 | 74b113d90175028fe17e5d4c | 2020/10/7 | 172 |
15321a29b03641f895119bd2f64f | 74b113d9017507d7c8881d41 | 2020/10/8 | 88 |
数据预处理
数据导入:使用python的pandas.read_csv导入样本数据。
缺失值校验:因数据为生产真实的交易数据,质量相对较高,缺失值较低。
data.isnull().any(axis=0) # 检查每一列是否有缺失值
data.isnull().any(axis=1) # 检查每一行是否有缺失值
极值校验:第一份样本数据获取的用户订单实付金额,其中会存在优惠或补差支付,同时因就餐人数不一致,产生的的订单消费也会存在较大的差异,造成极致波动、标准差值较大,因此需对金额进行处理,以人均消费额替代订单支付金额,可去掉10元以下、万元以上的交易订单。
print(data.describe())
获取RFM值:使用 groupby获取RFM值
# 计算原始最近一次订单时间
r = date['curr_date'].groupby(date.index).max()
# 计算原始订单频率
f = date['order_id'].groupby(date.index).count()
# 计算原始订单总金额
m =date['pay'].groupby(date.index).sum()
获取RFM评分值:数据离散,pandas.cut
# 计算r得分 r_interval为当前日期与R值的间隔天数
r_score = pd.cut(r_interval, 5, labels=[5, 4, 3, 2, 1])
# 计算f得分
f_score = pd.cut(f, 5, labels=[1, 2, 3, 4, 5])
# 计算m得分
m_score = pd.cut(m, 5, labels=[1, 2, 3, 4, 5])
#RFM离散分布区间
# R
[(11.878, 36.4] < (36.4, 60.8] < (60.8, 85.2] < (85.2, 109.6] <(109.6, 134.0]]
# F
[(0.921, 16.8] < (16.8, 32.6] < (32.6, 48.4] < (48.4, 64.2] <(64.2, 80.0]]
# M
[(-12.407, 2728.684] < (2728.684, 5456.138] < (5456.138, 8183.592] <
(8183.592, 10911.046] < (10911.046, 13638.5]]
实验数据RFM分值占比
data_pd.plot(kind='bar',grid = True,colormap='Blues_r',stacked=True)
说明:F、M分布不均匀,极值差异大,经数据探查知晓该商户开通了企业团餐业务,企业会给员工发放补贴,导致员工呈现较高的消费频次,该类用户的消费行为绝大程度依赖于企业,在实际的RFM模型可踢出此类订单,降低此类人群的分值,其次数据中的M值为客户实付金额,该商户支持预定、会餐、大小桌,同一单的消费群体不同,或可使用人均消费总额作为M值。
RFM数据合并,建立R、F、M数据框:pandas+numpy
# 将R,F,M三个维度组成列表
rfm_list = [r_interval, frequency_value, monetary_value, r_score, f_score, m_score]
# 设置R,F,M三个维度的列名
rfm_cols = ['R', 'F', 'M', 'r_score', 'f_score', 'm_score']
# 建立R,F,M数据框
rfm_pd = pd.DataFrame(np.array(rfm_list).transpose(), dtype=np.int32,
columns=rfm_cols, index=frequency_value.index)
基于RFM模型的用户评分分层
计算RFM综合分值:权重法
权重值主要赋值方法可分为主观赋权法、客观赋权法,如下:
主观赋权法:主要由专家经验得到权数,然后对指标进行综合评价。是一种结合性方法,易操作,存在一定主观性。常用方法:层次分析法AHP、权值因子判断表法、德尔菲法、模糊分析法、二项系数法、环比评分法、最小平方法、序关系分析法等。
客观赋权法:依据历史数据研究指标之间的相关关系或指标与评估结果的影响关系来综合评价。这是定量研究,无须考虑决策者主观意愿和业务经验,计算方法较为复杂。常用方法:主成分分析、因子分析、熵值法、变异系数法、均方差法、回归分析法等。
因样本数据分布不均匀,故手动赋权重值,去除部分极值。
#加权得分:
rfm_pd['rfm_wscore'] = rfm_pd['r_score']*0.8 + rfm_pd['f_score']*0.1 + rfm_pd['m_score']*0.1
# 散点图绘制
rfmm.plot.scatter('R','F',c=rfmm.rfm_wscore
,s=100*rfmm.rfm_wscore,cmap='viridis',alpha=0.3
,figsize=(15,8),fontsize=12)
结论:以近90天的消费活跃来看,用户消费频次集中在1-6次,呈现出极佳的复购率。可以针对消费一次的人群进行特征分析。比如针对人群的流动性,若流动人群占比较大,可进一步推广特色菜吸引客户,若周边人群占比较高,可基于复购人群的特征进行分析,同时平台可提供该类人群近期消费偏好,供商家参考,制定针对性方案。
基于RFM的用户价值分层
了解RFM定义后,将3个指标作为坐标系的XYZ坐标轴,从空间上切割成8类,作为用户的价值分层,如下图:
用户价值分层说明:
上面我们已经计算得到各个用户的RFM分值,接下来要依据分值进行分类。
定义RFM 的分值等级
等级 | 分值 |
---|---|
高 | 均值以上,含均值 |
低 | 均值以下 |
使用pyecharts绘制玫瑰图:
# 获取等级汇总数据
tmp = rfm_model.groupby('Label of Customer').size()
# 汇总结果转化列表
t = [list(z) for z in zip(tmp.index.values.tolist(), tmp.values.tolist())]
# 绘制饼图
pie = (
Pie()
.add('',t,radius=['30%','75%'],rosetype='radius',
label_opts=opts.LabelOpts(is_show=True))
.set_global_opts(title_opts=opts.TitleOpts(title='用户价值分层',pos_left='center'),toolbox_opts=opts.ToolboxOpts(is_show=True), legend_opts=opts.LegendOpts(orient='vertical',pos_right='2%',pos_top='30%'))
.set_series_opts(label_opts=opts.LabelOpts(formatter='{b}:{d}%'))
.render("用户价值分层.html")
)
结论:商家顾客表现出来的忠诚度较高,但新客获取能力较低。但是单纯看分层占比,并没有实际意义,可以基于价值分层与其他特征关联分析进行精准投放。如下图(网络参考图,本期实验并未涉及其他特征)所示:
基于RFM模型的场景应用
基于RFM模型构建用户画像
用户画像是基于用户信息与行为衍生出来的特征属性,用户的准入信息是用户的主观特征,是一种既定的事实,通过对用户行为的采集、研究,刻画出单个用户的特征。其意义在于基于某一事物对群里特征进行分类,有效的体现事物的合适人群;同时针对群里特征的偏爱、习惯研究,可以刻画出用户的需求,实现精准化营销。
用户画像的基础成分来源于用户的准入信息(会员注册时的登记信息),更多的特征数据来源于用户的各类行为,而RFM模型便是基于用户消费行为提炼出来的价值指标。通过对各个价值分层的群体特征研究,可以有效提升获客能力以及针对各类人群实现精准化营销。
基于RFM模型实现精准营销
市场和运营往往绞尽脑汁做活动、上新品、蹭热点、做营销,拓渠道,不断开发客户、做回访维系客户感情,除了少数运气好的之外,但大多效果寥寥,这是为何?
经验丰富的营销人员都知道“了解客户”和“客户细分”的重要性。营销人员不仅要着眼于创造更多的访问量和点击量以提高客户获取,还必须遵循从提高点击率(CTR)转变为提高保留,忠诚度并建立客户关系的新范式。与其将整个客户群作为一个整体进行分析,不如将其划分为同类群体,了解每个群体的特征,并使他们参与相关的活动,而不是仅根据客户年龄或地理位置进行客户细分。而RFM分析是市场营销人员分析客户行为的最流行、最简单、最有效的客户细分方法之一。
针对RFM分层用户制定相应的营销策略:
• 重要价值客户是您的最佳客户,他们是那些最新购买,最常购买,并且花费最多的消费者。提供VIP服务和个性化服务,奖励这些客户,他们可以成为新产品的早期采用者,并有助于提升您的品牌。
• 重要发展客户:近期客户,消费金额高,但平均频率不太高,忠诚度不高。提供会员或忠诚度计划或推荐相关产品以实现向上销售并帮助他们成为您的忠实拥护者和高价值客户。
• 重要保持客户:经常购买、花费巨大,但最近没有购买的客户。向他们发送个性化的重新激活活动以重新连接,并提供续订和有用的产品以鼓励再次购买。
• 重要挽回客户:曾经光顾,消费金额大,购买频率低,但最近没有光顾的顾客。设计召回策略,通过相关的促销活动或续订带回他们,并进行调查以找出问题所在,避免将其输给竞争对手。
•一般价值客户:最近购买,消费频次高但消费金额低的客户,需要努力提高其客单价,提供产品优惠以吸引他们。
• 一般发展客户:最近购买,但消费金额和频次都不高的客户。可提供免费试用以提高客户兴趣,提高其对品牌的满意度。
• 一般保持客户:很久未购买,消费频次虽高但金额不高的客户。可以提供积分制,各种优惠和打折服务,改变宣传方向和策略与他们重新联系,而采用公平对待方式是最佳。
• 一般挽留客户:RFM值都很低的客户。针对这类客户可以对其减少营销和服务预算或直接放弃。
此外,目前的RFM分析中,一般给与M值更高的权重,如果一般挽留客户与一般发展客户占据多数,说明公司的用户结构不是很合理,需要尽快采取措施进行优化。
作者申明:本文为作者学习随笔,不做商业用途,作者有点懒,不习惯花时间组织语言,文中部分引用网络专家用语。