全文下载链接:http://tecdat.cn/?p=20424

工夫序列为预测将来数据提供了办法。依据先前的值,工夫序列可用于预测经济,天气的趋势。工夫序列数据的特定属性意味着通常须要专门的统计办法 点击文末“浏览原文”获取残缺代码数据

在本教程中,咱们将首先介绍和探讨自相干,平稳性和季节性的概念,而后持续利用最罕用的工夫序列预测办法之一,称为ARIMA。

Python中可用的一种用于建模和预测工夫序列的将来点的办法称为 SARIMAX,它示意带有季节性回归的 季节性自回归综合挪动平均线。在这里,咱们将次要关注ARIMA,用于拟合工夫序列数据以更好地了解和预测工夫序列中的将来点。

为了充分利用本教程,相熟工夫序列和统计信息可能会有所帮忙。

在本教程中,咱们将应用 Jupyter Notebook 解决数据。

第1步-装置软件包

要设置咱们的工夫序列预测环境:

cd environments . my_env/bin/activate

从这里开始,为咱们的我的项目创立一个新目录。

mkdir ARIMAcd ARIMA 

当初 咱们装置 statsmodels和数据绘图软件包 matplotlib

pip install pandas numpy statsmodels matplotlib

第2步-导入包并加载数据

要开始应用咱们的数据,咱们将启动Jupyter Notebook:

要创立新的笔记本文件,请 从右上方的下拉菜单中抉择“ 新建”  >“  Python 3 ”:

首先导入所需的库:

import warningsimport itertoolsimport pandas as pdimport numpy as npimport statsmodels.api as smimport matplotlib.pyplot as pltplt.style.use('fivethirtyeight')

咱们将应用CO2数据集,该数据集收集了从1958年3月至2001年12月CO2样本。咱们能够将这些数据引入如下:

y = data.data

让咱们对数据进行一些预处理。每周数据处理起来比拟麻烦,因为工夫比拟短,所以让咱们应用每月平均值。咱们还能够应用 fillna() 函数 来确保工夫序列中没有缺失值。

# “ MS”字符串按月初将数据分组到存储中y = y['co2'].resample('MS').mean()# 填充缺失值y = y.fillna(y.bfill())
Outputco21958-03-01  316.1000001958-04-01  317.2000001958-05-01  317.433333...2001-11-01  369.3750002001-12-01  371.020000

让咱们用数据可视化摸索这个工夫序列:

plt.show()

当咱们绘制数据时,能够发现工夫序列具备显著的季节性模式,并且总体趋势呈上升趋势。


点击题目查阅往期内容

R语言中的工夫序列分析模型:ARIMA-ARCH / GARCH模型剖析股票价格

左右滑动查看更多

01

02

03

04

当初,咱们持续应用ARIMA进行工夫序列预测。

第3步-ARIMA工夫序列模型

在工夫序列预测中应用的最常见的办法是被称为ARIMA模型。ARIMA是能够拟合工夫序列数据的模型,以便更好地了解或预测序列中的将来点。

有三种不同的整数(p,  d,  q)是用来参数化ARIMA模型。因而,ARIMA模型用符号示意 ARIMA(p, d, q)。这三个参数独特阐明了数据集中的季节性,趋势和噪声:

  • p 是模型的 _自回归_ 局部。它使咱们可能将过来值的影响纳入模型。从直觉上讲,这相似于申明如果过来三天天气始终和煦,今天可能会和煦。
  • d 是 模型的差分局部。蕴含了要利用于工夫序列的差重量(即,要从以后值中减去的过来工夫点的数量)。从直觉上讲,这相似于如果最近三天的温差很小,则今天的温度可能雷同。
  • q 是 模型的 _挪动均匀_局部。这使咱们能够将模型的误差设置为过来在先前工夫点察看到的误差值的线性组合。

在解决季节性影响时,咱们应用 _季节性_ ARIMA(示意为)  ARIMA(p,d,q)(P,D,Q)s。这里, (p, d, q) 是非节令参数,只管 (P, D, Q) 遵循雷同的定义,但实用于工夫序列的节令重量。该术语 s 是工夫序列的周期性(4 季度, 12 每年)。

相干视频

**

拓端

,赞7

**

拓端

,赞6

**

拓端

,赞9

**

拓端

,赞6

**

拓端

,赞17

**

拓端

