异常检测学习笔记-STL(一)

栏目: 编程工具 · 发布时间: 6年前

内容简介:最近在做业务指标异常检测与服务故障诊断,参考了腾讯、阿里等互联网大厂的解决方案,觉得有必要整理一下。我们生长于外卖业务,并不是专门做系统运维的团队,也是希望先从外卖业务特点进行分析。外卖业务并不会出现像双十一购物网站那样的流量暴增,它呈现出很强的季节性(一段时间内的周期性变化,外卖业务正常是7天一个周期)、趋势性(时间序列数据总体变化情况,是一直下降还是一直上升)。之前只是简单的使用Holt-winter算法对业务监控指标进行预测,基于预测值与真实值的比较,识别异常数据点,但是我们呈现出季节性的时间序列数

写在前面

最近在做业务指标异常检测与服务故障诊断,参考了腾讯、阿里等互联网大厂的解决方案,觉得有必要整理一下。我们生长于外卖业务,并不是专门做系统运维的团队,也是希望先从外卖业务特点进行分析。外卖业务并不会出现像双十一购物网站那样的流量暴增,它呈现出很强的季节性(一段时间内的周期性变化,外卖业务正常是7天一个周期)、趋势性(时间序列数据总体变化情况,是一直下降还是一直上升)。之前只是简单的使用Holt-winter算法对业务监控指标进行预测,基于预测值与真实值的比较,识别异常数据点,但是我们呈现出季节性的时间序列数据中还存在季节成分,有时也会因为天气等外力因素使时间序列数据存在比较明显的随机与误差成分,需要根据实际情况实时调整异常识别参数。STL方法给我们提供了一个思路,本文主要针对STL进行简单的总结,希望内容通俗易懂。

STL(Seasonal + Trend + Loess)的理解

外卖业务数据具有比较强的季节性与趋势性,STL可以帮助我们做如下图步骤的拆解:

异常检测学习笔记-STL(一)

在做这个数据拆分之前,需要明确两个点

  1. 确定数据周期,外卖业务的一个常规周期为7天,在周一至周五又可以将数据周期缩短为1天,如果对数据周期性不确定的,可以通过傅里叶变换计算数据周期。
  2. 拆分规则,是选择 加法 方式还是 乘法 方式。

    • 加法方式:原始数据 = 平均季节数据 + 趋势数据 + 残差

      异常检测学习笔记-STL(一)

      这种方式,随着时间的推移季节数据不会有太大的变化,在以七天为一大周期的业务数据更适合这样的拆分方式。

    • 乘法方式:原始数据 = 季节数据 趋势数据 残差

      异常检测学习笔记-STL(一)

      这种方式,直观感受是随着时间的推移季节数据波动会非常明显。

怎么计算趋势数据

我们看过股票分析软件中会有30日均线、60日均线这样的通过移动平均统计法得到的统计数据,它的作用就是可以帮助用户判断出时序数据的总体变化趋势,这里也是使用这样的方式直接计算。

异常检测学习笔记-STL(一)

上图是分解后形成了:趋势数据 + 其他数据。

下图是去到其他数据最终的趋势数据。

异常检测学习笔记-STL(一)

怎么计算平均季节数据

现在知道趋势数据了,然后进行下面的操作:

  • 原始数据 - 趋势数据 = 季节数据 + 残差数据 = S

    异常检测学习笔记-STL(一)
  • 数据集S中对不同时期的相同时间点数据进行相加得到数据集SP,然后除以原始数据的周期数c,得到一个平均季节数据集H,然后复制c次数据集H,将得到平均季节数据,如下图:

    异常检测学习笔记-STL(一)

获取残差数据

原始数据 - 趋势数据 - 平均季节数据 = 残差

如下图:

异常检测学习笔记-STL(一)

最终每一步分解的数据合成一个图,如下:

异常检测学习笔记-STL(一)

我们用分解的这些数据可以做什么?

数据如果有异常,都会体现在残差数据集中。我们怎么从残差数据中早出有问题的数据时间点呢?我理解的会有下面几种方式:

  • 确认残差数据满足正太分布,或者近似正太分布,可以计算出残差数据集的标准差,常规方式是数据点与均值的差值绝对值在3倍标准差外,则认为是异常点,也就是3sigma方案。也有例外,下图的残差数据集可能不能被上述方法将异常检测出来,这段数据连续几分钟都是在3倍标准差内,但是出现这种的可能性(1-99.7%)^n,这种情况出现的概率相当低,如果出现也应该被识别为异常点。

    异常检测学习笔记-STL(一)
  • 使用历史数据分段平均的方式,对我们的原始数据进行未来数据点补全,对得到的新数据集使用STL方法去除残差数据,得到业务数据的基线,通过基线与真实值的比对判断是否是异常点。

问题思考

  • 业务运行过程中会经历很多突发事件,比如红包促销,服务器宕机,这些事件大部分没有规律性,怎样可以降低它们对基线拟合的影响。
  • 在不同业务时段,判断异常点的n倍sigma指标也可能不一样,需要分段执行不同的判断标准(在流量高峰可能需要有更多的容忍区间)。
  • 人为对异常检测结果进行标记,如何将这些标记及时反馈到算法中,让其自动化调整判断标准。

这些问题将在后续的总结中给出。

参考

注:本文中所有图片均来自 Anomaly


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

UNIX编程艺术

UNIX编程艺术

Eric S. Raymond / 姜宏、何源、蔡晓俊 / 电子工业出版社 / 2011-1 / 69.00元

本书主要介绍了Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验,由公认的Unix编程大师、开源运动领袖人物之一Eric S. Raymond倾力多年写作而成。包括Unix设计者在内的多位领域专家也为本书贡献了宝贵的内容。本书内容涉及社群文化、软件开发设计与实现,覆盖面广、内容深邃,完全展现了作者极其深厚的经验积累和领域智慧。一起来看看 《UNIX编程艺术》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具