关于数据挖掘:多元时间序列滚动预测ARIMA回归ARIMAX模型分析附代码数据

65次阅读

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

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

最近咱们被客户要求撰写对于多元工夫序列滚动预测的钻研报告,包含一些图形和统计输入。

当须要为数据抉择最合适的预测模型或办法时,预测者通常将可用的样本分成两局部:内样本(又称 “ 训练集 ”)和保留样本(或外样本,或 “ 测试集 ”)。而后,在样本中预计模型,并应用一些误差指标来评估其预测性能。

如果这样的程序只做一次,那么这被称为 “ 固定原点 “ 评估。然而,工夫序列可能蕴含离群值,一个差的模型可能比更适合的模型体现得更好。为了增强对模型的评估,咱们应用了一种叫做 “ 滚动原点 “ 的办法。

滚动原点是一种预测办法,依据这种办法,预测原点被间断更新,预测是由每个原点产生的(Tashman 2000)。这种办法容许取得几个工夫序列的预测误差,从而更好地理解模型的体现。

相干视频:Python 和 R 语言应用指数加权均匀(EWMA),ARIMA 自回归挪动均匀模型预测工夫序列

如何实现呢?

下图形容了滚动原点的根本思维。红色单元格对应的是样本内数据,而浅灰色单元格对应的是前三步的预测。该图中工夫序列有 25 个观测值,预测从 8 个原点开始产生,从原点 15 开始。模型在每次迭代中都被从新预计,并产生预测后果。之后,在系列的开端减少一个新的观测值,这个过程持续进行。当没有更多的数据须要增加时,这个过程就会进行。这能够被认为是一个滚动的原点,有一个固定的保留样本量。这个程序的后果是产生了 8 个一到三步的预测。在此基础上,咱们能够计算出误差测量方法,并抉择体现最好的模型。

从 8 个原点产生预测的另一个抉择是,从原点 17 而不是 15 开始(见下图)。在这种状况下,程序始终继续到原点 22,即产生最初一个三步超前预测的时候,而后持续以递加的预测范畴进行。因而,两步预测从原点 23 产生,只有一步预测从原点 24 产生。因而,咱们失去 8 个一步预测,7 个两步预测和 6 个三步预测。这能够被认为是一个滚动的原点,有一个非固定的保留样本量。可用于在小样本的状况下,当咱们没有多余的观测值的时候。

最初,在上述两种状况下,咱们的样本量都在减少。然而对于某些钻研目标,咱们可能须要一个恒定的内样本。下图展现了这样一种状况。在这种状况下,在每次迭代中,咱们在系列的开端减少一个察看值,并从系列的开始删除一个察看值(深灰色单元)。

R 实现:一元工夫序列 ARIMA 案例

R 实现了对任何函数的滚动原点预计,有一个预约义的调用,并返回预期的值。

咱们从一个简略的例子开始,从正态分布生成序列。

x <- rnorm(100,100,10)

咱们在这个例子中应用 ARIMA(0,1,1)。

