时间序列(四)ARIMA模型与差分

article/2025/9/23 8:11:07

ARIMA模型

平稳性:
平稳性就是要求经由样本时间序列所得到的拟合曲线
在未来的一段期间内仍能顺着现有的形态“惯性”地延续下去

平稳性要求序列的均值和方差不发生明显变化

严平稳与弱平稳:
严平稳:严平稳表示的分布不随时间的改变而改变。
弱平稳:期望与相关系数(依赖性)不变
未来某时刻的t的值Xt就要依赖于它过去的信息,所以需要依赖性

这里写图片描述

import pandas as pd
import numpy as np
# Display and Plotting
import matplotlib.pylab as plt
import seaborn as sns
#Read the data
#美国消费者信心指数
Sentiment = 'data/sentiment.csv'
Sentiment = pd.read_csv(Sentiment, index_col=0, parse_dates=[0])
print(Sentiment.head())

这里写图片描述

截取其中2005-2016年

# Select the series from 2005 - 2016
sentiment_short = Sentiment.loc['2005':'2016']
sentiment_short.plot(figsize=(12,8))
plt.legend(bbox_to_anchor=(1.25, 0.5))
plt.title("Consumer Sentiment")
sns.despine()
plot.show()

画出来
这里写图片描述

画出一阶差分与二阶差分的图

sentiment_short['diff_1'] = sentiment_short['UMCSENT'].diff(1)sentiment_short['diff_2'] = sentiment_short['diff_1'].diff(1)sentiment_short.plot(subplots=True, figsize=(18, 12))

这里写图片描述

ARIMA模型原理

自回归模型AR
描述当前值与历史值之间的关系,用变量自身的历史时间数据对自身进行预测
自回归模型必须满足平稳性的要求
p阶自回归过程的公式定义:这里写图片描述

yt是当前值 u是常数项 P是阶数 ri是自相关系数 et是误差
(P当前值距p天前的值的关系)

自回归模型的限制
1、自回归模型是用自身的数据进行预测
2、必须具有平稳性
3、必须具有相关性,如果自相关系数(φi)小于0.5,则不宜采用
4、自回归只适用于预测与自身前期相关的现象

移动平均模型MA
移动平均模型关注的是自回归模型中的误差项的累加
q阶自回归过程的公式定义:这里写图片描述
移动平均法能有效地消除预测中的随机波动

这里写图片描述

I是差分模型

需要确定P和Q,
d是做几阶差分,一般1阶就可以了

这里写图片描述

选择P与Q的方法:
自相关函数ACF(autocorrelation function)
有序的随机变量序列与其自身相比较自相关函数反映了同一序列在不同时序的取值的相关性
公式:
这里写图片描述

变量与自身的变化,yt和yt-1到yt和yt-k的相关系数
k阶滞后点
Pk的取值范围【-1,1】

这里写图片描述
虚线表示95%,置信区间

偏自相关函数(PACF)(partial autocorrelation function)
1、对于一个平稳AR(p)模型,求出滞后k自相关系数p(k)时
实际上得到的并不是x(t)与x(t-k)之间单纯的相关关系
2、x(t)同时还会受到中间k-1个随机变量x(t-1)、x(t-2)……、x(t-k+1)的影响,而这k-1个随机变量又都和x(t-k)具有相关关系,所以自相关系数p(k)里实际掺杂了其他变量对x(t)与x(t-k)的影响
3、剔除了中间k-1个随机变量x(t-1)、x(t-2)、……、x(t-k+1)的干扰之后
x(t-k)对x(t)影响的相关程度
4、ACF还包含了其他变量的影响
而偏自相关系数PACF是严格这两个变量之间的相关性

需要用到模块statsmodels

# TSA from Statsmodels
import statsmodels.api as sm
import statsmodels.formula.api as smf
import statsmodels.tsa.api as smt

分别画出ACF和PACF图像

fig = plt.figure(figsize=(12,8))ax1 = fig.add_subplot(211)
fig = sm.graphics.tsa.plot_acf(sentiment_short, lags=20,ax=ax1)
ax1.xaxis.set_ticks_position('bottom')
fig.tight_layout();
ax2 = fig.add_subplot(212)
fig = sm.graphics.tsa.plot_pacf(sentiment_short, lags=20, ax=ax2)
ax2.xaxis.set_ticks_position('bottom')
fig.tight_layout();

这里写图片描述

接下来确定ARIMA模型的p、d、q三个参数
ARIMA(p,d,q)
确认方法:
这里写图片描述

例子:
这里写图片描述

四个图的整合函数,可以改参数直接调用

