基于RFM 模型的 Python 实战分析

基于RFM 模型的 Python 实战分析

脱敏后数据链接:https://pan.baidu.com/s/1vSbBeNLaH5M4Ph8DGkgqRQ 密码:tr4q

一、RFM 模型介绍

RFM模型是根据客户活跃程度和交易金额的贡献,进行客户价值细分的一种用户分类方法。

  • R(Recency)——最近一次交易时间间隔。基于最近一次交易日期计算的得分,距离当前日期越近,得分越高。如5分制反映客户交易活跃度较高。
  • F(Frequency)——客户在最近一段时间内交易次数。基于交易频率计算的得分,交易频率越高,得分越高。如5分制反映客户交易频次较高。
  • M(Monetray)——客户最近一段时间内交易金额。基于交易金额计算的得分,交易金额越高,得分越高。如5分制反映客户交易金额较高。

以上三个指标对客户进行 每个维度的1-5 分打分,会将每个维度细分出5类,这样就能够细分出共5x5x5=125类用户。

但一般来说125类用户已超出普通人脑的计算范畴了,更别说针对125类用户量体定制营销策略。

在本次实战中,我们只把每个维度做一次两分,即在每个维度上取平均值,高于平均值取 1,低于平均值取 0。

这样在3个维度上我们得到了2* 2*2=8类用户。

用户分类 R 分类 F 分类 M 分类 解读
重要价值客户 1 1 1 最近消费、高频、高消费
消费潜力客户 1 1 0 最近消费、高频、低消费
频次深耕客户 1 0 1 最近消费、低频、高消费
新客户 1 0 0 最近消费、低频、低消费
重要价值流失预警客户 0 1 1 最近未消费、高频、高消费
一般客户 0 1 0 最近未消费、高频、低消费
高消费换回客户 0 0 1 最近未消费、低频、高消费
流失客户 0 0 0 最近未消费、低频、低消费

基于这 8 类用户,我们再进行用户营销策略制定,显而易见会容易许多。

二、数据导入与清洗

1.相关包导入

先对相关包进行导入,将数据导入 Python:

import pandas as pd
import numpy as np
df=pd.read_csv('RMF_Model_Data.csv')

2.查看字段定义

查看数据表中相关字段及其含义:

df.columns

查看字段名称
由于本次数据只需提取已完成的订单,故对【订单状态】查看其状态:

a=df.groupby('订单状态')['订单编号'].count().reset_index()

在这里插入图片描述

3.提取有用字段

由上可知:数据表中订单存在3种类型状态,订单未支付、订单支付未评价、订单已支付已评价。

上述 3 种订单均为已完成的订单,故无需对订单状态字段进行处理。

RFM模型中仅需 乘客编号,订单时间,订单金额,故将数据字段进行精简,仅保留以上 3 个字段。

df=df[['乘客编号','订单金额','叫车时间']]
df.head()

在这里插入图片描述

4.数据清洗

运行后发现叫车时间存在转义符,需对其进行处理:

(此处即对叫车时间进行切片,丢弃其最后两个字符)

df['叫车时间']=df['叫车时间'].apply(lambda x: x[:-2])
df.head()

在这里插入图片描述

查看数据类型,看是否有丢失或残缺:

df.info()

在这里插入图片描述
各字段数据完整,均为 31809条,无丢失情况。

但同时也发现,乘客编号为浮点型、订单金额为整型,叫车时间却为object类型。

下面利用 pandas将其转换为时间格式:

(此处是为了后续作时序分析,若只进行 RFM 模型,可以不进行转换)

df['叫车时间']=pd.to_datetime(df['叫车时间'],format='%Y/%m/%d %H:%M:%S')
df.info()

6.补充知识(日期格式化表达式)

插播一个小知识:Python 中日期格式化的表达方式如下

%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00-59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

最后我们的清洗基本上是完成了,来看一下清洗完的数据长什么样:

在这里插入图片描述

三、RFM 模型建立:

基础清洗告一段落,这一步关键在于构建模型所需的三个字段:

R(最近一次购买距今多少天);
F(购买了多少次);
M(平均或者累计购买金额);

下面开始构造上述三个相关的衡量指标,即最近一次购买距今的天数差R、消费频率F、消费金额M及创建新表RFM。

1、 R 字段的构造:

先求出每位乘客的最近一次叫车时间:

r=df.groupby('乘客编号')['叫车时间'].max().reset_index()
#获得每一位乘客的最近一次叫车时间
r.loc[:10]

在这里插入图片描述
再以获取数据的时间(2020/3/1)减去叫车时间,即为R:

r['R']=(pd.to_datetime('2020-3-1')-r['叫车时间']).dt.days
r=r[['乘客编号','R']]
r.loc[:10]   

在这里插入图片描述

2、F 字段的构造

由于叫车时间为年月日时分秒的格式,故我们要先获得一个日期标签:

df['日期标签']=df['叫车时间'].astype(str).str[:10]
df.head()

在这里插入图片描述
一般建立 RFM 模型时,我们会将客户一天内的多笔订单视为一笔

即将以乘客编号&日期标签作聚合,获得各个乘客在 每一天的打车频次:

df_1=df.groupby(['乘客编号','日期标签'])['叫车时间'].count().reset_index()</
  • 2
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值