如何建立数学模型估算日活用户数? - 图1
新增、留存、日活是APP产品的通用指标。如果某一天,被问到以下的问题,你会怎样分析:

  • 按照现有的趋势,下季度我们的日活能达到多少?
  • 下季度的日活目标是xxxx万,为了达到它,我们的新增用户计划是每天xxxx万,你觉得这个计划合理吗?

下面会介绍,我们如何通过新增和留存,对未来的日活进行估算。

日活是『堆积』起来的

堆积过程

我们都知道:

  • 任意一天的活跃用户,是由历史每日的新增用户堆积而成的。
  • 新增用户从获取的第2天起,活跃的数量逐渐衰减;越早的新增用户,仍然活跃的比例越小。

下图:以模拟数据表示日活的堆积过程,横轴为日期序列,纵轴为活跃用户数。选取任意一天,如图中红色垂线;垂线被分割的每一段,代表历史某日的新增用户到达当天的活跃数量,越靠近横轴的部分表示越早期的新增,最上面的一段表示当日新增:
如何建立数学模型估算日活用户数? - 图2

堆积表达式

为避免啰嗦,约定符号如下:

  • 假设我们处在产品历史的第 如何建立数学模型估算日活用户数? - 图3 天,需要估算历史第 如何建立数学模型估算日活用户数? - 图4 天的日活
  • 如何建立数学模型估算日活用户数? - 图5 表示第 如何建立数学模型估算日活用户数? - 图6 天的日活
  • 如何建立数学模型估算日活用户数? - 图7 表示第 如何建立数学模型估算日活用户数? - 图8 天的新增
  • 如何建立数学模型估算日活用户数? - 图9 表示第 如何建立数学模型估算日活用户数? - 图10 天的新增在获取第 如何建立数学模型估算日活用户数? - 图11 天的留存率;对任意的 如何建立数学模型估算日活用户数? - 图12 ,获取当日的留存率为100%,即 如何建立数学模型估算日活用户数? - 图13

于是,估算的目标表示如下:
如何建立数学模型估算日活用户数? - 图14
观察以上等式右侧,我们需要以下输入数据:

  1. 如何建立数学模型估算日活用户数? - 图15,每天新增用户数。对于 如何建立数学模型估算日活用户数? - 图16 ,对应历史每日的新增用户数,是已知项;对于 如何建立数学模型估算日活用户数? - 图17 ,对应未来新增用户的计划,是直接输入项。因此这一项不需要额外计算。
  2. 如何建立数学模型估算日活用户数? - 图18,每天的新增用户,到达第 如何建立数学模型估算日活用户数? - 图19 天时的留存率,是未知项。

于是,我们只需要搞定 如何建立数学模型估算日活用户数? - 图20 ,也就是留存率的衰减规律。

糟糕,历史数据一直在变

看起来,似乎大功告成了,留存率 从DB里拉出来不就行了吗?但是关于留存率还有两个问题:

  • 历史的留存率有变化:未来的日活与历史每天有关,英语流利说已有3年的历史,期间的各种变化,不能用平均值这种粗糙的方式处理
  • 需要更远期的留存率:虽然有了3年的数据,还需要更远期的留存率数据;例如:为了估算半年后的日活,就需要新增用户3年半以后的留存率

下面来解决这两个问题。

解决历史留存率的变化

变化的原因

首先分析为什么变化,以及初步的解决思路:

  • 短期:由渠道拓展、运营活动引起的留存率变化。对于这种情况,是可以用平均值处理的
  • 长期:由产品迭代、用户习惯养成引起的留存率变化。对于这种情况,直接的方法是,对历史每天的新增用户维护留存率序列,例如第1天新增用户次日、3日……N日留存,第2天……第N-1天新增用户的次日留存。这种方案的问题是:
    • 计算复杂:每次估算都要追溯整个历史
    • 早期的留存率并不能对后期有绝对影响:用户在经历多个版本的产品升级后,体验发生变化,即使对每天的新增用户维护留存率序列,未来的留存率衰减速度不一定完全延续历史趋势

      变化的解决方案

      以当前日作为划分,估算表达式右侧拆分成2项:

考虑等式右侧第一项:其中 为历史第 天的新增在今天的留存率,就是在今天的留存人数。其中每日留存率依赖历史第 日的情况;而 是从当前日 到第 日的留存率衰减比例,从业务逻辑上,仅与当前和以后版本的产品使用有关,受历史当时的影响较小。
因此我们放弃维护不同 应的 ,定义 为第 日的日活中,历史第 日新增贡献的人数,于是:

表达式改写为:

其中 是对当前日 的日活分解,可以直接计算作为输入。
也就是说,对任意 ,不再看当时获得了多少新增、经过了怎样额衰减;而只看目前还『剩下』多少活跃用户。而对『剩下』的用户,从今往后的衰减规律,取决于当前和以后的产品形态,受历史版本影响较小。
改写后的表达式中,所有与 相关的项,受历史影响较小,因此可以进一步简化:忽略 ,使用近期 (例如1年) 的留存率概括值作为输入

解决更远期的留存率

就差搞定 如何建立数学模型估算日活用户数? - 图21 了!我们采用了曲线拟合,获得更远期的留存,顺便对近期留存做一个概括。
通常情况下,拟合并不是严谨的方法,从统计模型的角度,属于偏差最大、泛化能力较弱的一种。此处使用拟合方法,隐含了对留存率衰减趋势的经验假设。
函数那么多,应该用哪一种?为此,用相邻日的留存率相除 (前 / 后),定义为留存率衰减比例,对近期样本作图如下。可见:在大约某天后,留存率的衰减比例接近恒定,可以理解为用户进入『稳定期』;此后每一天的留存率,等于前一天留存率乘以一个相对稳定的系数,由此想到了指数函数。
如何建立数学模型估算日活用户数? - 图22
然而指数函数对衰减稳定之前的阶段并不适用,可以将指数项改成天数 的幂函数:
如何建立数学模型估算日活用户数? - 图23
对衰减稳定前、稳定后的样本,用以上函数分段拟合。将等式两边做对数变换,成为线性函数
如何建立数学模型估算日活用户数? - 图24
求解参数的方法:参数 如何建立数学模型估算日活用户数? - 图25 采用最小二乘法计算;并以最大化 Adjusted R-squared 为目标,对参数 如何建立数学模型估算日活用户数? - 图26 进行 Grid Search。分段拟合的结果 如何建立数学模型估算日活用户数? - 图27 是一个分段函数,曲线如下,其中灰色半透明点表示留存率样本,红蓝曲线为分段拟合结果:
如何建立数学模型估算日活用户数? - 图28
至此,解决了所有的输入问题。

总结

最终,模型的输出为 如何建立数学模型估算日活用户数? - 图29,实际输入为:

  • 如何建立数学模型估算日活用户数? - 图30,当前日 如何建立数学模型估算日活用户数? - 图31 的日活中,属于历史第 如何建立数学模型估算日活用户数? - 图32 天新增用户的数量;为了更加稳定,可以用最近几日的均值
  • 如何建立数学模型估算日活用户数? - 图33,明日起,直到第 如何建立数学模型估算日活用户数? - 图34 日的每日的计划新增用户数,可以是一个变化的序列
  • 如何建立数学模型估算日活用户数? - 图35,近一段时间 (例如1年) 的每日留存率序列样本

在建立估算模型之前,业务部门更倾向使用一些经验估算方法,例如:利用日活 / 新增比例。经验方法的优点是简单;缺点是:依赖的假设条件可能发生变化,而由于方法过于简单,我们并不能解释这些变化,甚至不知道变化的幅度可能有多大。例如,我们并不知道日活 / 新增以后会变成什么样,但我们对于留存率是有预期的。
相比之下,模型的优点是:使得每一项输入尽可能在控制范围内,并对历史的变动不那么敏感。