Python RFM模型—会员价值度分析

本文介绍了RFM模型在会员价值度分析中的应用,通过Python进行RFM分群,使用Pyecharts绘制3D图形。讲解了RFM模型的概念、计算方法和业务应用场景,强调了不同业务对RFM各维度的重视程度,并提供了实际案例的详细步骤,包括数据处理、预计算、离散化和结论分析。案例中还展示了如何根据RFM得分制定针对性的营销策略。
摘要由CSDN通过智能技术生成


如果想单独一对一辅导学习C++、Java、Python编程语言的可以加微信咨询

会员价值度模型案例

目标

  • 知道RFM模型的概念和使用方法
  • 掌握如何使用Python进行RFM分群
  • 知道如何使用Pyecharts绘制3D图形

RFM模型是衡量客户价值和客户创造利益能力的重要工具和手段,本文提供数据集下载来源。

1. 会员价值度模型介绍

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

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

  • RFM模型是根据会员

    • 最近一次购买时间R(Recency)
    • 购买频率F(Frequency)
    • 购买金额M(Monetary)计算得出RFM得分
    • 通过这3个维度来评估客户的订单活跃价值,常用来做客户分群或价值区分
    • RFM模型基于一个固定时间点来做模型分析,不同时间计算的的RFM结果可能不一样
    R F M 用户类别
    重要价值用户
    重要发展用户
    重要保持用户
    重要挽留用户
    一般价值用户
    一般发展用户
    一般保持用户
    一般挽留用户
  • 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。
  • Excel实现RFM划分案例

    • 以某电商公司为例

      • R:例如:正常新用户注册1周内交易,7天是重要的值,日用品采购周期是1个月,30天是重要的值
      • F:例如:1次购买,2次购买,3次购买,4~10次,10次以上
      • M:例如:客单价300,热销单品价格240 等
    • 常见的确定RFM划分区间的套路

      • 业务实际判断
      • 平均值或中位数
      • 二八法则
    • 提取用户最近一次的交易时间,算出距离计算时间的差值

      • 获取当前时间=TODAY()

      在这里插入图片描述

      • 计算时间间隔

      在这里插入图片描述

    • 根据天数长短赋予对应的R值

      • =IF(D2>60,1,IF(D2>30,2,IF(D2>14,3,IF(D2>7,4,5))))

      在这里插入图片描述

    • 从历史数据中取出所有用户的购买次数,根据次数多少赋予对应的F分值

      • =IF(E2>10,5,IF(E2>3,4,IF(E2>2,3,IF(E2>1,2,1))))

      在这里插入图片描述

    • 从历史数据中汇总,求得该用户的交易总额,根据金额大小赋予对应的M值

      • =IF(F2>1000,5,IF(F2>500,4,IF(F2>300,3,IF(F2>230,2,1))))

      在这里插入图片描述

    • 求出RFM的中值,例如中位数,用中值和用户的实际三值进行比较,高于中值的为高,否则为低

    在这里插入图片描述

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

    • 思路1:基于3个维度值做用户群体划分和解读,对用户的价值度做分析
      • 得分为212的会员往往购买频率较低,针对购买频率低的客户应定期发送促销活动邮件
      • 得分为321的会员虽然购买频率高但是订单金额低等,这些客户往往具有较高的购买黏性,可以考虑通过关联或搭配销售的方式提升订单金额。
    • 思路2:基于RFM的汇总得分评估所有会员的价值度价值,并可以做价值度排名。同时,该得分还可以作为输入维度与其他维度一起作为其他数据分析和挖掘模型的输入变量,为分析建模提供基础。

2 RFM计算案例

2.1 案例背景

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

  • 业务对RFM的结果要求

    • 对用户做分组
    • 将每个组的用户特征概括和总结出来,便于后续精细化运营不同的客户群体,且根据不同群体做定制化或差异性的营销和关怀
  • 规划目标将RFM的3个维度分别做3个区间的离散化

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

    • 给业务部门做运营的分析结果要导出为Excel文件,用于做后续分析和二次加工使用
    • RFM的结果还会供其他模型的建模使用,RFM本身的结果可以作为新的局部性特征,因此数据的输出需要有本地文件
  • 数据说明

    • 选择近4年订单数据,从不同的年份对比不同时间下各个分组的绝对值变化情况,方便了解会员的波动
    • 案例的输入源数据sales.xlsx
    • 程序输出RFM得分数据写入本地文件sales_rfm_score.xlsx和MySQL数据库sales_rfm_score表中

