原文链接:http://tecdat.cn/?p=12260

原文出处:拓端数据部落


ARIMA模型是一种风行的且宽泛应用的用于工夫序列预测的统计办法。

ARIMA是首字母缩写词,代表主动回归挪动均匀。它是一类模型,可在工夫序列数据中捕捉一组不同的规范工夫构造。

在本教程中,您将发现如何应用Python开发用于工夫序列数据的ARIMA模型。

实现本教程后,您将晓得:

  • 对于ARIMA模型,应用的参数和模型所作的假如。

  • 如何使ARIMA模型适宜数据并应用它进行预测。

  • 如何针对您的工夫序列问题配置ARIMA模型。

理解如何筹备和可视化工夫序列数据并开发自回归预测模型  。

让咱们开始吧。

自回归综合挪动均匀模型

ARIMA模型  是一类统计模型剖析和预测的工夫序列数据。

它明确地投合了工夫序列数据中的一组规范构造,因而提供了一种简略而弱小的办法来进行纯熟的工夫序列预测。

ARIMA是首字母缩写词,代表主动回归挪动平均线。它是对简略的主动回归挪动平均线的概括,并减少了差分的概念。

该首字母缩写是描述性的。简而言之,它们是:

  • AR:  _自回归_。一种模型,它应用察看值和一些滞后察看值之间的依赖关系。

  • I:  _综合_。为了使工夫序列安稳,应用原始观测值的差别(例如,从上一个工夫步长的观测值中减去观测值)。

  • MA:  _挪动均匀_。一种模型,该模型应用察看值与利用于滞后察看值的挪动均匀模型的残差之间的依赖关系。

每一个都在模型中明确指定为参数。应用ARIMA(p,d,q),其中参数替换为整数值以疾速批示所应用的特定ARIMA模型。

ARIMA模型的参数定义如下:

  • p:模型中包含的滞后观测值的数量,也称为滞后阶数。

  • d:原始观测值相差的次数,也称为相异度。

  • q:挪动均匀窗口的大小,也称为挪动均匀的程序。

构建包含指定数量和类型的项的线性回归模型,并通过肯定水平的差分来筹备数据,以使其放弃安稳,即打消对回归模型产生负面影响的趋势和节令构造。

能够将值0用作参数,这示意不应用模型的该元素。这样,能够将ARIMA模型配置为执行ARMA模型甚至简略的AR,I或MA模型的性能。

对于工夫序列采纳ARIMA模型,则假设生成观测值的根底过程是ARIMA过程。这看起来仿佛很显著,然而有助于激发须要在原始观测值和模型预测的残差中确认模型的假如。

接下来,让咱们看一下如何在Python中应用ARIMA模型。咱们将从加载简略的单变量工夫序列开始。

洗发水销售数据集

该数据集形容了3年期间洗发水的每月销售量。

单位是销售数量,有36个察看值。

  • 下载数据集

下载数据集并将其放在文件名“ shampoo-sales.csv ”的当前工作目录中。

上面是应用自定义函数解析日期工夫字段的加载销售数据集的示例。数据集以任意年份为基准,在这种状况下为1900。

from pandas import read_csvfrom pandas import datetimefrom matplotlib import pyplotdef parser(x):return datetime.strptime('190'+x, '%Y-%m')series = read\_csv('shampoo-sales.csv', header=0, parse\_dates=\[0\], index\_col=0, squeeze=True, date\_parser=parser)print(series.head())series.plot()pyplot.show()

运行示例将输入数据集的前5行。

Month1901-01-01 266.01901-02-01 145.91901-03-01 183.11901-04-01 119.31901-05-01 180.3Name: Sales, dtype: float64

数据还绘制为工夫序列,其中x轴为月份,y轴为销售数字。

洗发水销售数据集图

咱们能够看到,洗发水销售数据集具备显著的趋势。

这表明工夫序列不是安稳的,并且须要进行差分能力使其稳固,至多相差1。

