时间序列异常检测是学术界和工业界一直研究的热点和难点问题。比如腾讯内部开源的Metis项目,其实现思路是基于统计判决、无监督和有监督学习对时序数据进行联合检测。通过统计判决、无监督算法进行首层判决,输出疑似异常,其次进行有监督模型判决,得到最终检测结果。检测模型是经大量样本训练生成,可根据样本持续训练更新。Metis实现的时间序列异常检测学件在织云企业版本中已覆盖 20w+ 服务器,承载了 240w+ 业务指标的异常检测。经过了海量监控数据打磨,该学件在异常检测和运维监控领域具有广泛的应用性。
现实问题中比如监控场景,对于百万量级时间序列,而且时间序列的种类多,如何找到通用的算法同时监控百万条指标曲线?智能检测(Intelligent Anomaly Detection,IAD)作为一种无阈值的检测手段,基于业内领先的机器学习技术,在不需要用户设定阈值的情况下,可以智能化的识别出曲线异常。
以将异常检测方案简单分为有监督和无监督方法:
无监督方案:
有监督方案:
如下表是各个公司和清华大学关于异常检测方案的对比。另外,也可以参考KM相关问《智能监控——业界异常检测方案集》。
对比维度 | 百度运维部 | 滴滴出行 | Metis | 阿里巴巴 | 华为消费者BG | 清华大学 |
---|---|---|---|---|---|---|
年份/地点 | 2017年9月/北京 | 2017年9月/北京 | 2017年8月-至今 | 2018年9月/上海 | 2018年9月/上海 | 2015年开始-至今 |
整体技术框架 | 先分类,再检测 | 先分类,再检测 | 直接检测,并做分类特征 | 先分类,再检测 | 单条时间序列建模 | 先分类,再检测 |
机器学习模型(异常检测) | 同环比模型阈值模型 | 同环比模型阈值模型趋势模型 | 无监督模型,有监督模型控制图理论,多项式拟合XGBoost | 同环比模型阈值模型Holt-Winters | 无监督模型Isolation Forest | 有监督模型 Random Forest |
深度学习(单条时间序列) | 无 | 无 | 自编码器,VAE | VAE | 无 | VAE |
深度学习(海量时间序列)(端到端训练) | 无 | 无 | DNN,LSTM | 无 | 无 | 无 |
单调性/定时任务 | 无 | 无 | 线性拟合/周期性识别算法 | 无 | 无 | 无 |
开源 | 只有打标工具 | 无 | 打标工具无监督模型,有监督模型 | 无 | 无 | 只有打标工具 |
2. Metis时间序列异常检测
Metis 是腾讯开源的一系列AIOps领域的应用实践集合,当前版本开源的时间序列异常检测学件,是从机器学习的角度来解决时序数据的异常检测问题。Metis开源地址:https://github.com/Tencent/Metis
时间序列的统计算法通常是基于正态分布的假设、基于弱平稳性的假设、基于趋势性和周期性;
有监督算法的分类问题又存在政府样本不平衡、不全面、负样本稀少难以获取的问题;
基于以上两点,采用“无监督+有监督”相结合的方式形成最终的技术结构。利用统计判别和无监督算法过滤掉大量正样本;人工标注正负样本,并利用有监督算法来提升准确率。
如下表,量值的检测逻辑包括了3-sigma,EMWA,多项式等统计上的异常检测方法,以及基于决策树算法的XGBoost模型。前面多种算法的串行组合,主要是基于历史业务数据的效果来决定的;同时,前面的几种算法能够增大对正常样本的过滤能力,提高准确率。
如下表,对于率值比如业务成功率等,基于目前Monitor监控系统和哈勃监控系统的海量历史数据来看,率值相对较为平稳,因此在无监督层采用3-sigma模型,并在业务层加上历史时间段对比。经实践检验,效果能适应绝大多数场景。
时间序列是一组按照时间发生先后顺序进行排列的数据点序列。通常一组时间序列的时间间隔为一恒定值(如10秒,1分钟,5分钟)。
目前智能检测模型需要提供当前181个数据点,以及对应昨天的361个时间点和上周对应的361个点,总共组成903个时序序列,简称“903模式”。
如图,以分钟粒度,获取共(3 + 3*2+ 3*2) * 60 = 903个点。
计算时间序列特征:包括以下三类,
tsfresh是开源的提取时序数据特征的python包,能够提取出超过64种特征,堪称提取时序特征的瑞士军刀。了解更多见tsfresh官网,安装可用pip install tsfresh.
有监督的算法需要建立一个包含正负样本的数据集,数据量越大、数据质量越高,模型的性能往往就有希望质的突破。因此业界一般都会有一个标注工具或前端界面,方便业务方和后台同学标准尽可能多的数据样本。比如腾讯内部的Metis标注界面。
一般是正样本数量远多于负样本,因为业务大多数时候是正常的,少数情况是异常的,因此异常样本就更难以获得。
两种解决方案如下:
在之前metis的异常检测基础上,进一步开展了多模型策略框架的设计,以减少模型的冗余程度。
依据三种特征将时间序列分为不同的类别:平稳性,趋势性,周期性
以上两种方式,只要其中一个判断为是平稳的,则认为是平稳型;反之,认为是波动型
返回结果:平稳性、波动性
返回结果:上升、下降、平稳
平稳型时间序列:没有同环比周期性
波动型时间序列:今天、昨天、上周的数据,最大最小值归一化处理;分别计算今天-昨天的MSE、今天-上周的MSE;两个MSE取最小与设定阈值比较,小于阈值则认为有周期性
返回结果:有无同环比周期性
根据以上平稳、周期性、趋势性等特征,将时间序列划分为不同的曲线形态。
汇总有五种类型,对应可选择不同的模型
NO. | 类型 | 波动值 | 趋势 | 同环比差异 | 模型选择 |
---|---|---|---|---|---|
1 | 平稳 | 小 | / | / | 3-sigma |
2 | 不平稳、无趋势、无同环比差异 | 大 | 无 | 有 | EWMA |
3 | 不平稳、无趋势、有同环比差异 | 大 | 无 | 无 | 动态阈值 |
4 | 不平稳、有趋势、有同环比差异 | 大 | 有 | 有 | EWMA+变点检测 |
5 | 不平稳、有趋势、无同环比差异 | 大 | 有 | 无 | xgboost |
更详细地,对每一种方案介绍如下:
基本控制图理论/3-sigma:如果正常,则返回;如果异常,则进一步对比昨天同时段
对比昨天同时段,是否在昨天同时段的最大值和最小值范围内:如果是,则返回正常,否则返回异常
指数加权移动平均(EWMA: Exponentially Weighted Moving Average),相比于移动平均和3-sigma,考虑到了离当前时刻点越近的历史时刻数据,对当前时刻点的作用和表现越大。
移动平均:pandas.Series().rolling().mean()
上下边界:原始序列和移动平均序列的MAE,标准差,以此计算动态阈值上下边界
判断是否超出了上下边界:如果超出了,则认为是异常;否则,认为是正常
同“不平稳序列,无趋势,有差异: 模型选择EWMA”
变点检测在离线数据集上看效果可以,但是线上来看效果不明显,因此待定;趋势性对于业务方需要查看
将五段时间序列(五段时刻的数据)进行均值归一化处理
计算时间序列特征:包括时间序列统计特征、拟合特征、分类特征等三类
xgboost会给出属于正常、异常的概率值,设定阈值进而判定是异常还是正常。
多模型的异常检测方案,前提是根据曲线形态将时间序列划分为不同类型,本质上是利用到了时间序列的周期性和趋势性。这种方法非常类似于另外一种做法——基于时间序列预测的异常检测方法。即根据历史数据预测未来一段时间内的正常情况,再计算出实际数据和预测数据的残差,根据残差的相对大小来判断是否属于异常。时间序列的预测ARMA模型可参考作者之前发表的KM文章《【时序预测】一文梳理时间序列预测——ARMA模型》。
时间序列预测模型的决策路径如下,这一小节的详细内容将在后续时间序列预测模型的KM文章中详细阐述,敬请关注。
NAB is a novel benchmark for evaluating algorithms for anomaly detection in streaming, real-time applications. It is comprised of over 50 labeled real-world and artificial timeseries data files plus a novel scoring mechanism designed for real-time applications.
The dataset consists of real and synthetic time-series with tagged anomaly points. The dataset tests the detection accuracy of various anomaly-types including outliers and change-points.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。