您的位置:首页 > 其它

单指标时间序列预警模型解决方案

2017-09-17 14:49 841 查看

          单指标时间序列预警模型解决方案

导读:


概述


预测器


比较器


整体架构与继续改进想法


概述

  在系统中,每一次指标的异常波动,都需要做出及时的应对,以保证系统的整体稳定性。如何做出较为准确的波动预警,显得尤为重要。从时间上看,指标的时间序列如果具有以下两个明显的特征(如下图),即可使用这套方案:

 

· 周期性。同一天指标具有一定趋势,每天指标变化趋势都大致相同。

· 实时性。当天指标可能会受天气,节日等因素影响,呈现整体上涨或下降。



  异常检测,就是从一组数据中寻找那些和期望数据不同的数据。监控数据都是和时间相关的,每一个监控指标只有和时间组合一起才有其具体的含义。按照时间顺序,将监控指标组成一个序列,我们就得到了监控指标的时间序列。

  基于预测的异常检测模型如下图所示,data是真实数据,通过预测器得到预测数据,然后data和y_hat分别作为比较器的输入,最终得到输出y。y是一个二元值,可以用+1(+1表示输入数据正常),-1(-1表示输入数据异常)表示。

 流程如下图:



  异常检测主要有两种策略:

  异常驱动的异常检测(敏感性):宁愿误报,也不能错过任何一个异常,这适用于非常重要的检测。简单概括,就是“宁可错杀一千,不能放过一个”。

  预算驱动的异常检测(准确性):这种策略的异常检测,从字面理解就是只有定量的一些预算去处理这些报警,那么只能当一定是某种问题时,才能将报警发送出来。

  这两种策略不可兼容的。对于检测模型的改善,可以从两个方面入手,一是预测器的优化,二是比较器的优化。我们从这两个方面描述这种模型。

二 预测器设计

  预测器,就是用一批历史数据预测当前的数据。使用的历史数据集大小,以及使用的预测算法都会影响最终的预测效果。

2.1 同比环比预测器

  同比环比是比较常用的异常检测方式,它是将当前时刻数据和前一时刻数据(环比)或者前一天同一时刻数(同比)比较,超过一定阈值即认为该点异常。如果用上图模型来表示,那么预测器就可以表示为用当前时刻前一时刻或者前一天同一时刻数据作为当前时刻的预测数据。

  如果将不同日期、时刻的监控数据以矩阵方式存储,每一行表示一天内不同时刻的监控数据,每一列表示同一时刻不同日期的监控数据,那么存储矩阵如下图所示:



  假如需要预测图中黄色数据,那么环比使用图中的蓝色数据作为预测黄点的源数据,同比使用图中红色数据作为预测黄点的源数据。

2.2 基线预测器

  同比环比使用历史上的单点数据来预测当前数据,误差比较大。t时刻的监控数据,与t-1,t-2,...时刻的监控数据存在相关性。同时,与t-k,t-2k,...时刻的数据也存在相关性(k为周期),如果能利用上这些相关数据对t时刻进行预测,预测结果的误差将会更小。

  比较常用的方式是对历史数据求平均,然后过滤噪声,可以得到一个平滑的曲线(基线),使用基线数据来预测当前时刻的数据。该方法预测t时刻数据(图中黄色数据)使用到的历史数据如下图所示(图中红色数据):



  基线数据预测器广泛应用在业务大盘监控中,预测效果比较平滑,在低峰期预测效果比较好,但是在高峰测误差比较大。

2.3 Holt-Winters预测器

  同比环比预测到基线数据预测,使用的相关数据变多,预测的效果也较好。但是基线数据预测器只使用了周期相关的历史数据,没有使用上同周期相邻时刻的历史数据,相邻时刻的历史数据对于当前时刻的预测影响是比较大的。如移动某指标,如果在某个节日,用户使用频繁使用,那么当天的指标就会呈现整体的上涨,这种整体上涨趋势只能从同一周期相邻时刻的历史数据中预测出来。如下图所示,预测图中黄色数据,如果使用上图中所有的红色数据,那么预测效果会更好。



  本方案就是使用Holt-Winters来计算周期与残差图像的,其中周期图像可由一次指数平滑,随机森林,线性回归,或均值得到,各有优缺点,或者使用多个预测方法,最后进行融合。

  其中残差图像是这样产生的,算出预测值与真实值的差,对差进行一次指数平滑或其他预测方法。

