社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python做RFM代码太复杂,使用Tableau多简单!

黑客技术和网络安全 • 3 年前 • 396 次点击  
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇
作者丨黄伟呢
来源丨凹凸数据

大家好,我是小五🧐

本文旨在通过2015-2018的客户订单分析,了解各大区销售经营情况、不同偏好,并通过RFM模型来进行客户价值分类,实现定向营销。

现在开始手把手教学RFM实战的软件操作:

1、数据表的介绍

  数据已经提供了,该数据是2015-2018的客户订单经过脱敏后得到的数据,共包含了8987条记录,该数据的字段很多,但是对于RFM建模,我们只需要“客户名称”、“销售额”、“日期”,就可以完成RFM模型的构建。下面我们只截图展示表中的部分数据。

2、计算RFM的值(MySQL)

  其实RFM的值,我们这里利用一个SQL语句就可以解决,但是我们为了更细致的讲解RFM值的计算过程,这里分开进行 一一叙述。

① R值的计算

  • R值(近度) = (当前时间-最后一次消费时间)
  • 当前时间:我们指定是“2019-04-01”,因为这是分析以前的数据,所以当前时间是那个时候的某个时间。
select 
        客户名称,
        max(日期) 最后一次消费时间,
        datediff("2019-04-01",max(日期)) R值
from dingdan
group by 客户名称;

结果如下:

② F值的计算

  • F值(频度)  =(客户购买的频次)
  • 这里的购买频次以天为单位,即使一天买了多单,这一天的频次就是1。
select 
        客户名称,
        count(distinct(日期)) F值   # 注意这里的去重操作
from dingdan
group by 客户名称;

结果如下:

③ M值的计算

  • M值(额度) = (一段时间的总额或平均额)
select 
        客户名称,
        count(distinct(日期)) F值,
        sum(销售额) 总额,
        round(sum(销售额)/count(distinct(日期)),2) M值
from dingdan
group by 客户名称;

结果如下:

④ 其实RFM值一个SQL语句就可以解决

select 
        客户名称,
        datediff("2019-04-01",max(日期)) R值,
        count(distinct(日期)) F值,
        sum(销售额) 总额,
        round(sum(销售额)/count(distinct(日期)),2) M值
from dingdan
group by 客户名称;

结果如下:

3、Tableau中进行RFM值的计算

① 连接MySQL数据库

② 新建“自定义SQL”,获取我们用于分析的数据源

③ 在工作表中,完成如下一系列操作

④ 创建“计算字段”,计算R_SCORE

  注意:我们这里采用5级打分规则(业内一般都是这样打分的),但是分段标准是根据实际业务为驱动,进行讨论后得出。  同理,我们可以计算出“F_SCORE”和“M_SCORE”,操作如上,这里就不详细进行说明。F_SCORE的计算如下:

M_SCORE的计算如下:

4、用户分类

① 创建“计算字段”,计算RFM的平均值

R_SCORE的平均值:

F_SCORE的平均值:

M_SCORE的平均值:

② 创建“计算字段”,进行RFM值高低的判断

  分别将“R_SCORE”、“F_SCORE”、“M_SCORE”和“R平均值”、“F平均值”、“M平均值”进行一一比较,大于平均值就是1,否则为0。R值高低的判断

F值高低的判断

M值高低的判断

③ 创建“计算字段”,进行客户价值判断(最麻烦)

IIF([R值高低的判断]=1 and [F值高低的判断]=1 and [M值高低的判断]=1,'重要价值客户',
    IIF([R值高低的判断]=0 and [F值高低的判断]=1 and [M值高低的判断]=1,'重要唤回客户',
    IIF([R值高低的判断]=1 and [F值高低的判断]=0 and [M值高低的判断]=1,'重要深耕客户',
    IIF([R值高低的判断]=0 and [F值高低的判断]=0 and [M值高低的判断]=1,'重要挽留客户',
    IIF([R值高低的判断]=1 and [F值高低的判断]=1 and [M值高低的判断]=0,'潜力客户',
    IIF([R值高低的判断]=1 and [F值高低的判断]=0 and [M值高低的判断]=0,'新客户',
    IIF([R值高低的判断]=0 and [F值高低的判断]=1 and [M值高低的判断]=0,'一般维持客户',
    IIF([R值高低的判断]=0 and [F值高低的判断]=0 and [M值高低的判断]=0,'流失客户','错误检测'))))))))

5、可视化展示

① 用户清单——文本表的展示

上表由于“客户”太多,怎么设置“分页显示”呢?(一个牛逼操作)

Ⅰ 创建“计算字段”,为表添加一个“编号”列

Ⅱ 点击鼠标右键,将“编号”转换为离散

Ⅲ 将“编号”拖动到行中

Ⅳ 创建“计算字段”,为表添加一个“页码”

Ⅴ 点击鼠标右键,将“页码”转换为离散

Ⅵ 当出现如下页面,完成如下操作

Ⅶ 当出现如下页面,完成如下操作

Ⅷ 当出现如下页面,完成如下操作

Ⅸ 效果展示

注意:使用同样的操作,我们还可以添加一个“客户名单”筛选器,效果如下。

② 客户价值分布

怎么将上述标签,改成百分比展示呢?效果如下:

③ 各类型客户总交易额占比

怎么给这个饼图添加百分比标签呢?(这个技巧需要注意)

Ⅰ 完成如下1,2,3处的操作

Ⅱ 这一步很关键,有点技巧,按住CTRL键,将“总和(总额)”拖动到标签中

怎么讲这个饼图变为圆环图呢?(圆环图更好看一些),这里虽然有些难度,但是留给大家自己下去思考一下,实在不会可以问我。

④ 不同类型客户的人均消费

⑤ RF分布——M客户流失

  只要是做RFM分析,业内人士都喜欢拿RF值去看M,或者拿FM值去看R,或者拿RM值去看F,下面我们简单举一个例子,通过RF值去看M。

⑥ 忠诚度对比

  这里说的“忠诚度”,指的就是某个用户老来买,说明很喜欢这个产品,对该产品忠诚度较高,即“忠诚度”的衡量使用的是“F值(频度)”。

6、可视化大屏的布局展示

① 当出现如下界面,完成如下操作

② 给可视化大屏添加一个“背景效果”

③ 给可视化大屏取一个名字

(这里有一个技巧)

④ 拖动并布局

最后将之前做好的一个个图形,按住shift键,将其一个个拖动到右侧进行布局。

⑤ 进行多表联动的操作

Ⅰ 按照下图,完成如下操作

Ⅱ  接下来就是在下图中进行操作

Ⅲ  最终的交互效果如下

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/119680
 
396 次点击