python异常监测-ARIMA(自回归积分滑动平均模型)

系列文章目录

Python异常检测- Isolation Forest(孤立森林)
python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS)
python异常检测-局部异常因子(LOF)算法
Python异常检测- DBSCAN
Python异常检测- 单类支持向量机(One-Class SVM)
Python异常检测-3Sigma
Python异常检测-K最近邻算法(KNN)
Python异常检测-主成分分析(PCA)


文章目录

  • 系列文章目录
  • 前言
  • 一、时间序列数据
  • 二、自回归积分滑动平均模型(ARIMA)
    • 1. ARIMA组成部分
    • 2. 重要参数
  • 三、ARIMA模型检测异常
  • 四、Python实现


前言

时间序列分析是一种非常实用且强大的技术,用于研究随时间变化的数据。异常检测是识别偏离数据正常趋势的值或事件的过程。

一、时间序列数据

时间序列数据(time series data)是在不同时间上收集到的数据,用于所描述现象随时间变化的情况。这类数据反映了某一事物、现象等随时间的变化状态或程度。
时间序列允许我们分析过去,理解现在,并预测未来。此外,时间序列帮助我们发现数据中的隐藏模式和趋势,这些可以用于改进决策和策略。
在这里插入图片描述

二、自回归积分滑动平均模型(ARIMA)

ARIMA模型结合了自回归(AR)、差分(I)和移动平均(MA)三种方法,能够对非平稳时间序列数据进行建模和预测,用于非平稳时间序列建模和预测。

1. ARIMA组成部分

  • 自回归(AR):自回归(AR)部分用于描述当前值与前若干个历史值之间的线性关系。

  • 差分(I):积分(I)部分通过对时间序列进行差分处理,以消除非平稳性,使其变为平稳时间序列。差分的次数由参数(d)表示,通常进行一阶差分,很少进行二阶差分‌。

  • 移动平均(MA):移动平均(MA)部分使用过去的预测误差来修正预测

2. 重要参数

RIMA模型通常用三个参数(p, d, q)来表示,其中:

  • p 是自回归项的阶数,表示当前值与多少个过去值有关。

  • d 是差分的阶数,表示需要进行多少次差分操作。

  • q 是移动平均项的阶数,表示当前值与多少个过去的误差项有关。

三、ARIMA模型检测异常

ARIMA(自回归积分滑动平均模型)模型属于基于预测的异常值检测方法,核心思想是利用模型的预测能力来识别与预期值偏差较大的数据点,这些点往往被视为异常值。

利用ARIMA模型实现检测异常时,一般需要针对具体的应用场景和数据特点,根据历史经验或者领域知识选择适当的阈值方法,并进行实验和验证。可以采用以下几种阈值作为判断标准:

  • 绝对阈值:绝对阈值是指在时间序列中设置一个固定的数值作为阈值,超过该数值的观测值被认为是异常值。这种方法简单直观,但需要根据具体情况选择合适的阈值。
  • 相对阈值:相对阈值是指根据时间序列的统计特性,如均值、标准差等,设置一个相对的阈值来判断异常值。常用的相对阈值方法包括Z-score、百分位数等。
  • 动态阈值:动态阈值是指根据时间序列的变化情况,自适应地调整阈值。常见的动态阈值方法包括滑动窗口、指数加权移动平均等。

下图以一组以三个标准差基于ARIMA进行异常值探测的数据可视化的结果。
在这里插入图片描述

四、Python实现

首先导入必要的库的代码,然后读取数据。然后定义了移动平均线异常检测的函数、ADF单位根检验的函数以及ARIMA模型进行异常检测的函数。最后,通过调用这些函数来检测读取到的数据中的异常。
(基于AI生成的python代码)


import pandas as pd
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.tsa.stattools import adfuller
 
# 读取数据
data = pd.read_csv('data.csv', header=0, names=['value'])
 
# 移动平均线异常检测
def test_for_anomalies_with_sma(timeseries, threshold):
    rol_mean = timeseries.rolling(window=2).mean()
    rol_std = timeseries.rolling(window=2).std()
    lower_bound = rol_mean - (threshold * rol_std)
    upper_bound = rol_mean + (threshold * rol_std)
    fig = plt.figure(figsize=(12, 6))
    ax = fig.add_subplot(111)
    timeseries.plot(ax=ax, color='blue', label='Original')
    ax.plot(lower_bound, color='red', label='Lower Bound')
    ax.plot(upper_bound, color='green', label='Upper Bound')
    ax.legend(loc='best')
    plt.title('Anomaly Detection with Moving Standard Deviations')
    plt.show()
 