,赞13

**

拓端

,赞17

在下一节中,咱们将形容如何为季节性ARIMA工夫序列模型自动识别最佳参数的过程。

第4步-ARIMA工夫序列模型的参数抉择

当心愿应用季节性ARIMA模型拟合工夫序列数据时,咱们的首要指标是找到ARIMA(p,d,q)(P,D,Q)s 可优化指标指标的值 。有许多准则和最佳实际能够实现此指标,然而ARIMA模型的正确参数化可能是艰辛的手动过程,须要畛域专业知识和工夫。其余统计编程语言(例如) R 提供 解决此问题的自动化办法,但这些办法尚未移植到Python。在本节中,咱们将通过编写Python代码以编程形式抉择ARIMA(p,d,q)(P,D,Q)s 工夫序列模型的最佳参数值来解决此问题 。

咱们将应用“网格搜寻”来迭代摸索参数的不同组合。对于每种参数组合,咱们应用 模块中的SARIMAX() 拟合新的季节性ARIMA模型。摸索了整个参数范畴,咱们的最佳参数集便会成为产生最佳性能的一组参数。让咱们首先生成咱们要评估的各种参数组合:

#定义p,d和q参数,使其取0到2之间的任何值p = d = q = range(0, 2)# 生成p、q和q三元组的所有不同组合pdq = list(itertools.product(p, d, q))# 生成所有不同的季节性p,q和q组合seasonal_pdq = [(x[0], x[1], x[2], 12) for x in list(itertools.product(p, d, q))]
OutputExamples of parameter combinations for Seasonal ARIMA...SARIMAX: (0, 0, 1) x (0, 0, 1, 12)SARIMAX: (0, 0, 1) x (0, 1, 0, 12)SARIMAX: (0, 1, 0) x (0, 1, 1, 12)SARIMAX: (0, 1, 0) x (1, 0, 0, 12)

当初,咱们能够应用下面定义的三元组参数来自动化训练和评估不同组合上的ARIMA模型的过程。在统计和机器学习中,此过程称为用于模型抉择的网格搜寻(或超参数优化)。

在评估和比拟不同参数的统计模型时,能够依据其拟合数据的水平或其精确预测将来数据点的能力来对每个模型进行排名。咱们将应用 AIC (Akaike Information Criterion)值,该值可通过应用拟合的ARIMA模型不便地返回 statsmodelsAIC 在思考模型整体复杂性的同时, 测量模型拟合数据的水平。与应用较少特色以达到雷同拟合优度的模型相比,在应用大量特色的模型将取得更大的AIC得分。因而,咱们寻找产生最低AIC 的模型 。

上面的代码块通过参数组合进行迭代,并应用中的 SARIMAX 函数 statsmodels 来拟合相应的Season ARIMA模型。拟合每个 SARIMAX()模型后,代码将输入出它们各自的 AIC 分数。

warnings.filterwarnings("ignore") # 指定疏忽正告音讯        try:            mod = sm.tsa.statespace.SARIMAX(y,                                            order=param,                                            seasonal_order=param_seasonal,                                            enforce_stationarity=False,                                            enforce_invertibility=False)

下面的代码产生以下后果

OutputSARIMAX(0, 0, 0)x(0, 0, 1, 12) - AIC:6787.3436240402125SARIMAX(0, 0, 0)x(0, 1, 1, 12) - AIC:1596.711172764114SARIMAX(0, 0, 0)x(1, 0, 0, 12) - AIC:1058.9388921320026SARIMAX(0, 0, 0)x(1, 0, 1, 12) - AIC:1056.2878315690562SARIMAX(0, 0, 0)x(1, 1, 0, 12) - AIC:1361.6578978064144SARIMAX(0, 0, 0)x(1, 1, 1, 12) - AIC:1044.7647912940095.........SARIMAX(1, 1, 1)x(1, 0, 0, 12) - AIC:576.8647112294245SARIMAX(1, 1, 1)x(1, 0, 1, 12) - AIC:327.9049123596742SARIMAX(1, 1, 1)x(1, 1, 0, 12) - AIC:444.12436865161305SARIMAX(1, 1, 1)x(1, 1, 1, 12) - AIC:277.7801413828764

代码的输入表明, SARIMAX(1, 1, 1)x(1, 1, 1, 12) 该AIC 值的最低 值为277.78。因而,在咱们思考的所有模型中,咱们应该将其视为最佳抉择。

