前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >案例实战 | Python 实现 RFM 模型

案例实战 | Python 实现 RFM 模型

作者头像
萝 卜
发布2022-05-12 20:09:05
5460
发布2022-05-12 20:09:05
举报

本文将专注于 RFM 模型的实现过程,相关业务知识和模型优化会在未来的推文中呈现。P.S:RFM 模型是数据分析师必须掌握的一个基础的分析方法

前言

对利用Python进行数据分析有一定的了解后,再结合一些业务知识把理论与实际相结合的需求也呼之欲出。将编程语言应用到实践中也还是一件比较有成就感的事情。本文源起是笔者最近常收到如下“骚扰”短信:

原来是老早之前笔者替老妹买了一支护发油,便揣测自己是不是被当成了潜在客户,店家时不时就来刷一下存在感之类的。于是果断搬出自己远古的一个与用户行为分析模型有关的小项目,又名RFM模型,之所以叫远古,即只有脱敏数据却不记得其来源和实现的代码,只能从头快速根据记忆搞一遍代码(不够精美但注释清晰),最后封装成函数,只要传入指定规格的数据源,回车一下便可生成看起来十分不错且蕴含丰富信息的图表。

简洁理论

RFM模型的概念介绍,用途,详细的使用方法本博文都不 一一 介绍了,毕竟如此常见的模型,前人论文文献、各平台如简书/知乎等都已经十分详细的叙述了整个流程。所以我们便将侧重点放在 Python代码 的实现上,中间穿插少部分精华理论即可。

笔者这边特地咨询了一个做时尚家居的朋友,R、F 和 M 这三个维度可以帮助我们把最原始的客户数据按分析需求分类,然后根据每一类用户人数占比、金额贡献等不同的特征,进行人、货、场三重匹配的精细化运营。

一句话:更好的做生意与促进营销。

比如朋友TA会将客户类型分为如下几类,每类都有对应的营销策略。(具体分类和对应策略视实际情况而定)

结合现实生活就非常好理解了,你都是我这里的常客了,我为什么还要老是提醒你购物,除非你最近有“移情别恋”的趋势(未来会出客户流失预警模型),我才会发短信或者使用其他成本更高的营销手段(根据你能带来的价值来决定)。

笔者还咨询了一个做美妆的朋友,尽管公司不大,但也会有数据分析之类的团队负责运营和分析客户,还会用到各种预测模型来实现如评分卡,分类器,回归等功能和用聚类模型来实现族群发现,识别异常等功能。

小例子:单单是女生的口红消费,用最简单的分类方法,他们就可以将消费群体分为 年轻高消费型/年轻低消费型;女士时尚型/女士居家型

我们再延伸一下,电商领域是这样,一些各种短视频平台又何尝不是如此。所以稍有不慎,我们就会花费许多本可以节省下来干大事的时间、金钱和注意力

建模思路(Python)

基本思路分为5~6步,其中前两步是任何数据分析实战的基础。数据概览、数据清洗、维度打分、分值计算和客户分层,当然还可以加上 数据可视化

这几步的代码操作笔者都会在Jupyter notebook中进行,如果有需要遇到使用正则表达式拆分列或者骚里骚气改变列类型之类的稍硬的骨头,我也会忍着不使用Excel进行快捷操作。毕竟在真实业务场景中,数据量很可能是大到 Excel 打不开的,所以平时就要锻炼一下。

数据概览&数据清洗

本博文使用的数据是经过清洗的,整洁度和质量都不错,且已经删除了不必要的列,只留下了买家id,付款时间和实付金额这3个关键字段。

不难发现,时间列的格式有点奇怪,由于笔者对时间序列处理的能力有限,所以只能迂回转化一下。

RFM 中的 R

每个用户最后一次购买时间距今多少天。

  • 如果用户只消费过一次,用现在的日期减去付款日期即可
  • 若用户消费多次,便先筛选出这个用户最后一次付款的时间,再用今天减去它。
  • 拿到所有用户最近一次付款时间,只需要按买家号码分组,再选取付款日期的最大值即可

RFM 中的 F

每个用户累计购买频次

需要注意的是:这里的购买频次将精确到天

  • 如果用户该天只消费过一次,那就刚好算一次
  • 若用户该天消费多次,那也只是算一次

