如何执行不涉及重新拟合 ARIMA 模型的多步超时预测?

     2023-02-15     28

关键词:

【中文标题】如何执行不涉及重新拟合 ARIMA 模型的多步超时预测?【英文标题】:How to perform multi-step out-of-time forecast which does not involve refitting the ARIMA model? 【发布时间】:2019-10-13 14:46:07 【问题描述】:

我有一个现有的 ARIMA (p,d,q) 模型适合使用 python 的时间序列数据(例如,data[0:100])。我想用这个模型做预测(forecast[100:120])。但是,鉴于我也有未来的真实数据(例如:data[100:120]),我如何确保多步预测考虑到我拥有的未来真实数据,而不是使用它预测的数据?

本质上,在预测时,我希望使用data[100] 而不是forecast[100] 来计算forecast[101]

我想避免在每个时间步都用更新的“历史”重新拟合整个 ARIMA 模型。

我对 ARIMAX 模型的拟合如下:

train, test = data[:100], data[100:]
ext_train, ext_test = external[:100], external[100:]
model = ARIMA(train, order=(p, d, q), exog=ext_train)
model_fit = model.fit(displ=False)

现在,下面的代码允许我预测整个数据集的值,包括测试

forecast = model_fit.predict(end=len(data)-1, exog=external, dynamic=False)

但是,在这种情况下,经过 100 步后,ARIMAX 预测值会迅速收敛到长期平均值(正如预期的那样,因为在 100 步后它仅使用预测值)。我想知道是否有办法提供“未来”的真实值来提供更好的在线预测。大致如下:

forecast = model_fit.predict_fn(end = len(data)-1, exog=external, true=data, dynamic=False)

我知道我总是可以通过这样做来不断改装 ARIMAX 模型

historical = train
historical_ext = ext_train
predictions = []

for t in range(len(test)):
    model = ARIMA(historical, order=(p,d,q), exog=historical_ext)
    model_fit = model.fit(disp=False)
    output = model_fit.forecast(exog=ext_test[t])[0]
    predictions.append(output)
    observed = test[t]
    historical.append(observed)
    historical_ext.append(ext_test[t])

但这导致我一次又一次地训练 ARIMAX 模型,这对我来说没有多大意义。这会导致使用大量计算资源并且非常不切实际。这进一步使得评估 ARIMAX 模型变得困难,导致拟合的参数在每次迭代时都在不断变化。

我对 ARIMAX 模型的理解/使用有什么不正确的地方吗?

【问题讨论】:

我也有同样的问题。你找到答案了吗? 很遗憾,没有。我找不到一个简单的方法来做到这一点。我相信 R 包对此有一些支持,但我无法将我已经拥有的所有内容移植到 R。 这是正确的@john.Ludlum 如果您的问题还没有解决,您可能会发现这很有帮助:statsmodels.org/dev/examples/notebooks/generated/… 【参考方案1】:

您是对的,如果您想使用新数据进行在线预测,您将需要一遍又一遍地估计参数,这在计算上是低效的。 需要注意的一点是,对于 ARIMA 模型,主要是模型的 MA 部分参数的估计计算量很大,因为这些参数是使用数值优化来估计的,而不是使用普通的最小二乘法。由于在为初始模型计算了一次参数后,您就知道未来模型的预期值,因为一次观察不会对它们产生太大影响,您也许可以初始化参数搜索以提高计算效率。

另外,可能有一种方法可以更有效地进行估计,因为您拥有模型的旧数据和参数,您唯一要做的就是再添加一个数据点。这意味着您只需要计算新数据点与所有其他数据点组合的 theta 和 phi 参数,而无需再次计算已知组合,这将节省相当多的时间。我非常喜欢这本书:Heij、Christiaan 等。计量经济学方法在商业和经济学中的应用。牛津大学出版社,2004 年。

本次讲座可能会让您了解这如何可行:lecture on ARIMA parameter estimation

恐怕您必须自己实施。据我所知,没有现成的方法可以做到这一点。

希望这能给你一些新的想法!

【讨论】:

【参考方案2】:

正如这个非常好的博客所建议的那样 (3 facts about time series forecasting that surprise experienced machine learning practitioners):

“每次要生成新的预测时都需要重新训练模型”,它还可以直观地理解为什么会发生这种情况。 这基本上强调了时间序列预测挑战是一个不断变化的变化,需要重新调整。

【讨论】:

恕我直言你应该得到更多的细节。这接近于仅链接的答案。 我明白了,我只是试着不重复博客,总结了一个很简短的解释。【参考方案3】:

我一直在努力解决这个问题。幸运的是,我发现了一个非常有用的讨论。据我所知,python中的ARIMA不支持这种情况,我们需要使用SARIMAX。

可以参考讨论链接:https://github.com/statsmodels/statsmodels/issues/2788

【讨论】:

哇,太好了,谢谢!要是我在做这个的时候能找到这个就好了

尝试拟合 ARIMA 模型时 xy.coords 出错,请告知

】尝试拟合ARIMA模型时xy.coords出错,请告知【英文标题】:Errorinxy.coordswhentryingtofitARIMAmodel,pleaseadvise【发布时间】:2021-10-0621:34:29【问题描述】:我希望您能帮助我解决我在尝试为我正在进行的学校项目拟合ARIMA模型时遇到的问... 查看详情

为啥重新执行我的多线程代码后输出不一样?

】为啥重新执行我的多线程代码后输出不一样?【英文标题】:Whyarenotoutputsthesameafterre-executingmymultithreadingcode?为什么重新执行我的多线程代码后输出不一样?【发布时间】:2014-02-1511:08:42【问题描述】:当我执行以下代码时,... 查看详情