# ADF单位根检验
def perform_unit_root_test(timeseries):
    print('ADF Test Statistic: %f' % adfuller(timeseries)[0])
    print('p-value: %f' % adfuller(timeseries)[1])
    if adfuller(timeseries)[1] <= 0.05:
        print('Series is not stationary')
    else:
        print('Series is stationary')
 
# ARIMA模型异常检测
def detect_anomalies_using_arima_model(timeseries):
    # 模型拟合
    model = ARIMA(timeseries, order=(0, 1, 1))
    model_fit = model.fit()
    # 对拟合的模型进行预测
    y_pred = model_fit.predict(start=0, end=len(timeseries)-1, dynamic=True)
    # 绘制原始数据和预测数据
    fig = plt.figure(figsize=(12, 6))
    ax = fig.add_subplot(111)
    timeseries.plot(ax=ax, color='blue', label='Original')
    ax.plot(y_pred, color='red', label='Prediction')
    ax.legend(loc='best')
    plt.title('Anomaly Detection with ARIMA Model')
    plt.show()
 
# 调用函数
test_for_anomalies_with_sma(data['value'], 3)
perform_unit_root_test(data['value'])
detect_anomalies_using_arima_model(data['value'])

参考
时间序列数据
时间序列分析的异常检测综述
使用ARIMA模型检测异常时应采用哪个阈值
数据预处理之基于预测的(线性,ARIMA)异常值检测#matlab

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python之数据结构与算法(数据结构篇)-- 元组

一、元组的概念 其实&#xff0c;所谓的“元组”就是一组不能改变的特殊数组(一般情况下)&#xff0c;这里我们去创建一个“小羊元组”&#xff0c;大家就能更加明白其中的意思了。 二、元组实现思路 1.我们去定义一个“羊村小羊”的元组 # 创建一个"羊村小羊"的元…

SystemC学习(2)— APB_SRAM的建模与测试

SystemC学习&#xff08;2&#xff09;— APB_SRAM的建模与测试 一、前言 二、APB_SRAM建模 编写APB_SRAM模型文件apb_sram.h文件如下所示&#xff1a; #ifndef __APB_SRAM_H #define __APB_SRAM_H#include "systemc.h"const int ADDR_SIZE 32; const int DATA_…

【专题】计算机网络之数据链路层

数据链路层的地位&#xff1a;网络中的主机、路由器等都必须实现数据链路层。 数据链路层信道类型&#xff1a; 点对点信道。 使用一对一的点对点通信方式。 广播信道。 使用一对多的广播通信方式。 必须使用专用的共享信道协议来协调这些主机的数据发送。 1. 使用点对点信道…

三次握手与四次挥手

1.三次握手 1.1状态机 客户端 SYN_SENT&#xff1a;客户端发送SYN报文段请求建立连接 ESTABLISHED&#xff1a;在收到服务端发来的SYN请求报文以及确认报文后就建立客户端到服务端的连接 服务端 LISTEN&#xff1a;一开始时LISTEN状态&#xff0c;等待客户端的SYN请求 SY…

群晖系统基本命令

切换超级管理员 sudo -i 查询系统 运行的所有服务 synoservicecfg --list 启动服务命令(该命令需要使用超级管理员) #老版本群晖使用synoservice命令 synoservice --start 服务名称#新版本群晖使用systemctl命令 systemctl start 服务名称 synoservice所管理的服务配置文…

MySql数据库中数据类型

本篇将介绍在 MySql 中的所有数据类型&#xff0c;其中主要分为四类&#xff1a;数值类型、文本和二进制类型、时间日期、String 类型。如下&#xff08;图片来源&#xff1a;MySQL数据库&#xff09;&#xff1a; 目录如下&#xff1a; 目录 数值类型 1. 整数类型 2. …

【网站项目】SpringBoot397学校财务管理系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

【论文阅读】SRGAN

学习资料 论文题目&#xff1a;基于生成对抗网络的照片级单幅图像超分辨率&#xff08;Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network&#xff09;论文地址&#xff1a;https://arxiv.org/abs/1609.04802 代码&#xff1a;GitHub - x…

【Python爬虫实战】Selenium自动化网页操作入门指南

