- 由 wyn_writer创建, 最后修改于六月 14, 2022
1. 需求描述
对于大多数零售和销售行业来说,除了销售数据分析之外,还有一点值得关注的就是客户价值。
RFM模型用于分析客户价值,它包括三个关键指标:
- R(Recency),最近一次消费时间间隔
- F(Frequency),消费频率
- M(Monetary),消费金额
一般来说,最近一次消费的间隔越短、消费频率和消费金额越高,客户价值越大。
实际上在分析所有客户数据时,如果为每个客户计算R、F、M值,不能清晰直观地反映规律,所以我们按照R、F、M值对客户进行分组。
- 首先,选择每个客户并计算上述三个指标的值。
- 其次,从以上结果来看三个指标的平均值;
- 第三,对每个客户进行分组。
如果R值<平均R值,则属于R↑,我们标记为R_UP,否则属于R↓,我们标记为R_DOWN;F和M值的逻辑类似。如果F值>平均F值,则属于F↑,我们标记为F_UP,否则属于F↓,我们标记为F_DOWN;如果M值>平均M值,则属于M↑,我们标记为M_UP,否则属于M↓,我们标记为M_DOWN;
R ↓ F ↓ M ↓ R ↑ F ↑ M ↑之间任意组合为8组,映射到业务定义,如下:
R↑F↑M↑:重要价值客户
R↑F↑M↓:一般价值客户
R↑F↓M↑:重要发展客户
R↑F↓M↓:一般发展客户
R↓F↑M↑:重要保持客户
R↓F↑M↓:一般保持客户
R↓F↓M↑:重要挽留客户
R↓F↓M↓:一般挽留客户
然后基于这个组和平均值,用户可以进行更复杂的分析和仪表板,如会员分类、会员百分比、会员消费百分比。
2. 在仪表板中实现
得到最终的RFM值,关键是得到R,F、M值分别与平均值的比较结果,如下图所示:
所有指标均使用新加度量值来实现。
Recency:最近一次消费时间间隔
首先来看R。
这里以最新的业务日期为锚点,最新业务日期的度量值,我们暂且将其命名为Rday:
MAXX('Sales','Sales'[Order Date])
然后计算客户最后消费日期距离业务最新成交日期的天数,也即我们这里指的最后一次消费时间间隔R:
为了更方便,我们先得出业务最新成交日期,暂且将其命名为Rmax。然后再求间隔。
CALCULATE( MAXX( 'Sales', 'Sales'[Order Date] ), REMOVEFILTERS( 'Customer'[Name] ) )
DATEDIFF( 'Sales'[Rday], 'Sales'[Rmax], Day )
接下来计算平均间隔天数的度量值,这里将其命名为Ravg:
CALCULATE( AVERAGEX( SUMMARIZECOLUMNS( 'Customer'[Name], "rdayValues", datediff( 'Sales'[Rday], 'Sales'[Rmax], day ) ), [rdayValues] ), REMOVEFILTERS('Customer'[Name]) )
R 和 Ravg 都有了,如果最近消费间隔天数比平均天数短,则客户价值越高,我们标记为R_UP,反之则低,标记为R_DOWN。
这里我们用Rrank 来命名这个度量值。
IF( 'Sales'[R]<='Sales'[Ravg], "R_UP", "R_DOWN" )
这样,R的指标就计算出来了。
下面用同样的方式来计算F和M.
Frequency:消费频率
我们需要拿到每个客户的消费频次,平均消费频次,然后将这两个值进行比较,得出F_UP 或者F_DOWN。
客户的消费次数F
DISTINCTCOUNTX('Sales','Sales'[Order Number])
平均消费频次Favg
CALCULATE( AVERAGEX( SUMMARIZECOLUMNS( 'Customer'[Name], "fCount", calculate( DISTINCTCOUNTX('Sales','Sales'[Order Number]) ) ), [fCount] ), REMOVEFILTERS('Customer'[Name]) )
Frank
IF( 'Sales'[F]<='Sales'[Favg], "F_UP", "F_DOWN" )
Monetary:消费金额
我们需要拿到每个客户的消费金额,平均消费金额,然后将这两个值进行比较,得出M_UP 或者M_DOWN。
消费金额M
SUMX( 'Sales', 'Sales'[Quantity]*'Sales'[Net Price] )
平均消费金额Mavg
CALCULATE( AVERAGEX( SUMMARIZECOLUMNS( 'Customer'[Name], "mValues", calculate( 'Sales'[M] ) ), [mValues] ), REMOVEFILTERS('Customer'[Name]) )
Mrank
IF( 'Sales'[M]<='Sales'[Mavg], "M_UP", "M_DOWN" )
上面的这些度量值已把R、F、M三个指标计算出来,下面来看看如何展现根据这三个指标来对客户进行分类。
将三个指标组合成一个RFM值:
RFM 值 = [R 值]&[F 值]&[M 值]
计算每个客户所属的RFM类型:
SWITCH( true, AND( AND( 'Sales'[Rrank]="R_UP", 'Sales'[Frank]="F_UP" ), 'Sales'[Mrank]="M_UP" ), "重要价值客户", AND( AND( 'Sales'[Rrank]="R_UP", 'Sales'[Frank]="F_UP" ), 'Sales'[Mrank]="M_DOWN" ), "一般价值客户", AND( AND( 'Sales'[Rrank]="R_UP", 'Sales'[Frank]="F_DOWN" ), 'Sales'[Mrank]="M_UP" ), "重要发展客户", AND( AND( 'Sales'[Rrank]="R_UP", 'Sales'[Frank]="F_DOWN" ), 'Sales'[Mrank]="M_DOWN" ), "一般发展客户", AND( AND( 'Sales'[Rrank]="R_DOWN", 'Sales'[Frank]="F_UP" ), 'Sales'[Mrank]="M_UP" ), "重要保持客户", AND( AND( 'Sales'[Rrank]="R_DOWN", 'Sales'[Frank]="F_UP" ), 'Sales'[Mrank]="M_DOWN" ), "一般保持客户", AND( AND( 'Sales'[Rrank]="R_DOWN", 'Sales'[Frank]="F_DOWN" ), 'Sales'[Mrank]="M_UP" ),"重要挽留客户", AND( AND( 'Sales'[Rrank]="R_DOWN", 'Sales'[Frank]="F_DOWN" ), 'Sales'[Mrank]="M_DOWN" ),"一般挽留客户", "其他" )
至此,RFM模型所需要的度量值已写完,利用这些度量值就可以进行RFM分析了。
另外,您也可以制作一张如下类似下图这样的综合数据看板,来辅助分析。
3. RFM 结果作为维度分析
以上示例使用度量值来实现的整个过程,我们也可以通过计算列来实现各个步骤,最终得到的结果也是一个计算列。然后就可以使用结果作为维度和统计数据。
以下是一个综合示例,您可将示例包导入系统中查看使用:wyn-export-20220613104537.zip
- 无标签