指标的移动平均

——数据的上下文3

Moving-average  接着之前数据上下文(Context)的话题继续探讨网站分析中可以设立的数据意境。数据上下文2中的网站质量控制图为网站的KPI指标给出了有效的监控体系,但质量控制图毕竟比较严谨,其实对于大部分互联网环境的指标而言,可能并不符合这么苛刻的条件,于是我们需要寻找另外的方法来监控和观察这些指标的变化趋势。

  同样是基于时间序列的分析,前面的文章——时间序列的趋势分析中主要介绍了“同比”和“环比”的概念,这里在介绍一种方法——移动平均法。其实移动平均线应用最多的是在股市,5日、10日、30日均线都是用移动平均法计算得到的;而移动平均线也是Excel中的趋势线的一种类型。所以移动平均法最常见的用法就是对于趋势变化的观察分析,但同时也具备了预测和比较监控的功能。下面介绍两个最简单常用的移动平均法:简单移动平均法(Simple Moving Average)和加权移动平均法(Weighted Moving Average)。

移动平均的适用条件

  移动平均(Moving Average)是一种简单平滑预测技术,通过在时间序列上逐项推移取一定项数的均值的方法来表现指标的长期变化和发展趋势。因为取的是一定项数的均值,所以使用移动平均的指标需要满足以下几个条件:

  • 指标没有明显的快速增长或下降的趋向
  • 指标不具备周期性波动的特征

  移动平均的最重要目的是消除指标的随机波动,如果指标不满足以上的两个条件,可能移动均值的平滑能力无法对指标做出准确的预测,那么移动平均也就失去了它的效用。移动均值主要基于对历史数据的平滑来预测实际数据,所以一方面对于历史数据过度依赖,另一方面对于现实的变动不够敏感,尤其是在使用多期均值时,这也是移动均值的两个缺点。

简单移动平均法

  简单移动平均(Simple moving average, SMA),将时间序列上前n个数值做简单的算术平均。假设用X1到Xn来表示指标在时间序列上前n期中每一期的实际值,那么第n+1期的预测值可以用以下公式来计算得到:

Xn+1 = ( X1 + X2 + …… + Xn ) / n

  在Oracle数据库可以使用开窗函数直接计算得到简单移动平均值,比如要从每天的销售表(sales)计算近10天销售额(amount)的移动平均数与每天的销售额进行比较,可以用如下的PL/SQL实现:

SELECT date_id “日期”,SUM(amout) “每天销售额”,AVG(SUM(amount)) OVER(ORDER BY date_id ROWS BETWEEN 10 PROCEDING AND CURRENT ROW) “销售额移动均值” FROM sales GROUP BY date_id ORDER BY date_id;

  Oracle内置了一堆的分析函数可以调用,直接用于各类的聚合和分析指标的计算,非常方便。

加权移动平均法

  加权移动平均(Weighted moving average, WMA),在基于简单移动平均的基础上,对时间序列上前n期的每一期数值赋予相应的权重,即加权平均的结果。基本思想是:提升近期的数据、减弱远期数据对当前预测值的影响,使预测值更贴近最近的变化趋势。我们用Wn来表示每一期的权重,加权移动平均的计算公式如下:

Xn+1 = W1×X1 + W2×X2 + …… + Wn×Xn

  这里需要满足W1+W2+……+Wn=1,对于各权重的确定,可以使用经验法根据需要进行赋权:如果希望预期值受前几期数据的影响逐步加深,则可以赋予递增的权重,如0.1,0.2,0.3……;如果希望加深最近期的几个数值的影响,以反映最近的变化,则可以适当加大近1-2期的权重,根据适应实际情况结合测试来完成赋权。我们来比较下简单移动平均(下图SMA线,取近5期均值)和加权移动平均(下图WMA线,取近5期加权均值,权重依次为0.1, 0.1, 0.2, 0.3, 0.3):

SMA_WMA

  可以看到无论是简单均值线还是加权均值线都要比实际值的波动小了很多,也就是平滑的效果,更多的是展现一个大体的趋势,而加权平均相较于简单平均的差异就在于加权平均更加注重近期的影响,所以这里的WMA绿线比SMA的红线更贴近前两期的数值趋势。

移动平均实例

  还是结合实际的例子来做下说明。在电子商务数据分析里面,我们最关注的就是每天的销售额,我们用Excel里面的移动平均的趋势图可以反映出指标的变化趋势:

3per_Mov_Avg

——3周期移动平均(虚拟数据)

  上面展现的是移动平均法的用途之一——分析趋势,其实我们也可以用移动平均来进行数据监控和预警

  用移动平均法可以计算得到一个本期的预测值,我们可以将这个预测值作为本期预期可以实现的量,并用这个预期量与实际量进行比较,要分析实际量与预期量之间的差距。还是基于销售额,不过销售额可能存在明显的递增或递减趋势,于是我们除以消费用户数,于是就得到了所谓的ARPU值(Average Revenue Per User),这个是电子商务乃至任何消费型网站的关键指标之一,还是使用简单移动平均来比较实际值和预期值的差异:

ARPU_SMA_diff

——ARPU监控表格效果(虚拟数据)

  表格的数据展现已经可以一目了然的看到实际ARPU值与预期的差异、差异的大小等,下面再结合图表来看一下:

ARPU_SMA_diff_chart

——ARPU监控图表效果(虚拟数据)

  两条比较的折线结合绿涨红跌的蜡烛图,能够对指标的变化情况了如指掌。结合上面的表和图的数据和效果,似乎对于数据的监控变得简单很多,即使是直接的观察也能快速地发现数据的异常,这些方法对于网站的一些关键指标,诸如转化率、人均消费、活跃度等指标的日常监控分析非常实用和有效。

  如果你认为这些表和图对于指标监控还不够,那么就建一套自动的Alert系统吧,就像Google Analytics上面的Intelligence一样,如果指标的降幅或者涨幅超过正常范围(可以设定一个合理的阈值)就向你的邮箱发送报警邮件,这个对于敏感数据的监控异常有效。

  我要介绍的就是这些了,切忌所有的方法和数据的处理都要根据实际的环境、具体的业务和运营状况来进行设定和分析,这里只是我的想法和对移动平均法的简单应用,在不同的环境下也许还可以扩展出许多不同的应用。你是不是也在用类似的方法?欢迎与我分享 :)

指标的移动平均》上有 6 条评论

  1. Pingback 引用通告: 合并和比较度量

  2. Leslie

    根据简单移动平均的算法 X(n+1)是否就是之前X1到XN的平均值?也就是把之前N期的实际值的平均值作为X(N+1)的预测值?

    回复
  3. keren

    有一个问题,楼主所说都没有考虑方差的大小啊,方差很大的话短期预测是非常不可靠的

    回复

keren 进行回复 取消回复

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>