专栏首页社区的朋友们使用结构化分解的线性模型预测 dau
原创

使用结构化分解的线性模型预测 dau

作者:陈辉

dau(Daily Active User)毫无疑问是互联网产品里最重要的指标之一(或许‘’之一‘’也可以去掉),每天的dau数据都会牵动着整个产品团队的心。因此,如果能对未来的dau进行预测,了解未来的发展趋势,根据预测结果,寻找增长规律,发现增长瓶颈。另外,对业务来讲,单纯地知道dau的一个预测结果价值也有限,最好是能在预测过程中揭示一些规律,指导产品的规模发展。

对类似于dau的这种数值预测问题,最常见的是采用时间序列分析的预测方法。但这种方法是单纯地依赖数据的规律,只能给出一个预测结果,不能解析其中的影响因素。而其他的一些非线性的回归方法,通过较为复杂的特征处理,也许能达到较高的预测精度,但也很难去对预测过程进行解析,就更不用谈指导产品的规模发展了。因此,我尝试了最简单的线性模型,通过对PCQB浏览器的dau的用户进行结构化的分解,分别建立线性预测模型,发现最终的结果也达到了可解析性与预测精度的一个平衡。而整个建模过程只需要一款老少皆宜的神器-- excel,是不是很简单?

1.对dau进行分解

对于一款成熟的产品,在渠道稳定的情况下,新增用户未来每天的留存率是基本稳定的。如果产品的用户是从0开始,各渠道也恒定,那只要出拟合新增用户的留存率曲线,就可以得到未来每天的dau了。即如果拟合出来新增用户的留存率表达式是:

第i天的新增量是Newi,则n天后的dau为:

这个预测方法是特别简单。但现实面临的问题是产品已经发展多年,现在的渠道跟产品刚开始发布的渠道已经是千差万别,对PCQQ浏览器而言,3年之前的数据都找不到了。

更进一步,既然目前和预见的未来的渠道是稳定的,那么就可以对新增用户采用上述的办法进行预测。将每天的dau分解成两部分:新增用户和非新增用户。接下来的问题就是非新增用户的留存预测,如果非新增用户的留存率也是稳定的,那问题不就迎刃而解了?

事实上采用上述的分解方法,非新增用户的留存率并不稳定。因为非新增用户中含有最近一段时间新增的用户和新增了很久的用户的,这两部分用户的规律一般是有不小的差别的。就是一部分还算新手,一部分已经是老油条了,他们两部分人群肯定有较大的差别,混合在一起去预测他们的总体留存,误差也肯定大。有没有更好的分解办法?

沿着这个思路,接下来就是我使用的分解办法了。假设新增用户达到一定时间后就跟老用户没差别,也就是老油条与老一点的油条而已,然后对老用户按沉默的天数进行切分。

2.模型假设

经过统计,发现60天都不活跃的用户再回流的只占当天dau的1%,可以认为60天都不活跃的用户再回流是一个小概率事件。当然,时间取得越长这个概率越来越小,取60天的误差也足够小。基于此结果,选定一个起点时间,假设起点当天的dau是最近60天内的非新增用户(以下称为老用户)的回流与最近60天内的新增用户的留存所组成。后续每天的dau就是上诉两部分用户及未来的新增用户的留存共同构成,同时认为每天老用户的回流率与新增用户的留存率不变(外部环境基本不变的情况下)。

某天dau中第n()天前回流用户的定义:对该天而言,沉默了n-1天后在当天活跃的用户。如对11.6而言,第2天前的回流用户为:所有只在11.4和11.6活跃的用户,并且在11.5不活跃。如下图所示:

某天dau中第n天前的所有老用户定义为:距离前1天沉默了n-1天的所有用户。如对11.6而言,第2天前的所有老用户即为,所有最后一次活跃天为11.4的用户。如下图所示:

根据上诉定义,老用户的回流率:

该指标反映的是沉默了n天的用户中有还会回流的用户的概率。

根据历史数据分别拟合老用户的回流率与新增用户的留存率,就可以对未来的dau进行预测。

3.拟合老用户的回流率模型

由于所需数据较少,拟合两个留存率的模型使用大众神器—excel就可以解决了。

先拟合老用户的回流率模型。首先选定一个起点,从历史数据中跑出60天的回流用户数及其老用户数,存放到excel里。计算一下每天的回流率,插入一列“天数”,如下图所示:

然后绘制散点图,如下图:

然后在散点图中右键选择“添加趋势曲线”,选择合适的曲线,对回流率曲线,我这边得出的结论是基本符合幂规律,并选择“显示公式”、”显示R平方值”,然后就会得到一条非常优美的幂规律曲线,而且该规律的R方值很高(>0.94),也就是拟合的曲线非常好地解析了原数据的方差。如果不放心excel的拟合结果,也可以用R来验证一下,我这边的验证结果是R给出的拟合结果与excel的完全一致。

当然了,该曲线也有一定的欺骗性。由于是老用户的回流曲线,沉默的天数越多的基数也就越大,我这边统计的数据,第1天的老用户是第二天的2倍多。因此实际上更关注的是沉默了前几天的回流率的拟合程度,但excel里曲线拟合过程对所有点是平等的,因此对于这个用这个结果来预测仍然会有较大的误差。实际上,看图上的拟合结果,你就会发现那些散点在曲线周围的波动是有明显的周期性的。进一步思考你就会发现这就是显著的工作日和假期规律。因此可以对老用户的回流率做进一步的分解,分别拟合工作日和假期的规律,发现R方值有进一步的提高:

如果你发现拟合的规律还不满意,可以进一步的把回流率按星期规律拆分成7条。

3.拟合新增用户的留存率模型

