时序数据异常检测算法

news2024/9/27 12:12:11

引言

异常检测的场景很多,例如:硬件的故障检测、流量的异常点的检测等场景。针对时间序列类数据的异常检测算法也有很多,业界比较流行的比如普通的统计学习方法–3σ原则和箱线图识别数据离群点,它利用检测点偏移量来检测出异常。比如普通的回归方法,用曲线拟合方法来检测新的节点和拟合曲线的偏离程度,还有人将CNN 和 RNN 技术应用到异常点的检测,但笔者通过大量的实践经验发现以上做法要么识别效果较差【比如:统计学习方法、回归方法】,要么部署难度较大【比如:RNN、CNN等】。

在综合考虑部署成本、实施可行性以及识别效果等方面,本方案提出了一种新的检测算法,此类方法在 LVS 流量异常检测中得到了很好的应用,本文将此类算法应用于污水处理领域的水质指标检测。

异常检测算法原理

1、短期环比(SS)

对于时间序列(是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列)来说,T时刻的数值对于T-1时刻有很强的依赖性。比如氨氮含量在8:00很大,在8:01时刻的概率是很大的,但是00:01时刻对于8:01时刻影响不是很大。

首先,我们可以使用最近时间窗口(T)内的数据遵循某种趋势的现象来做文章。比如我们将T设置为60,则我们取检测值(now_value)和过去60个(记为i)点进行比较,如果大于阈值我们将count加1,如果count超过我们设置的count_num,则认为该点是异常点。

在这里插入图片描述

上面的公式涉及到threshold和count_num两个参数,threshold如何获取我们将在下节进行介绍,而count_num可以根据的需求进行设置,比如对异常敏感,可以设置count_num小一些,而如果对异常不敏感,可以将count_num设置的大一些,AI检测算法中的count_num设置为57,通过参数counter_thld(百分比)来控制。

动态阈值

业界关于动态阈值设置的方法有很多,今天介绍一种针对时间序列类异常检测的阈值设置方法。通常阈值设置方法会参考过去一段时间内的均值、最大值以及最小值,我们也同样应用此方法。取过去一段时间(比如T窗口算法设置为60min)的平均值、最大值以及最小值,然后取max-avg和avg-min的最小值。之所以取最小值的原因是让筛选条件设置的宽松一些,让更多的值通过此条件,减少一些漏报的事件。AI检测算法中为了降低误报率选择是max方法。

在这里插入图片描述

2、 长期环比(LS)

上面短期环比参考的是短期内的数据,而仅仅有短期内的数据是不够的,我们还需要参考更长时间内数据的总体走势。

通常使用一条曲线对该趋势进行拟合来反应曲线的走势,如果新的数据打破了这种趋势,使曲线变得不平滑,则该点就出现了异常。曲线拟合的方法有很多,比如回归、moving average 等等。在本文中,我们使用 EWMA,即指数权重移动平均方法来拟合曲线。在 EWMA 中,下一点的平均值是由上一点的平均值,加上当前点的实际值修正而来。对于每一个 EWMA 值,每个数据的权重是不一样的,最近的数据将拥有越高的权重。

有了平均值之后,我们就可以使用 3-sigma 理论来判断新的 input 是否超过了容忍范围。比较实际值是否超出了这个范围就可以知道是否可以告警了。

3、同比(chain)

很多监控项都具有一定的周期性,其中以一天为周期的情况比较常见,比如进水量在早上0点最低,而在晚上7点最高。为了将监控项的周期性考虑进去,我们选取了某个监控项过去7天的数据。对于某个时刻,将得到7个点可以作为参考值,我们记为xi,其中i=1,…,7。

我们先考虑静态阈值的方法来判断input是否异常(突增和突减)。如果input比过去7天同一时刻的最小值乘以一个阈值还小,就会认为该输入为异常点(突减);而如果input比过去7天同一时刻的最大值乘以一个阈值还大,就会认为该输入为异常点(突增)。

注:本方案针对污水处理变量指标的异常分析,指标变量的周期性明显为一周,此外,因为数据传输过程以及传感器收集数据都需要时间,会存在一定的时间延迟,因此,具体实施时取7天内每天同一小时内的最值代替这一时刻的值。

4、同比振幅(CA)