咱们还疾速浏览一下工夫序列的自相干图。上面的示例绘制了工夫序列中滞后的自相干。

通过运行示例,咱们能够看到与前10到12个之后之间存在正相干,这可能对前5个之后具备显着的意义。

模型的AR参数的一个好的终点可能是5。

洗发水销售数据的自相干图

ARIMA与Python

能够创立ARIMA模型,如下所示:

  1. 通过调用ARIMA()  并传入  p_,  _d_和  _q  参数来定义模型  。

  2. 通过调用fit()  函数在训练数据上筹备模型  。

  3. 能够通过调用  predict()  函数并指定要预测的一个或多个工夫的索引来进行预测。

咱们将ARIMA模型拟合到整个Shampoo Sales数据集,并查看残差。

首先,咱们拟合ARIMA(5,1,0)模型。这会将自回归的滞后值设置为5,应用1的差分阶数使工夫序列安稳,并应用0的挪动均匀模型。

拟合模型时,会提供许多无关线性回归模型拟合的调试信息。咱们能够通过将_disp_  参数设置为0 来敞开此性能  。

运行示例将显示拟合模型的摘要。这总结了所应用的系数值以及对样本中观测值进行拟合的技巧。

                             ARIMA Model Results==============================================================================Dep. Variable:                D.Sales   No. Observations:                   35Model:                 ARIMA(5, 1, 0)   Log Likelihood                -196.170Method:                       css-mle   S.D. of innovations             64.241Date:                Mon, 12 Dec 2016   AIC                            406.340Time:                        11:09:13   BIC                            417.227Sample:                    02-01-1901   HQIC                           410.098                         - 12-01-1903=================================================================================                    coef    std err          z      P>|z|      \[95.0% Conf. Int.\]\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-const            12.0649      3.652      3.304      0.003         4.908    19.222ar.L1.D.Sales    -1.1082      0.183     -6.063      0.000        -1.466    -0.750ar.L2.D.Sales    -0.6203      0.282     -2.203      0.036        -1.172    -0.068ar.L3.D.Sales    -0.3606      0.295     -1.222      0.231        -0.939     0.218ar.L4.D.Sales    -0.1252      0.280     -0.447      0.658        -0.674     0.424ar.L5.D.Sales     0.1289      0.191      0.673      0.506        -0.246     0.504                                    Roots=============================================================================                 Real           Imaginary           Modulus         Frequency\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-AR.1           -1.0617           -0.5064j            1.1763           -0.4292AR.2           -1.0617           +0.5064j            1.1763            0.4292AR.3            0.0816           -1.3804j            1.3828           -0.2406AR.4            0.0816           +1.3804j            1.3828            0.2406AR.5            2.9315           -0.0000j            2.9315           -0.0000\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-

首先,咱们失去了残差的线形图,这表明该模型可能仍未捕捉某些趋势信息。

ARMA拟合残差线图

接下来,咱们取得了残留误差值的密度图,表明误差为高斯分布。

ARMA拟合残差密度图

显示残余误差的散布。结果表明,的确在预测中存在偏差(残差均值非零)。

count   35.000000mean    -5.495213std     68.132882min   -133.29659725%    -42.47793550%     -7.18658475%     24.748357max    133.237980

请留神,只管下面咱们将整个数据集用于工夫序列剖析,但现实状况下,在开发预测模型时,咱们仅对训练数据集执行此剖析。

接下来,让咱们看看如何应用ARIMA模型进行预测。

滚动预测ARIMA模型

ARIMA模型可用于预测将来的工夫步长。

咱们能够在ARIMAResults  对象上应用predict()函数  进行预测。它承受工夫步长索引作为参数进行预测。这些索引与用于进行预测的训练数据集的开始无关。

如果咱们在训练数据集中应用100个察看值来拟合模型,则将用于进行预测的下一个工夫步长的索引指定为预测函数  _start = 101,end = 101_。这将返回一个蕴含一个蕴含预测的元素的数组。

