[]
        
(Showing Draft Content)

RFM模型与客户价值分析

需求描述

对于大多数零售和销售行业来说,除了销售数据分析之外,还有一点值得关注的就是客户价值。

RFM模型用于分析客户价值,它包括三个关键指标:

  • R(Recency),最近一次消费时间间隔

  • F(Frequency),消费频率

  • M(Monetary),消费金额

一般来说,最近一次消费的间隔越短、消费频率和消费金额越高,客户价值越大。

实际上在分析所有客户数据时,如果为每个客户计算R、F、M值,不能清晰直观地反映规律,所以我们按照R、F、M值对客户进行分组。

  1. 首先,选择每个客户并计算上述三个指标的值。

  2. 其次,从以上结果来看三个指标的平均值;

  3. 第三,对每个客户进行分组。

    如果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↓:一般挽留客户

然后基于这个组和平均值,用户可以进行更复杂的分析和仪表板,如会员分类、会员百分比、会员消费百分比。

在仪表板中实现

得到最终的 RFM 值,关键是得到 R,F、M 值分别与平均值的比较结果,如下图所示:

image2021-12-16_16-28-40.png

所有指标均使用新加度量值来实现。

Recency:最近一次消费时间间隔

首先来看 R。

这里以最新的业务日期为锚点,最新业务日期的度量值,我们暂且将其命名为 Rday:

image2021-12-16_17-34-12.png

MAXX('Sales','Sales'[Order Date])

然后计算客户最后消费日期距离业务最新成交日期的天数,也即我们这里指的最后一次消费时间间隔R:

为了更方便,我们先得出业务最新成交日期,暂且将其命名为Rmax。然后再求间隔。

image2021-12-16_17-38-34.png

CALCULATE(
  MAXX(
    'Sales',
    'Sales'[Order Date]
    ),
  REMOVEFILTERS(
    'Customer'[Name]
  )
 )

image2021-12-16_17-38-57.png

DATEDIFF(
  'Sales'[Rday],
  'Sales'[Rmax],
  Day
  )

接下来计算平均间隔天数的度量值,这里将其命名为 Ravg:

image2021-12-16_17-39-25.png

CALCULATE(
  AVERAGEX(
    SUMMARIZECOLUMNS(
      'Customer'[Name],
      "rdayValues",
      datediff(
        'Sales'[Rday],
        'Sales'[Rmax],
        day
        )
      ),
    [rdayValues]
    ),
  REMOVEFILTERS('Customer'[Name])
  )

R 和 Ravg 都有了,如果最近消费间隔天数比平均天数短,则客户价值越高,我们标记为R_UP,反之则低,标记为R_DOWN。

这里我们用Rrank 来命名这个度量值。

image2021-12-16_17-51-23.png

IF(
  'Sales'[R]<='Sales'[Ravg],
  "R_UP",
  "R_DOWN"
  )

这样,R 的指标就计算出来了。

image2021-12-16_17-53-22.png


下面用同样的方式来计算 F 和 M .

Frequency:消费频率

我们需要拿到每个客户的消费频次,平均消费频次,然后将这两个值进行比较,得出 F_UP 或者 F_DOWN。

客户的消费次数 F

image2021-12-17_9-35-25.png

DISTINCTCOUNTX('Sales','Sales'[Order Number])

平均消费频次 Favg

image2021-12-17_9-36-41.png

CALCULATE( 
          AVERAGEX(
              SUMMARIZECOLUMNS(
                'Customer'[Name],
                "fCount",
                calculate(
                	DISTINCTCOUNTX('Sales','Sales'[Order Number])
                )
              ),
            [fCount]
            ),
          REMOVEFILTERS('Customer'[Name])
          )

Frank

image2021-12-17_9-37-34.png

IF(
  'Sales'[F]<='Sales'[Favg],
  "F_UP",
  "F_DOWN"
  )

Monetary:消费金额

我们需要拿到每个客户的消费金额,平均消费金额,然后将这两个值进行比较,得出 M_UP 或者 M_DOWN。

消费金额 M

image2021-12-17_9-54-0.png

SUMX(
  'Sales',
  'Sales'[Quantity]*'Sales'[Net Price]
  )

平均消费金额 Mavg

image2021-12-17_9-56-30.png

CALCULATE(
  AVERAGEX( 
           SUMMARIZECOLUMNS( 
                            'Customer'[Name],
                            "mValues",
                            calculate(
                            	'Sales'[M]
                              )
                            ),
           [mValues]
           ),
  REMOVEFILTERS('Customer'[Name])
  )

Mrank

image2021-12-17_9-57-30.png

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"
  ),"一般挽留客户",
  "其他"
)

image2021-12-17_10-3-2.png


至此,RFM 模型所需要的度量值已写完,利用这些度量值就可以进行 RFM 分析了。

image2021-12-17_10-4-38.png


另外,您也可以制作一张如下类似下图这样的综合数据看板,来辅助分析。

image2022-1-4_16-35-54.png

RFM 结果作为维度分析

以上示例使用度量值来实现的整个过程,我们也可以通过计算列来实现各个步骤,最终得到的结果也是一个计算列。然后就可以使用结果作为维度和统计数据。

以下是一个综合示例,您可将示例包导入系统中查看使用:wyn-export-20220613104537.zip

image2022-6-13_17-39-37.png