目录
- 1. 背景
- 1.1. 传统阈值和智能检测
- 1.2. 常见的异常检测方案
- 1.3. 智能检测的行业方案对比
- 2. metis时间序列异常检测
- 2.1. 技术框架
- 2.2. 量值的异常检测逻辑
- 2.3. 率值异常检测逻辑
- 2.4. 数据形式
- 2.5. 特征工程
- 2.6. 样本标注
- 2.7. 正负样本不平衡的问题
- 3. 多模型策略
- 3.1. 数据分类
- 3.1.1. 数据类型:
- 3.1.2. 计算趋势性/单调性
- 3.1.3. 计算同环比周期性特征
- 3.2. 不同曲线形态的时间序列
- 3.3. 模型选择
- 3.4. 补充:基于预测的异常检测方案
- 3.1. 数据分类
1. 背景
时间序列异常检测是学术界和工业界一直研究的热点和难点问题。比如腾讯内部开源的Metis项目,其实现思路是基于统计判决、无监督和有监督学习对时序数据进行联合检测。通过统计判决、无监督算法进行首层判决,输出疑似异常,其次进行有监督模型判决,得到最终检测结果。检测模型是经大量样本训练生成,可根据样本持续训练更新。Metis实现的时间序列异常检测学件在织云企业版本中已覆盖 20w 服务器,承载了 240w 业务指标的异常检测。经过了海量监控数据打磨,该学件在异常检测和运维监控领域具有广泛的应用性。
1.1. 传统阈值和智能检测
现实问题中比如监控场景,对于百万量级时间序列,而且时间序列的种类多,如何找到通用的算法同时监控百万条指标曲线?智能检测(Intelligent Anomaly Detection,IAD)作为一种无阈值的检测手段,基于业内领先的机器学习技术,在不需要用户设定阈值的情况下,可以智能化的识别出曲线异常。
- 传统阈值异常检测存在如下不足:
- 人力成本高:传统的人工分析是人工设定阈值,需要依据专家经验人为设定,人为因素高,不同专家设定阈值可能不相同;
- 维护成本高:阈值恒定,但是业务或产品特性会随着时间变化,两者不能同步更新;
- 效果不稳定:依赖人为设定的阈值,准确率和召回率没有很好的保证。
- 智能检测对于传统阈值检测具有如下优势:
- 缓解了对开发、运维人员经验的强依赖,而是通过多周期业务指标数据进行判定;
- 可以随着产品迭代更新不受限,因为业务数据已更新;
- 支持多检测模型,不同的业务场景可以有不同的检测模型
- 对业务场景检测更具针对性。
1.2. 常见的异常检测方案
以将异常检测方案简单分为有监督和无监督方法:
无监督方案:
- 最大值,最小值波动率阈值判定法
- 3-sigma 原理
- basic detectors:控制图理论
有监督方案:
- 统计回归:linear regression、logistic regression
- 机器学习:decision tree、naive bayes、random forest、xgboost
- 深度学习: DNN,LSTM,DNN Attention,LSTM Attention, vae
1.3. 智能检测的行业方案对比
如下表是各个公司和清华大学关于异常检测方案的对比。另外,也可以参考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
2.1. 技术框架
时间序列的统计算法通常是基于正态分布的假设、基于弱平稳性的假设、基于趋势性和周期性;
有监督算法的分类问题又存在政府样本不平衡、不全面、负样本稀少难以获取的问题;
基于以上两点,采用“无监督 有监督”相结合的方式形成最终的技术结构。利用统计判别和无监督算法过滤掉大量正样本;人工标注正负样本,并利用有监督算法来提升准确率。
2.2. 量值的异常检测逻辑
如下表,量值的检测逻辑包括了3-sigma,EMWA,多项式等统计上的异常检测方法,以及基于决策树算法的XGBoost模型。前面多种算法的串行组合,主要是基于历史业务数据的效果来决定的;同时,前面的几种算法能够增大对正常样本的过滤能力,提高准确率。
2.3. 率值异常检测逻辑
如下表,对于率值比如业务成功率等,基于目前Monitor监控系统和哈勃监控系统的海量历史数据来看,率值相对较为平稳,因此在无监督层采用3-sigma模型,并在业务层加上历史时间段对比。经实践检验,效果能适应绝大多数场景。
2.4. 数据形式
时间序列是一组按照时间发生先后顺序进行排列的数据点序列。通常一组时间序列的时间间隔为一恒定值(如10秒,1分钟,5分钟)。
目前智能检测模型需要提供当前181个数据点,以及对应昨天的361个时间点和上周对应的361个点,总共组成903个时序序列,简称“903模式”。
如图,以分钟粒度,获取共(3 3*2 3*2) * 60 = 903个点。
- 今天当前时刻的前3小时
- 昨天同时刻的前3小时、后3小时
- 上周同时刻的前3小时、后3小时
2.5. 特征工程
计算时间序列特征:包括以下三类,
- 时间序列统计特征:最大值、最小值、值域、均值、中位数、方差、峰度、同比、环比、周期性、自相关系数、变异系数
- 时间序列拟合特征:移动平均算法、带权重的移动平均算法、指数移动平均算法、二次指数移动平均算法、三次指数移动平均算法、奇异值分解算法、自回归算法、深度学习算法
- 时间序列分类特征:熵特征、小波分析特征、值分布特征(直方图分布、分时段的数据量分布)
tsfresh是开源的提取时序数据特征的python包,能够提取出超过64种特征,堪称提取时序特征的瑞士军刀。了解更多见tsfresh官网,安装可用pip install tsfresh.
2.6. 样本标注
有监督的算法需要建立一个包含正负样本的数据集,数据量越大、数据质量越高,模型的性能往往就有希望质的突破。因此业界一般都会有一个标注工具或前端界面,方便业务方和后台同学标准尽可能多的数据样本。比如腾讯内部的Metis标注界面。
2.7. 正负样本不平衡的问题
一般是正样本数量远多于负样本,因为业务大多数时候是正常的,少数情况是异常的,因此异常样本就更难以获得。
两种解决方案如下:
- 重采样方法:简单可分为过采样和欠采样方法,比如over-sampling和under-sampling,可参考imbalanced-learn的Github链接。
- 聚类随机抽样:可以将正样本先进行聚类,从每一类中随机抽取一定量样本使得总正样本和负样本的数量大体相当。
3. 多模型策略
在之前metis的异常检测基础上,进一步开展了多模型策略框架的设计,以减少模型的冗余程度。
3.1. 数据分类
依据三种特征将时间序列分为不同的类别:平稳性,趋势性,周期性
3.1.1. 数据类型:
- 计算平稳还是波动:超过50%的数据都是一样的
- 按照波动程序划分量值/率值:直接计算数据的标准差和阈值来判定是波动还是平稳
以上两种方式,只要其中一个判断为是平稳的,则认为是平稳型;反之,认为是波动型
返回结果:平稳性、波动性
3.1.2. 计算趋势性/单调性
- 量值的单调性检测方法:EWMA平滑 线性回归
- 率值的单调性检测方法:3-sigma EWMA平滑 线性回归
返回结果:上升、下降、平稳
3.1.3. 计算同环比周期性特征
平稳型时间序列:没有同环比周期性
波动型时间序列:今天、昨天、上周的数据,最大最小值归一化处理;分别计算今天-昨天的MSE、今天-上周的MSE;两个MSE取最小与设定阈值比较,小于阈值则认为有周期性
返回结果:有无同环比周期性
3.2. 不同曲线形态的时间序列
根据以上平稳、周期性、趋势性等特征,将时间序列划分为不同的曲线形态。
- 平稳
- 不平稳,无趋势,有周期差异
- 不平稳,无趋势,无周期差异
- 不平稳,有趋势,有周期差异
- 不平稳,有趋势,无周期差异
3.3. 模型选择
汇总有五种类型,对应可选择不同的模型
NO. | 类型 | 波动值 | 趋势 | 同环比差异 | 模型选择 |
---|---|---|---|---|---|
1 | 平稳 | 小 | / | / | 3-sigma |
2 | 不平稳、无趋势、无同环比差异 | 大 | 无 | 有 | EWMA |
3 | 不平稳、无趋势、有同环比差异 | 大 | 无 | 无 | 动态阈值 |
4 | 不平稳、有趋势、有同环比差异 | 大 | 有 | 有 | EWMA 变点检测 |
5 | 不平稳、有趋势、无同环比差异 | 大 | 有 | 无 | xgboost |
更详细地,对每一种方案介绍如下:
- 类型一:平稳序列:模型选择3-sigma.
基本控制图理论/3-sigma:如果正常,则返回;如果异常,则进一步对比昨天同时段
对比昨天同时段,是否在昨天同时段的最大值和最小值范围内:如果是,则返回正常,否则返回异常
- 类型二:不平稳序列,无趋势,无差异: 模型选择EWMA
指数加权移动平均(EWMA: Exponentially Weighted Moving Average),相比于移动平均和3-sigma,考虑到了离当前时刻点越近的历史时刻数据,对当前时刻点的作用和表现越大。
- 类型三:不平稳序列,无趋势,有差异: 模型选择动态阈值
移动平均:pandas.Series().rolling().mean()
上下边界:原始序列和移动平均序列的MAE,标准差,以此计算动态阈值上下边界
判断是否超出了上下边界:如果超出了,则认为是异常;否则,认为是正常
- 类型四:不平稳序列,有趋势,有差异: 模型选择EWMA 变点检测
同“不平稳序列,无趋势,有差异: 模型选择EWMA”
变点检测在离线数据集上看效果可以,但是线上来看效果不明显,因此待定;趋势性对于业务方需要查看
- 类型五:不平稳序列,无趋势,无差异:模型选择xgboost
将五段时间序列(五段时刻的数据)进行均值归一化处理
计算时间序列特征:包括时间序列统计特征、拟合特征、分类特征等三类
xgboost会给出属于正常、异常的概率值,设定阈值进而判定是异常还是正常。
3.4. 补充:基于预测的异常检测方案
多模型的异常检测方案,前提是根据曲线形态将时间序列划分为不同类型,本质上是利用到了时间序列的周期性和趋势性。这种方法非常类似于另外一种做法——基于时间序列预测的异常检测方法。即根据历史数据预测未来一段时间内的正常情况,再计算出实际数据和预测数据的残差,根据残差的相对大小来判断是否属于异常。时间序列的预测ARMA模型可参考作者之前发表的KM文章《【时序预测】一文梳理时间序列预测——ARMA模型》。
时间序列预测模型的决策路径如下,这一小节的详细内容将在后续时间序列预测模型的KM文章中详细阐述,敬请关注。
参考链接
- http://km.oa.com/group/15624/articles/show/396674?kmref=search&from_page=3&no=9
- https://github.com/Tencent/Metish
- ttps://tsfresh.readthedocs.io/en/latest/index.html
- https://aim.metis.oa.com
- https://github.com/scikit-learn-contrib/imbalanced-learn
- http://km.oa.com/articles/show/464192
- https://blog.csdn.net/v_JULY_v/article/details/81410574
- https://www.cnblogs.com/wj-1314/p/9402324.html
- https://www.jianshu.com/p/7e0e2d66b3d4
补充:时间序列异常检测的资料
github重要的:
- AIOps白皮书:https://www.rizhiyi.com/assets/docs/AIOps.pdf
- AIOps手册:https://github.com/chenryn/aiops-handbook
- awesome-AIOps: https://github.com/linjinjin123/awesome-AIOps
- Anomaly Detection Learning Resources https://github.com/yzhao062/anomaly-detection-resources
- awesome-TS-anomaly-detection https://github.com/rob-med/awesome-TS-anomaly-detection
- 擎创科技 夏洛克AIOps: https://max.book118.com/html/2019/0627/6122050055002042.shtm
- Gartner-Market-Guide-for-AIOps-Platforms : https://tekwurx.com/wp-content/uploads/2019/05/Gartner-Market-Guide-for-AIOps-Platforms-Nov-18.pdf https://www.gartner.com/doc/reprints?id=1-1XS12Z80&ct=191118&st=sb
知乎/博客:
- 深度好文:腾讯运维的 AI 实践
- 腾讯云智能运维(AIOps)项目实践
- 时间序列异常检测——学习笔记
- 机器学习之:异常检测
- 基于时间序列的异常检测算法小结
- 时间序列异常检测算法
- 异常检测的N种方法,阿里工程师都盘出来了
- 时间序列异常检测算法S-H-ESD
- 基于时间序列的单指标异常检测_雅虎流量数据
- 阿里巴巴国际站之异常检测
ppt类:
- 异常检测在苏宁的实践
- ClickHouse在新浪的最佳实践
- AS深圳2018 《织云Metis时间序列异常检测全方位解析》
代码类:
- keras-anomaly-detection
- Keras的LSTM多变量时间序列预测
- 基于机器学习算法的时间序列价格异常检测(附代码)
benchmark datasets:
- Alibaba/clusterdata
- Azure/AzurePublicDataset
- Google/cluster-data
- The Numenta Anomaly Benchmark(NAB)
- Yahoo: A Labeled Anomaly Detection Dataset
- 港中文loghub数据集
- 2018 AIOPS挑战赛预赛测试集 2018 AIOPS挑战赛预赛训练集
- Numenta's NAB
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.
- Yahoo's Webscope S5
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.