KPI异常检测竞赛笔记

问题描述

随着互联网,特别是移动互联网的高速发展,web服务已经深入到社会的各个领域,人们使用互联网搜索,购物,付款,娱乐等等。因此,保障web服务的稳定已经变的越来越重要。

Web服务的稳定性主要靠运维来保障,运维人员通过监控各种各样的关键性能指标(KPI)来判断Web服务是否稳定,因为KPI如果发生异常,往往意味着与其相关的应用发生了问题。图1中展示了一个KPI异常的例子——某互联网公司的网页访问量数据发生了异常,其中红色圆圈标示了KPI发生的异常。


这些KPI大致分为两种类型:服务KPI和机器KPI。服务KPI是指能够反映Web服务的规模、质量的性能指标,例如,网页响应时间,网页访问量,连接错误数量等。机器KPI是指能够反映机器(服务器、路由器、交换机)健康状态的性能指标,例如,CPU使用率,内存使用率,磁盘IO,网卡吞吐率等。

KPI异常检测指的是通过算法分析KPI的时间序列数据,判断其是否出现异常行为。这里的难点主要有:

  1. 异常发生的频率很低。在实际的运维场景中,业务系统很少发生异常,因此可供分析的异常数据很少。
  2. 异常种类的多样性。因为实际的业务系统很复杂,并且会不断更新升级,所以故障的类型多种多样,从而导致了异常种类的多样性。
  3. KPI的多样性。KPI有表现为周期型的,有表现为稳定型的,有表现为不稳定的,持续波动型,如图2,3,4所示。

周期型KPI:


稳定型KPI

不稳定型KPI

正是因为这些难点,导致现有的异常检测算法的准确率(precision)和召回率(recall)都不高,存在大量的误报和漏报。这不仅增加了运维人员的工作量,而且导致运维人员无法及时准确地发现异常的KPI。

因此,为了提高异常检测算法的准确率和召回率,我们收集了来自众多互联网公司的真实场景的KPI数据,经过脱敏处理后提供出来,希望更多的学术界和工业界的人员参与进来,一起提高异常检测算法的性能。

常见问题及解决方案

1 针对周期型KPI的异常检测算法

Time Series Decomposition: Yingying Chen, Ratul Mahajan, Baskar Sridharan, and Zhi-Li Zhang. A provider-side view of web search response time. In Proceedings of the ACM SIGCOMM 2013 conference on SIGCOMM, pages 243–254. ACM, 2013.

Holtwinters: He Yan, Ashley Flavel, Zihui Ge, Alexandre Gerber, Daniel Massey, Christos Papadopoulos, Hiren Shah, and Jennifer Yates. Argus: End-to-end service anomaly detection and localization from an isp’s point of view. In INFOCOM, 2012 Proceedings IEEE, pages 2756–2760. IEEE, 2012.

2 针对稳定型KPI的异常检测算法

静态阈值: Amazon cloudwatch alarm. docs.aws.amazon.com/Ama.

Moving Average: David R. Choffnes, Fabián E. Bustamante, and Zihui Ge. Crowdsourcing service-level network event monitoring. In Proceedings of the ACM SIGCOMM 2010 Conf.

Weighted Moving Average: Balachander Krishnamurthy, Subhabrata Sen, Yin Zhang, and Yan Chen. Sketch-based change detection: methods, evaluation, and applications. In Proceedings of the 3rd ACM
SIGCOMM conference on Internet measurement, pages 234–247. ACM, 2003.

Exponentially Weighted Moving Average: Balachander Krishnamurthy, Subhabrata Sen, Yin Zhang, and Yan Chen. Sketch-based change detection: methods, evaluation, and applications. In Proceedings of the 3rd ACM SIGCOMM conference on Internet measurement, pages 234–247. ACM, 2003.

ARIMA: Yin Zhang, Zihui Ge, Albert Greenberg, and Matthew Roughan. Network anomography. In Proceedings of the 5th ACM SIGCOMM Conference on Internet Measurement, IMC’05, pages 30–30, Berkeley, CA, USA, 2005. USENIX Association.

3 针对不稳定型KPI的异常检测算法

Extreme Value Theory: Siffer A, Fouque P A, Termier A, et al. Anomaly Detection in Streams with Extreme Value Theory[C]//Proceedings of the 23rd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. ACM, 2017: 1067-1075.

Wavelet: Paul Barford, Jeffery Kline, David Plonka, and Amos Ron. A signal analysis of network traffic anomalies. In Proceedings of the 2nd ACM SIGCOMM Workshop on Internet measurment, pages 71–82. ACM, 2002.

4 针对异常数据量太少, 采用异常注入算法

Fernando Silveira, Christophe Diot, Nina Taft, and Ramesh Govindan. Astute: Detecting a different class of traffic anomalies. In Proceedings of the ACM SIGCOMM 2010 Conference, SIGCOMM ’10, pages 267–278. ACM, 2010.
Anukool Lakhina, Mark Crovella, and Christophe Diot. Mining anomalies using traffic feature distributions. In Proceedings of the 2005 Conference on Applications, Technologies, Architectures, and Protocols for Computer Communications, SIGCOMM ’05, pages 217–228. ACM, 2005.
Anukool Lakhina, Mark Crovella, and Christophe Diot. Diagnosing network-wide traffic anomalies. In Proceedings of the 2004 Conference on Applications, Technologies, Architectures, and Protocols for Computer Communications, SIGCOMM ’04, pages 219–230. ACM, 2004

