RFM会员价值度模型

news2025/1/12 6:01:50

模型基本原理

会员价值度用来评估用户的价值情况,是区分会员价值的重要模型和参考依据,也是衡量不同营销效果的关键指标。

价值度模型一般基于交易行为产生,衡量的是有实体转化价值的行为。常用的价值度模型是RFM

RFM模型是根据会员

  • 最近一次购买时间R(Recency)
  • 购买频率F(Frequency)
  • 购买金额M(Monetary)计算得出RFM得分
  • 通过这3个维度来评估客户的订单活跃价值,常用来做客户分群或价值区分
  • RFM模型基于一个固定时间点来做模型分析,不同时间计算的的RFM结果可能不一样

 RFM模型的基本实现过程

①设置要做计算时的截止时间节点(例如2017-5-30),用来做基于该时间的数据选取和计算。

②在会员数据库中,以今天为时间界限向前推固定周期(例如1年),得到包含每个会员的会员ID、订单时间、订单金额的原始数据集。一个会员可能会产生多条订单记录。

③ 数据预计算。从订单时间中找到各个会员距离截止时间节点最近的订单时间作为最近购买时间;以会员ID为维度统计每个用户的订单数量作为购买频率;将用户多个订单的订单金额求和得到总订单金额。由此得到R、F、M三个原始数据量。

④ R、F、M分区。对于F和M变量来讲,值越大代表购买频率越高、订单金额越高;但对R来讲,值越小代表离截止时间节点越近,因此值越好。对R、F、M分别使用五分位(三分位也可以,分位数越多划分得越详细)法做数据分区。需要注意的是,对于R来讲需要倒过来划分,离截止时间越近的值划分越大。这样就得到每个用户的R、F、M三个变量的分位数值。

⑤ 将3个值组合或相加得到总的RFM得分。对于RFM总得分的计算有两种方式,一种是直接将3个值拼接到一起,例如RFM得分为312、333、132;另一种是直接将3个值相加求得一个新的汇总值,例如RFM得分为6、9、6。

RFM划分案例思路说明

在得到不同会员的RFM之后,根据步骤⑤产生的两种结果有两种应用思路

思路1:基于3个维度值做用户群体划分和解读,对用户的价值度做分析

  1. 得分为212的会员往往购买频率较低,针对购买频率低的客户应定期发送促销活动邮件
  2. 得分为321的会员虽然购买频率高但是订单金额低等,这些客户往往具有较高的购买黏性,可以考虑通过关联或搭配销售的方式提升订单金额。

在得到不同会员的RFM之后,根据步骤⑤产生的两种结果有两种应用思路

思路2:基于RFM的汇总得分评估所有会员的价值度价值,并可以做价值度排名。同时,该得分还可以作为输入维度与其他维度一起作为其他数据分析和挖掘模型的输入变量,为分析建模提供基础。

案例背景介绍 

用户价值细分是了解用户价值度的重要途径,针对交易数据分析的常用模型是RFM模型

业务对RFM的结果要求

  • 对用户做分组
  • 将每个组的用户特征概括和总结出来,便于后续精细化运营不同的客户群体,且根据不同群体做定制化或差异性的营销和关怀

规划目标将RFM的3个维度分别做3个区间的离散化

  • 用户群体最大有3×3×3=27个
  • 划分区间过多则不利于用户群体的拆分
  • 区间过少则可能导致每个特征上的用户区分不显著 

数据介绍 

案例数据是某企业从2015年到2018年共4年的用户订单抽样数据,数据来源于销售系统

数据在Excel中包含5个sheet,前4个sheet以年份为单位存储为单个sheet中,最后一张会员等级表为用户的等级表 

 读取数据

查看数据基本情况

 数据预处理

  •  
  • 通过for循环配合enumerate方法,获得每个可迭代元素的索引和具体值
  • 处理缺失值和异常值只针对订单数据,因此sheet_datas通过索引实现不包含最后一个对象(即会员等级表)
  • 直接将each_data使用dropna丢弃缺失值后的dataframe代原来sheet_datas中的dataframe
  • 使用each_data[each_data['订单金额']>1]来过滤出包含订单金额>1的记录数,然后替换原来sheet_datas中的dataframe
  • 最后一行代码的目的是在每个年份的数据中新增一列max_year_date,通过each_data['提交日期'].max()获取一年中日期的最大值,这样方便后续针对每年的数据分别做RFM计算,而不是针对4年的数据统一做RFM计算。 

汇总所有数据 

汇总所有数据: 将4年的数据使用pd.concat方法合并为一个完整的dataframe data_merge,后续的所有计算都能基于同一个dataframe进行,而不用写循环代码段对每个年份的数据单独计算 

按会员ID做聚合 

 这里使用groupby分组,以year和会员ID为联合主键,设置as_index=False意味着year和会员ID不作为index列,而是普通的数据框结果列。后面的agg方法实际上是一个“批量”聚合功能的函数,它实现了对date_interval、提交日期、订单金额三列分别以min、count、sum做聚合计算的功能。否则,我们需要分别写3条goupby来实现3个聚合