如果咱们进行了任何微分( 在配置模型时_d> 0)_,咱们也心愿预测值在原始比例内。这能够通过将_typ_  参数设置为值  _'levels'_来指定  :  _typ ='levels'_。

或者,咱们能够通过应用Forecast()  函数防止应用所有这些标准,该  函数应用模型执行一步式预测。

咱们能够将训练数据集分为训练集和测试集,应用训练集拟合模型,并为测试集上的每个元素生成预测。

鉴于对差分和AR模型的先前工夫步长依赖于察看后果,因而须要滚动预测。执行此滚动预测的一种粗略办法是在收到每个新观测值后从新创立ARIMA模型。

咱们手动在称为历史记录的列表中跟踪所有察看值,并且每次迭代都将新的察看值附加到该列表中。

综上所述,以下是ARIMA模型在Python中进行滚动预测的示例。

运行示例将在每次迭代时打印预测值和期望值。

咱们还能够计算预测的最终均方误差得分(MSE),为其余ARIMA配置提供比拟点。

predicted=349.117688, expected=342.300000predicted=306.512968, expected=339.700000predicted=387.376422, expected=440.400000predicted=348.154111, expected=315.900000predicted=386.308808, expected=439.300000predicted=356.081996, expected=401.300000predicted=446.379501, expected=437.400000predicted=394.737286, expected=575.500000predicted=434.915566, expected=407.600000predicted=507.923407, expected=682.000000predicted=435.483082, expected=475.300000predicted=652.743772, expected=581.300000predicted=546.343485, expected=646.900000Test MSE: 6958.325

创立一个折线图,显示与滚动预测预测(红色)相比的期望值(蓝色)。咱们能够看到这些值显示出一些趋势并且处于正确的范畴内。

ARIMA滚动预测线图

该模型能够应用对p,d甚至q参数的进一步调整。

配置ARIMA模型

拟合ARIMA模型的经典办法是遵循  Box-Jenkins方法论。

此过程应用工夫序列剖析和诊断来发现ARIMA模型的良好参数。

总而言之,此过程的步骤如下:

  1. 模型辨认。应用图和汇总统计信息来辨认趋势,季节性和自回归元素,以理解差别量和所需滞后的大小。

  2. 参数估计。应用拟合过程来找到回归模型的系数。

  3. 模型查看。应用残差图和统计测验确定模型未捕捉的工夫构造的数量和类型。

反复该过程,直到在样本内或样本外察看值(例如训练或测试数据集)上达到现实的拟合程度为止。

在1970年经典的教科书中 ,George Box和Gwilym Jenkins 题为“ 工夫序列剖析:预测和管制”,对这一过程进行了形容  。如果您有趣味深入研究这种类型的模型和办法,当初能够提供更新的第五版。

鉴于该模型能够无效地适宜中等大小的工夫序列数据集,因而该模型的网格搜寻参数可能是一种有价值的办法。

摘要

在本教程中,您发现了如何为Python中的工夫序列预测开发ARIMA模型。

具体来说,您理解到:

  • 对于ARIMA模型,如何配置它以及模型进行的假如。

  • 如何应用ARIMA模型执行疾速的工夫序列剖析。

  • 如何应用ARIMA模型进行样本预测之外的预测。

您对ARIMA或本教程有任何疑难吗?
在上面的评论中提出您的问题,咱们会尽力答复。


最受欢迎的见解

1.在python中应用lstm和pytorch进行工夫序列预测

2.python中利用长短期记忆模型lstm进行工夫序列预测剖析

3.应用r语言进行工夫序列(arima,指数平滑)剖析

4.r语言多元copula-garch-模型工夫序列预测

5.r语言copulas和金融工夫序列案例

6.应用r语言随机稳定模型sv解决工夫序列中的随机稳定

7.r语言工夫序列tar阈值自回归模型

8.r语言k-shape工夫序列聚类办法对股票价格工夫序列聚类

9.python3用arima模型进行工夫序列预测