同比的方法遇到这样的现象就不能检测出异常。比如今天是10月1日【节假日】,假设过去14天的历史曲线比今天的曲线低很多。那么今天设备出了一个小故障,曲线下跌了,相对于过去14天的曲线仍然是高很多的。这样的故障使用以上方法就检测不出来,那么我们将如何改进我们的方法呢?一个直觉的说法是,两个曲线虽然不一样高,但是“长得差不多”。那么怎么利用这种“长得差不多”呢?那就是振幅了。

怎么计算t时刻的振幅呢? 我们使用x(t) – x(t-1) 再除以 x(t-1)来表示振幅。举个例子,例如t时刻的进水量为900,t-1时刻的是1000,那么可以计算出进水量下降了10%。如果参考过去14天的数据,我们会得到14个振幅值。使用14个振幅的绝对值作为标准,如果m时刻的振幅([m(t) – m(t-1)]/m(t-1))大于amplitudethreshold并且m时刻的振幅大于0,则我们认为该时刻发生突增,而如果m时刻的振幅大于amplitudethreshold并且m时刻的振幅小于0,则认为该时刻发生突减。

在这里插入图片描述

算法接口说明

一套实用的时间序列数据异常检测算法

算法封装为类AIDetector(),通过创建对象,调用方法run()进行异常诊断,具体参数如下:

timeseries:输入数据,格式为pandas的Series格式,数据长度必须大于一周数据。

short_term:用于短期环比的时间窗口,默认为60min

counter_thld:短期环比识别阈值,古玩论坛百分比格式,即当前值大于(小于)短期时间窗口内数值的百分比,默认为95%

threshold_method:动态阈值的取值方式,默认为max

long_time:长期环比的时间窗口,默认为一周

max_thld:同比突增的判断阈值,默认为2

min_thld:同比突降的判断阈值,默认为0.1

score:集成算法的投票阈值,默认为2.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/832612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Michael.W基于Foundry精读Openzeppelin第19期——EnumerableSet.sol

