新手小白学习PowerBI第四弹--------RFM模型建模以及饼图、分解树、树状图、增长趋势图的可视化

目录

  • [0 前言](#0 前言)
  • [1 目标](#1 目标)
  • [2 基本概念](#2 基本概念)
    • [2.1 RFM模型是什么](#2.1 RFM模型是什么)
    • [2.2 RFM模型作用](#2.2 RFM模型作用)
    • [2.3 典型的使用案例](#2.3 典型的使用案例)
    • [2.4 RFM模型如何起作用](#2.4 RFM模型如何起作用)
      • [2.4.1 提取R、F、M三个指标](#2.4.1 提取R、F、M三个指标)
      • [2.4.2 对用户分级](#2.4.2 对用户分级)
      • [2.4.3 联合 R+F+M 得到客户分群](#2.4.3 联合 R+F+M 得到客户分群)
      • [2.4.4 可视化(可选)](#2.4.4 可视化(可选))
  • [3 实操](#3 实操)
    • [3.1 新建 Customer 表(用户表)](#3.1 新建 Customer 表(用户表))
      • [3.1.1 用到的DAX表达式](#3.1.1 用到的DAX表达式)
      • [3.1.2 新建 R_Value 列](#3.1.2 新建 R_Value 列)
      • [3.1.3 新建 R_Rank 列](#3.1.3 新建 R_Rank 列)
      • [3.1.4 新建 R_Score 列](#3.1.4 新建 R_Score 列)
      • [3.1.5 新建 F_Value 列](#3.1.5 新建 F_Value 列)
      • [3.1.6 新建 F_Rank 列](#3.1.6 新建 F_Rank 列)
      • [3.1.7 新建 F_Score 列](#3.1.7 新建 F_Score 列)
      • [3.1.8 新建 M_Value 列](#3.1.8 新建 M_Value 列)
      • [3.1.9 新建 M_Rank 列](#3.1.9 新建 M_Rank 列)
      • [3.1.10 新建 M_Score 列](#3.1.10 新建 M_Score 列)
      • [3.1.11 新建 RFM_Score 列](#3.1.11 新建 RFM_Score 列)
      • [3.1.12 新建 CustomerSegment 列](#3.1.12 新建 CustomerSegment 列)
      • [3.1.13 完整 Customer 表](#3.1.13 完整 Customer 表)
    • [3.2 Customer 表与 Orders 表建立关系](#3.2 Customer 表与 Orders 表建立关系)
    • [3.3 可视化](#3.3 可视化)
      • [3.3.1 用户分群饼状图](#3.3.1 用户分群饼状图)
      • [3.3.2 用户分群分解树](#3.3.2 用户分群分解树)
      • [3.3.3 用户分群树状图](#3.3.3 用户分群树状图)
      • [3.3.4 客户增长趋势图](#3.3.4 客户增长趋势图)
  • [4 后记](#4 后记)

0 前言

恭喜宿主完成第一关的任务,接下来来到第二关吧。实话实说,咱这游戏太有技术含量了。

第二关您获得的宝藏是对用户进行分群,获得高价值用户、潜在用户、流动风险用户,有了这些用户分群,我们可以对用户采取更好地营销策略,让我们和用户在金钱和服务上实现一个双赢

附带大礼包:饼图、分解树、树状图、增长趋势图的可视化。

那让我们开始第二关的旅程叭~

1 目标

【页面 2:客户分析(RFM 模型)】

最近消费(Recency)

购买频率(Frequency)

消费金额(Monetary)

客户分群(高价值、保持、流失风险、潜力客户)

可视化:客户增长趋势图、分解树、树状图、饼图

2 基本概念

既然要使用RFM模型进行客户分析,我们先来了解一下什么是RFM模型?有什么作用,如何起作用。

2.1 RFM模型是什么

RFM模型是一种评估用户价值和用户行为的模型,常常用于数据分析和PowerBI BI项目。适用于电子商务、会员管理、客户价值分析等场合。

**R(Recency)**最近一次购买、消费距今天;**F(Frequency)**消费频率;**M(Monetary)**消费金额。

2.2 RFM模型作用

知道一个东西有什么作用,我们才能清晰地知道在什么场景发挥它最大的优势,这一点是很重要的。

谁是最有价值的客户?

哪些客户正在流失?

哪些客户值得重点维护或召回?

如何制定精准营销策略?

2.3 典型的使用案例

精准营销(不同客户群发不同活动)

客户生命周期分析

VIP客户识别

流失客户预测

提高复购率和客户沾性

2.4 RFM模型如何起作用

2.4.1 提取R、F、M三个指标

R(Recency):最近一次购买、消费距今天

bash 复制代码
R = 今天日期 - 客户最近一次购买日期
数值越小,客户越活跃

F(Frequency):消费频率

bash 复制代码
F = 某时间段客户消费次数

M(Monetary):消费金额

bash 复制代码
M = 某时间段客户总消费金额

2.4.2 对用户分级

根据R、F、M分别给客户评分(五分制或者十分制),使用百分位分组的方法,如P20,P40,P60,P80。高=5,低=1。

百分位数的五分制就是将100分成五段,第一段是0-20;第二段是21-40;第三段是41-60;第四段是61-80;第五段是81-100,落在那一段就给它赋一个分,这样就很好理解了。

举个例子:

R = 5表示最近刚买,非常活跃

F = 5表示购买频繁

M = 5表示购买金额高、贡献大

2.4.3 联合 R+F+M 得到客户分群

R F M 客户价值
5 5 5 最佳用户 Best Customer
5 1 1 新客户 New Customer
1 5 5 忠诚但可能将流失
1 1 1 低价值客户

2.4.4 可视化(可选)

  • R/F/M三个KPI卡片
  • R vs F散点图(气泡大小表示M)
  • 9 分群或者 16 分群热力图
  • 客户价值分类条形图
  • 客户增长趋势图

在我们的项目中会进行几个可视化图片,其余的感兴趣的话评论区留言,我来实操实操,对了我感觉 9 分群和 16 分群还挺有意思的,对用户分群会更加详细一些些。

3 实操

3.1 新建 Customer 表(用户表)

既然我们要对用户分群,建立一个用户表是非常方便我们在用户维度进行操作的。

后面操作的时候发现表格名字写错了,后来修改过来啦,这都是小问题哈,方面修改,但操作过程中,宝贝们注意一下哟~

bash 复制代码
Customer = DISTINCT(Orders[Customer ID])

这里的DISTINCT表示唯一的,可能一个用户有多个订单,但我们只唯一的要一个数量作为主键,在Customer表格中标识用户

我们的目标是建立RFM模型就需要对各个内容新建列,方面后面的可视化。

3.1.1 用到的DAX表达式

FILTE()

FILTER() 过滤器,通过 FILTER,PBI 只展示符合条件的数据。

RANKX()

RANKX()用来对表中的每一个值,按照某个指标做排名,ASC就是从低到高,DESC就是从高到低。

RANKX()语法:

bash 复制代码
RANKX(
    <table>,
    <expression>,
    [<value>],
    [<order>],
    [<ties>]
)

table:排名的对象集合,如 ALL(Customer)

expression:用来排名的度量,如 Total Sales

value:可选,用于特殊情况,一般不用

order:排序方式:DESC(默认)=最大排第一,ASC = 最小排第一

ties:同分时的规则:SKIP 或 DENSE

其中[]表示可选,可填写可不填写,但如果不填写,就要打个,隔开哟。

table ,排名的对象集合,这里要十分注意,如 ALL(Customer),这里的 ALL 就移除了所有的过滤条件,是对所有的Customer进行排名。

下面详细介绍一下SKIPDENSE 这两个参数

产品 销售额
A 100
B 90
C 90
  • SKIP(跳过):排名结果:1,2, 2, 4
    可以看出都是 90 分,出现两个 2,把 3 跳过了。
  • DENSE(密集):排名结果:1,2, 2, 3
    不会跳过数字(推荐使用)

常用情景:

RMF 分群→ DENSE

Top N 产品分析→ DENSE

需要真实排名(比赛排名)→ SKIP

CEILING()

CEILING()向上取整数,比如 4.5 我们把他取整为 5

TRUE-SWITCH()
bash 复制代码
SWITCH(
    TRUE(),
    condition1, result1,
    condition2, result2,
    condition3, result3,
    default
)

有了这个 TRUE(),那么能够确保每一个条件都执行,他的执行逻辑是从上到下的顺序,满足哪一个就立刻返回哪一个值,都不满足就执行 default 语句。

3.1.2 新建 R_Value 列

这里给出 R_Value 的 DAX 代码

bash 复制代码
R_Value = 
VAR LastOrderDate =
    CALCULATE(
        MAX(Orders[Order Date]),
        FILTER(Orders, Orders[Customer ID] = Customer[Customer ID])
    )
RETURN
DATEDIFF(LastOrderDate, TODAY(), DAY)

3.1.3 新建 R_Rank 列

这里给出 R_Rank 的 DAX 代码

bash 复制代码
R_Rank = 
RANKX(
    ALL(Customer),
    Customer[R_Value],
    ,
    ASC,      -- 数值越小越好
    Dense
)

3.1.4 新建 R_Score 列

这里给出 R_Score 的 DAX 代码

bash 复制代码
R_Score = 
VAR totalCustomers = COUNTROWS(ALL(Customer))
VAR r_rank = Customer[R_Rank]
VAR quintile =
    CEILING( r_rank * 5.0 / totalCustomers, 1 )  -- 1~5,1=最好
RETURN
5 - quintile + 1   -- 反转:1变5,2变4...
  • 这段代码的作用,是将 R_Rank 映射到 1-5 当中
  • COUNTROWS 表示计数,总共有多少行
  • RETURN 5 - quintile + 1:这里是为了反转分数,quintile = 1,那么score = 5,因为 Recency 越小越好,表示最近刚消费。
  • 这里 r_rank 为什么要 ×5 呢,是因为,我们需要把这些数据放到五个区间里面,五分制。
    如果 4 分群,就 ×4 ;16分群则 ×16

3.1.5 新建 F_Value 列

这里给出 F_Value 的 DAX 代码

bash 复制代码
F_Value = 
CALCULATE(
    COUNTROWS(Orders),
    FILTER(Orders, Orders[Customer ID] = Customer[Customer ID])
)

3.1.6 新建 F_Rank 列

这里给出 F_Rank 的 DAX 代码

bash 复制代码
F_Rank = 
RANKX(
    ALL(Customer),
    Customer[F_Value],
    ,
    DESC,      -- 越大越好
    Dense
)

3.1.7 新建 F_Score 列

这里给出 F_Score 的 DAX 代码

bash 复制代码
F_Score = 
VAR totalCustomers = COUNTROWS(ALL(Customer))
VAR f_rank = Customer[F_Rank]
RETURN CEILING(f_rank * 5.0 / totalCustomers, 1)

3.1.8 新建 M_Value 列

这里给出 M_Value 的 DAX 代码

bash 复制代码
M_Value = 
CALCULATE(
    SUM(Orders[Sales]),
    FILTER(Orders, Orders[Customer ID] = Customer[Customer ID])
)

3.1.9 新建 M_Rank 列

这里给出 M_Rank 的 DAX 代码

bash 复制代码
M_Rank = 
RANKX(
    ALL(Customer),
    Customer[M_Value],
    ,
    DESC,
    Dense
)

3.1.10 新建 M_Score 列

这里给出 M_Score 的 DAX 代码

bash 复制代码
M_Score = 
VAR totalCustomers = COUNTROWS(ALL(Customer))
VAR m_rank = Customer[M_Rank]
RETURN CEILING(m_rank * 5.0 / totalCustomers, 1)

3.1.11 新建 RFM_Score 列

以上所有的步骤,都是为了计算 RFM_Score

这里给出 RFM_Score 的 DAX 代码

bash 复制代码
RFM_Score = 
Customer[R_Score] + Customer[F_Score] + Customer[M_Score]

3.1.12 新建 CustomerSegment 列

得到了 RFM_Score ,我们就需要根据分数,对用户进行分群。CustomerSegment 就是用户分群的意思。

这里给了一个分群指标,在实际案例中,根据实际项目指标进行分群指标设置。

bash 复制代码
CustomerSegment = 
VAR score = Customer[RFM_Score]
RETURN
SWITCH(
    TRUE(),
    score >= 13, "高价值客户",
    score >= 10, "保持客户",
    score >= 7,  "潜力客户",
    "流失风险客户"
)

RFM_Score 分数 >= 13,我们将其定义为 高价值客户;10 <= RFM_Score 分数 < 13,我们将其定义为 保持客户;7 <= RFM_Score 分数 < 10,我们将其定义为 潜力客户;1 <= RFM_Score 分数 < 7,我们将其定义为 流失风险客户;

3.1.13 完整 Customer 表

以上列全部创建完后的完整 Customer 表,见下图。

3.2 Customer 表与 Orders 表建立关系

这里是重点,表与表之间只有建立关系,才能多表联合作业,只有单个的表操作简单,但在实际生产中作用不大。

这里需要再一次注意的点,关系的方向和值要正确,这一点很重要。

一个 Customer 表中的 Customer ID 对应 Orders 表格中的多个 Orders ID,多个 Orders 表格中的 Orders ID 对应 Customer 表中的一个 Customer ID。

举例子:结合实际情况来理解的话,就是一个用户会有一个或者多个订单;一个或多个订单属于一个人。

成功建立关系,如下图所示,Customer 表与 Orders 表之间有一条连线,且数值是1对多,从这里也可以确认关系是否正确。

3.3 可视化

可视化是为了直观明了的看数据,为我们后续经营方式决策打了坚实的基础。

3.3.1 用户分群饼状图

操作方法很简单


3.3.2 用户分群分解树

这个分解树就稍稍有一些不同,要注意点击 + 并且选择用 CustomerSegment 展开。



3.3.3 用户分群树状图


3.3.4 客户增长趋势图

这里有点需要操作的东西,既然要用到用户增长,我们就需要知道谁是新用户。

这里给出 FirstPurchaseDate (第一次购买日期)的DAX代码

bash 复制代码
FirstPurchaseDate = 
CALCULATE(
    MIN(Orders[Order Date]),
    FILTER(
        Orders,
        Orders[Customer ID] = Customer[Customer ID]
    )
)

这里给出 New Customers (新用户)度量值的DAX代码

bash 复制代码
New Customers = 
VAR SelectedMonth =
    MAX(DateTable[Date])
RETURN
CALCULATE(
    DISTINCTCOUNT(Customer[Customer ID]),
    FILTER(
        Customer,
        Customer[FirstPurchaseDate] >= DATE(YEAR(SelectedMonth), MONTH(SelectedMonth), 1)
            && Customer[FirstPurchaseDate] < EOMONTH(SelectedMonth, 0) + 1
    )
)



大家还可以自己尝试一下将x轴换成 年、月、日、季度 分开的这样子。

记得保存!!!
记得保存!!
记得保存

okay!到这里就恭喜各位宝贝们,掌握了RFM模型、在PBI上实现了这个模型以及可视化,哇塞,你简直就是最棒的宝贝~

4 后记

如果有用的话,记得给我点赞点赞~关注我也行啊,好久没涨粉了,oh my god!

还有两个页面展示,咱们就把PBI数据分析项目实战完成了,胜利指日可待啊。

要和室友去广州潮汕履行,不得不说大家订酒店的速度超出了我的预期,酒店价格微微上涨,我们以迅雷不及掩耳之势火速预定,已经成功了。

干任何事情都能学到东西,好的事情要干,不好的事情千万不干,会对我们的精神灵魂造成污染,有些书啊视频啊,能不看还是别看,潜移默化会影响我们。

订酒店要注意距离景点的位置、是不是临街吵不吵闹、酒店干不干净,酒店面积大不大,像我们两个人,至少要20平方米,不然很不方便,还有房间有没有窗户,这都是需要考虑的,这就要多看看评论,小red书等等,多方收集信息。

我这方面能力真心不错,之前去南昌旅游,酒店我定的,获得室友好评!!!我简直是最棒的小羊。

高中一个男同学约我爬山,看来要放他鸽子了,对不起啰~

如果有用的话,记得给我点赞点赞~

相关推荐
老蒋新思维3 小时前
创客匠人万人峰会解码:AI+IP 能力裂变,知识变现告别 “单点依赖” 时代
大数据·网络·人工智能·tcp/ip·创始人ip·创客匠人·知识变现
一瞬祈望3 小时前
⭐ 深度学习入门体系(第 1 篇):什么是神经网络?——从生活到公式,一次讲清!
人工智能·深度学习·神经网络
我命由我123453 小时前
Java 开发使用 MyBatis PostgreSQL 问题:传入的参数为 null,CONCAT 函数无法推断参数的数据类型
java·开发语言·数据库·学习·postgresql·mybatis·学习方法
北京盛世宏博3 小时前
【物联网控制】档案库房八防智能监测系统 温湿度自动调控 + 防火防盗全联动
大数据·人工智能·档案八防·十防
东方佑3 小时前
轻量级语言模型的精进之路:SamOutVXP2512如何实现规模与性能的双重突破
人工智能·语言模型·自然语言处理
陈天伟教授3 小时前
人工智能应用-机器视觉:人脸识别(2)
人工智能·机器学习
CC180253944863 小时前
桌面机器人与AI陪伴产品应用芯片ESP32-S3/ESP32-P4
人工智能·机器人
黑岚樱梦3 小时前
Git学习和Linux基础
git·学习
酌沧3 小时前
人脑与大模型的本质差异
人工智能