步骤5 —拟合ARIMA工夫序列模型

应用网格搜寻,咱们确定了一组参数,这些参数对咱们的工夫序列数据产生了最佳拟合模型。咱们能够持续更深刻地剖析此模型。

咱们将从将最佳参数值插入新 SARIMAX 模型开始:

results = mod.fit()
Output==============================================================================                 coef    std err          z      P>|z|      [0.025      0.975]------------------------------------------------------------------------------ar.L1          0.3182      0.092      3.443      0.001       0.137       0.499ma.L1         -0.6255      0.077     -8.165      0.000      -0.776      -0.475ar.S.L12       0.0010      0.001      1.732      0.083      -0.000       0.002ma.S.L12      -0.8769      0.026    -33.811      0.000      -0.928      -0.826sigma2         0.0972      0.004     22.634      0.000       0.089       0.106==============================================================================

summary 输入后果产生的 属性 SARIMAX 返回了大量信息,然而咱们将注意力集中在系数上。 coef 列显示每个函数的权重(即重要性)以及每个函数如何影响工夫序列。 P>|z| 列告知咱们每个特色权重的重要性。在这里,每个权重的p值都小于或靠近 0.05,因而将所有权重保留在咱们的模型中是正当的。

在拟合季节性ARIMA模型时,重要的是运行模型诊断程序,以确保没有违反模型所做的假如。

plt.show()

咱们次要关怀的是确保模型的残差不相干并且零均值正态分布。如果季节性ARIMA模型不满足这些属性,则表明它能够进一步改善。

在这种状况下,咱们的模型诊断倡议依据以下内容正态分布模型残差:

  • 在右上角的图中,咱们看到红线 KDE 凑近 N(0,1) 红线,(其中 N(0,1))是均值0 和标准偏差 为的正态分布。这很好地表明了残差呈正态分布。
  •  左下方的 qq图显示,残差(蓝色点)散布遵循从规范正态分布。同样,表明残差是正态分布的。
  • 随时间推移的残差(左上图)没有显示任何显著的季节性变动,而是白噪声。右下方的自相干(即相干图)图证实了这一点,该图表明工夫序列残差有较低的相关性。

这些察看后果使咱们得出结论,咱们的模型产生了令人满意的拟合度,能够帮忙咱们了解工夫序列数据并预测将来价值。

只管咱们具备令人满意的拟合度,但能够更改季节性ARIMA模型的某些参数以改善模型拟合度。因而,如果扩充网格搜寻范畴,咱们可能会找到更好的模型。

第6步-验证预测

咱们曾经为工夫序列取得了模型,当初能够将其用于产生预测。咱们首先将预测值与工夫序列的理论值进行比拟,这将有助于咱们理解预测的准确性。

pred_ci = pred.conf_int()

下面的代码示意预测从1998年1月开始。

咱们能够绘制CO2工夫序列的理论值和预测值,评估咱们的成果。

 ax.fill_between(pred_ci.index,                pred_ci.iloc[:, 0],                pred_ci.iloc[:, 1], color='k', alpha=.2)plt.show()

总体而言,咱们的预测与实在值十分吻合,显示出总体增长趋势。

量化咱们的预测准确性也很有用。咱们将应用MSE(均方误差)来总结咱们预测的平均误差。对于每个预测值,咱们计算其与实在值的差别并将后果平方。对后果进行平方,在计算总体均值时正/负差不会相互对消。

y_truth = y['1998-01-01':]# 计算均方误差mse = ((y_forecasted - y_truth) ** 2).mean()
Output咱们的预测均方误差为 0.07

咱们提前一步进行预测的MSE得出的值为 0.07,因为它靠近于0,因而非常低。如果MSE为0,则估算以现实的精度预测参数的观测值,这是现实的状况,然而这通常是不可能的。

然而,应用动静预测能够更好地示意咱们的实在预测能力。在这种状况下,咱们仅应用工夫序列中直到某个特定点的信息,之后,将应用以前的预测工夫点中的值生成预测。

在上面的代码块中,咱们指定从1998年1月起开始计算动静预测和置信区间。

通过绘制工夫序列的察看值和预测值,咱们能够看到,即便应用动静预测,总体预测也是精确的。所有预测值(红线)与真实情况(蓝线)十分靠近,并且都在咱们预测的置信区间内。