KPI异常检测模型

1、数据

数据集包括四列,KPI ID为某个硬件、产品的编号,TimeStamp为时间戳,value为该时间是值,label用于标注是否异常。

KPI ID | Timestamp |value |label
---|---|---|---
str1| 1503831000 | 10.8|1
str2 | 1503831060 | 11.2|0
...|...|...|

数据集有2个,分别为train.csv test.csv。 其中,train.csv包含label列,test.csv不包含label列。

2、数据预处理

数据编码

数据中,KPI ID列为字符串,所以需要对该列进行OneHot编码,将字符串类型转换为矩阵类型。

数据拼接

对于每个KPI ID来说,在train.csv以及test.csv中,数据是根据时间戳顺延的,所以在抽取移动窗口特征的时候,可以将两部分数据根据KPI ID以及时间戳排序进行拼接。

特征抽取

模型中的特征为基于时间窗口的特征,将数据按照时间顺序排列,通过计算窗口中的数据来构建每个数据点的特征向量。

特征1、z_score

标准分,一个个体到集合mean的偏离,以标准差为单位,表达个体距mean相对“平均偏离水平(std dev表达)”的偏离程度,常用来比对来自不同集合的数据。

在模型中,z_score用来衡量窗口数据中,中间值的偏离程度。

算法流程

1 排除最后一个值;

3 求剩余序列的平均值;

4 全序列减去上面这个平均值;

5 求剩余序列的标准差;

6 ( 中间三个数的平均值-全序列均值)/ 全序列标准差

特征2、格拉斯异常值

Grubbs测试是一种从样本中找出outlier的方法,所谓outlier,是指样本中偏离平均值过远的数据,他们有可能是极端情况下的正常数据,也有可能是测量过程中的错误数据。使用Grubbs测试需要总体是正态分布的。

算法流程

样本从小到大排序;

求样本的mean和std.dev.;

计算min/max与mean的差距,更大的那个为可疑值;

求可疑值的z-score (standard score),如果大于Grubbs临界值,那么就是outlier;

Grubbs临界值可以查表得到,它由两个值决定:检出水平α(越严格越小),样本数量n
排除outlier,对剩余序列循环做 1-5 步骤。

由于这里需要的是异常判定,只需要判断tail_avg是否outlier即可。

特征3、stddev_from_average

该算法类似于3sigma准则。 当数据服从高斯分布时,数值分布在(μ-3σ,μ+3σ)区间内的概率为99.74。所以,可以这么认为,当数据分布区间超过这个区间时,即可认为是异常数据。该算法使用(t-mean)/std 作为特征,用于衡量中间三个值的平均值相对于3σ的距离。

该算法的特点是可以有效屏蔽 “在一个点上突变到很大的异常值但在下一个点回落到正常水平” 的情况,即屏蔽单点毛刺:因为它使用的是3个点的均值(有效缓和突变),和整个序列比较(均值可能被异常值拉大),导致判断正常。

算法流程

1、求窗口数据的平均值。 (mean)

2、求窗口数据的标准差。 (std)

3、求窗口数据中间3个值的平均值。 (t)

4、使用(t-mean)/std作为特征。

特征4、stddev_from_ewma

类似于特征3,不过在计算(t-mean)/std时,使用的mean,std分别为对窗口数据进行移动加权平均后的平均值以及方差。

特征5、histogram_bins

该算法和以上都不同,它首先将timeseries划分成15个宽度相等的直方,然后判断tail_avg所在直方内的元素是否<=20,如果是,则异常。

直方的个数和元素个数判定需要根据自己的metrics调整,不然在数据量小的时候很容易就异常了。

特征6、median_absolute_deviation

```
Median

大部分情况下我们用mean来表达一个集合的平均水平(average),但是在某些情况下存在少数极大或极小的outlier,拉高或拉低了(skew)整体的mean,造成估计的不准确。此时可以用median(中位数)代替mean描述平均水平。Median的求法很简单,集合排序中间位置即是,如果集合总数为偶数,则取中间二者的平均值。

Median of deviation(MAD)

同mean一样,对于median我们也需要类似standard deviation这样的指标来表达数据的紧凑/分散程度,即偏离average的平均距离,这就是MAD。MAD顾名思义,是deviation的median,而此时的deviation = abs( 个体 – median ),避免了少量outlier对结果的影响,更robust。
```

绝对中位差实际求法是用原数据减去中位数后得到的新数据的绝对值的中位数。

1、原数据-中位值=新数据

2、新数据的绝对值的中位数作为特征。

特征7、mean_subtraction_cumulation

该特征类似于3-sigma准则。

不能理解地方: 为何减去最后一个值?

算法流程

1、排除全序列(暂称为all)最后一个值(last datapoint),求剩余序列(暂称为rest,0..length-2)的mean;

2、rest序列中每个元素减去rest的mean,再求标准差;

3、求窗口数据中间点到rest mean的距离,即 abs(last datapoint – rest mean);

总特征

总的训练特征为:时间窗口特征 + OneHot特征 + Timestamp所属的星期作为特征,label选取时间窗口中间点的标签。

因为选择了窗口数据的中间位置的点作为label值,所以在窗口移动过程中,在数据起始点和终结点会丢失 datasize -( windowsize / 2 ) 个数据。 (datasize为数据的总量,windowsize为时间窗口的大小).

在最终提交的结果中,确实的数据点的预测结果,用0补充。

3、模型选择

随机森林分类。

XGBoost分类

编辑于 2018-08-03