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

news/2024/5/20 6:03:01 标签: 聚类, 算法, 时间序列

同样摘自知乎的回答: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模型效果较好,对于时间序列检测问题可以尝试。

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


http://www.niftyadmin.cn/n/5022777.html

相关文章

Android studio实现登录验证后返回token及用户信息,使用token获取用户信息并生成列表展示

大概时序图 登录成功保存token,然后带token请求获取用户列表 实现效果: 依赖 build.gradle(:app) dependencies {implementation androidx.recyclerview:recyclerview:1.2.1implementation com.google.code.gson:gson:2.8.9implementation com.tenc…

数据结构——排序算法——希尔排序

希尔排序本质上是对插入排序的一种优化,它利用了插入排序的简单,又克服了插入排序每次只交换相邻两个元素的缺点。它的基本思想是: 1.将待排序数组按照一定的间隔分为多个子数组,每组分别进行插入排序。这里按照间隔分组指的不是…

实训笔记9.12

实训笔记9.12 Scala笔记一、学习Scala的目的二、Scala的基本概念2.1 JDK1.8版本的新特性2.2 Scala的运行机制 三、Scala的基本语法3.1 Scala中输出语句、键盘输入、注释语法3.1.1 Scala注释三种,和Java一模一样的3.1.2 Scala键盘输入3.1.3 Scala输出 3.2 Scala变量和…

Scrum工具:助力快速迭代和高效交付

​随着软件开发行业的不断发展,敏捷开发方法逐渐成为了主流。Scrum作为敏捷开发中最具代表性的工具之一,其在流程设计、团队协作以及项目管理等方面发挥着重要作用。本文将深入探讨Scrum的优势以及如何运用Scrum提升团队效率与质量。 一、Scrum敏捷开发工…

CPU-主存储器-副存储器-RAM-ROM-内存-运存-外存-硬盘-闪存-GPU-显存——关于这一系列概念的理解

文章目录 概念梳理CPU主存储器/内存/RAM/运存ROM副存储器/外存硬盘(电脑)、闪存(手机)GPU显存 可参考的手机内部结构示意图 做计算机组成原理上的题的时候,发觉自己对RAM和ROM的概念理解有所缺失,在看完一些…

GIS入门:GIS到底是什么,GIS的概念、构成结构、功能和应用

地理信息系统(Geographic Information System, 简称GIS) GIS从广义上讲,是一门集地理学与地图学以及遥感和计算机科学等众多学科于一体的综合性前沿交叉学科; 从狭义上说,它是在计算机硬、软件系统支持下,对…

Linux IO函数

read/write函数&#xff1a; 1.read #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); 参数&#xff1a; -fd&#xff1a;文件描述符&#xff0c;open得到的&#xff0c;通过这个文件描述符操作某个文件 -buf&#xff1a;需要读取数据存放的地方…

【服务器 | 宝塔】宝塔面板卸载重装教程:清理删除宝塔面板并重新开始

宝塔面板卸载重装怎么操作?我们很多用户可能安装宝塔之后会经常看一下有没有新版本&#xff0c;如果有新版直接右上角 宝塔面板卸载重装怎么操作?我们很多用户可能安装宝塔之后会经常看一下有没有新版本&#xff0c;如果有新版直接右上角”更新”升级一下版本就可以了&#…