# 更直观一些def tsplot(y, lags=None, title='', figsize=(14, 8)):fig = plt.figure(figsize=figsize)layout = (2, 2)ts_ax   = plt.subplot2grid(layout, (0, 0))hist_ax = plt.subplot2grid(layout, (0, 1))acf_ax  = plt.subplot2grid(layout, (1, 0))pacf_ax = plt.subplot2grid(layout, (1, 1))y.plot(ax=ts_ax)ts_ax.set_title(title)y.plot(ax=hist_ax, kind='hist', bins=25)hist_ax.set_title('Histogram')smt.graphics.plot_acf(y, lags=lags, ax=acf_ax)smt.graphics.plot_pacf(y, lags=lags, ax=pacf_ax)[ax.set_xlim(0) for ax in [acf_ax, pacf_ax]]sns.despine()plt.tight_layout()return ts_ax, acf_ax, pacf_ax

使用:

tsplot(sentiment_short, title='Consumer Sentiment', lags=36);

这里写图片描述

另一种判别:

这里写图片描述

从图中可以看出p=2,d=0,q=0 较为合适
于是训练模型

#Model Estimation# Fit the model
arima200 = sm.tsa.SARIMAX(ts_train, order=(2,0,0))
model_results=arima200.fit()

通过导入import itertools来遍历