2.2 用到的技术点

  • 通过Python代码手动实现RFM模型,主要用到的库包括
    • time、numpy和pandas
    • 在结果展示时使用了pyecharts的3D柱形图

2.3 案例数据

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

  • 数据在Excel中包含5个sheet,前4个sheet以年份为单位存储为单个sheet中,最后一张会员等级表为用户的等级表,数据集下载:https://download.csdn.net/download/knightseasky/88999235

  • 前4张表的数据概要如下。

    • 特征变量数:4

    • 数据记录数:30774/41278/50839/81349

    • 是否有NA值:有

    • 是否有异常值:有

      ·会员ID:每个会员的ID唯一,由纯数字组成。
      ·提交日期:订单日提交日期。
      ·订单号:订单ID,每个订单的ID唯一,由纯数字组成。
      ·订单金额:订单金额,浮点型数据。

  • 具体数据特征如下:

    • 会员ID:每个会员的ID唯一,整型
    • 提交日期:订单日提交日期
    • 订单号:订单ID,每个订单的ID唯一,整型
    • 订单金额:订单金额,浮点型数据
  • 会员登记表中是所有会员的会员ID对应会员等级的情况,包括以下两个字段

    • 会员ID:该ID可与前面的订单表中的会员ID关联
    • 会员等级:会员等级以数字区分,数字越大,级别越高

2.4 代码

  • 安装所需python库
pip install pymysql pyecharts
  • 导入模块
import time  # 时间库

import numpy as np  # numpy库
import pandas as pd  # pandas库
import pymysql  # mysql连接库

from pyecharts.charts import Bar3D # 3D柱形图
  • 用到了6个库:time、numpy、pandas、pymysql、pyecharts。

    • time:用来记录插入数据库时的当前日期
    • numpy:用来做基本数据处理等
    • pandas:有关日期转换、数据格式化处理、主要RFM计算过程等
    • pymysql:数据库连接工具,读写MySQL数据库。
    • pyecharts:展示3D柱形图
  • 读取数据

    sheet_names = ['2015','2016','2017','2018','会员等级']
    sheet_datas = [pd.read_excel('data/sales.xlsx',sheet_name=i) for i in sheet_names]
    
  • 查看数据基本情况

    for each_name,each_data in zip(sheet_names,sheet_datas):    
        print('[data summary for ============={}===============]'.format(each_name))
        print('Overview:','\n',each_data.head(4))# 展示数据前4条
        print('DESC:','\n',each_data.describe())# 数据描述性信息
        print('NA records',each_data.isnull().any(axis=1).sum()) # 缺失值记录数    
        print('Dtypes',each_data.dtypes) # 数据类型
    

    输出结果:

    [data summary for =============2015===============]
    Overview: 
               会员ID         订单号       提交日期    订单金额
    0  15278002468  3000304681 2015-01-01   499.0
    1  39236378972  3000305791 2015-01-01  2588.0
    2  38722039578  3000641787 2015-01-01   498.0
    3  11049640063  3000798913 2015-01-01  1572.0
    DESC: 
                    会员ID           订单号           订单金额
    count  3.077400e+04  3.077400e+04   30774.000000
    mean   2.918779e+10  4.020414e+09     960.991161
    std    1.385333e+10  2.630510e+08    2068.107231
    min    2.670000e+02  3.000305e+09       0.500000
    25%    1.944122e+10  3.885510e+09      59.000000
    50%    3.746545e+10  4.117491e+09     139.000000
    75%    3.923593e+10  4.234882e+09     899.000000
    max    3.954613e+10  4.282025e+09  111750.000000
    NA records 0
    Dtypes 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值