时间序列论文-聚类和异常检测(二)

同样摘自知乎的回答:https://www.zhihu.com/question/29507442/answer/1212624591?utm_id=0

正巧之前做过时间序列的异常检测项目,这里介绍几种尝试过的方法,也算是抛砖引玉吧,欢迎大家讨论交流~

背景与定义

时间序列异常检测的目的就是在时间序列中寻找不符合常见规律的异常点,无论是在学术界还是工业界这都是一个非常重要的问题。

应用十分广泛,这里拿"智能运维"场景的异常检测应用举例。企业的运维场景中有海量的运维指标数据,如果单纯依靠人力来发现并定位异常,将是十分低效的,所以如果可以开发一个智能运维系统对于异常波动自动定位,将会提高运维效率。


课题背景与应用举例

现有方法

现有方法可以分为以下四类:

  • 统计方法--通过历史同期的数据分布来确定当前数据的合理波动范围。例如,k-sigma方法
  • 预测方法--比较预测值与真实值的差异,超出阈值认为是异常点。
  • 直接异常检测方法--有很多成熟算法,例如LOF,孤立森林,One-class SVM。
  • 深度学习生成方法--对数据降维再升维重构,不能良好复原的点认为是异常点。例如GAN,VAE。



现有方法及优缺点

现有的方法在时间序列数据中也许直接使用效果不好,这一点我们接下来的实验也能看出。

尝试的方法

  • 统计方法(ADTK软件包
  • 直接异常检测
  • 预测+统计方法(Prophet+3-sigma)
  • 预测+直接异常检测
  • 深度学习生成方法

--统计方法

异常检测工具包(ADTK)是一个Python软件包,用于无监督/基于规则的时间序列异常检测。无需基于训练+测试范式,本方法具有极低的时间成本。基本思想是基于历史数据的统计,按照分位数或者阈值或者统计检验的方法来判断当前点是否异常。


ADTK实验效果

实验效果:模型倾向于把过多的点识别成异常值点

--直接异常检测

这种方法成熟的方法较多,大家可以参照Python的pyod软件包。


One-class SVM实验效果

实验效果:时间序列正常的波动的高峰和低谷被判断为异常,没有充分利用时间维度的信息。

--预测+统计方法(Prophet+3-sigma)

**总体思路:**如果数据超出了预测值的合理的波动范围,认为是异常。


总体思路示意图

预测方法采用Prophet实现,3-sigma可以借助历史的波动数据来估计,例如我们将时间往前推数周,得到间隔不同周的同一时刻的数据;将时间往前推1~7天,得到同一周内不同天的同一时刻的数值。计算这些数值的标准差,作为sigma的估计。在Prophet的预测上下界的基础上分别加上和减去3-sigma得到数据波动的合理范围,超出范围用异常标注。


Prophet+3-sigma实验效果

实验效果:考虑了时间维度的相关性,准确、高效。

--预测+直接异常检测的方法

去除时间序列的趋势和周期性。用预测模型给出的预测值与真实值相减计算序列的残差,残差不包含周期性和趋势性,可以用作后续的异常检测。


框架示意图

当然为了提升模型的稳定性,我们可以在预测步骤采取多种预测方法,检测部分我们也可以用到pyod里面提供的多种方法,最终投票决定最终的结果。


模型集成

异常检测部分的11个模型介绍

实验效果

实验效果:较好。

--深度学习生成模型

这里我们尝试了LSTM-AE的方法,效果不错。

总体思路:将高维数据压缩至某一个特定维度大小,再还原至与原始数据同样的维度。训练模型使得复原数据和原数据差距尽可能小。不能良好复原的点被认为是异常点。



LSTM-AE示意图

实验效果

总结

第3、4、5模型效果较好,对于时间序列检测问题可以尝试。


注:实验结果并非答主一人完成,也感谢当时一起参与项目的小伙伴此为原创内容,转载请注明原文链接

相关推荐
大闲在人10 分钟前
7. 供应链与制造过程术语:“周期时间”
算法·供应链管理·智能制造·工业工程
小熳芋13 分钟前
443. 压缩字符串-python-双指针
算法
Charlie_lll23 分钟前
力扣解题-移动零
后端·算法·leetcode
chaser&upper23 分钟前
矩阵革命:在 AtomGit 解码 CANN ops-nn 如何构建 AIGC 的“线性基石”
程序人生·算法
weixin_4997715532 分钟前
C++中的组合模式
开发语言·c++·算法
iAkuya1 小时前
(leetcode)力扣100 62N皇后问题 (普通回溯(使用set存储),位运算回溯)
算法·leetcode·职场和发展
近津薪荼1 小时前
dfs专题5——(二叉搜索树中第 K 小的元素)
c++·学习·算法·深度优先
xiaoye-duck1 小时前
吃透 C++ STL list:从基础使用到特性对比,解锁链表容器高效用法
c++·算法·stl
松☆1 小时前
CANN与大模型推理:在边缘端高效运行7B参数语言模型的实践指南
人工智能·算法·语言模型
java干货1 小时前
为什么 “File 10“ 排在 “File 2“ 前面?解决文件名排序的终极算法:自然排序
开发语言·python·算法