时间序列预测——ARIMA(差分自回归移动平均模型)(1))

article/2025/9/23 7:22:57

 

时间序列预测——ARIMA(差分自回归移动平均模型)

ARIMA(p,d,q)中,AR是"自回归",p为自回归项数;I为差分,d为使之成为平稳序列所做的差分次数(阶数);MA为"滑动平均",q为滑动平均项数,。ACF自相关系数能决定q的取值,PACF偏自相关系数能够决定q的取值。ARIMA原理:非平稳时间序列转化为平稳时间序列然后将因变量仅对它的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型

基本解释:

自回归模型(AR)

  • 描述当前值与历史值之间的关系用变量自身的历史时间数据对自身进行预测
  • 自回归模型必须满足平稳性的要求
  • 必须具有自相关性,自相关系数小于0.5不适用
  • p阶自回归过程的公式定义:

                                              

                                       ,y t-i 为前几天的值

PACF,偏自相关函数(决定p值),剔除了中间k-1个随机变量x(t-1)、x(t-2)、……、x(t-k+1)的干扰之后x(t-k)对x(t)影响的相关程度。

移动平均模型(MA)

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

                                              

ACF,自相关函数(决定q值)反映了同一序列在不同时序的取值之间的相关性。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)的影响

                                           

ARIMA(p,d,q)阶数确定:

                           

                                                                                                                       截尾:落在置信区间内(95%的点都符合该规则)

                              

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

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

    严平稳与弱平稳:
    严平稳:严平稳表示的分布不随时间的改变而改变。
    如:白噪声(正态),无论怎么取,都是期望为0,方差为1
    弱平稳:期望与相关系数(依赖性)不变
    未来某时刻的t的值Xt就要依赖于它的过去信息,所以需要依赖性

因为实际生活中我们拿到的数据基本都是弱平稳数据,为了保证ARIMA魔性的要求,我们需要对数据进行差分,以求数据变的平稳。

模型评估:


AIC:赤池信息准则(AkaikeInformation Criterion,AIC)
                                                         ???=2?−2ln(?)
BIC:贝叶斯信息准则(Bayesian Information Criterion,BIC)
                                                         ???=????−2ln(?)
                                        k为模型参数个数,n为样本数量,L为似然函数

 

模型残差检验:

  • ARIMA模型的残差是否是平均值为0且方差为常数的正态分布
  • QQ图:线性即正态分布

ARIMA建模流程:
将序列平稳(差分法确定d)
p和q阶数确定:ACF与PACF
ARIMA(p,d,q)/SARIMA(p,d,q,s)呈现季节性用这个模型

%load_ext autoreload
%autoreload 2
%matplotlib inline
%config InlineBackend.figure_format='retina'from __future__ import absolute_import, division, print_functionimport sys
import osimport pandas as pd
import numpy as np# TSA from Statsmodels
import statsmodels.api as sm
import statsmodels.formula.api as smf
import statsmodels.tsa.api as smt# Display and Plotting
import matplotlib.pylab as plt
import seaborn as snspd.set_option('display.float_format', lambda x: '%.5f' % x) # pandas
np.set_printoptions(precision=5, suppress=True) # numpypd.set_option('display.max_columns', 100)
pd.set_option('display.max_rows', 100)# seaborn plotting style
sns.set(style='ticks', context='poster')
filename_ts = 'data/series1.csv'
ts_df = pd.read_csv(filename_ts, index_col=0, parse_dates=[0])n_sample = ts_df.shape[0]
print(ts_df.shape)
print(ts_df.head())

 

# Create a training sample and testing sample before analyzing the seriesn_train=int(0.95*n_sample)+1
n_forecast=n_sample-n_train
#ts_df
ts_train = ts_df.iloc[:n_train]['value']
ts_test = ts_df.iloc[n_train:]['value']
print(ts_train.shape)
print(ts_test.shape)
print("Training Series:", "\n", ts_train.tail(), "\n")
print("Testing Series:", "\n", ts_test.head())

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) # ACF自相关系数smt.graphics.plot_pacf(y, lags=lags, ax=pacf_ax) # 偏自相关系数[ax.set_xlim(0) for ax in [acf_ax, pacf_ax]]sns.despine()fig.tight_layout()return ts_ax, acf_ax, pacf_axtsplot(ts_train, title='A Given Training Series', lags=20);

                           


