Python 实现 RFM 模型(详):用户行为分析模型,商业实践与数据分析实战(含可视化)

ADVERTISE

引言

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

在这里插入图片描述

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



深入浅出 RFM 模型(简洁理论)

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

在这里插入图片描述

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

  一句话,更好的做生意与促进营销。比如朋友TA会将客户类型分为如下几类,每类都有对应的营销策略。(具体策略视实际情况而定)

客户类型 营销策略
无兴趣-低价值-沉默 不打扰
有兴趣-低价值-沉默 发短信
有兴趣-低价值-活跃 不打扰
无兴趣-低价值-活跃 不打扰
无兴趣-高价值-沉默 发短信
有兴趣-低价值-沉默 电话促销
无兴趣-高价值-活跃 不打扰

  结合现实生活就非常好理解了,你都是我这里的常客了,我为什么还要老是提醒你购物,除非你最近有“移情别恋”的趋势,我才会发短信或者使用其他成本更高的营销手段(根据你能带来的价值来决定)。笔者还咨询了一个做美妆的朋友,尽管公司不大,但也会有数据分析之类的团队负责运营和分析客户,还会用到各种预测模型来实现如评分卡,分类器,回归等功能和用聚类模型来实现族群发现,识别异常等功能。 小例子:单单是女生的口红消费,用最简单的分类方法,他们就可以将消费群体分为年轻高消费型/年轻低消费型;女士时尚型/女士居家型。我们再延伸一下,电商领域是这样,一些各种短视频平台又何尝不是如此。所以稍有不慎,我们就会花费许多本可以节省下来干大事的时间、金钱和注意力

在这里插入图片描述



RFM建模基本思路 & Python 实现

  基本思路分为5~6步,其中前两步是任何数据分析实战的基础。数据概览、数据清洗、维度打分、分值计算和客户分层,当然还可以加上数据可视化这步。这几步的代码操作笔者都会在Jupyter notebook中进行,如果有需要遇到使用正则表达式拆分列或者骚里骚气改变列类型之类的稍硬的骨头,我也会忍着不使用Excel进行快捷操作。毕竟在真实业务场景中,数据量是大到Excel打不开的,所以平时就要锻炼一下。

数据概览&数据清洗

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述



RFM 中的 R

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

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

在这里插入图片描述

在这里插入图片描述



RFM 中的 F

每个用户累计购买频次

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

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

在这里插入图片描述



RFM 中的 M

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

在这里插入图片描述

在这里插入图片描述



将 R、F,M 三表合并

在这里插入图片描述



维度打分

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

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

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

字母分数说明

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

总分构成

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

例外

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

开始打分

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

R 的打分方式还可以按照业内标准
F 的打分方式如果按照业内标准的话,可能会有难以区分的风险,毕竟几乎都在5次以上
M 跟 F 一样,不过M还有机会分成3,4,5分这三种

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述



客户分层

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

每个客户的总分可以根据“维度打分”中的公式

总分构成

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

总分含义

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

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

在这里插入图片描述

在这里插入图片描述

打标签的几种方式(入门到进阶)的介绍链接放在了博文底端的“延伸阅读”中



RFM 模型结果分析

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

在这里插入图片描述

树形图的快捷绘制见底部延伸阅读

在这里插入图片描述

结果可视化

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

在这里插入图片描述



模拟问答

  • 你了解 RFM 模型吗
  • Python 实现主要有哪些步骤
  • Python 实现过程中可能出现什么困难
  • RFM 的一些指标选择有什么技巧或注意事项吗?
  • 待更新…


后记

延伸阅读

精彩回顾

  数据分析,商业实践,数据可视化,网络爬虫,统计学,Excel,Word, 社会心理学,认知心理学,行为科学,民族意志学 各种专栏后续疯狂补充

  欢迎评论与私信交流!

发布了51 篇原创文章 · 获赞 29 · 访问量 8955

猜你喜欢

转载自blog.csdn.net/weixin_43329700/article/details/104555627