RFM 中的 M

M,Monetary,代表每个客户平均购买金额,也可以是累计购买金额。

将 R、F,M 三表合并

维度打分

给每个消费者的 R/F/M 三个值打分的方式主要以下两种

  • 根据实际业务需求和公司政策之类的,可理解为根据偏好自定义
  • 根据业内准则,即已经约定成俗了的。

这里我们对三个字母都采取五分制的打分方式

字母分数说明

代码语言:javascript
复制
R_score:代表用户距分析日期以来已经有多少天没下单了。分值越小越好。
F_score:用户消费的频次,分值越大越好
M_score:用户平均消费金额

总分构成

代码语言:javascript
复制
RFM总分值:RFM = R_score∗100 + F_score∗10 + M_score∗1
这是业内常用的打分方式,这样一来,证明购买频率一直是商家比较看重的,
毕竟尽管你每次消费很少(M值小),但你持续关注我们店铺且消费频率很高,这样你迟早会下单。

例外

代码语言:javascript
复制
想象一下一些极度奢侈的消费品,消费一次好几十万的那种,又或者是买房,
这时候的R就得考虑一下了,总不能说这个客户已经7天没买房了,真该死。

一句话,本博文只是提供打分方式的程序实现方式和大概思路,具体情况还是需要结合实际进行缜密的考量。

之所以说要熟练使用Python的数据分析库pandas并不是没有道理的,根据上述需求我们可知需要用pandas进行分段,且每段都要对应有标签,还要注意区间比如是不是什么左闭右开之类的,为了不影响阅读体验,打标签的几种方式(入门到进阶)的介绍会在未来推文中呈现。

打分前可以分别绘制一下数据R/F/M的分布情况,看看什么样的打分标准更加合适,至于是快速一行代码实现复杂绘图的方法,笔者将链接放在了文末的延伸阅读。

看M值的打分标准可以知道这还是蛮符合博文开头笔者放出的日用品店铺“宿系之源”的商品价格分布,肯定就不是什么奢侈品甚至是房地产之类的了。

开始打分

根据上面三个分布图,我们发现

代码语言:javascript
复制
R 的打分方式还可以按照业内标准
F 的打分方式如果按照业内标准的话,可能会有难以区分的风险,毕竟几乎都在5次以上

M 跟 F 一样,不过M还有机会分成3,4,5分这三种

  分数出来了,就是时候根据下表的标准来确定每个客户的类别了。

客户分层

打完分,确定好分类后,便可以根据标准进行客户分层了。

总分的含义:

代码语言:javascript
复制
总分列的类型是数值类型,故位于最前面的0便可以忽略不计。
比如1代表着“001”的高消费唤回客户人群,而10对应着“010”的一般客户。

每种分数对应的客户类型(中文)

RFM 模型结果分析

使用探索性数据分析(Exploratory data analysis 以下简称 EDA)来查找数据集中变量的分布、模式、关系或异常情况,可以让我们对数据集本身有一个快速直观的了解,并且会在很大程度上为我们的后续工作提供便利,树形图的快捷绘制见底部延伸阅读。

结果可视化

具体怎么描述可以参照实际业务需求和其他文献文档博客,本文专注于 Python 的实现过程。至于如何将代码封装成函数并实现一步快捷调用,可参照博文底部的延伸阅读,不过建议有些复杂的可视化还是用 Tableau 或者 FineBI。

模拟问答

  • 你了解 RFM 模型吗,实现(各种工具)主要有哪些步骤
  • Python 实现过程中可能出现什么困难(业务上的,python 实现上的)
  • RFM 的一些指标选择有什么技巧或注意事项吗?
  • 待更新...,详见 “ 业务思维模块 ”

后记

由上面的代码实现步骤可以看出,还是涉及了一些很不错的 Python 数据分析代码技巧,但现实情况往往更加复杂,数据清洗评估起来也更有难度,但只要肯积累与多实践,结果往往没那么

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据分析与商业实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 简洁理论
  • 建模思路(Python)
  • 数据概览&数据清洗
  • 本博文使用的数据是经过清洗的,整洁度和质量都不错,且已经删除了不必要的列,只留下了买家id,付款时间和实付金额这3个关键字段。
  • RFM 中的 R
  • 客户分层
  • 结果可视化
  • 后记
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档