新增、留存、日活是APP产品的通用指标。如果某一天,被问到以下的问题,你会怎样分析:
- 按照现有的趋势,下季度我们的日活能达到多少?
- 下季度的日活目标是xxxx万,为了达到它,我们的新增用户计划是每天xxxx万,你觉得这个计划合理吗?
下面会介绍,我们如何通过新增和留存,对未来的日活进行估算。
日活是『堆积』起来的
堆积过程
我们都知道:
- 任意一天的活跃用户,是由历史每日的新增用户堆积而成的。
- 新增用户从获取的第2天起,活跃的数量逐渐衰减;越早的新增用户,仍然活跃的比例越小。
下图:以模拟数据表示日活的堆积过程,横轴为日期序列,纵轴为活跃用户数。选取任意一天,如图中红色垂线;垂线被分割的每一段,代表历史某日的新增用户到达当天的活跃数量,越靠近横轴的部分表示越早期的新增,最上面的一段表示当日新增:
![ef2f0c7dcbe24860f6d6c40a410587be.png](https://i-blog.csdnimg.cn/blog_migrate/a34d418f7e0c0227c6fef1c0b98fba85.jpeg)
堆积表达式
为避免啰嗦,约定符号如下:
- 假设我们处在产品历史的第
![7abae67d064a3f79617a460b3a7a80d4.png](https://i-blog.csdnimg.cn/blog_migrate/6c0d4384be4dc56bfd9103689ca2f379.jpeg)
- 天,需要估算历史第
![095c9dc03859f4b4b3f55e66cce4577e.png](https://i-blog.csdnimg.cn/blog_migrate/edc56aa5ca1b39c9e8b47d62a2a8868e.jpeg)
- 天的日活
![6e2766cc724ae3d6ac4c42c77fffe776.png](https://i-blog.csdnimg.cn/blog_migrate/5efd92a068e2d14be50f914a06bac744.jpeg)
- 表示第
![b055e41dbba60d341710c0bb9ce0e941.png](https://i-blog.csdnimg.cn/blog_migrate/69f5e39b797611bd511b121a87f0d43b.jpeg)
- 天的日活
![00d343c40f0765d4ae5e8868c8b61f6b.png](https://i-blog.csdnimg.cn/blog_migrate/9ec7d3d5b9a8f5bda8f3b1c35deef088.jpeg)
- 表示第
![b055e41dbba60d341710c0bb9ce0e941.png](https://i-blog.csdnimg.cn/blog_migrate/69f5e39b797611bd511b121a87f0d43b.jpeg)
- 天的新增
![bf56b9007a83ac3a44f13a9fc7d6f85e.png](https://i-blog.csdnimg.cn/blog_migrate/b7faa069f7be35ae10505afcdea75f05.jpeg)
- 表示第
![b055e41dbba60d341710c0bb9ce0e941.png](https://i-blog.csdnimg.cn/blog_migrate/69f5e39b797611bd511b121a87f0d43b.jpeg)
- 天的新增在获取第
![0fd2fb7deff4de471d3db51c3b5b1a63.png](https://i-blog.csdnimg.cn/blog_migrate/4bc156ee67dc46319678b2ac961e34a1.jpeg)
- 天的留存率;对任意的
![b055e41dbba60d341710c0bb9ce0e941.png](https://i-blog.csdnimg.cn/blog_migrate/69f5e39b797611bd511b121a87f0d43b.jpeg)
- ,获取当日的留存率为100%,即
![f4ae630a7c137e97b7197b3e2ff72f94.png](https://i-blog.csdnimg.cn/blog_migrate/9c5ec202f6230304ef1305e7337a9a02.jpeg)
于是,估算的目标表示如下:
![3c83495629f75ff204f9251c54eb5802.png](https://i-blog.csdnimg.cn/blog_migrate/104763dbab06ab0dd4b15e6fa47ad6fb.jpeg)
观察以上等式右侧,我们需要以下输入数据:
![00d343c40f0765d4ae5e8868c8b61f6b.png](https://i-blog.csdnimg.cn/blog_migrate/9ec7d3d5b9a8f5bda8f3b1c35deef088.jpeg)
- ,每天新增用户数。对于
![0eb0d4b3b21b37101aaa030dedd7b21e.png](https://i-blog.csdnimg.cn/blog_migrate/2792bdfcda3d154e5814082469c43a1e.jpeg)
- ,对应历史每日的新增用户数,是已知项;对于
![d18336e6f39659b4239cbe37632397e1.png](https://i-blog.csdnimg.cn/blog_migrate/3adf326ef98954ee8f3726928baf3cbd.jpeg)
- ,对应未来新增用户的计划,是直接输入项。因此这一项不需要额外计算。
![78e33c0b6367b271a87ba6ce1c328b84.png](https://i-blog.csdnimg.cn/blog_migrate/16bd86006fd90ccd33e5838493f2248b.jpeg)
- ,每天的新增用户,到达第
![095c9dc03859f4b4b3f55e66cce4577e.png](https://i-blog.csdnimg.cn/blog_migrate/edc56aa5ca1b39c9e8b47d62a2a8868e.jpeg)
- 天时的留存率,是未知项。
于是,我们只需要搞定
![bf56b9007a83ac3a44f13a9fc7d6f85e.png](https://i-blog.csdnimg.cn/blog_migrate/b7faa069f7be35ae10505afcdea75f05.jpeg)
,也就是留存率的衰减规律。
糟糕,历史数据一直在变
看起来,似乎大功告成了,留存率
![bf56b9007a83ac3a44f13a9fc7d6f85e.png](https://i-blog.csdnimg.cn/blog_migrate/b7faa069f7be35ae10505afcdea75f05.jpeg)
从DB里拉出来不就行了吗?但是关于留存率还有两个问题:
- 历史的留存率有变化:未来的日活与历史每天有关,英语流利说已有3年的历史,期间的各种变化,不能用平均值这种粗糙的方式处理
- 需要更远期的留存率:虽然有了3年的数据,还需要更远期的留存率数据;例如:为了估算半年后的日活,就需要新增用户3年半以后的留存率
下面来解决这两个问题。
解决历史留存率的变化
变化的原因
首先分析为什么变化,以及初步的解决思路:
- 短期:由渠道拓展、运营活动引起的留存率变化。对于这种情况,是可以用平均值处理的
- 长期:由产品迭代、用户习惯养成引起的留存率变化。对于这种情况,直接的方法是,对历史每天的新增用户维护留存率序列
![ef595f250c8fe647c60a764509804767.png](https://i-blog.csdnimg.cn/blog_migrate/ee6e77a80661031be9ea4ed23c18f179.jpeg)
- ,例如第1天新增用户次日、3日……N日留存,第2天……第N-1天新增用户的次日留存。这种方案的问题是:
- 计算复杂:每次估算都要追溯整个历史
- 早期的留存率并不能对后期有绝对影响:用户在经历多个版本的产品升级后,体验发生变化,即使对每天的新增用户维护留存率序列,未来的留存率衰减速度不一定完全延续历史趋势
变化的解决方案
以当前日
![7abae67d064a3f79617a460b3a7a80d4.png](https://i-blog.csdnimg.cn/blog_migrate/6c0d4384be4dc56bfd9103689ca2f379.jpeg)
作为划分,估算表达式右侧拆分成2项:
![35c8994073b7820d4f2f06bb071123d7.png](https://i-blog.csdnimg.cn/blog_migrate/8e5860111c0a64d44a8ea4d3dd36c814.jpeg)
考虑等式右侧第一项:其中
![4474489a9df1e2ecec95c0ddade6bf15.png](https://i-blog.csdnimg.cn/blog_migrate/c69e0622b16bf759394ba701dc3cc1e4.jpeg)
为历史第
![b055e41dbba60d341710c0bb9ce0e941.png](https://i-blog.csdnimg.cn/blog_migrate/69f5e39b797611bd511b121a87f0d43b.jpeg)
天的新增在今天的留存率,
![49c542af0b397778f4959b65c591347b.png](https://i-blog.csdnimg.cn/blog_migrate/09aca3e828f9df1da2592625655a03d2.jpeg)
就是在今天的留存人数。其中每日留存率依赖历史第
![b055e41dbba60d341710c0bb9ce0e941.png](https://i-blog.csdnimg.cn/blog_migrate/69f5e39b797611bd511b121a87f0d43b.jpeg)
日的情况;而
![6916cb49f755f52f528c270aa046638d.png](https://i-blog.csdnimg.cn/blog_migrate/25df20236b746f952b0485e29f578212.jpeg)
是从当前日
![7abae67d064a3f79617a460b3a7a80d4.png](https://i-blog.csdnimg.cn/blog_migrate/6c0d4384be4dc56bfd9103689ca2f379.jpeg)
到第
![095c9dc03859f4b4b3f55e66cce4577e.png](https://i-blog.csdnimg.cn/blog_migrate/edc56aa5ca1b39c9e8b47d62a2a8868e.jpeg)
日的留存率衰减比例,从业务逻辑上,仅与当前和以后版本的产品使用有关,受历史当时的影响较小。
因此我们放弃维护不同
![b055e41dbba60d341710c0bb9ce0e941.png](https://i-blog.csdnimg.cn/blog_migrate/69f5e39b797611bd511b121a87f0d43b.jpeg)
应的
![bf56b9007a83ac3a44f13a9fc7d6f85e.png](https://i-blog.csdnimg.cn/blog_migrate/b7faa069f7be35ae10505afcdea75f05.jpeg)
,定义
![ff26ff54c646dc513c15983887716ad6.png](https://i-blog.csdnimg.cn/blog_migrate/edaea1599256203b99b9e119d91c447d.jpeg)
为第
![b055e41dbba60d341710c0bb9ce0e941.png](https://i-blog.csdnimg.cn/blog_migrate/69f5e39b797611bd511b121a87f0d43b.jpeg)
日的日活中,历史第
![0fd2fb7deff4de471d3db51c3b5b1a63.png](https://i-blog.csdnimg.cn/blog_migrate/4bc156ee67dc46319678b2ac961e34a1.jpeg)
日新增贡献的人数,于是:
![65114f9c2810b1b327f0d6412319112d.png](https://i-blog.csdnimg.cn/blog_migrate/09322c808bf2900e9d30851f2441d9fa.jpeg)
表达式改写为:
![a4ba491f960e898d13723403aef08443.png](https://i-blog.csdnimg.cn/blog_migrate/139decfa4fcbed846025b4b1fec07714.jpeg)
其中
![e392708bfe276d0f1734c73ec6e30149.png](https://i-blog.csdnimg.cn/blog_migrate/62d3647567e5eec6718e9c857be9bce7.jpeg)
是对当前日
![7abae67d064a3f79617a460b3a7a80d4.png](https://i-blog.csdnimg.cn/blog_migrate/6c0d4384be4dc56bfd9103689ca2f379.jpeg)
的日活分解,可以直接计算作为输入。
也就是说,对任意
![7be519ec764aab088e7aa9e255bb67b7.png](https://i-blog.csdnimg.cn/blog_migrate/e2f0dd298addaf686c86ba5a1e3b6c3d.jpeg)
,不再看当时获得了多少新增、经过了怎样额衰减;而只看目前还『剩下』多少活跃用户。而对『剩下』的用户,从今往后的衰减规律,取决于当前和以后的产品形态,受历史版本影响较小。
改写后的表达式中,所有与
![bf56b9007a83ac3a44f13a9fc7d6f85e.png](https://i-blog.csdnimg.cn/blog_migrate/b7faa069f7be35ae10505afcdea75f05.jpeg)
相关的项,受历史影响较小,因此可以进一步简化:忽略
![b055e41dbba60d341710c0bb9ce0e941.png](https://i-blog.csdnimg.cn/blog_migrate/69f5e39b797611bd511b121a87f0d43b.jpeg)
,使用近期 (例如1年) 的留存率概括值作为输入
![9be6ab4b371f9e1c12161f0b6f4d9deb.png](https://i-blog.csdnimg.cn/blog_migrate/d00620b582a97abf05c2117170ef1d6b.jpeg)
![c8578be123542fa19e57a2f7b59dcb8b.png](https://i-blog.csdnimg.cn/blog_migrate/df1d5aa762f1a1a29bf68599afc7b545.jpeg)
解决更远期的留存率
就差搞定
![493cfb9f6b673d0d8146f19d46181743.png](https://i-blog.csdnimg.cn/blog_migrate/e1aed6fe8d52ac70e2fcc9a9c58188aa.jpeg)
了!我们采用了曲线拟合,获得更远期的留存,顺便对近期留存做一个概括。
通常情况下,拟合并不是严谨的方法,从统计模型的角度,属于偏差最大、泛化能力较弱的一种。此处使用拟合方法,隐含了对留存率衰减趋势的经验假设。
函数那么多,应该用哪一种?为此,用相邻日的留存率相除 (前 / 后),定义为留存率衰减比例,对近期样本作图如下。可见:在大约某天后,留存率的衰减比例接近恒定,可以理解为用户进入『稳定期』;此后每一天的留存率,等于前一天留存率乘以一个相对稳定的系数,由此想到了指数函数。
![5d24f5285bf837dde4e947fcdec17e5f.png](https://i-blog.csdnimg.cn/blog_migrate/ae695f3a26f18aafd71310f1bd38b883.jpeg)
然而指数函数对衰减稳定之前的阶段并不适用,可以将指数项改成天数
的幂函数:
![21c0cf81276dd212a3abe293f111c441.png](https://i-blog.csdnimg.cn/blog_migrate/4209fad4773e528d70ba7e324c95883f.jpeg)
对衰减稳定前、稳定后的样本,用以上函数分段拟合。将等式两边做对数变换,成为线性函数
![9201612c91c67eb171ec69d1ae1077c1.png](https://i-blog.csdnimg.cn/blog_migrate/7da3ddeb18ef51001ee3fe1397c54e51.jpeg)
求解参数的方法:参数
![8ee5548f5abd8039dfce667cf03301ff.png](https://i-blog.csdnimg.cn/blog_migrate/a70895518659ed3b9ffb614aeede1173.jpeg)
采用最小二乘法计算;并以最大化 Adjusted R-squared 为目标,对参数
![ea48c8fc4f7114c7c3a3097285d71c7d.png](https://i-blog.csdnimg.cn/blog_migrate/95af10e9fcc80ce2026bd63117cdcacc.jpeg)
进行 Grid Search。分段拟合的结果
![b954dff0526f1ebf27128e33a589d05b.png](https://i-blog.csdnimg.cn/blog_migrate/e9c72a9e9c5788a3b0f23baa491a2f18.jpeg)
是一个分段函数,曲线如下,其中灰色半透明点表示留存率样本,红蓝曲线为分段拟合结果:
![06ae5e962551e94ed3e403bd645cfb1f.png](https://i-blog.csdnimg.cn/blog_migrate/22b9de4159a79efd60c9e692afde94d0.jpeg)
至此,解决了所有的输入问题。
总结
最终,模型的输出为
![95116f67940d8ce67237f5ed36365b13.png](https://i-blog.csdnimg.cn/blog_migrate/a0a9b522307f8f2bea14324ca0751877.jpeg)
,实际输入为:
![749c8e4c7dcddaead2cb144b3faec79b.png](https://i-blog.csdnimg.cn/blog_migrate/861a2a452aff49e9f34148e3042436e6.jpeg)
- ,当前日
![7abae67d064a3f79617a460b3a7a80d4.png](https://i-blog.csdnimg.cn/blog_migrate/6c0d4384be4dc56bfd9103689ca2f379.jpeg)
- 的日活中,属于历史第
![b055e41dbba60d341710c0bb9ce0e941.png](https://i-blog.csdnimg.cn/blog_migrate/69f5e39b797611bd511b121a87f0d43b.jpeg)
- 天新增用户的数量;为了更加稳定,可以用最近几日的均值
![f722d22980baf6da679d35feb23e634c.png](https://i-blog.csdnimg.cn/blog_migrate/20e0959c7d6230e62417db424dccc783.jpeg)
- ,明日起,直到第
![095c9dc03859f4b4b3f55e66cce4577e.png](https://i-blog.csdnimg.cn/blog_migrate/edc56aa5ca1b39c9e8b47d62a2a8868e.jpeg)
- 日的每日的计划新增用户数,可以是一个变化的序列
![5d644bec292c7cb33ebdd6071ca33870.png](https://i-blog.csdnimg.cn/blog_migrate/cc6210a1f7c9816178362cff518aa2cf.jpeg)
- ,近一段时间 (例如1年) 的每日留存率序列样本
在建立估算模型之前,业务部门更倾向使用一些经验估算方法,例如:利用日活 / 新增比例。经验方法的优点是简单;缺点是:依赖的假设条件可能发生变化,而由于方法过于简单,我们并不能解释这些变化,甚至不知道变化的幅度可能有多大。例如,我们并不知道日活 / 新增以后会变成什么样,但我们对于留存率是有预期的。
相比之下,模型的优点是:使得每一项输入尽可能在控制范围内,并对历史的变动不那么敏感。