Michael.W基于Foundry精读Openzeppelin第19期——EnumerableSet.sol 0. 版本0.1 EnumerableSet.sol 1. 目标合约2. 代码精读2.1 结构体Set2.1.1 _contains(Set storage set, bytes32 value) && _length(Set storage set) && _at(Set storage set, uint256 inde…

Linux的基本指令(2)

指令1:man 作用:可以查询linux指令语法内容。 格式: man 指令 安装man指令: yum install -y man-pages 例如: 查询 指令 ls 的语法内容。 man ls 查询 fork 指令的语法内容。 man fork 在man中存在9个手册&…

2023年08月编程语言流行度排名

点击查看最新编程语言流行度排名(每月更新) 2023年08月编程语言流行度排名 编程语言流行度排名是通过分析在谷歌上搜索语言教程的频率而创建的 一门语言教程被搜索的次数越多,大家就会认为该语言越受欢迎。这是一个领先指标。原始数据来自…

word转pdf怎么转?几种常用方法分享

word转pdf怎么转?在日常工作和学习中,将Word文档转换为PDF格式是一项必要的任务。不仅可以保证文档的格式不变,还可以防止文档被他人篡改。但是,Word文档并不是所有人都能够轻松打开和编辑的,而PDF文件则可以在各种设备…

Python---Matplotlib

文章目录 1.什么是matplotlib?2.实现一个简单的matplotlib绘图3.matplotlib图像结构4.matplotlib基础绘图多个坐标系显示— plt.subplots(面向对象的画图方法) 5.常见图形种类 1.什么是matplotlib? Matplotlib是一个用于绘制数据可视化图形的Python库。它是一个广泛使用的数…

SystemVerilog scheduler

文章目录 简介调度器simulation regionPreponed regionActive regionInactive regionNBA(Non-blocking Assignment Events region)Observed regionReactive regionRe-Inactive Events regionRe-NBA RegionPostponed Region PLI region:Pre-active regionPre-NBA regionPost-NBA…

锁相环是锁住正弦电压波形的0度位置还是90度位置,欢迎大家参与讨论?

文章目录 最近做三相PFC控制电源开发,里面使用到锁相环,跟大家一起讨论一下,锁相环锁的是A,B,C哪一相,是0度位置还是90度位置?讨论区:大家的观点是什么,请投票选择,后续会一起讨论正…

2023年华数杯赛题浅析

2023年华数杯作为与国赛同频的比赛(周四6点发题,周日晚8点交卷),也是暑期唯一一个正式比赛。今年的报名队伍已经高达​6000多对。基于这么多的人数进行国赛前队伍的练习,以及​其他用途。为了方便大家跟更好的选题&…

SQL 语句中 left join 后用 on 还是 where,区别大了!

目录 情况 小结 举例 情况 前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。 后来发现 join on and 不会过滤结果记录条数,只会根据and后的条件是否显示 B表的记录,A表的记录一定会显…

响应号召!加强基础研究 | GBASE南大通用坚决打好基础软件国产化攻坚战

数据库上托应用,下连基础设施,是IT系统中承上启下最关键的一环,被誉为“基础软件皇冠上的明珠”。加强数据库基础研究,从源头和底层把握关键技术,打造自主可信的大国重器,是打好基础软件国产化攻坚战的必然…

免费!功能强大的PS在线网页版推荐!

PS功能强大,但是对于设计师尤其是 UI 设计师来说获取稍许庞大,其版本更新频繁且不稳定,运行对电脑配置要求高,对于初学者来说是一种“负担”,更轻型却强大的设计工具出现,也就是本文为大家带来的 PS 在线网…

Restful开发规范以及开发流程

目录 一、RestFul开发规范 二、开发流程 一、RestFul开发规范 RESTful(Representational State Transfer)是一种用于设计和开发网络应用程序的架构风格,它强调使用标准HTTP方法和状态码来进行资源的管理和交互。以下是一些常见的RESTful开发…

NGZORRO:动态表单/模型驱动 的相关问题

官网的demo的[nzFor]"control.controlInstance"&#xff0c;似乎是靠[formControlName]"control.controlInstance"来关联的。 <form nz-form [formGroup]"validateForm" (ngSubmit)"submitForm()"><nz-form-item *ngFor&quo…

利用ChatGPT制作行业应用:哪些行业最受益

引言 随着人工智能技术的快速发展&#xff0c;ChatGPT&#xff08;Chat Generative Pre-trained Transformer&#xff09;成为了一种引人注目的工具&#xff0c;它能够生成自然流畅的对话内容。这种技术不仅在娱乐领域有着广泛的应用&#xff0c;还可以在各个行业中发挥重要作…

为了应付枯燥的工作需求,我造了一个“轮子”

项目代码已上传至Github&#xff0c;已开源&#xff0c;欢迎Star。 项目地址&#xff1a;JSON_EXTRACT_SQL 正如大家标题所见的&#xff0c;我造了一个“轮子”!!! 至于是什么需求呢&#xff1f;下面我贴出一段json&#xff1a; {"type": "test","pro…

小程序商品如何开启秒杀?

在小程序中&#xff0c;开启秒杀活动可以有效地吸引用户的注意力&#xff0c;提升销售额。下面就让我们来看看小程序商品怎么开启秒杀功能吧。 首先&#xff0c;确定秒杀活动的商品。一般来说&#xff0c;我们可以选择一些库存较多的商品或者是需要清理库存的商品作为秒杀商品…

第四次作业 运维高级 安装tomcat8和部署jpress应用

1. 简述静态网页和动态网页的区别。 静态网页 静态网页是指存放在服务器文件系统中实实在在的HTML文件。当用户在浏览器中输入页面的URL&#xff0c;然后回车&#xff0c;浏览器就会将对应的html文件下载、渲染并呈现在窗口中。早期的网站通常都是由静态页面制作的。 静态网页…

Vue2 第十八节 插槽

1.默认插槽 2.具名插槽 3.作用域插槽 插槽 ① 作用&#xff1a;让父组件可以向子组件指定位置插入html结构&#xff0c;也是一种组件间通信的方式&#xff0c;适用于父组件和子组件间通信 ② 分类&#xff1a;默认插槽&#xff0c;具名插槽&#xff0c;作用域插槽 一.默认…

面试必问,敲重点!讲一下 Android Application 启动流程及其源码?

一、写在前面 在开始之前&#xff0c;你需要知道下面几点&#xff1a; 有一份编译好的 Android 源码&#xff0c;现在的 AS 基本能满足&#xff0c;动手跟着步骤走&#xff0c;理解更深刻对 Binder 机制有一定的了解本文基于 API 26&#xff0c;用什么版本的源码并不重要&#…

【蓝图】p46角色上下车功能

这里写目录标题 p46角色上下车功能上车&#xff08;控制权切换&#xff09;让角色和汽车一起移动GetWorldTransform&#xff08;获取场景变换&#xff09;break&#xff08;拆分变换&#xff09;AttachActorToComponent&#xff08;附加Actor到组件&#xff09; 下车 p46角色上…