2.3.1随机森林画周期图像

  根据前n天数据,(具体数据根据业务情况而定,或测试n值,选最优解)预测本天数据。数据本身作为一个特征,这里有个非常重要的事必须要去做,就是前n天数据的噪声,不去噪声将对预测产生很大影响,如下图。考虑到假期原因,可将日期属于的星期几,一周的第几天作为特征。考虑到天气原因,可将天气情况作为特征。

  下图所示:数据没有去噪声,导致圈出来的预测点出现过大方差,出现这种情况的原因就是前n天数据异常值对随机森林产生了影响,目前我想到的去噪声的方法是:k-means,DBScan,均值等等。噪声的修改用均值。



  优点:依据Holt-Winters矩阵,充分利用了数据的相关性。

  缺点:过往异常值对预测的影响,以及预测结果的不统一性(随机森林的性质决定)

2.3.2一次指数平滑画周期图像

  指数平滑法认为时间序列的态势具有稳定性或规则性,所以时间序列可被合理地顺势推延;他认为最近的过去态势,在某种程度上会持续到未来,所以将较大的权数放在最近的数据。一次指数平滑预测,当时间数列无明显的趋势变化,可用一次指数平滑预测。其预测公式为:yt+1'=ayt+(1-a)yt'

  二次指数平滑预测二次指数平滑是对一次指数平滑的再平滑。它适用于具线性趋势的时间数列

  区别到底使用一次还是二次在于,该数据是在一定变化的基础上是否有线性趋势,如果没有,用一次指数平滑。如果有,用二次指数平滑。






2.4周期图像合成

  当然还有多种其他方法画出周期函数,具体还得看业务指标,根据业务选出合适方法才是最好方法。当各种方法中并没有哪个具有绝对优势的时候,可以考虑图像合成:cyc_rf为随机森林图像,cyc_es为一次指数图像,alpha为参数,cyc为周期图像,公式为:

       cyc = alpha * cyc_rf +(1-alpha)* cyc_es

2.5 残差图像

  所谓残差图像是这样产生的,算出预测值与真实值的差,对差进行一次指数平滑或其他预测方法。将残差图像与周期图像相加,确保当天已经产生的数据对预测也起到作用,将当天的变化趋势延续下去。





三 比较器设计

  预测器预测出当前时刻订单量的预测值后,还需要与真实值比较来判断当前时刻订单量是否异常。一般的比较器都是通过阈值法,比如实际值超过预测值的一定比例就认为该点出现异常,进行报警。这种方式错误率比较大。在本方案中的报警检测中没有使用这种方式,而是使用了两个串联的Filter,只有当两个Fliter都认为该点异常时,才进行报警。



  离散度Filter:根据预测误差曲线离散程度过滤出可能的异常点。一个序列的方差表示该序列离散的程度,方差越大,表明该序列波动越大。如果一个预测误差序列方差比较大,那么我们认为预测误差的报警阈值相对大一些才比较合理。离散度Filter利用了这一特性,取连续的预测误差序列,分为首尾两个序列(e1,e2),如果两个序列的均值差大于e1序列方差的某个倍数,我们就认为该点可能是异常点。
  阈值Filter:根据误差绝对值是否超过某个阈值过滤出可能的异常点。利用离散度Filter进行过滤时,报警阈值随着误差序列波动程度变大而变大,但是在输入数据比较小时,误差序列方差比较小,报警阈值也很小,容易出现误报。所以设计了根据误差绝对值进行过滤的阈值Filter。阈值Filter设计了一个分段阈值函数y=f(x),对于实际值x和预测值p,只有当|x-p|>f(x)时报警。实际使用中,可以寻找一个对数函数替换分段阈值函数,更易于参数调优。

四 整体架构与继续改进想法



改进的想法:
1,特征:增加多种外部特征
2,比较器:根据大量实验找出一个对数函数进行阀值的计算
3,异常值替补方案有待改进

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息