转载

如何建立数学模型估算日活用户数?


新增留存日活 是APP产品的通用指标。如果某一天,被问到以下的问题,你会怎样分析:

  • 按照现有的趋势,下季度我们的日活能达到多少?

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

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

日活是『堆积』起来的

堆积过程

我们都知道:

  • 任意一天的活跃用户,是由历史每日的新增用户 堆积 而成的。

  • 新增用户从获取的第2天起,活跃的数量逐渐衰减;越早的新增用户,仍然活跃的比例越小。

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

如何建立数学模型估算日活用户数?

堆积表达式

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

  • 假设我们处在产品历史的第天,需要估算历史第天的日活

  • 表示第天的日活

  • 表示第天的新增

  • 表示第天的新增在获取第天的留存率;对任意的,获取当日的留存率为100%,即 如何建立数学模型估算日活用户数?

于是,估算的目标表示如下:

如何建立数学模型估算日活用户数?

观察以上等式右侧,我们需要以下输入数据:

  1. ,每天新增用户数。对于 如何建立数学模型估算日活用户数? ,对应历史每日的新增用户数,是已知项;对于 如何建立数学模型估算日活用户数? ,对应未来新增用户的计划,是直接输入项。因此这一项不需要额外计算。

  2. ,每天的新增用户,到达第天时的留存率,是未知项。

于是,我们只需要搞定,也就是留存率的衰减规律。

糟糕,历史数据一直在变

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

  • 历史的留存率有变化:未来的日活与历史每天有关,英语流利说已有3年的历史,期间的各种变化,不能用平均值这种粗糙的方式处理

  • 需要更远期的留存率:虽然有了3年的数据,还需要更远期的留存率数据;例如:为了估算半年后的日活,就需要新增用户3年半以后的留存率

下面来解决这两个问题。

解决历史留存率的变化

变化的原因

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

  • 短期:由渠道拓展、运营活动引起的留存率变化。对于这种情况,是可以用平均值处理的

  • 长期:由产品迭代、用户习惯养成引起的留存率变化。对于这种情况,直接的方法是,对历史每天的新增用户维护留存率序列 如何建立数学模型估算日活用户数? ,例如第1天新增用户次日、3日……N日留存,第2天……第N-1天新增用户的次日留存。这种方案的问题是:

    • 计算复杂:每次估算都要追溯整个历史

    • 早期的留存率并不能对后期有绝对影响:用户在经历多个版本的产品升级后,体验发生变化,即使对每天的新增用户维护留存率序列, 未来的留存率衰减速度不一定完全延续历史趋势

变化的解决方案

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

如何建立数学模型估算日活用户数?

考虑等式右侧第一项:其中为历史第天的新增在今天的留存率, 如何建立数学模型估算日活用户数? 就是在今天的留存人数。其中每日留存率 依赖 历史第日的情况;而是从当前日到第日的留存率衰减比例,从业务逻辑上,仅与当前和以后版本的产品使用有关,受历史当时的影响较小。

因此我们放弃维护不同应的,定义为第日的日活中,历史第日新增贡献的人数,于是:

如何建立数学模型估算日活用户数?

表达式改写为:

如何建立数学模型估算日活用户数?

其中是对当前日的日活分解,可以直接计算作为输入。

也就是说,对任意, 不再看当时获得了多少新增、经过了怎样额衰减;而只看目前还『剩下』多少活跃用户。而对『剩下』的用户,从今往后的衰减规律,取决于当前和以后的产品形态,受历史版本影响较小。

改写后的表达式中,所有与相关的项,受历史影响较小,因此可以进一步简化:忽略,使用近期 (例如1年) 的留存率概括值作为输入 如何建立数学模型估算日活用户数?

如何建立数学模型估算日活用户数?

解决更远期的留存率

就差搞定了!我们采用了 曲线拟合 ,获得更远期的留存,顺便对近期留存做一个概括。

通常情况下,拟合并不是严谨的方法,从统计模型的角度,属于偏差最大、泛化能力较弱的一种。此处使用拟合方法,隐含了对留存率衰减趋势的经验假设。

函数那么多,应该用哪一种?为此,用相邻日的留存率相除 (前 / 后),定义为留存率衰减比例,对近期样本作图如下。可见:在大约某天后,留存率的衰减比例接近恒定,可以理解为用户进入『稳定期』;此后每一天的留存率,等于前一天留存率乘以一个相对稳定的系数,由此想到了指数函数。

如何建立数学模型估算日活用户数?

然而指数函数对衰减稳定之前的阶段并不适用,可以将指数项改成天数的幂函数:

对衰减稳定前、稳定后的样本,用以上函数分段拟合。将等式两边做对数变换,成为线性函数

如何建立数学模型估算日活用户数?

求解参数的方法:参数采用 最小二乘法 计算;并以最大化 Adjusted R-squared 为目标,对参数进行 Grid Search 。分段拟合的结果是一个分段函数,曲线如下,其中灰色半透明点表示留存率样本,红蓝曲线为分段拟合结果:

如何建立数学模型估算日活用户数?

至此,解决了所有的输入问题。

最终,模型的输出为,实际输入为:

  • 如何建立数学模型估算日活用户数? ,当前日的日活中,属于历史第天新增用户的数量;为了更加稳定,可以用最近几日的均值

  • 如何建立数学模型估算日活用户数? ,明日起,直到第日的每日的计划新增用户数,可以是一个变化的序列

  • 如何建立数学模型估算日活用户数? ,近一段时间 (例如1年) 的每日留存率序列样本

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

相比之下,模型的优点是:使得每一项输入尽可能在控制范围内,并对历史的变动不那么敏感。

小编说:

看到这里,你知道日活用户数怎么估算了吗?(*^__^*) 那么广告来啦,英语流利说数据组正在招聘分析师与ETL工程师,要求如下,欢迎发送简历至jobs@liulishuo.com,期待更多小伙伴加入我们团队。

  • 数据分析师:如果你 有互联网数据分析经验, 精通SQL、Python,熟悉统计分析工具例如R等

  • ETL工程师:具备编写和优化复杂SQL的能力,熟悉数据仓库ETL开发,精通Python编程

:arrow_right:查看流利说技术团队所有招聘信息请戳戳戳 招聘 | 2016年双十一你不可错过的好职位!

如何建立数学模型估算日活用户数?

原文  http://mp.weixin.qq.com/s/A9AAVn1MkfdVemKsxCoCsw
正文到此结束
Loading...