#1024程序员节&#xff5c;征文# &#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、准备工作 &#xff08;一&#xff09;安装 Selenium 库 &#xff0…

SpringBoot项目里怎么简单高效使用Redis?我选择使用Lock4j

文章目录 前言正文1、Lock4j的代码仓库2、pine-manage-common-redis的项目结构3、pine-manage-common-redis 的完整代码3.1 maven依赖&#xff1a;pom.xml3.2 redis连接参数&#xff1a;application.yaml3.3 RedisCache.java3.4 CacheConfig.java3.5 RedissonClientUtil.java3.…

Python | Leetcode Python题解之第509题斐波那契数

题目&#xff1a; 题解&#xff1a; class Solution:def fib(self, n: int) -> int:if n < 2:return nq [[1, 1], [1, 0]]res self.matrix_pow(q, n - 1)return res[0][0]def matrix_pow(self, a: List[List[int]], n: int) -> List[List[int]]:ret [[1, 0], [0, …

Redisson(三)应用场景及demo

一、基本的存储与查询 分布式环境下&#xff0c;为了方便多个进程之间的数据共享&#xff0c;可以使用RedissonClient的分布式集合类型&#xff0c;如List、Set、SortedSet等。 1、demo <parent><groupId>org.springframework.boot</groupId><artifact…

spygalss cdc 检测的bug(二)

当allow_qualifier_merge设置为strict的时候&#xff0c;sg是要检查门的极性的。 如果qualifier和src经过与门汇聚&#xff0c;在同另一个src1信号或门汇聚&#xff0c;sg是报unsync的。 假设当qualifier为0时&#xff0c;0&&src||src1src1&#xff0c;src1无法被gat…

Mysql入门3——多表操作、事务、索引

Mysql入门3——多表操作、事务、索引 一、多表设计 ​ 在项目开发中&#xff0c;在进行数据库表的结构设计时&#xff0c;会根据业务需求及业务模块之前的关系&#xff0c;分析并设计表的结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表之间也存在着各种关系&am…

基于SSM的智慧篮球馆预约系统

前言 近些年&#xff0c;随着中国经济发展&#xff0c;人民的生活质量逐渐提高&#xff0c;对网络的依赖性越来越高&#xff0c;通过网络处理的事务越来越多。随着智慧篮球馆预约的常态化&#xff0c;如果依然采用传统的管理方式&#xff0c;将会为工作人员带来庞大的工作量&a…

css设置滚动条样式

效果图&#xff1a; // 滚动条样式 div::-webkit-scrollbar {width: 4px; } /* 滚动条滑块&#xff08;里面小方块&#xff09; */ div::-webkit-scrollbar-thumb {border-radius: 10px;-webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);opacity: 0.2;background-color…

【面试经典150】day 8

#1024程序员节 | 征文# 作为一个未来的程序员&#xff0c;现在我要继续刷题了。 力扣时刻。 目录 1.接雨水 2.罗马数字转整数 3.最后一个单词的长度 4.最长公共前缀 5.反转字符串中的单词 1.接雨水 好好好好好好&#xff0c;一开始就接雨水。我记得接了n次了。。。 痛苦战…

【读书笔记·VLSI电路设计方法解密】问题25:为什么时钟如此重要

时钟是一种在高电平和低电平之间振荡的电信号。它通常是一个具有预定周期(频率)的方波,如图3.6所示。在同步数字电路中,时钟信号协调芯片上所有电路元件的动作。电路在时钟信号的上升沿、下降沿或两者的边缘处变为活动状态以实现同步。时钟信号相关问题是任何VLSI芯片设计中…

ASP.NET Core 8.0 中使用 Hangfire 调度 API

在这篇博文中&#xff0c;我们将引导您完成将 Hangfire 集成到 ASP.NET Core NET Core 项目中以安排 API 每天运行的步骤。Hangfire 是一个功能强大的库&#xff0c;可简化 .NET 应用程序中的后台作业处理&#xff0c;使其成为调度任务的绝佳选择。继续阅读以了解如何设置 Hang…

HarmonyOS NEXT初级案例:网络数据请求

使用HTTP访问网络 “HTTP协议”的全称:超文本传输协议(Hyper Text Transfer Protocol)。 一、添加网络管理权限 在“module.json5”文件中添加网络访问权限配置: "module": {"requestPermissions": [{"name":"ohos.permission.INTER…