咱们再次通过计算MSE来量化预测的成果:

# 提取工夫序列的预测值和实在值y_forecasted = pred_dynamic.predicted_meany_truth = y['1998-01-01':]# 计算均方误差mse = ((y_forecasted - y_truth) ** 2).mean()print('The Mean Squared Error of our forecasts is {}'.format(round(mse, 2)))
Output咱们的预测均方误差为 1.01

从动静预测取得的预测值产生的MSE为1.01。这比后面的略高,这是能够预期的,因为咱们所依赖的工夫序列的历史数据较少。

提前一步和动静预测都确认此工夫序列模型无效。然而,工夫序列预测的趣味在于可能提前预测将来值。

第7步-生成和可视化预测

最初,咱们形容了如何利用季节性ARIMA工夫序列模型来预测将来数据。

# 获取将来500步的预测pred_uc = results.get_forecast(steps=500)# 获取预测的置信区间pred_ci = pred_uc.conf_int()

咱们能够应用此代码的输入来绘制工夫序列并预测其将来值。

 

当初,咱们所生成的预测和相干的置信区间都能够用于进一步理解工夫序列并预测预期后果。咱们的预测表明,工夫序列预计将持续稳定增长。

随着咱们对将来的进一步预测,置信区间会越来越大。

论断

在本教程中,咱们形容了如何在Python中实现季节性ARIMA模型。展现了如何进行模型诊断以及如何生成二氧化碳工夫序列的预测。

您能够尝试以下一些其余操作:

  • 更改动静预测的开始日期,以理解这如何影响预测的整体品质。
  • 尝试更多的参数组合,以查看是否能够进步模型的拟合优度。
  • 抉择其余指标抉择最佳模型。例如,咱们应用该 AIC 找到最佳模型。

本文摘选 ARIMA模型预测CO2浓度工夫序列-python实现 ,点击“浏览原文”获取全文残缺材料。


点击题目查阅往期内容

R语言ARIMA-GARCH稳定率模型预测股票市场苹果公司日收益率工夫序列
R语言中的工夫序列分析模型:ARIMA-ARCH / GARCH模型剖析股票价格
R语言多元Copula GARCH 模型工夫序列预测
python中的copula:Frank、Clayton和Gumbel copula模型预计与可视化
R语言中的copula GARCH模型拟合工夫序列并模仿剖析
matlab应用Copula仿真优化市场危险数据VaR剖析
R语言多元Copula GARCH 模型工夫序列预测
R语言Copula函数股市相关性建模:模仿Random Walk(随机游走)
R语言实现 Copula 算法建模依赖性案例剖析报告
R语言ARMA-GARCH-COPULA模型和金融工夫序列案例
R语言基于copula的贝叶斯分层混合模型的诊断准确性钻研
R语言COPULA和金融工夫序列案例
matlab应用Copula仿真优化市场危险数据VaR剖析
matlab应用Copula仿真优化市场危险
R语言多元CopulaGARCH模型工夫序列预测
R语言Copula的贝叶斯非参数MCMC预计
R语言COPULAS和金融工夫序列R语言乘法GARCH模型对高频交易数据进行波动性预测
R语言GARCH-DCC模型和DCC(MVT)建模预计
Python应用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模仿进行股价预测
R语言工夫序列GARCH模型剖析股市稳定率
R语言ARMA-EGARCH模型、集成预测算法对SPX理论稳定率进行预测
matlab实现MCMC的马尔可夫转换ARMA - GARCH模型预计
Python应用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模仿进行股价预测
应用R语言对S&P500股票指数进行ARIMA + GARCH交易策略
R语言用多元ARMA,GARCH ,EWMA, ETS,随机稳定率SV模型对金融工夫序列数据建模
R语言股票市场指数:ARMA-GARCH模型和对数收益率数据探索性剖析
R语言多元Copula GARCH 模型工夫序列预测
R语言应用多元AR-GARCH模型掂量市场危险
R语言中的工夫序列分析模型:ARIMA-ARCH / GARCH模型剖析股票价格
R语言用Garch模型和回归模型对股票价格剖析
GARCH(1,1),MA以及历史模拟法的VaR比拟
matlab预计arma garch 条件均值和方差模型
R语言ARMA-GARCH-COPULA模型和金融工夫序列案例