赞
踩
相关:
论文名称:UNRAVEL ANOMALIES: AN END-TO-END SEASONAL-TREND DECOMPOSITION APPROACH FOR TIME SERIES ANOMALY DETECTION
会议期刊:目前还未发表,
论文地址:arxiv | 阿里云盘
源码地址:https://github.com/dawnvince/EasyTSAD
这篇论文介绍了一个名为TimeSeriesBench的综合基准测试平台,用于评估单变量时间序列异常检测模型。
主要贡献:
在线排行榜:论文介绍了第一个时间序列异常检测算法的在线排行榜,从多个维度(如训练、推理、评估和数据集)增强了现有的评估框架。这帮助行业专家选择最佳的学术算法,并提供了工业级的评估方法。
最先进方法的评估:使用TimeSeriesBench评估了多种知名的最先进(SOTA)异常检测方法。结果提供了新的见解和未来优化的方向。
EasyTSAD工具包:开发并发布了名为EasyTSAD的全面评估工具包,该工具包使用Python构建,提供了数据处理、模型训练和评估的一站式解决方案。该工具包是开源的,旨在加速现有异常检测算法的优化。
精确的异常标注:为了解决现有公共数据集中异常标注不准确的问题,作者与一家全球公司合作,精细标注了在线系统中的异常。这些数据集作为TimeSeriesBench的一部分公开提供。
工业级问题和TimeSeriesBench关于基准单变量时间序列异常检测算法的解决方案。
如图所示,从上往下看:
offline training
离线训练,这个过程中需要解决的是当前学习模式的负载问题,包括存储负载与维护的成本;而本论文提出的 benchmark 的解决方案是提 出学习模式分类法集成成本友好型学习模式。然后图片的右边进行了一个包裹操作,大概的意思就是,前面提到的所有,都可以在我这里(TimeSeriesBench)解决。
前言、背景、动机我们统统跳过了,真的看麻了。
不过这里作者对异常类型的概述可以参考一下。
根据行为驱动的分类法,异常类型可以粗略地分为 点异常(Point-wise) 和 模式异常(Pattern-wise)(图2)。 点异常指的是在单个时间点或非常短的时间内出现的峰值或故障等意外事件时间段。模式异常值表示跨越特定时间范围的异常子序列,通常表现为数据中的不协调或不一致。
这里需要注意作者概述的几个重要的概念,这些对于后面源码解析、配置参数关系密切。
朴素模型(Naive schema)。在这种模式下,我们输入一个时间序列用于训练/拟合模型,并且专门使用训练好的检测器在该特定序列上进行在线检测。直观地说,这使得模型能够根据足够的数据对时间模式做出更精确的描述。然而值得注意的是,单个序列的数据量往往不足。
一体化架构(All-in-one schema)。在这种模式下,仅使用数据集中的所有序列训练一个统一的模型实例,然后在数据集的所有序列中实时应用该模型进行异常检测。这种架构使模型能够接触各种系列中嵌入的更多模式,从而为模型提供了额外的机会来学习时间序列之间的共同且固有的特征。然而,由于不同系列对异常的定义不同,这可能会导致在线检测异常时(即特定曲线中存在的异常不一定被视为其他曲线中的异常)模型被相互矛盾的信息所混淆。一些新的方法已经采用了这种受实际需求驱动的架构。
零样本架构(Zero-shot schema)。在零样本模式下,整个数据集被分成两个不相交的子集。一个子集用于模型训练,另一个用于评估检测性能。这种架构是在实际考虑的基础上设计出来的。具体来说,它处理了这样一个情况:系统在没有历史数据的情况下新部署,并且需要一个健壮且适应性强的模型来穿越这个差距。这要求模型具有更高的能力来捕捉时间序列的内在表示。
论文中提出的评估标准主要是针对实时异常检测需求。这个与我们前面提到的 Bagel,Donut,LOF-VAE 是一致的,需要考虑检测延迟等,也就是我们前面提到过的 best F1-score 的计算法和准许 delay 的方法。
此外还有基于事件 event-wise 的评估方法,这个值得小伙伴们研究研究,如上图所示,如果一个 event 发生后,仅仅提供1个异常点,那么我们可以认为这个是突刺,但是如果出现多个连续的异常,我们可以认为这是一个事件event。在实际需求中,通常情况下我们也会更加关注 event-wise 的评估方法。我们可以认为异常发生,会带有一定长度的影响范围,而event-wise 就是指这种情况。
这里我们主要需要知道两方面内容:
本benchmark给小伙伴们实现了很多算法
;如果你们有新的算法,可以基于本benchmark直接评估
。当然,还有一层还有就是,小伙伴们引用本benchmark记得在reference中明确指出。
这里我们不做介绍,感兴趣的小伙伴们可以下载源码,跑一下这些实验。
当然,也可以基于这个benchmark开发自己的算法,跑完所有的实验后记得发一篇论文,然后也贴出这样的表格,表示自己的算法也很优秀。
前往 https://github.com/dawnvince/EasyTSAD 可以查看源码内容。这里我不关注计算细节,主要希望通过其中某一两个算法介绍整个benchmark的运行流程。
我们这里选中的是 AR 算法。
首先将源码 clone 到本地,并且前往 https://github.com/CSTCloudOps/datasets 克隆数据集到我们的项目中,最后的目录文件如下:
解下安装相关依赖
首先需要安装 toml ,避免出现 No module named 'toml'
这样的错误提示。
$ pip install toml
同样地,需要安装 poetry
$ pip install poetry
安装完成以后,我们需要使用 poetry
安装相关依赖到虚拟环境中。
$ poetry install
接着点击运行 Examples/run_baseline/run.py
还是报错如下:
这个是因为找不到 datasets 目录导致的。需要修改如图所示的目录
建议使用绝对路径,并注释掉后面一部分代码(用于指定特别数据集的指定KPI),如下图所示:
如果还提示别的缺包,使用 pip install
命令安装即可,最终执行效果大概如下:
执行的过程中,可以使用 nvidia-smi
命令查看 GPU 显存使用情况。
最后输出结果大概如下:
可以查看结果文件中的评分,以及基于事件识别的绘图等等,具体内容请自行了解。
这部分内容请参考 https://github.com/dawnvince/EasyTSAD/tree/main 的 README 内容,按照步骤逐个完成即可。比如准备数据,编辑配置文件,编写自己方法的主要类,继承于 BaseMethod 类等。
其他参考内容包括:
也可以考虑直接在AR的基础上进行修改,然后完成自己的模型结构开发,优化过程开发等等。
此外,需要注意的是,作者对原始数据的缺失点都进行了填充,所以如果小伙伴们的算法需要关注 “由于缺失引起的异常” 的话,请不要使用这个 benchmark。
其他一些配置细节这里不再重复介绍,需要根据需要结合文档进行调整。
前面在第24章的时候,提到过 benchmark 的作用,也提到过需要发paper的小伙伴们可以考虑这方面的工作,另外开辟一条赛道,个人认为这篇论文就是一个很好的例子,尽管目前还没有正式发表,但总体而言这篇论文还是很值得研究学习。
这篇论文在提供一个全面且实际的评估平台方面做出了重要贡献,其提出的多样化数据集、新评估标准和多种学习模式为时间序列异常检测的研究和应用提供了宝贵的资源和指导。
最后我们总结一下这篇论文值得参考的地方:
希望能帮到各位小伙伴 ~ 万分感谢各位的点赞、评论与关注支持 ~
Smileyan
2024.05.31 23:24
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。