对于新增用户的留存率模型,采用上述方法继续分解成工作日和假期进行留存率曲线的拟合。新增用户的留存率通常更符合对数模型:

新增用户的留存有个问题是由于当天的新增留存较高,新增留存率相对于其他天而言是个孤立点,也就是第0天的新增留存率是个孤立点。我的处理方法是认为所有工作日和假期的第0天新增留存率是相同的,实际上统计了部分数据后的确误差在1%以内。

4.dau预测计算

选定了预测起点后,就可以对后续天的dau进行迭代预测。预测第k天的dau,先预测第k天老用户的回流总量:

m<sub>i </sub>表示第 i 天前的所有老用户,ro<sub>i </sub>表示第 i 天前的老用户回流率。

第k天的新增用户留存总量:

n<sub>i</sub>表示第 i 天前的所有纯新增用户,rn<sub>i </sub>表示第 i 天前的纯新增用户的回流率。

根据模型假设,则第k天的dau为:

对接下来预测k+1天的dau时,因为之前第i天已经有的用户回来到当天,则第i天前的老用户总量需要重新更新为:

5.预测效果验证

选定2015.11.6为起点,计算了2015.9.7-2015.11.5共60天内的老用户,使用上诉方法对2015.11.6 - 2016.1.31的dau进行了预测。所有天的平均绝对值误差在4%以内,误差较大的天为8%左右。误差较大的那几天主要是些特殊的日子,并且我们自己也有些特殊的运营手段刺激,如11.11,12.12,这个后续可以对这些特殊日子附加一个增益即可提高精度。预测值与真实值的效果如下图所示:

6.模型解析

首先一个问题,老用户回流率曲线是幂规律,新增用户的留存率曲线是对数规律,为啥说他们都是线性模型呢?实际上,通过适当的变换,他们都可以变成线性形式,而且程序里实现幂规律和对数规律的拟合时都是变换成线性形式求解的。对幂规律,其表达式为:

等式两边去log,(1)式变成:

(2)

以logy和logx为新的自变量,令Y=logy,X=logx,(2)式就成了熟悉的一次线性表达式:

对于对数规律,其变换过程也类似,也会变成一个一次线性表达式。

7.模型对实际业务的指导意义

通过建立的上述预测模型,可以清晰的反映了老用户的回流规律与新增用户的留存规律,从中可以发现一些有意思的指标。比如对于我们的业务,老用户沉默3天内有20%左右的回流概率,14天后回流的概率已经低至5%以内,由此产生的一个策略就是对沉默3天内的用户应该是免打扰,沉默14天以上的用户应该进行强运营。

通过该模型也可以给出一些量化的预期。比如希望加大新增投入来提高dau,以前是只能拍脑袋给个估计,现在就可以根据新增增加的量来预测对dau带来的确切提升量。当然,由于新增的渠道差别较大,单纯这么预估还是有较大的误差。接下来就可以对新增用户分渠道来拟合新增留存率,这样就可以较为准确地预估不同渠道的新增量对dau的量化影响。

8总结

把dau分解为老用户与新增用户后,就可以采用简单的线性模型对dau进行较为有效的预测,预测误差大部分都能控制在4%以内,并且整个建模过程在excel里就能解决。

这个预测方法主要有以下优点:模型只反映最近一段时间内的规律,不会受到太多历史因素的影响;模型训练简单,也能较快地反映最近的变化趋势,更新非常方便;容易解析。

当然,模型的缺点也非常明显:预测精度一般;预测过程比较复杂,需要迭代预测,造成误差累积;对特殊日子需要手动处理,增加偏置。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 普通表格常见设置

    表格组件是以表格的形式展现数据的载体,表格可以绑定任意一查询的多个字段。根据是否给字段使用统计函数来区分,可划分为细节数据表格和汇总表格。

    腾讯云商业智能分析团队
  • Selenium 抓取淘宝商品

    本节我们就来用 Selenium 来模拟浏览器操作,抓取淘宝的商品信息,并将结果保存到 MongoDB。

    崔庆才
  • 扭曲你的数据,让其变得具有视觉吸引力

    经常有这样的情况,你用数据画出图像有看起来会很丑,如何让你的图像变得好看一点呢?本文给大家介绍如何扭曲你的数据,在不影响结果和其他属性的情况下,使得你数据画出来...

    YingJoy_
  • 机器学习之数据清洗与特征提取

    本文详细的解释了机器学习中,经常会用到数据清洗与特征提取的方法PCA,从理论、数据、代码三个层次予以分析。

    汪毅雄
  • 如何使用高亮、表格渲染

    本文将详细介绍如何对表格中的数据种类设置高亮,以及设置表格渲染,希望对大家有所帮助。

    腾讯云商业智能分析团队
  • Python 插入百万数据的时间优化与 OOM 问题的解决

    我们小组需要从IT部门同步客户信息和机构信息到本地,这两部分数据大概各400W,总共800W的数据量。IT部门提供两个存储过程用于分别获取这两部分数据,因此在使...

    王帅
  • 使用 Apache PIG 统计积累型数据的差值

    线上运行的生产系统会定时采集一项丢包数据,这项数据与某个进程相关联,从进程启动开始就一直递增,每隔1分钟采集一次数据,当进程重启之后,这项数据会清零。现在要求使...

    邵靖
  • 【SPA大赛】预测广告转化率实战心得

    本文作者针对预测广告转化率的问题,从问题与数据分析、特征选择、数据处理、模型选择这四个方面总结了此次比赛的心得。

    肖洋
  • Scrapy 对接 Splash

    本节我们来了解下 Scrapy 对接 Splash 来进行页面抓取的方式,希望对大家有所帮助。

    崔庆才

扫码关注云+社区

领取腾讯云代金券