# Fit the model
arima200 = sm.tsa.SARIMAX(ts_train, order=(2,0,0)) # ARIMA季节性模型,至于p,d,q需要按照下面的方法选择
model_results = arima200.fit()
# 此处运用BIC(贝叶斯信息准则)进行模型参数选择
# 另外还可以利用AIC(赤池信息准则),视具体情况而定
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() 此处的result包含了很多信息,具体如果用到需要自己去查询
# http://www.statsmodels.org/stable/tsa.html# print("results.bic",results.bic)# print("results.aic",results.aic)results_bic.loc['AR{}'.format(p), 'MA{}'.format(q)] = results.bicexcept:continue
results_bic = results_bic[results_bic.columns].astype(float)

results_bic如下所示:

为了便于观察,下面对上表进行可视化:、

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');
//annot
//annotate的缩写,annot默认为False,当annot为True时,在heatmap中每个方格写入数据
//annot_kws,当annot为True时,可设置各个参数,包括大小,颜色,加粗,斜体字等
# annot_kws={'size':9,'weight':'bold', 'color':'blue'}
#具体查看:https://blog.csdn.net/m0_38103546/article/details/79935671

                                          

# 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)

 plot_diagnostics对象允许我们快速生成模型诊断并调查任何异常行为。

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

                   

              

 

最后进行预测:

model = ARIMA(stock_train, order=(1, 1, 1),freq='W-MON')
result = model.fit()
pred = result.predict('20140609', '20160701',dynamic=True, typ='levels')
# 此处注意,2014060必须能在训练集数据中能够找到,后边的20160701则不用
print (pred)plt.figure(figsize=(6, 6))
plt.xticks(rotation=45)
plt.plot(pred)
plt.plot(stock_train)

 

#预测准确性判定

 

 

 


http://chatgpt.dhexx.cn/article/1hTw535G.shtml

相关文章

ARIMA乘法季节模型

目录 ARIMA乘法季节模型 例题1 例题 2 例题3 ARIMA乘法季节模型 序列的季节效应、长期趋势效应和随机波动之间有着复杂的相互关联性,简单的季节模型不能充分地提取其中的相关关系,这时常采用乘积季节模型。 例题1 我国1949-2008年年末人口总数(单…

AR、MA、ARMA和ARIMA模型------时间序列预测

ARMA模型的全称是自回归移动平均模型,它是目前最常用的拟合平稳序列的模型。它又可以细分为AR模型、MA模型和ARMA三大类。都可以看做是多元线性回归模型。 AR模型 具有如下结构的模型称为阶自回归模型,简记为。 即在t时刻的随机变量的取值是前期的多元…

ARIMA模型(一)定义与介绍

了解ARIMA模型,就需要先了解数据的一个平稳性。 1. 平稳性: 平稳性就是要求经由样本时间序列所得到的拟合曲线,在未来的一段时间内仍能顺着现有状态“惯性”地延续下去;平稳性要求序列的均值和方差不发生明显变化; 方差越大,数据波动越大,方差计算公式如下式所示…

ARIMA模型原理及实现

https://www.jianshu.com/p/305c4961ee06 1、数据介绍 再介绍本篇的内容之前,我们先来看一下本文用到的数据。本文用到的中国银行股票数据下载:http://pan.baidu.com/s/1gfxRFbH,提取码d3id。 我们先来导入一下我们的数据,顺便…

时间序列预测,非季节性ARIMA及季节性SARIMA

Python 3中使用ARIMA进行时间序列预测的指南 在本教程中,我们将提供可靠的时间序列预测。我们将首先介绍和讨论自相关,平稳性和季节性的概念,并继续应用最常用的时间序列预测方法之一,称为ARIMA。 介绍 时间序列提供了预测未来价…

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

ARIMA模型 平稳性: 平稳性就是要求经由样本时间序列所得到的拟合曲线 在未来的一段期间内仍能顺着现有的形态“惯性”地延续下去 平稳性要求序列的均值和方差不发生明显变化 严平稳与弱平稳: 严平稳:严平稳表示的分布不随时间的改变而改…

数学建模之时间序列预测(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点进行一次停服维护,期间将对之前测试时出现的一些问题进行修复,预计维护时间为一个小时,请玩家们注意开服时间。 问道手游海报…

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

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