
這是關于時間序列的第N篇文章,本文將介紹ARIMAX模型,簡單來說就是在ARIMA的基礎上增加一個外生變量。ARIMAX和ARIMA相比在理論上沒有太多新的內容,所以本文直接介紹在R里怎么一步一步跑ARIMAX。
在閱讀這篇文章前,需要對ARIMA有一定了解,傳送門在這里:
0100:時間序列分析|AR(p),MA(q), 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.com
PS: 我將開始頻繁更新時間序列的各種模型了,包括模型本身的講解和在R中怎么寫code。
已更新的有:指數平滑ETS, 自回歸AR, 移動平均MA,ARMA, ARIMA, ARIMAX,TABTS。
接下來會更新的模型包括:TABTS,TSAR, LSTM等
歡迎關注專欄:
一鍋數據湯?zhuanlan.zhihu.com