suzuzusu日記

(´・ω・`)

時系列予測フレームワークfableを試す

fableとは?

https://fable.tidyverts.org/reference/figures/logo.png

ETS,ARIMA,Random Walk,Neural Network autoregressionなどの時系列予測手法群の評価や予測結果の描画をしてくれるフレームワークです. 短いコード量でそれぞれのモデルを手軽に実行できるのが特徴です.使い方を忘れないようにメモしておきます. 作者の中にはRのforecastなどを開発している Rob Hyndman先生もいます.

インストール方法

install.packages("fable")

モデル一覧

現時点では以下のような手法が実装されています.

  • ARIMA
  • ETS(Exponential smoothing state space models)
  • TSLM(Time series linear models)
  • Simple forecasting methods(移動平均モデル,ランダムウォークなど)
  • Neural network autoregression
  • Vector autoregression

Function reference • fable

使い方

データフレームのtsibbleに変換してmodelに突っ込んでforecastするだけです. modelに予測したいモデルを複数入れることが可能です.

tsibble_data %>%
  model(
    # value は予測したいデータ
    hoge = hoge_model(value),
    fuga = fuga_model(log(value)) # 対数変換やBox-Cox変換も可能
  ) %>%
  forecast()

AirPassengersの時系列予測

f:id:suzuzusu:20191215234315p:plain
AirPassengers

おなじみのAirPassengersで試してみます.以下が,前処理も含めた12種類ほどの手法で比較した実装です.

library(fable)
library(tsibble)
library(lubridate)
library(dplyr)

AirPassengers %>%
  as_tsibble %>%
  model(
    ets = ETS(value),
    ets_log = ETS(log(value)),
    ets_box_cox = ETS(box_cox(value, 0.3)),
    arima = ARIMA(value),
    arima_log = ARIMA(log(value)),
    arima_box_cox = ARIMA(box_cox(value, 0.3)),
    snaive = SNAIVE(value),
    snaive_log = SNAIVE(log(value)),
    snaive_box_cox = SNAIVE(box_cox(value, 0.3)),
    nnetar = NNETAR(value),
    nnetar_log = NNETAR(log(value)),
    nnetar_box_cox = NNETAR(box_cox(value, 0.3))
  ) %>%
  forecast(h = "2 years") %>% 
  autoplot(filter(as_tsibble(AirPassengers), year(index) > 1950), level = NULL)

f:id:suzuzusu:20191215234429p:plain
結果

f:id:suzuzusu:20191215234441p:plain
結果(拡大)

参考