确定RFM划分区间 

在做RFM划分时,基本逻辑是分别对R、F、M做离散化操作,然后再计算RFM。而离散化本身有多种方法可选,由于我们要对数据做RFM离散化,因此需要先看下数据的基本分布状态

 

区间分析 

从数据分布看出 汇总后的数据总共有14万条 r和m的数据分布相对较为离散,表现在min、25%、50%、75%和max的数据没有特别集中

而从f(购买频率)则可以看出,大部分用户的分布都趋近于1,表现是从min到75%的分段值都是1且mean(均值)才为1.365

计划选择25%和75%作为区间划分的2个边界值

 确定RFM划分区间

f的分布情况说明

  • r和m本身能较好地区分用户特征,而f则无法区分(大量的用户只有1个订单)
  • 行业属性(家电)原因,1年购买1次比较普遍(其中包含新客户以及老客户在当年的第1次购买)
  • 与业务部门沟通,划分时可以使用2和5来作为边界 

举例:[1,2,3,4,5],假如数据划分的区间边界是[1,3,5],即划分为2份 

其中的2/3被划分到(1,3]区间中

3/4/5被划分到(3,5]区间中 

1无法划分到任何一个正常区间内

RFM计算过程

  • 每个rfm的过程使用了pd.cut方法,基于自定义的边界区间做划分
  • labels用来显示每个离散化后的具体值。F和M的规则是值越大,等级越高
  • 而R的规则是值越小,等级越高,因此labels的规则与F和M相反
  • 在labels指定时需要注意,4个区间的结果是划分为3份

 将3列作为字符串组合为新的分组

  • 代码中,先针对3列使用astype方法将数值型转换为字符串型
  • 然后使用pandas的字符串处理库str中的cat方法做字符串合并,该方法可以将右侧的数据合并到左侧
  • 再连续使用两个str.cat方法得到总的R、F、M字符串组合

保存结果 

保存RFM结果到Excel

rfm_gb.to_excel('sales_rfm_score1.xlsx')  # 保存数据为Excel

保存结果到Mysql    (pip install pymysql)

 

RFM图形展示 

为了更好地了解不同周期下RFM分组人数的变化,通过3D柱形图展示结果

展示结果时只有3个维度,分别是年份、rfm分组和用户数量。

第1行代码使用数据框的groupby以rfm_group和year为联合对象,以会员ID会为计算维度做计数,得到每个RFM分组、年份下的会员数量

第2行代码对结果列重命名

第3行代码将rfm分组列转换为int32形式 

输出3D图像中

  • X轴为RFM分组、Y轴为年份、Z轴为用户数量
  • 该3D图可旋转、缩放,以便查看不同细节 
  • 左侧滑块,用来显示或不显示特定数量的分组结果

 分别针3类群体,按照公司实际运营需求和当前目标,制定了不同的群体落地的排期

  1. RFM模型是经典的一种用户分群方法,操作起来比较简单,如果数据量不是很大的时候,直接使用Excel就可以实现
  2. RFM并不是在所有业务场景下都可以使用,一般用于零售行业(复购率相对高的行业)
  3. 使用Python的cut方法对数据进行分组,需要注意分组区间默认是左开右闭
  4. 使用Pyecharts可以方便的绘制出可以交互的3D图,在修改弹出提示信息内容时,需要注意字符串拼接的格式 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1361687.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#,简单选择排序算法(Simple Select Sort)的源代码与数据可视化

排序算法是编程的基础。 常见的四种排序算法是:简单选择排序、冒泡排序、插入排序和快速排序。其中的快速排序的优势明显,一般使用递归方式实现,但遇到数据量大的情况则无法适用。实际工程中一般使用“非递归”方式实现。本文搜集发布四种算法…

8 单链表---带表头节点

上节课所学的顺序表的缺点 顺序表的最大问题:插入和删除时需要移动大量元素 链式存储的定义 链式存储的逻辑结构 链表中的基本概念: 注意:表头节点并不属于数据元素 单链表图示: 把3个需要的结构体定义出来: typdef …

《网络是怎样连接的》2.3节图表(自用)

图4.1:TCP拆分数据与ACK号 图4.2:实际工作中ACK号与序号的交互过程 首先,客户端在连接时需要计算出与从客户端到服务器方向通信相关的序号初始值,并将这个值发送给服务器(①)。 接下来,服务器会…

MySQL学习笔记2: MySQL的前置知识

目录 1. MySQL是什么?2. 什么是客户端,什么是服务器?3. 服务器的特点4. 安装mysql5. mysql 客户端6. mysql 服务器7. mysql的本体8. MySQL 使用什么来存储数据?9. 数据库的多种含义10. MySQL 存储数据的组织方式 1. MySQL是什么? MySQL 是…

新手养布偶猫如何选择猫主食冻干?K9、sc、希喂三个品牌推荐!

布偶猫是食肉动物,但由于肠胃脆弱敏感,所以在饮食上需要特别关注哦!为了给它们最好的呵护,现在有了主食冻干这种优质猫主食!它不仅符合猫咪的天然饮食习惯,还用了新鲜生肉做原料呢!营养满分不说…

