利用Power BI制作RFM客户分析模型

RFM客户分析模型

RMF模型是一种常见的客户分析模型。RFM是三个英文单词的简称,分别是最近一次消费 (Recency), 消费频率 (Frequency)以及消费金额(Monetary)。RMF模型使用这三个元素来对客户的消费行为进行衡量,用于评定客户对企业的价值。

RFM模型三要素

• 最近一次消费
最近一次消费 (Recency)指的是上一次客户购买产品的时间,或上一次使用应用的时间。最近一次消费时间距离当前时间越近,说明客户对企业提供的产品或服务的印象越深刻,能再次购买企业产品或服务的可能性也相对越高。
• 消费频率
消费频率(Frequency)指的是客户在某一时间段内购买产品或服务的次数。它可以反映出客户与企业品牌之间的亲密度关系。
• 消费金额
消费金额(Monetary)指的是客户在一段时间内累计购买企业产品或服务所花费的总金额。根据“二八定律”,公司80%的收入来自于20%的顾客,消费金额可以反映出某些大客户对企业的重要性。

RFM客户分析模型实际上就是根据这三个要素对客户表现情况进行评分,之后根据得分情况对客户的价值进行划分,使得企业对其客户群情况有一个综合了解,以便推针对不同客户群推出具有不同特点的营销推广和产品服务,从而获得更高的利润。

设定要素评级标准

如果企业打算采用RFM模型对客户进行分析,首先需要明确每种要素评定等级,以便以此为依据对每个客户进行评分。在Power BI中可以输入下图所示的评分表单,用来对客户进行评级。

在这里插入图片描述

计算最近一次消费时间

获取最近一次消费时间,实际上就是对以客户为单位,按照消费时间进行排序,然后返回消费时间最近的数据即可。对于下图所示的这种类型的销售记录表单,可以通过创建一个计算列,使用MAXX函数,FILTER函数,以及EARLIER函数来获取每个客户最近一次消费时间。
在这里插入图片描述

LastOrderDate =
MAXX (
    FILTER (
        'Sales SalesOrderHeader',
        'Sales SalesOrderHeader'[CustomerID]
            = EARLIER ( 'Sales SalesOrderHeader'[CustomerID] )
    ),
    'Sales SalesOrderHeader'[OrderDate]
)

在这个公式里,FILTER函数的目的是限制MAXX函数查找OrderDate最大日期的作用范围,也就是给MAXX函数规定运行的上下文。而FITLER函数内,则通过调用EARLIER函数,将Sales SalesOrderHeader表单内CustomerID相同的数据筛选出来生成一个新的表单,作为FILTER函数的返回结果。

计算消费频率分组

如果要计算消费频率,需要先设定一个统计周期,之后再计算在这个周期内客户总共消费的次数即可。对于Frequency的计算,动态方法是创建一个度量值并可以结合之前创建的F-Matrix评分表单来对客户消费频率进行分类统计。

在这里插入图片描述

Frequency =
CALCULATE (
    DISTINCTCOUNT ( 'Sales SalesOrderHeader'[CustomerID] ),
    FILTER (
        ADDCOLUMNS (
            VALUES ( 'Sales SalesOrderHeader'[CustomerID] ),
            "Count", 
            CALCULATE (
                COUNTROWS ( 'Sales SalesOrderHeader' ),
                CALCULATETABLE ( 
                	VALUES ( 'Sales SalesOrderHeader'[CustomerID] ) 
                ),
                ALLSELECTED ()
            )
        ),
        COUNTROWS (
            FILTER (
                'F-Matrix',
                [Count] >= 'F-Matrix'[Lower]
                    && [Count] <= 'F-Matrix'[Upper]
            )
        ) > 0
    )
)

在计算Frequency的公式中,CALCULATE函数内的DISTINCTCOUNT函数是以CustomerID作为表示,来获取的是用户的个数,而DISTINCTCOUNT的运算范围则由后面的FILTER函数结果所决定。

在FILTER函数内

ADDCOLUMNS函数的定义如下,其结果会返回一个新表单,该表单是在已有表单基础上增加了新列,该列的值由ADDCOLUMNS内的表达式决定。

ADDCOLUMNS ( <Table>, <Name>, <Expression> [, <Name>, <Expression> [,] ] )
  • Table参数由VALUES函数来定义,VALUES函数的结果是会返回一个只包含CustomerID列的新表单,并且CustomerID列下没有重复值。
  • Name参数定义了新增加的列的列名,此处为”Count“。这样,到目前为止,ADDCOLUMNS函数获得的这个新表单大概整这个样子:
CustomerIDCount
123
456
789
  • Expression参数是为了获取Count列下面的值,其内使用了一个CALCULATE函数,它可以将行上下文转换成筛选上下文,也就是说把CustomerID值作为筛选条件,给后面的表达式来使用。
    • 而CALCULATE函数内又调用了COUNTROWS函数来计算Sales SalesOrderHeader表单的行数,而计算的上下文则由后面的CALCULATETABLE函数和ALLSELECTED函数共同决定。
      • 先看ALLSELECTED函数,当该函数内没有参数,即表达式为ALLSELECTED()时,它的意义可以理解为只保留外围的行列筛选器,并以此为作为查询上下文进行返回。当前外围的筛选条件是由上一层CALCULATE韩硕传进来的CustomerID列,所以ALLSELECTED函数会保留每个CustomerID值,然后将其作为筛选条件之一给COUNTROWS函数来使用。
        — 对于CALCULATETABLE函数,它类似于 RELATEDTABLE 函数,其返回结果就是一个只包含CustomerID列的新表单,并且CustomerID列下没有重复值。
        – 这样,COUNTROWS函数就可以获得每个CustomerID在Sales SalesOrderHeader表中有多少行。这样上面ADDCOLUMNS函数返回的表单就可以变成如下形式:
CustomerIDCount
1232
4565
7897

而FILTER函数内的第二部分COUNTROWS函数的运算上下文由其内的FILTER函数决定,在这个FILTER内,通过对ADDCOLUMNS函数内获得的用户消费频率统计数[Count]与’F-Matrix’表定义的频率范围进行比较,可以获知,如果访问频率在所指定的筛选范围内,则FILTER函数返回的表单不为空,从而COUNTROWS函数的结果也就>0,这样,外面FILTER函数的返回结果消费频率在测量范围内的CustomerID所组成的表单。最后,通过DISTINCTCOUNT函数通过对这个表单进行统计,即可获的每个消费频率分组上的客户数。

计算消费频率分组

消费总额的分组与消费频率的分组方式思路完全一致。

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值