何为RFM模型分析

RFM模型是衡量客户价值和客户创利能力的重要工具和手段。在众多的客户关系管理(CRM)的分析模式中,RFM模型是被广泛提到的。该机械模型通过一个客户的近期购买行为、购买的总体频率以及花了多少钱3项指标来描述该客户的价值状况。

RFM的含义:

  • R(Recency):客户最近一次交易时间的间隔。R值越大,表示客户交易发生的日期越久,反之则表示客户交易发生的日期越近。
  • F(Frequency):客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则表示客户交易不够活跃。
  • M(Monetary):客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则表示客户价值越低。

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

RFM分析的主要作用:

  • 识别优质客户。可以指定个性化的沟通和营销服务,为更多的营销决策提供有力支持。
  • 能够衡量客户价值和客户利润创收能力。

python实现

import time
import numpy as np
import pandas as pd# 导入数据
df_raw = pd.read_csv('https://raw.githubusercontent.com/ffzs/dataset/master/sales.csv', index_col='USERID')
df_raw.head()

以下是本数据集的4个特征变量,包括:

  • USERID:用户ID,每个用户的ID唯一,由纯数字组成。
  • ORDERDATE:订单日期,格式为YYYY-MM-DD,例如2016-01-01。
  • ORDERID:订单ID,每个订单的ID唯一,由纯数字组成。
  • AMOUNTINFO:订单金额,浮点型数据。
# 查看类型
df_raw.dtypes

ORDERDATE object
ORDERID int64
AMOUNTINFO float64
dtype: object

需要将将ORDERID列转换为字符类型,ORDERDATE转换为时间格式:

# 将ORDERID列转换为字符类型
df_raw['ORDERID'] = df_raw.ORDERID.astype('str')
# ORDERDATE转换为时间格式
df_raw['ORDERDATE'] = pd.to_datetime(df_raw.ORDERDATE)

查看缺失值:

# 查看缺失值
df_raw.isnull().sum()

ORDERDATE 2
ORDERID 0
AMOUNTINFO 8
dtype: int64

缺失值占比小,直接删除

# 异常值处理
df_raw = df_raw.dropna()  # 丢弃带有缺失值的行记录
df_raw = df_raw[df_raw['AMOUNTINFO'] > 1]  # 丢弃订单金额<=1的记录

接下来需要分别计算R、F、M三个原始变量的数值,主要使用的方式是数据框的groupby方法。:

# 计算RFM值
recency_value = df_raw['ORDERDATE'].groupby(df_raw.index).max()  # 计算原始最近一次订单时间
frequency_value = df_raw['ORDERDATE'].groupby(df_raw.index).count()  # 计算原始订单频率
monetary_value = df_raw['AMOUNTINFO'].groupby(df_raw.index).sum()  # 计算原始订单总金额#### 分别计算R、F、M得分 ####
# 指定一个时间节点,用于计算其他时间与该时间的距离
deadline_date = pd.datetime(2017, 1,1)
# 计算R间隔
r_interval = (deadline_date - recency_value).dt.days
# 计算R、F、M得分
r_score = pd.cut(r_interval, 5, labels=[5, 4, 3, 2, 1])
f_score = pd.cut(frequency_value, 5, labels=[1, 2, 3, 4, 5])
m_score = pd.cut(monetary_value, 5, labels=[1, 2, 3, 4, 5])  # R、F、M数据合并
rfm_list = [r_score, f_score, m_score]  # 将r、f、m三个维度组成列表
rfm_cols = ['r_score', 'f_score', 'm_score']  # 设置r、f、m三个维度列名
rfm_pd = pd.DataFrame(np.array(rfm_list).transpose(), dtype=np.int32, columns=rfm_cols, index=frequency_value.index)  # 建立r、f、m数据框# 计算RFM总得分
# 方法一:加权得分
rfm_pd['rfm_wscore'] = rfm_pd['r_score'] * 0.6 + rfm_pd['f_score'] * 0.3 + rfm_pd['m_score'] * 0.1
# 方法二:RFM组合
rfm_pd_tmp = rfm_pd.copy()
rfm_pd_tmp = rfm_pd_tmp.applymap(lambda x : str(x))
rfm_pd['rfm_comb'] = rfm_pd_tmp.iloc[:,0] + rfm_pd_tmp.iloc[:,1] + rfm_pd_tmp.iloc[:,2]
rfm_pd.sort_values('rfm_comb',ascending=False)[:6]

在方法一中,直接取出数据框的三列(R、F、M)通过乘以特定权重值得到总得分。由于业务方更关注活跃度,认为访问的邻近度最重要,因此R的权重比较高,设置为0.6;其次是访问频率F设置为0.3;订单金额M则设置为0.1。然后基于不同的列直接做加权相加,而无需通过循环读出各个元素再做计算。

得分分布情况:

%matplotlib inline
rfm_pd.rfm_wscore.hist()

rfm_pd.groupby('rfm_comb')['r_score'].count().plot('bar')

案例数据结论

由于在RFM划分时,将区间划分为5份,因此可以将这5份区间分别定义了:高、中、一般、差和非常差5个级别,分别对应到R、F、M中的5/4/3/2/1。