如何设计企业级业务流程?学习华为的流程六级分类经验

业务流程管理(BPM)是一种系统化的方法,用于分析、设计、执行、监控和优化组织的业务流程,以实现预期的目标和价值。业务流程管理中,流程的分级方法有多种,常见的有以下几种: APQC的流程分级方法…

Agilent安捷伦E4407B频谱分析仪26.5GHz

E4407B是安捷伦ESA-E系列频谱分析仪,它是一款能够适应未来需要的中性能频谱分析仪解决方案。该系列在测量速度、动态范围、精度和功率分辨能力上,都为类似价位的产品建立了性能标准。其灵活的平台设计使得研发、制造和现场服务工程师能够自定义产品&…

(Python + Selenium4)Web自动化测试自学Day2之动手尝试

目录 文章声明⭐⭐⭐让我们开始今天的学习吧!小试牛刀关于select标签关于弹窗只有一个点击按钮的弹窗需要确认的弹窗用户可以输入的弹窗 文章声明⭐⭐⭐ 该文章为我(有编程语言基础,非编程小白)的 Python Selenium4 Web自动化测试…

在 docker 容器中配置双网卡,解决通讯的问题

目录 1. 查看当前网络信息 2. 创建自定义网络桥 3. 创建双网卡模式 4. 删除默认网卡 已经创建好了的 Docker 容器,要修改它的IP比较麻烦,网上找了几种不同的方法,经过试验都没有成功,下面通过配置双网上来解决 IP 的问题。…

无心剑七绝《译无止境》

七绝译无止境 人生跌宕几春秋 苦辣酸甜永不休 只待通灵成妙译 神思曼舞醉琼楼 2024年1月6日 平水韵十一尤平韵 无心剑的这首《译无止境》以七言绝句的形式,表达了对翻译事业的热爱和追求。 首句“人生跌宕几春秋”,意味着人生的曲折变化&#xff0c…

IP代理测试:Ping测试如何做?

您在访问互联网时是否遇到过持续滞后或花费很长时间等待网站加载的情况?为了避免这种情况,您可以测试 ping 以查看连接速度。如果您使用代理,此 ping 测试还会显示代理服务器的响应速度。 ping 测试是一个很有价值的工具,可以帮助…

修改mariadb的默认存储路径

首先mariadb服务正常启动 安装mariadb: https://blog.csdn.net/qq_50247813/article/details/135402502?spm1001.2014.3001.5502 停止mariadb服务 systemctl stop mariadb创建新的数据存放目录 mkdir /data将mariadb的数据拷贝到/data目录下 mv /var/lib/mysq…

Python+Appium自动化测试的使用步骤

这篇文章主要介绍了PythonAppium实现自动化测试的使用步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一、环境准备 1.脚本语言:Python3.x IDE&…

GLTF编辑器设置3D纺织纹理贴图

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 位移贴图是一种纹理映射技术,通过改变顶点的位置来模拟细…

I.MX6ULL开发笔记(三)——挂载NFS网络文件系统

0x01 网络文件系统 当我们在编译一个文件时,正常是在一个pc上编译好一个文件,之后丢到开发板上去运行。如果有了NFS网络文件系统,那么我们就可以在PC以及开发板上共享文件了。 网络文件系统,常被称为NFS(Network Fil…

计算机基础知识——校验码概述

目录 1 码距 2 奇偶校验 3 CRC循环冗余校验码 3.1 多项式 3.2 编码的组成 3.3 生成多项式 3.4 校验码的生成 4 海明校验码和恒比码 4.1 校验方程 4.2 恒比码 1 码距 码距是恒量一种编码方式的抗错误能力的一个指标。数字信息在传输和存取的过程中,由于…

k8s的陈述式管理

k8s的陈述式管理: 所谓的陈述式管离也就是命令行工具 优点:90%以上都可以满足 对资源的增删查比较方便,对改不是很友好 缺点:命令比较冗长,复杂,难记 声明式: k8s当中的YAML文件来实现资源管…

MySQL之视图案例

目录 一.视图1.1 含义1.2 操作 二.案例三.思维导图 一.视图 1.1 含义 虚拟表,和普通表一样使用 1.2 操作 1.创建视图 create view 视图名 as 查询语句; 2.视图的修改 方式一: create or replace view 视图名 as 查询语句 方式二&#x…

初始py和py开发工具

前言:上一章节给友友们讲解了如何安装py环境,这一章节就来练习一下如何写py的程序以及注意事项。 目录 一.你好世界 1.因为主播liunx用习惯的缘故所以所有的操作都在liunx上面执行,下面我们来看怎么写py的程序, 1.1首先打开liu…

欧系数学一眼假系列7.“欧拉常数”是弥天大谎

数学界一直在干一件令人恶心的丑事:明明我求的是Σ1/708249541360742487,它给的答案却是ln7082495413607424870.5772156649(欧拉常数,通常以C表示),门外汉皆以为Σ1/n→∞是正经结论,全然不知它无关Σ1/n,而…