predict(arima(x=data,order=c(0,1,1)),n.ahead=h

调用包含两个重要元素:data 和 h。data 指定了样本内值在咱们要应用的函数中的地位。h 将通知咱们的函数,在选定的函数中指定了预测的范畴。在这个例子中,咱们应用 arima(x=data,order=c(0,1,1)),产生了一个想要的 ARIMA(0,1,1)模型,而后咱们应用 predict(…,n. ahead=h),从该模型产生一个预测。

还须要指定函数应该返回什么。能够是条件平均数(点预测),预测区间,模型的参数。然而,依据你应用的函数返回的内容,滚动预测返回的内容有一些不同。如果它是一个矢量,那么滚动预测将产生一个矩阵(列中有每个原点的值)。如果它是一个矩阵,那么就会返回一个数组。最初,如果它是一个列表,那么将返回一个列表的列表。

咱们先从 predict()函数中收集条件平均值。

咱们能够应用滚动原点从模型中产生预测后果。比方说,咱们想要三步预测和 8 个原点,所有其余参数的默认值。

predro(x, h , orig)

该函数返回一个列表,其中蕴含咱们要求的所有数值,再加上保留样本的理论数值。咱们能够依据这些值计算一些根本的误差指标,例如,按比例的均匀绝对误差。

apply(abs(holdo - pred),1,mean) / mean(actual)

在这个例子中,咱们应用 apply()函数,辨别不同的预测期,并理解模型在每个预测期的体现。以相似的形式,咱们能够评估其余一些模型的性能,并与第一个模型产生的误差进行比拟。这些数字自身并不能阐明什么,但如果咱们把这个模型的体现与另一个模型进行比拟,那么咱们就能够推断出一个模型是否比另一个模型更适宜数据。

咱们还能够绘制来自滚动原点的预测后果。

plot(Values1)


点击题目查阅往期内容

[](http://mp.weixin.qq.com/s?__biz=MzU4NTA1MDk4MA==&mid=22474970…)R 语言用 ARIMA 模型,ARIMAX 模型预测冰淇淋生产工夫序列数据

左右滑动查看更多

01

02

03

04

在这个例子中,来自不同起源的预测后果是互相靠近的。这是因为数据是安稳的,模型是相当稳固的。

如果咱们看一下返回的矩阵,咱们会留神到它们蕴含缺失值。

这是因为在默认状况下,保留样本被设置为十分数。内样本也被设置为十分数,这就是为什么模型在每次迭代时都会对减少的样本进行从新预计。咱们可用批改这一点。

predro(x, h , ori)

请留神,return2 的值与 return1 的值不能间接比拟,因为它们是由不同的终点生成的。这一点在咱们绘图时能够看进去。

plot(returned2)

如果你应用预测包中的函数,能够用以下形式批改调用和返回值。

 "forecast(ets(data) ,level=95"
 c("mean","lower","upper")

多元工夫序列 ARIMA 案例

当你有一个模型和一个工夫序列时, 滚动预测的是一个不便的办法。然而如果你须要将不同的模型利用于不同的工夫序列呢?咱们会须要一个循环。在这种状况下,有一个简略的办法来应用滚动预测。当初引入几个工夫序列。

对于这个例子,咱们须要一个返回值的数组。

array(NA,c(3,2,3,8))

在这里,咱们将有 3 个工夫序列,2 个模型和来自 8 个起源的 3 步超前预测。咱们的模型将被保留在一个独自的列表中。在这个例子中,咱们将有 ARIMA(0,1,1)和 ARIMA(1,1,0)。

 list(c(0,1,1), c(1,1,0))

咱们从函数中返回雷同的预测值,但咱们须要扭转调用形式,因为当初咱们必须将这两种不同的模型思考在内。

"predict(arima(data,Models[[i]])ahead=h)"

咱们没有间接指定模型,而是应用列表中的第 i 个元素。

咱们还想从保留样本中保留理论值,以便可能计算误差。

这个数组有 3 个工夫序列和来自 8 个原点的 3 步超前预测的维度。

最初,咱们能够写一个循环并产生预测后果。

for(j in 1:3)  for(i in 1:2)predro(data, h , or=8)

比拟两者在不同工夫序列上的体现。

exp(mean(log(apply(Holdout - Fore  / apply(abs(Holdout - Fore))

![图片]() 

因而,依据这些后果,能够得出结论,在咱们的三个工夫序列上,ARIMA(0,1,1)均匀来说比 ARIMA(1,1,0)更精确。

线性回归和 ARIMAX 案例

咱们的最初一个例子,咱们创立数据框并拟合线性回归。

请留神,在这个例子中,lm()函数中实现的回归依赖于数据框架,不应用预测范畴。

predict(lm(y~x1+x2+x3,xre),newdat

此外,函数 predict.lm()返回的是一个带有数值的矩阵,而不是一个列表。最初调用滚动预测。

pred(y, h , ori)

在这种状况下, 咱们须要在调用的数据参数中提供因变量, 因为该函数须要提取 holdout 的值.

predict(lm( xreg ,new =xreg "
predro($y, h , or)
plot(Return)

作为最初一个例子,咱们思考以下数据的 ARIMAX 模型。

并相应地批改调用。

ourCall <- "predict(arima(x=data, order=c(0,1,1), xreg=xreg[counti,]), n.ahead=h, newxreg=xreg[counto,])"

思考到当初咱们解决的是 ARIMA,咱们须要同时指定数据和 h。此外,xreg 与之前的例子不同,因为它当初不应该蕴含因变量。

如果你应用 ETSX 模型,调用能够简化为:

 "es(x=dat, xreg, h=h"

最初,下面提到的所有例子都能够并行实现,特地是当数据十分多且样本量很大时。

参考文献

Davydenko, Andrey, and Robert Fildes. 2013.“Measuring Forecasting Accuracy: The Case of Judgmental Adjustments to Sku-Level Demand Forecasts.”International Journal of Forecasting 29 (3). Elsevier B.V.: 510–22. https://doi.org/10.1016/j.ijforecast.2012.09.002.

Petropoulos, Fotios, and Nikolaos Kourentzes. 2015.“Forecast combinations for intermittent demand.”Journal of the Operational Research Society 66 (6). Nature Publishing Group: 914–24. https://doi.org/10.1057/jors.2014.62.


本文摘选 R 语言多元工夫序列滚动预测:ARIMA、回归、ARIMAX 模型剖析 ,点击“ 浏览原文”获取全文残缺材料。


点击题目查阅往期内容

【视频】工夫序列剖析:ARIMA-ARCH / GARCH 模型剖析股票价格
工夫序列 GARCH 模型剖析股市稳定率
PYTHON 用 GARCH、离散随机稳定率模型 DSV 模仿预计股票收益工夫序列与蒙特卡洛可视化
极值实践 EVT、POT 超阈值、GARCH 模型剖析股票指数 VaR、条件 CVaR:多元化投资组合预测危险测度剖析
Garch 稳定率预测的区制转移交易策略
金融工夫序列模型 ARIMA 和 GARCH 在股票市场预测利用
工夫序列分析模型:ARIMA-ARCH / GARCH 模型剖析股票价格
R 语言危险价值:ARIMA,GARCH,Delta-normal 法滚动预计 VaR(Value at Risk)和回测剖析股票数据
R 语言 GARCH 建模罕用软件包比拟、拟合规范普尔 SP 500 指数稳定率工夫序列和预测可视化
Python 金融工夫序列模型 ARIMA 和 GARCH 在股票市场预测利用
MATLAB 用 GARCH 模型对股票市场收益率工夫序列稳定的拟合与预测 R 语言 GARCH-DCC 模型和 DCC(MVT)建模预计
Python 用 ARIMA、GARCH 模型预测剖析股票市场收益率工夫序列
R 语言中的工夫序列分析模型:ARIMA-ARCH / GARCH 模型剖析股票价格
R 语言 ARIMA-GARCH 稳定率模型预测股票市场苹果公司日收益率工夫序列
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 语言 POT 超阈值模型和极值实践 EVT 剖析

正文完
 0