背景
**留存分析(群组分析,cohort analysis)**是以一段时间窗内的研究对象,观察其在后续若干个时间窗内有指定行为的比例变化趋势。
留存率是一个与DAU强相关的核心指标,是反映产品生命力的重要风向标,如果留存率高、衰减速度慢,那就说明产品生命力强劲,反之则衰弱。近来在用户增长领域出现一种论调:AARRR已过时,RARRA才是更好的增长模型。也强调了留存率的重要性——如果用户都不留下来,就不会给你机会做运营。
与此同时,留存分析也是一种非常常见的数据分析模型,基本上各个业务线都会研究其特定的用户留存(当然留存分析模型不一定仅限于用户,比如我以前在某自行车公司就研究过自行车的留存,虽然我现在已经忘了当时是在研究啥……),比如:
- 做了一个运营活动,想看参加活动的用户留存
- 做了一个AB试验,想对比实验组和对照组的用户留存
- 产品做了一次改动,想看影响范围下的用户留存
……
如果来一个这样的需求,就跑一次数,那就显得有点不够优雅。正是因为它重要,又常见,且模型本质和计算逻辑比较通用,所以可以把数据处理和计算的部分抽象在数据平台上,以便用户能够快速高效地进行留存分析。
本文的目标在于连通底层明细数据,并支持用户在前端上组合筛选条件来自定义群组,然后自动计算群组的日、周、月留存,并在此基础上拟合一个留存率衰减模型,以此来预测群组在任意一天的留存值。整体思路如下:
数据分析方法
留存率计算方法
在数据仓库日常生产调度中,有一种计算留存率的方法,即拿1个分区的基准明细数据不断左关联后续N个时间窗分区的明细数据,以计算重合数,进而计算留存率——这是一种稳妥的数据生产调度方法,却有失灵活。
本文计算的方法如下:
基准表与行为表按id关联,日期不作限制,即同id按日期作笛卡尔积,得到的中间表如下示意——
基准日 | 用户id | 行为日 | 日期差 |
---|---|---|---|
2019-09-01 | user1 | 2019-09-02 | 1 |
2019-09-01 | user1 | 2019-09-03 | 2 |
2019-09-01 | user1 | 2019-09-04 | 3 |
2019-09-01 | user2 | 2019-09-02 | 2 |
2019-09-01 | user3 | 2019-09-05 | 4 |
先去重,然后按基准朱和日期差分组统计行数,得到的中间表如下示意——
基准日 | 日期差 | 用户数 |
---|---|---|
2019-09-01 | 0 | 1000 |
2019-09-01 | 1 | 500 |
2019-09-01 | 2 | 300 |
2019-09-02 | 0 | 900 |
2019 |