PowerBI 超级粘性用户计算 - 原理与实现

什么是超级粘性用户?

  • 每天都用(买)产品或服务的人数
  • 每周都用(买)产品或服务的人数
  • 每月都用(买)产品或服务的人数

对于某人是不是超级粘性用户,应该怎么判断呢?

例如:

王志远,在6个月内来威尔士健身10次,请问,王志远是超级粘性用户吗?

来分析一下,假设,王志远是心血来潮,连续10天来健身了10次,然后后面不来了,这也是满足在6个月内来健身10次的。

这里定义的超级粘性用户,要满足两个条件:

  • 频率,如: 6个月内来健身6次
  • 分布,如: 每个月至少来一次

因此,超级粘性用户,不仅仅是一种高频的特征,更是一种习惯

当你养成了某个习惯,那将是真正的超级粘性。

根据超级粘性用户的特点,还可以成为连续留存用户。例如:在连续的6个月内,都有访问的用户数。

超级粘性用户数的计算原理

先来看一个示意图:

很快,可以想到一个原理:

假设:

最近一周来的人员集合是 X1,

最近二周来的人员集合是 X2,

那么,两周都来的人员集合就是 X1 与 X2 的交集。

但问题很快就来了,如果是 N 期呢?

从计算上看,需要做 X1,X2,…,Xn的交集。

这导致在 DAX 无法编写出通用的公式。

另寻他路

根据对计算原理的分析,我们可以确定:

如果要满足通用性,集合算法要求我们对 N 个集合做交集运算,这种是无法在 DAX 中做出通用表达的。这就要求我们必须想出其他的方法。答案显然是可以的。

现在我们考虑另外的方法:

以该图为例:

可以这样设计:

对于每一个人,都针对当前所选日期区间,分别看过去的 N 个周期是否有访问,如果有,则通过;那么,若某人通过检查的次数恰好是 N 则表示他在最近的 N 个周期的每个周期都来过,也就说明他是我们要找的用户之一。

按照这个思路,DAX 公式如下:

代码语言:javascript
复制
UsersViewInContinuPeriods =

VAR _period_number = 5 // 要计算的周期数
VAR _period_list = GENERATESERIES( 0 , _period_number - 1 ) // 周期生成

VAR _user_access_table =
ADDCOLUMNS( User ,
"CheckPassTime" ,
SUMX( _period_list ,
VAR _x = [Value] // 周期x
VAR _access_times_for_x =
CALCULATE( COUNTROWS( UserAction ) , DATESINPERIOD( 'Calendar'[Date] , LASTDATE( DATEADD( 'Calendar'[Date] , - _x , MONTH ) ) , -1 , MONTH ) )
RETURN ( _access_times_for_x > 0 ) * 1
)
)
RETURN COUNTROWS( FILTER( _user_access_table , [CheckPassTime] = _period_number ) )

完毕。

业务应用

通过超级粘度用户的计算,我们可以知道一个应用到底多么深地让用户产生了习惯级的依赖,例如:

在这个案例中反应了:连续 6 个月,每个月都至少来 2 次的粘度用户趋势。

可以看到,用户粘度,尤其是超级粘度,可以帮助我们发现用户特点中的一个重要密码规律。

这个数字:5% 或是 X,就是粘度系数。

如果一家企业通过高手的运营,形成持续走高的用户粘度系数,则可以说明运营策略的有效性;反之,如果一个依靠用户粘度的系统随着时间的发展,用户的粘度在降低,那么可能有些问题需要调整了。

总结

如果你想要计算一下您自己业务的用户超级粘度,直接套用上述的 DAX 公式即可。

另外,不难发现这个计算中可能隐藏着性能问题:如果我们要对 50万 用户针对 1000万 交易记录来计算用户粘度,按照上述的公式会存在性能问题。那么,问题来了,可以优化吗?最快可以多快呢?

再另外,可以针对连续N年,季,月,周,日动态设置周期和周期数再进行计算吗?

再再另外,是否可以再加入这样的增强:连续 X 周期,且每个周期至少达到 Y 次交易,且每个周期的交易额均大于 Z,且整个 X 周期的总交易额大于 K 的用户数有多少?这是:最强VIP粘度用户数的计算。请大家自行脑补。我们会在会员专享区给出完美视频教学及解答。

最后,DAX Pro 已经发布,我们即将解锁收费订阅的业务分析包,上述计算将被通用化并纳入该内容,您不需要理解 DAX,您只需要理解你的业务即可。