arima模型原理及实战

news2024/11/25 22:41:26

目录

1,概念

2,数学知识

3,前提条件

4,序列不平稳时的平稳性方法

5,模型定阶,确定P和Q

6,模型训练与检验


1,概念

        ARIMA模型(英语:Autoregressive Integrated Moving Average model),差分整合移动平均自回归模型,ARIMA(p,d,q)中,AR是自回归,p为自回归项数;MA为滑动平均,q为滑动平均项数,d为使之成为平稳序列所做的差分次数(阶数)。“差分”一词虽未出现在ARIMA的英文名称中,却是关键步骤。

        大致思路就是:1,当前时刻点的取值与之前相邻一个或者多个时刻点自相关,并假设他们满足一个线性关系。2,由于每一个时刻点采集的数据都存在服从一定分布的误差,且当前时刻不仅由自己的采集误差,也与之前一个或者多个时刻的误差相关,并假设他们满足一个线性关系。3,将这两部分结合在一起就是ARIMA模型。

2,数学知识

        假设检验时如何设置原假设和备选假设。一般原假设都不是我们所期望的情况,我们的目的就是去寻找证据推翻原假设,即拒绝原假设接受备选假设,备选假设就是我们所想要的情况。

        原因是:犯第二类错误也叫取假错误,把错的当真的,这是万万不可的。犯第一类错误时,我们还有一个显著性水平α来限制我们犯错,这是可以接受的,俗称赌一把。如果证据不足,无法推翻原假设,这时我们不得不接受原假设,就完全避免了犯第二类错误的情况。如证据充足,我们能够推翻原假设,接受了备选假设,此时我们犯错的概率小于显著性水平α,但是α很小,即我们犯错的可能性很低。

3,前提条件

        ARIMA模型只能对平稳序列进行分析,无法对非平稳序列进行分析。所以拿到一个时间序列之后,首先需要进行平稳性检验和白噪声检验。

  • 白噪声检验

        白噪声是指序列是纯随机数据,纯随机游走,是无意义的数据,继续研究毫无意义,比如使用random生成的服从正态分布的一串时间序列就属于白噪声。白噪声检验也称为纯随机性检验,当数据是纯随机数据时,再对数据进行分析就没有任何意义了。常使用acorr_ljungbox函数对序列进行白噪声检验。

from statsmodels.stats.diagnostic import acorr_ljungbox  # 随机性检验库
# 数据的纯随机性检验函数
acorr_ljungbox(data)

        acorr_ljungbox的原理:原假设H0:是白噪声;备选假设H1:是非白噪声。他构造了卡方统计量,显著性水平为0.5。且使用p_value这个更强的证据来做证明,当p远小于α显著性水平时我们拒绝原假设接受备选假设,当p值大于0.5时,证据不足,无法推翻原假设,序列就是白噪声。

  • 平稳性检验

        平稳性就是指记录的某个特征变量如果满足正态分布U(0,1),那么在任意时刻记录的值都服从Z(0,1),而不是Z(0,2)。一般使用ADF单位根进行平稳性检验。

        ADF是假设检验的应用。H0原假设:是序列不平稳,即存在单位根;H1备选假设:是序列平稳,不存在单位根。我们需要做的就是找证据来推翻原假设,如果证据不足无法推翻我们就能够避免用ARIMA去分析序列这种错误做法。而且我们设置了显著性水平α,如果我们找到了证据推翻了原假设,我们犯错的概率(第一类的弃真错误)也是很小的。

        判断依据:ADF检验设计了一个ADF统计量,具体服从什么分布不清楚,一般默认t分布(用样本标准差代替总体方差)或者z分布。他是双侧检验,给定显著性水平之后,我们就能够知道拒绝域了,拒绝域的横坐标对应着相应的统计量计算值,只要计算出的ADF统计量在指定横坐标外侧我们就能够拒绝原假设,接受备选假设,即我们找到了证据证明序列不是不平稳的。  

        p值是比统计量更强的证据,假如统计量服从正态(0,1)分布,且拒绝域的横坐标是-2.56和2.56,但是我们计算出来的ADF统计量是3,那么p值就是X>3的概率值。其值越小越好,小于显著性水平α即可认为原假设不对,接受备选假设,即序列非平稳。

from statsmodels.tsa.stattools import adfuller

result = adfuller(data)
print('ADF Statistic: %f' % result[0])
print('p-value: %f' % result[1])
print('Critical Values:')
for key, value in result[4].items():
    print('\t%s: %.3f' % (key, value))

2.平稳性检验的一些其他方法

  • 将数据使用plt画出来,用眼睛看,如果趋势变化明显,随着时间前进波动幅度变大,一般都是非平稳。下面这种随着时间前进,最大值和最小值的距离越来越多,肯定非平稳。

  • 使用ACF图和PACF图进行眼睛看,如果没有出现截尾或者拖尾,那肯定是非平稳。