基于RFM得分业务方得到这样的结论:

  • 公司的会员中99%以上的客户消费状态都不容乐观,主要体现在消费频率低R、消费总金额低M。——经过分析,这里主要由于其中有一个用户(ID为74270)消费金额非常高,导致做5分位时收到最大值的影响,区间向大值域区偏移。
  • 公司中有一些典型客户的整个贡献特征明显,重点是RFM得分为555的用户(ID为74270),该用户不仅影响了订单金额高,而且其频率和购买新鲜度和消费频率都非常高,应该引起会员管理部门的重点关注。
  • 由于555的用户(ID为74270)导致,其他用户的频率和消费金额很低,这样导致其他用户的频率和消费总量只能占1、2, 只有14个分类,可以考虑将74270拿出来直接当成ssssupervip,其他会员再做分析。

参考:

《python数据分析与数据化运营》 宋天龙

python数据分析:会员数据化运营(中)——RMF分析相关推荐

  1. 【组队学习】【28期】基于Python的会员数据化运营

    基于Python的会员数据化运营 论坛版块: http://datawhale.club/c/team-learning/37-category/37 开源内容: https://github.com ...

  2. 【组队学习】曹志宾:基于Python的会员数据化运营

    分享人:曹志宾,Datawhale成员,香港科技大学硕士在读 分享内容: 案例描述与分析 前期准备与数据预处理 RFM模型使用与操作 Excel中的RFM分析 组队学习: 红星:基于Python的会员 ...

  3. 【组队学习】孙健坤:基于Python的会员数据化运营

    分享人:孙健坤,哈尔滨工业大学 分享内容: 什么是会员制? 什么是会员数据化运营? 如何进行会员数据化运营 组队学习: 基于Python的会员数据化运营 开源内容: https://github.co ...

  4. python数据分析-《Python数据分析与数据化运营》电子版

    2019-01-04更新说明,更新到"3.13 本章小结"部分. ---------------------- 前 言 为什么要写这本书 读者对象 如何阅读本书 勘误和支持 致谢 ...

  5. Python数据分析与数据化运营(笔记)第一章:python与数据化运营

    1.开头三个问题: 1.python是什么? 2.数据化运营是什么? 3.为什么要将python用于数据化运营? 1.1 Python是什么? 老生常谈,这里简单列举一下,百度一大把,不过多赘叙 py ...

  6. python数据分析与数据化运营_电商数据分析与数据化运营.pdf

    作 者 :刘振华 出版发行 : 北京:机械工业出版社 , 2018.06 ISBN号 :978-7-111-59819-0 页 数 : 194 丛书名 : 数据分析与决策技术丛书 原书定价 : 69. ...

  7. 数据分析与数据化运营的关键知识点,全在这里了

    导读:本文是<Python数据分析与数据化运营>(第2版)的读书笔记,作者除介绍这本书适合有哪些需求的人阅读之外,还整理了这本书最精华部分的知识点,值得收藏. 本文为「大数据」内容合伙人之 ...

  8. 【2021.08】python会员数据化运营task01

    文章目录 学习目的 一.概述 二.会员数据化运营指标 2.1 会员整体指标 2.2 会员营销指标 2.2.1 可营销会员数 2.2.2 营销费用 2.2.3 营销收入 2.2.4 用券会员/金额/订单 ...

  9. Python数据分析 找出数组中每行(或每列)中指定的百分位数 numpy.percentile()

    [小白从小学Python.C.Java] [Python-计算机等级考试二级] [Python-数据分析] Python数据分析 找出数组中每行(或每列) 中指定的百分位数 numpy.percent ...

最新文章

  1. NTU -SCSE-orientation
  2. .NET Core前后端分离快速开发框架(Core.3.0+AntdVue)
  3. linux下mysql主从同步是主从i/o线程显示为no_mysql主从同步IO线程NO
  4. python的moviepy库 打包 报错: ‘moviepy.audio.fx.all‘ has no attribute ‘audio_fade 的解决办法
  5. 详谈分布式系统缓存的设计细节
  6. code的bootstrap如何有提示 vs_如何用DataFocus对Excel表中数据进行分析?
  7. 基于 PostgreSQL 的 EMQ X Auth ACL
  8. Oracle Trunc
  9. Core官方DI解析(3)-ServiceCallSite.md
  10. Dev C++调试程序方法详解
  11. 土豆英雄抽传说卡程序(非土豆英雄玩家不要看)
  12. Linux虚拟机远程连接工具
  13. 微机原理与接口技术考点一文全(待更)
  14. Maven镜像仓库替换为阿里云镜像仓库
  15. 【010 Editor】010 Editor安装教程
  16. DTM测试里无线Modem应该选哪种MCU?
  17. 微信小程序 java nodejs校园自动点餐系统
  18. 数学建模对计算机的CPU150,三星Exynos M1秒了A9处理器,能击败骁龙820吗?
  19. Python 每日一记217根据词频生成词云图
  20. 7-6 平面向量加法

热门文章

  1. 街霸5服务器链接已中断,《街头霸王5》常见问题解决方法
  2. 记录mumu模拟器AMD SVM(VT)开启失败的问题
  3. ubuntu查看电脑配置命令
  4. Dubbo—— 一个服务既是消费者又是提供者
  5. 《快学Scala》第二章练习题答案+概述
  6. oracle如何总计,按组SQL运行总计(Oracle)
  7. HttpClient 爬取百度图片
  8. [FAQ12112]在电池低电压时,如何关闭camera的闪光功能
  9. 【校招内推】字节跳动2022提前批开启
  10. “知识共享”与智能数学老师