解释 ARIMA 模型的预测

...。数据来自M1-Competition,系列为MNB65。我正在尝试将数据拟合到ARIMA(1,0,0)模型并获得预测。我正在使用R。这里有一些输出sn-ps:>arima(x,order=c 查看详情

时间序列分析-如何写出arima模型的公式

...间序列分析步骤,得到最佳的模型拟合结果后,如何将p,d,q代入公式呢?需要搞清楚的知识点有:·ar,ma,arma,arima模型的公式,参考维基百科·滞后算子(表示前几期)·差分(1阶差分... 查看详情

时间序列分析-如何写出arima模型的公式

...间序列分析步骤,得到最佳的模型拟合结果后,如何将p,d,q代入公式呢?需要搞清楚的知识点有:·ar,ma,arma,arima模型的公式,参考维基百科·滞后算子(表示前几期)·差分(1阶差分... 查看详情

sktime ARIMA 无效频率

...时间】:2021-05-2212:40:36【问题描述】:我尝试从sktime包中拟合ARIMA模型。我导入一些数据集并将其转换为熊猫系列。然后我将模型拟合到火车样本上,当我尝试预测错误时。fromsktime.forecasting.baseimportForecastingHorizonfromsktime.forecastin 查看详情

如何从 nodejs 中的多步表单发布数据并表达到 MongoDB?

】如何从nodejs中的多步表单发布数据并表达到MongoDB?【英文标题】:HowtopostdatafromaMulti-StepForminnodejsandexpresstoMongoDB?【发布时间】:2021-04-2112:25:11【问题描述】:我是node.js和express的新手。我正在尝试使用nodejs、express和MongoDB创建... 查看详情

如何从 nodejs 中的多步表单发布数据并表达到 MongoDB?

】如何从nodejs中的多步表单发布数据并表达到MongoDB?【英文标题】:HowtopostdatafromaMulti-StepForminnodejsandexpresstoMongoDB?【发布时间】:2021-04-2112:25:11【问题描述】:我是node.js和express的新手。我正在尝试使用nodejs、express和MongoDB创建... 查看详情

时间序列2拟合检验和预测#r

一、拟合1、自动拟合模型要使用auto.arima()函数需要先下载zoo和forecast程序包,并用library调用这两个程序包。auto.arima()函数的命令格式如下auto.arima(x,max.p=5,max.q=,ic=)其中: -x:需要定阶的序列名。-max.p:自相关系数最高阶数... 查看详情

Keras每一步的多步LSTM批量训练分类

...teachstep【发布时间】:2019-03-2223:39:36【问题描述】:问题如何在Keras中批量训练多步LSTM以实现单标签多类分类,每个时间步超过2个类?当前错误每个目标批次都是一个形状为(batch_size,n_time_steps,n_classes)的3维数组,但Kera 查看详情

基于lstm的多变量多步预测模型

...析和可视化,手把手教你去搭建属于自己的预测分析模型。本文主要分为:LSTM模型简介、数据探索分析、模型构建测试三个部分。一、LSTM模型简介既然说到了LSTM,就要简单的介绍一下RNN(RecurrentNeuralNetwork,R... 查看详情

如何使用 LSTM 模型进行多步预测?

】如何使用LSTM模型进行多步预测?【英文标题】:HowtousetheLSTMmodelformulti-stepforecasting?【发布时间】:2021-12-1512:47:32【问题描述】:我使用LSTM开发了一个时间序列模型。我不能用它来预测未来几天的股价。我想用它来预测明年的... 查看详情

使用 dplyr 进行多步预测并执行

】使用dplyr进行多步预测并执行【英文标题】:Multi-stepsforecastingwithdplyranddo【发布时间】:2015-09-1706:09:21【问题描述】:dplyr中的do-function可以让您快速轻松地制作许多很酷的模型,但我正在努力使用这些模型来进行良好的滚动预... 查看详情

使用 React 和 Django Rest 框架的多步表单处理

...步。步骤一、二、三我写了三个视图。我的问题是我应该如何管理第二步视图和第三步视图?我应 查看详情

ubercart 2.4 中的多步结账

】ubercart2.4中的多步结账【英文标题】:multistepcheckoutinubercart2.4【发布时间】:2012-01-2316:28:41【问题描述】:是否有任何选项可以在ubercart2.4中创建多步结帐?我的意思是说如果我想要4stepcheckout过程,那么在ubercart中可以吗?【... 查看详情

Laravel 中的多步表单

】Laravel中的多步表单【英文标题】:Multi-stepforminLaravel【发布时间】:2020-06-2709:46:37【问题描述】:我正在尝试创建一个多步骤表单,供用户在登录后填写。我创建了单独的页面,其中包含将成为通用表单一部分的表单。数据将... 查看详情

r语言对s&p500股票指数进行arima+garch交易策略|附代码数据(代码片段)

...告,包括一些图形和统计输出。在本文中,我想向您展示如何应用S&P500股票市场指数的交易策略通过组合ARIMA和GARCH模型,从长期来看,我们可以超过“买入并持有”方法。策略概述该策略在“滚动”预测的基础上执行:对于每... 查看详情

Q 查询中的重复结果涉及与模型的多对一关系

】Q查询中的重复结果涉及与模型的多对一关系【英文标题】:DuplicateresultsinQqueryinvolvingmanytoonerelationtoamodel【发布时间】:2013-08-3015:38:21【问题描述】:我有一个Car模型和一个带有Car对象的ForeignKey的Passenger模型。Car和Passenger模型... 查看详情