import itertoolsp_min = 0
d_min = 0
q_min = 0
p_max = 4
d_max = 0
q_max = 4# Initialize a DataFrame to store the results
results_bic = pd.DataFrame(index=['AR{}'.format(i) for i in range(p_min,p_max+1)],columns=['MA{}'.format(i) for i in range(q_min,q_max+1)])for p,d,q in itertools.product(range(p_min,p_max+1),range(d_min,d_max+1),range(q_min,q_max+1)):if p==0 and d==0 and q==0:results_bic.loc['AR{}'.format(p), 'MA{}'.format(q)] = np.nancontinuetry:model = sm.tsa.SARIMAX(ts_train, order=(p, d, q),#enforce_stationarity=False,#enforce_invertibility=False,)results = model.fit()results_bic.loc['AR{}'.format(p), 'MA{}'.format(q)] = results.bicexcept:continue
results_bic = results_bic[results_bic.columns].astype(float)

画出热度图

fig, ax = plt.subplots(figsize=(10, 8))
ax = sns.heatmap(results_bic,mask=results_bic.isnull(),ax=ax,annot=True,fmt='.2f',);
ax.set_title('BIC');

这里写图片描述
输出AIC、BIC评价指标

# Alternative model selection method, limited to only searching AR and MA parameterstrain_results = sm.tsa.arma_order_select_ic(ts_train, ic=['aic', 'bic'], trend='nc', max_ar=4, max_ma=4)print('AIC', train_results.aic_min_order)
print('BIC', train_results.bic_min_order)

AIC (4, 2)
BIC (1, 1)
结果不一致需要我们重新审判

#残差分析 正态分布 QQ图线性
model_results.plot_diagnostics(figsize=(16, 12));

分析其他指标
这里写图片描述


http://chatgpt.dhexx.cn/article/Y1O9xiHP.shtml

相关文章

数学建模之时间序列预测(ARIMA)

Auto-TS 自动化时间序列预测 1、Auto-TS介绍 Auto-TS 是 AutoML 的一部分,它将自动化机器学习管道的一些组件。这自动化库有助于非专家训练基本的机器学习模型。 是一个开源 Python 库,主要用于自动化时间序列预测。它将使用一行代码自动训练多个时间…

【时间序列预测-ARIMA模型】

转载 https://blog.csdn.net/qq_35495233/article/details/83514126 参考【概念】https://blog.csdn.net/TU_JCN/article/details/88130820 【实战】https://www.cnblogs.com/54hys/p/10127055.html 另外,重点参考https://www.jianshu.com/p/4130bac8ebec 了解ARIMA…

ARIMA的参数与数学形式

什么是 ARIMA模型 ARIMA模型的全称叫做自回归移动平均模型,全称是(ARIMA, Autoregressive Integrated Moving Average Model)。也记作ARIMA(p,d,q),是统计模型(statistic model)中最常见的一种用来进行时间序列 预测的模型。 1. ARIMA的优缺点 优点&a…

ARIMA模型

时间序列分析分为两大类:频域分析和时域分析。频域分析也称为谱分析,是一种非常有用的纵向数据分析方法。时域分析主要关心从序列值之间的相关关系对时间序列发展规律。 在时域分析里,生成时间序列数据的随机过程按照统计规律的特征是否随着时…

Arima相关概念

https://www.cnblogs.com/bradleon/p/6832867.html https://www.cnblogs.com/bradleon/p/6827109.html 平稳性:就是要求经由样本时间序列所得到的拟合曲线在未来的一段期间内仍能顺着现有的形态“惯性”地延续下去。平稳性要求序列的均值和方差不发生明显变化 严平…

2019年最新手游脚本开发教程

2019年最新手游脚本开发教程 链接:https://pan.baidu.com/s/1JqZBWhXes4-kUKEgAFHpcQ 提取码:xp0f 复制这段内容后打开百度网盘手机App,操作更方便哦

html游戏脚本,网页游戏脚本软件道

----3.增加多媒体特性 Command对象 Command对象的主要目的是执行参数化的存储过程 JAR will be empty - no content was marked for inclusion! 例子: Col1=CustomerNumberTextWidth10 Col2=CustomerNameTextWidth30 该例给出了方…

前端搭建打字通游戏(内附源码)

The sand accumulates to form a pagoda ✨ 写在前面✨ 打字通功能介绍✨ 页面搭建✨ 样式代码✨ 功能实现 ✨ 写在前面 上周我们实通过前端基础实现了名言生成器,当然很多伙伴再评论区提出了想法,后续我们会考虑实现的,今天还是继续按照我们…

Android+按键精灵代码,安卓按键精灵怎么编写脚本 编写脚本教程

按键精灵评分: 大小:23.96MB 语言:简体中文 授权:免费版下载地址 在安卓上使用按键精灵,可以模拟我们抢红包、抢火车票,而且连自动签到也是可以的,只要我们编写好脚本就可以了。那么安卓按键精灵…

手游问道服务器维护到几点,问道手游10月27日更新什么?维护到几点?

问道手游10月27日更新什么内容?问道手游10月27日维护到几点?相信很多玩家想知道吧,接下来就跟随小编一起来看看吧,希望对大家有所帮助。 10月27号更新了什么内容 各位亲爱的道友: 为保证服务器的运行稳定和服务质量&am…

记一次小白的手游脚本破解过程及难题

最近因为一直有玩一个网游,发现一款直接内置进手游lua脚本的辅助。于是来了兴趣,开始研究。 这是那款辅助的安装包, 里面的文件是这样的,妈呀连个后缀都没有我要怎么弄,因为我也是个半懂不懂的小白,于是开始…

问道手游服务器维护,问道手游公测服务器版本更新维护公告

小编给大家带来了问道手游公测服务器版本更新维护公告,想了解更多问道手游攻略,敬请关注18183问道手游专区。 各位亲爱的道友: 为保证服务器的运行稳定和服务质量,《问道》手游所有公测服务器(内测专区除外)将于2017年03月02日04:…

问道手游服务器维护,问道手游停服维护公告

问道手游停服维护公告,问道手游是一款大型Q版MMORPG回合制手游,问道手游将在11月24日上午8点进行一次停服维护,期间将对之前测试时出现的一些问题进行修复,预计维护时间为一个小时,请玩家们注意开服时间。 问道手游海报…

手游自动挂机脚本开发历程

事件起因 国庆节期间,因为工作相对闲暇,自己鬼使神差地下载了一个梦幻西游手游玩了几天,结果一周就这么过去了,一玩起游戏来,那就是白驹过隙啊。节日过后,游戏自然是没时间再玩了,毕竟有一大堆…

问道手游服务器修改密码,问道手游账号安全设置及找回密码教程 玩转问道

问道手游账号安全设置及找回密码教程,小编教你畅玩问道!问道手游是一款非常受大家欢迎的回合制游戏,但是很多小伙伴们还不知道自己的雷霆账号怎么安全设置和找回密码,下面小编给大家带来的就是这方面的教程,希望能够帮助到大家。 运行游戏后在登录界面会显示雷霆游戏的SDK,在登…

《问道》手游职业选择攻略

问道手游道友们!是时候显示你的身手啦,在这激动人心的时刻,新手玩家们心中是不是在犹豫选择哪个职业比较好呢?就让迷糊给大家带来有关新手职业选择的推荐吧,希望能够帮大家!《问道》手游新人职业选择攻略 金职业 外形炫酷,一身正义,也是众…

问道手游服务器修改,分享一下自己架设问道手游经验和教程【图文篇】

1.分享一下自己搭建问道的经验(以图文的形式来说下),如有写的不对的地方希望指正下。 2.搭建时所需要的东西。注意本帖都不提供资源下载,需要自己在论坛找 a.服务器一台 b.搭建环境 c.资源包(包括前端,启动端,游戏客户端) 3.服务器设置(本帖以腾讯云服务器windows service2…

问道手游服务器配置文件,问道手游脚本视频教程

问道手游脚本视频教程 [2021-02-15 06:06:16] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐:《PHP视频教 系统运维 在数据…

问道手游-0基础架设教程

前言 本次教程使用的是问道魔改版的一个服务端、问道传奇、里面地图玩法基本与传奇类似 准备工具 1、Windows系统服务器一台 2、问道传奇服务端 开始架设 1、把准备好的问道传奇服务端解压到服务器D盘根目录记住必须得是根目录 不在根目录会导致快捷方式失效(服务器…

问道手游加点模拟器 一个可用的在线版问道加点模拟器

问道手游加点模拟器 一个可用的在线版问道加点模拟器 问道手游是一款自由加点的游戏所以角色的加点就是玩家非常关注的。今天,虐游网专门为此制作了问道手游角色加点模拟器 ,用来帮助玩家更好的对自己的角色进行加点,一起来看下吧。 欢迎各位…