指标数据波动,是在各种业务场景下都会遇到的情况,大多数情况下变化是“正常”的波动,但也会由一部分波动来源于外部或其他因素,进而导致异常状态。
识别出指标数据波动异常,能在一定程度上保证业务场景系统的整体稳定性。

指标数据波动类型

一次性波动

偶发的、突然性的波动。往往会在一段时间内恢复正常。

周期性波动

按一定规律波动,例如和时间节点强相关,经常以周或者季、年为循环节点。

持续性波动

从某一时间开始,指标一直呈现上涨/下降趋势。持续性波动背后的原因往往是更深刻的,如订单结构的变化、环境因素的影响,从而出现了这种持续性趋势。

异常识别

什么样的波动可以看作是“异常”呢?异常识别也可以认为是异常检测。这里主要从绝对值预警、相对值预警两个方面来说明。

绝对值预警

绝对值预警,即是通过设定一定的阈值,当指标低于/高于阈值的时候,就认为此时指标波动为异常,并进行预警。

相对值预警

然而实际业务中,绝对的阈值只能提供一个“底线”。除了一些非常确定性的业务场景外,在其他情况下,过高的“底线”就会导致误报,过低的“底线”可能会漏掉很多需要预警的情况。于是作为绝对值预警的补充,相对值预警可以根据历史数据及波动情况,来判断当前的波动是否为异常。

同比环比

环比:是连续2个单位周期内的量的变化比。同比:是一个单位周期内和另一个更大周期的同一个段周期内的变化比。环比只有一个,同比则因参照量(另一个更大周期)不同而不同,有多个。
利用同比和环比的比较,超过一定的阈值即认为该点是异常的。实际中常用周/日环比、年同比来进行比较。

周期平滑

同比/环比仅使用1~2个时间点的数据,容易受到数据本身质量的影响:当历史同期或上个周期的数据本身就是“异常”的时候,用“异常”的数据来判断是否“异常”就不太合适。

一个很自然的想法就是将所参考的时间点拓展,利用多个时间点的周期数据进行平滑,得到当前时刻指标的对比值。超过一定的阈值即可认为是“异常”,其波动需要关注。

假设检验(3σ原则)

前面提到比较值需要和所研究的值进行对比,通过阈值来判断波动是否异常。阈值的定义方法和预警方法类似,分为绝对值阈值和自适应(相对值)阈值。

  • 绝对值阈值:根据历史正常情况下的数据波动情况,计算比较值和所研究的值之间的差异情况,从而定义一个上/下限值,即为阈值。
  • 自适应阈值:根据数据波动情况而变化的阈值,其理论基础为假设检验和大数定律,来判断是否为异常。

    其他方法

    除了以上所介绍的一些常用的、便捷的方法外,也可以通过时间序列、算法模型等来判断异常值。


    时间序列 业务上的数据往往具有时间属性,如单量随时间的变化、GMV随时间的变化等。那么在时间序列中,通过异常检测的方法,也可以对当前波动是否异常做出判断。常用的方法有:

    • 平均法:移动平均、加权移动平均、指数加权移动平均、累加移动平均等。和上述的“周期平均”的方法类似,可自定义窗口大小和加权系数。
    • ARIMA模型:自回归移动平均模型(ARIMA)是时间序列中一个基础模型,利用过去的几个数据点来生成下一个数据点的预测,并在过程中加入一些随机变量。使用该模型需要确定ARIMA所需的参数,即需要对数据点进行拟合。利用拟合后的方程确定下一个时间点的数据的区间,从而判断当前波动是否为异常。
    • 此外还有ESD、S-ESD、S-H-ESD、STL分解等算法,来检测异常点。

    算法模型

    • 基于分类方法:根据历史已有的数据,将其分为正常、异常的两类,之后产生的新的观测值,就可以使用分类的方法去判断新的观测值是否为异常。如使用距离判别的K-means算法、SVM算法等。
    • 神经网络方法:可以对具有时间特性进行建模的LSTM算法、用卷积神经网络来做时间序列分类的Time Le-Net,以及各种的监督式模

实际应用中,还需要结合业务背景来进行方法的选择。

附参考资料: