关于数据挖掘:python3用ARIMA模型进行时间序列预测

5次阅读

共计 6814 个字符,预计需要花费 18 分钟才能阅读完成。

原文链接: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_csv



from pandas import datetime



from matplotlib import pyplot





def 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 行。

Month



1901-01-01 266.0



1901-02-01 145.9



1901-03-01 183.1



1901-04-01 119.3



1901-05-01 180.3



Name: 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:                   35



Model:                 ARIMA(5, 1, 0)   Log Likelihood                -196.170



Method:                       css-mle   S.D. of innovations             64.241



Date:                Mon, 12 Dec 2016   AIC                            406.340



Time:                        11:09:13   BIC                            417.227



Sample:                    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.222



ar.L1.D.Sales    -1.1082      0.183     -6.063      0.000        -1.466    -0.750



ar.L2.D.Sales    -0.6203      0.282     -2.203      0.036        -1.172    -0.068



ar.L3.D.Sales    -0.3606      0.295     -1.222      0.231        -0.939     0.218



ar.L4.D.Sales    -0.1252      0.280     -0.447      0.658        -0.674     0.424



ar.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.4292



AR.2           -1.0617           +0.5064j            1.1763            0.4292



AR.3            0.0816           -1.3804j            1.3828           -0.2406



AR.4            0.0816           +1.3804j            1.3828            0.2406



AR.5            2.9315           -0.0000j            2.9315           -0.0000



\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-

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

ARMA 拟合残差线图

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

ARMA 拟合残差密度图

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

count   35.000000



mean    -5.495213



std     68.132882



min   -133.296597



25%    -42.477935



50%     -7.186584



75%     24.748357



max    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.300000



predicted=306.512968, expected=339.700000



predicted=387.376422, expected=440.400000



predicted=348.154111, expected=315.900000



predicted=386.308808, expected=439.300000



predicted=356.081996, expected=401.300000



predicted=446.379501, expected=437.400000



predicted=394.737286, expected=575.500000



predicted=434.915566, expected=407.600000



predicted=507.923407, expected=682.000000



predicted=435.483082, expected=475.300000



predicted=652.743772, expected=581.300000



predicted=546.343485, expected=646.900000



Test 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 模型进行工夫序列预测

正文完
 0