4,序列不平稳时的平稳性方法

        经过检验序列非平稳,可以使用差分让数据变为平稳,一般只进行一阶差分,如果一阶差分序列还是非平稳序列,那么最好的做法是:赶紧换个模型(比如LSTM等神经网络模型),别死磕ARIMA。

        得到一阶差分之后,我们同样对一阶差分序列进行白噪声检验和平稳性检验,和对原序列的方法一致。一般一阶差分之后都会平稳,如果不平稳赶紧换模型。一般平稳序列的图如下所示:这种围绕某个值上下波动的情况都可以认为是平稳序列了。当然最直接的还是ADF检验。

5,模型定阶,确定P和Q

        如果原序列就是平稳的,定阶就使用原序列数据;如果进行了一阶差分变成了平稳序列,那么就使用一阶差分序列进行定阶。

        方法1:根据平稳序列的PACF定P,ACF定Q

        PACF的后截尾阶数就是P;ACF的后截尾阶数就是Q。PACF图中,最左边的相关系数是1,原因是自己跟自己的相关性当然是1。然后与其前1个、2个时刻的系数分别是-0.25左右,但是前第7个时刻由存在0.25左右的相关性。蓝色区域表示他们虽然存在相关性,但是可以忽略不计。

        ACF图也类似,说明存在一定的周期相关性。

        方法2:暴力求解法

        上面的方法过于无语,做了也是白做。下面介绍一种万无一失的方法,AIC和BIC定阶方法。由于我们已经得到了d的取值,要么0要么1。即P、Q、d我们知道了d,那么直接暴力遍历P、Q的取值,看一下那种组合下的AIC和BIC取值最小,我们就用那种组合。

import statsmodels.api as sma

# AR最大阶不超过6,MA最大阶不超过4。
aic_res= sma.tsa.arma_order_select_ic(diff1,max_ar=6,max_ma=4,ic=['aic']) # AIC
print('AIC', aic_res['aic_min_order'])

bic_res = sma.tsa.arma_order_select_ic(diff1,max_ar=6,max_ma=4,ic=['bic']) # BIC
print('BIC', bic_res['bic_min_order'] )

6,模型训练与检验

        通过上述过程,确定P、Q、d之后就可以拿数据拟合模型了,注意:如果进行了差分拟合数据得是差分数据才行。

        模型的残差检验:

        模型残差检验是想弄清楚模型是否完全的将数据特征提取完毕。可以这么认为:模型残差是白噪声,我们就认为序列特征已经被提取完毕。

modelf = sma.tsa.ARIMA(diff, order=(3, 4, 1))  # 传入参数,构建并拟合模型
result = modelf.fit()

# Ljung-Box检验
xx = acorr_ljungbox(result.resid, lags=10)
print(xx)

        上面就是使用arima模型的一般步骤。

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

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

相关文章

grep及文本处理命令

正则表达式 一.基础命令 1.grep命令 对文本的内容进行过滤,针对行处理 1.1grep格式 grep [选项]…查找条件 目标文件 1.2grep命令选项 -m数字——————匹配几次后停止eg:grep -m 1 root /etc/passwd————————————多个匹配只取 -v …

【编程语言 · C语言 · 递归函数】

递归函数 C 语言的函数都支持递归, 也就是说,每个函数都可以直接或者间接第调用自己。所谓的间接调用,是指在递归函数调用的下层函数中再调用自己。 递归关系图如下: 递归之所以能实现,是因为函数的每个执行过程在栈中都有自己的…

深入理解 SpringBoot 日志框架:从入门到高级应用——(三)Logback 输出日志到 MySQL 数据库

文章目录 添加依赖导入 SQL 文件配置 logback-spring.xml运行结果 Logback 是一个开源的日志框架,它支持多种日志输出方式,包括控制台输出、文件输出、邮件输出等。如果要将 Logback 输出的日志保存到 MySQL 数据库中,可以按照以下步骤进行配…

Tapd在研发团队中的使用技巧-持续更新ing

1.TAPD第三方服务集成能力,支持与代码仓库、流水线进行了深度打通,力求为开发团队提供流畅高效的使用体验。我们梳理了一份攻略,掌握下面几个小技能,让TAPD与代码仓库、流水线一起,成为研发团队的得力助手,…

数据结构算法刷题(27)回溯(子集型)

回溯思想: 思路:这种出现全部xx组合的,基本都是回溯算法。首先,当digits是空,那返回也是空。当回溯到边界条件的时候,就更新答案,在非边界条件的时候,循环该数值下的全部情况。 cla…

125760-33-0,Fmoc-Thr(Ac4Galβ1-3Ac2GalNAcα)-OH,于蛋白质糖基化修饰

文章关键词:糖化学试剂,化学试剂,糖基氨基酸一、试剂基团反应特点(Reagent group reaction characteristics): Fmoc-Thr(Ac4Galβ1-3Ac2GalNAcα)-OH中蛋白质糖基化修饰是在糖基转移酶的催化作用下糖链分子…

