这是关于时间序列的第N篇文章,本文将介绍ARIMAX模型,简单来说就是在ARIMA的基础上增加一个外生变量。ARIMAX和ARIMA相比在理论上没有太多新的内容,所以本文直接介绍在R里怎么一步一步跑ARIMAX。
在阅读这篇文章前,需要对ARIMA有一定了解,传送门在这里:
0100:时间序列分析|AR(p),MA(q), ARIMA入门及R中实践zhuanlan.zhihu.com0100:时间序列分析|ARIMA模型分步骤解析及R中实践zhuanlan.zhihu.com那么直接进入正题,来ARIMAX吧~
先举一个直观的需要用ARIMAX的例子:假设你在经营一家游乐园,你有过去三年游乐园的daily attendance数据,以及daily events数据,想要预测未来的daily attendance。
其中input data就是历史的daily attendance和daily events, output是未来的daily attendance。
如果用ARIMA的话,那么input变量只能是历史的daily attendance, 而想要将历史的daily events也作为一个因变量的话,就可以用ARIMAX模型。
假设下面咱们要解决的就是这个问题,步骤很简单,来看下R中要怎么一步一步run code吧:
第一步:时间序列数据集
- 如果没有数据的话,可以创建数据集:使用以下code建立一个ARIMA(1,1,1)的时间序列数据:
historical_attendance = arima.sim(list(order = c(1,1,1), ar = 0.9, ma = -0.4, n = 200)
2. 如果已有数据的话,记得将你的数据转化为时间序列数据
historical_attendance = ts(data$historical_attendance, frequency = 365.25/7, start= decimal_date(ymd('2015-06-27')))
第二步:把外生变量转变为matrix格式,这步极其重要! 我当时不知道要对外生变量进行格式转化,卡了很久找不到BUG,最后做code review的时候老板一眼就看出了问题所在。
xreg = as.matrix(data$historical_events)
第三步:跑ARIMAX模型,如果你数据量比较大的话,这步要跑好久。我大概300数据量,跑了一小时多。
arimax <- auto.arima(historical_attendance,xreg = xreg,seasonal.test="ch", parallel=TRUE,num.cores=8,stepwise=FALSE,approximation=FALSE)
第四步:做预测
做预测前,记得把test集中的外生变量也转化为matrix格式
xreg_next = as.matrix(data$future_events)
fcast_arimax <- forecast(arimax, h=10,xreg = xreg_next)
第五步:做一下可视化,画个图什么的。
只要掌握了ARIMA,ARIMAX就很简单的。对ARIMA不熟的, 一定要把这篇先看懂哦:
0100:时间序列分析|ARIMA模型分步骤解析及R中实践zhuanlan.zhihu.comPS: 我将开始频繁更新时间序列的各种模型了,包括模型本身的讲解和在R中怎么写code。
已更新的有:指数平滑ETS, 自回归AR, 移动平均MA,ARMA, ARIMA, ARIMAX,TABTS。
接下来会更新的模型包括:TABTS,TSAR, LSTM等
欢迎关注专栏:
一锅数据汤zhuanlan.zhihu.com