色环电阻介绍

复习一下色环电阻,是在电阻封装上(即电阻表面)涂上一定颜色的色环,来代表这个电阻的阻值。色环实际上是早期为了帮助人们分辨不同阻值而设定的标准。色环电阻现在应用还是很广泛的,如家用电器、电子仪表、电子设备中常常可以见到。但由于色环…

Java内存模型(JMM)和volatile原理

一、Java 内存模型 JMM即Java Memory Model,他定义了主存(共享的数据)、工作内存(私有的数据)抽象概念,底层对应着CPU寄存器、缓存、硬件内存、CPU指令优化等 JMM体现以下几个方面 原子性-保证指令不会受…

ad18报错:Minimum Solder Mask Sliver Constraint

报告上提示: Minimum Solder Mask Sliver (Gap0.254mm) (All),(All) Minimum Solder Mask Sliver Constraint,PCB焊盘阻焊层之间间距小于0.254报错 修改了这里,把这个报警值改小一些,就不会报警了 翻译过来是:最小…

8.vue3医疗在线问诊项目 - _问诊室模块-websocket学习 ==> 消息卡片、websocket、socket.io、约定通讯规则、建立连接

8.vue3医疗在线问诊项目 - _问诊室模块-websocket学习 > 消息卡片、websocket、socket.io、约定通讯规则、建立连接 问诊室-路由与组件 目标:配置路由和分析结构 1)路由配置 {path: /room,component: () > import(/views/room/index.vue)…

UNIX网络编程卷一 学习笔记 第二十章 广播

本书迄今为止的所有例子都是单播:一个进程与另一个进程通信。TCP只支持单播寻址,而UDP和原始IP还支持其他寻址类型,下图比较了不同的寻址方式: IPv6往寻址体系中增加了任播(anycasting)方式。RFC 1546讲述…

章节5:04-shiro反序列化漏洞

章节5:04-shiro反序列化漏洞 复现环境 本地tomcat或Docker vulhub 基础环境: IDEA Maven Tomcat Burp JDK8版 01 Shiro介绍 Shiro Apache Shiro:开源安全框架 身份验证授权会话管理加密 本地代码 https://github.com/apache/shi…

Iptables防火墙策略

目录 一、iptables netfilter/iptables 关系 二、四表五链 三、iptables的安装 iptables 命令行配置方法 管理选项 一、iptables Linux 系统的防火墙——netfilter/iptables IP信息包过滤系统,它实际上由两个组件netfilter 和 iptables组成。 主要工作在网络…

MATLAB与大数据:如何应对海量数据的处理和分析

第一章:引言 在当今数字化时代,大数据已经成为了各行各业的核心资源之一。海量的数据源源不断地涌现,如何高效地处理和分析这些数据已经成为了许多企业和研究机构面临的重要挑战。作为一种功能强大的数学软件工具,MATLAB为我们提供…

深度剖析InnoDB存储结构

大家都知道 MySQL 的数据都是存储在物理磁盘上的,那具体是保存在哪个文件呢?我们首先要知道MySQL 存储的行为是由存储引擎实现的,不同的存储引擎保存的文件自然也不同。由于InnoDB 是我们常用的存储引擎,也是 MySQL 默认的存储引擎…

Spring Cloud Alibaba - Sentinel源码分析(二)

目录 一、Sentinel源码分析 1、时间窗算法 2、滑动时间窗算法 3、Sentinel滑动时间窗口算法源码解析 4、Sentinel滑动窗口数据统计源码解析 一、Sentinel源码分析 1、时间窗算法 时间窗算法,也可以称之为:固定时间窗算法 概念:固定时…

015:vue项目中常用的正则表达式

第015个 查看专栏目录: VUE — element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使用…

【RV1126】使用gpiolib框架

文章目录 史上最简单:增加GPIO控制功能是如何实现的呢?GPIOLIB框架Linux 驱动实现 控制引脚输出高低电平综合测试 这一套非常方便! 史上最简单:增加GPIO控制功能 如果是想增加GPIO控制只需要修改设备树就可以做到! …

谷粒商城第二天-项目环境搭建

目录 一、前言 二、学习的内容 一、虚拟平台的安装,远程连接虚拟机的工具的安装 二、Docker以及常用软件的安装 一、安装Docker: 二、安装相关软件 三、开发环境的统一 1. 这里就是调整Maven的下载依赖的地址,改用阿里云镜像地址 2. …

11.vue3医疗在线问诊项目 - _药品订单 ==> 支付页面、支付详情、支付结果、订单详情、物流信息、高德地图工具

11.vue3医疗在线问诊项目 - _药品订单 > 支付页面、支付详情、支付结果、订单详情、物流信息、高德地图工具 药品订单-支付页面-路由 目标:配置路由,分析药品支付组件结构 1)路由与组件 {path: /medicine/pay,component: () >…