UPDATE: 2022-12-24 03:33:21

はじめに

tidymodelsパッケージの使い方をいくつかのノートに分けてまとめている。tidymodelsパッケージは、統計モデルや機械学習モデルを構築するために必要なパッケージをコレクションしているパッケージで、非常に色んなパッケージがある。ここでは、今回はmodeltimeパッケージについてまとめていく。モデルの数理的な側面や機械学習の用語などは、このノートでは扱わない。

下記の公式ドキュメントやtidymodelsパッケージに関する書籍を参考にしている。

modeltimeパッケージの目的

modeltimeパッケージは、時系列モデルの構築を効率よく行うためのパッケージで、tidymodelsパッケージと組み合わせて時系列モデルを作成する際に使用される。時系列予測のための体系的なワークフローを提供し、時系列ブーストモデルなど新しいアルゴリズムもカバーしている点が特徴的。

上記のサイトをなぞりながら、不明点を追記しながらまとめていく。

モデルの作成

まずは必要なパッケージを読み込んでおく。

library(tidymodels)
library(modeltime)
library(tidyverse)
library(lubridate)
library(timetk)

modeltimeパッケージの基本的なワークフローは下記の通り。丸括弧内には作業と対応する関数名を表示している。

  • データを学習データ、テストデータに分割
  • 複数のモデルを作成してフィッティング。そして、モデルテーブルに追加(modeltime_table関数)
  • モデルをテストデータに合わせて調整(modeltime_calibrate関数)
  • テストセットの予測と精度評価を行なう(modeltime_forecast関数、modeltime_accuracy関数)
  • モデルをフルデータで再学習(modeltime_refit関数)
  • 将来予測を行う(modeltime_forecast関数)

ここで利用するデータはtimetkパッケージ内のm4_monthlyデータセットで、コンペティションで使用されたデータ。ここではidM750の部分を使用する。

データは、1990-01-01から始まり、2015-06-01まである。レコード数は306レコードで、間隔は月単位のデータになっている。

m750 <- m4_monthly %>% filter(id == "M750")
m750 %>% 
  summarise(start_date = min(date), end_date = max(date), records = n())
## # A tibble: 1 × 3
##   start_date end_date   records
##   <date>     <date>       <int>
## 1 1990-01-01 2015-06-01     306

timetkパッケージには、plot_time_series関数が用意されており、時系列データ簡単に可視化できる。そのため、ggplot2パッケージの関数を分析者が記述する必要がない。引数は沢山用意されており、グラフを柔軟にカスタマイズできる。

m750 %>%
  plot_time_series(.data = ., .date_var = date, .value = value, .interactive = FALSE)

モデルを構築する前に、データを分割しておく。クロスバリデーションなどは次回のノートで扱うのでは、ここではシンプルに時系列データを分割する。rsplitクラスの分割データは、tk_time_series_cv_plan関数でデータフレームに変換できる。

今回は学習データが、1990-01-01から2012-11-01(22年10ヶ月)で、テストデータが2012-12-01から2015-06-01(2年6ヶ月)である。

splits <- initial_time_split(m750, prop = 0.9)
df_train <- splits %>% training()
df_test <- splits %>% testing()

bind_rows(
  df_train %>% summarise(start_date = min(date), end_date = max(date), records = n()),
  df_test %>% summarise(start_date = min(date), end_date = max(date), records = n())
)
## # A tibble: 2 × 3
##   start_date end_date   records
##   <date>     <date>       <int>
## 1 1990-01-01 2012-11-01     275
## 2 2012-12-01 2015-06-01      31

そのままplot_time_series_cv_plan関数に渡すことで、分割データの状態を可視化できる。

splits %>%
  tk_time_series_cv_plan() %>%
  plot_time_series_cv_plan(date, value, .interactive = FALSE,
                           .title = "Time Series Validation Plan")

データの準備が整ったので、次は、モデルを設定する。modeltimeパッケージのメリットは複数のモデルを効率よく管理し、評価し、再学習までを一気通貫で実行できる点。ここでは基本的なARIMAモデルとFaceBookが開発したProphetモデル、Prophet Boostモデル、ランダムフォレストの4つを設定する。

model_fit_arima <- arima_reg() %>%
    set_engine(engine = "auto_arima") %>% 
    fit(value ~ date, data = df_train)

model_fit_prophet <- prophet_reg(seasonality_yearly = TRUE) %>%
    set_engine(engine = "prophet") %>% 
    fit(value ~ date, data = df_train)

list(model_fit_arima, model_fit_prophet)
## [[1]]
## parsnip model object
## 
## Series: outcome 
## ARIMA(0,1,1)(0,1,1)[12] 
## 
## Coefficients:
##           ma1     sma1
##       -0.3405  -0.4781
## s.e.   0.0652   0.0628
## 
## sigma^2 = 25114:  log likelihood = -1699.55
## AIC=3405.1   AICc=3405.19   BIC=3415.8
## 
## [[2]]
## parsnip model object
## 
## PROPHET Model
## - growth: 'linear'
## - n.changepoints: 25
## - changepoint.range: 0.8
## - yearly.seasonality: 'TRUE'
## - weekly.seasonality: 'auto'
## - daily.seasonality: 'auto'
## - seasonality.mode: 'additive'
## - changepoint.prior.scale: 0.05
## - seasonality.prior.scale: 10
## - holidays.prior.scale: 10
## - logistic_cap: NULL
## - logistic_floor: NULL
## - extra_regressors: 0

機械学習モデルは、tidymodelsパッケージの流れでレシピやワークフローを利用できる。

recipe <- recipe(value ~ date, df_train) %>%
  step_timeseries_signature(date) %>%
  step_rm(
    contains("am.pm"),
    contains("hour"),
    contains("minute"),
    contains("second"),
    contains("xts")
  ) %>%
  step_fourier(date, period = 365, K = 5) %>%
  step_dummy(all_nominal())

recipe %>% prep() %>% bake(df_train)
## # A tibble: 275 × 47
##    date       value date_index…¹ date_…² date_…³ date_…⁴ date_…⁵ date_…⁶ date_…⁷
##    <date>     <dbl>        <dbl>   <int>   <int>   <int>   <int>   <int>   <int>
##  1 1990-01-01  6370    631152000    1990    1990       1       1       1       1
##  2 1990-02-01  6430    633830400    1990    1990       1       1       2       1
##  3 1990-03-01  6520    636249600    1990    1990       1       1       3       1
##  4 1990-04-01  6580    638928000    1990    1990       1       2       4       1
##  5 1990-05-01  6620    641520000    1990    1990       1       2       5       1
##  6 1990-06-01  6690    644198400    1990    1990       1       2       6       1
##  7 1990-07-01  6000    646790400    1990    1990       2       3       7       1
##  8 1990-08-01  5450    649468800    1990    1990       2       3       8       1
##  9 1990-09-01  6480    652147200    1990    1990       2       3       9       1
## 10 1990-10-01  6820    654739200    1990    1990       2       4      10       1
## # … with 265 more rows, 38 more variables: date_wday <int>, date_mday <int>,
## #   date_qday <int>, date_yday <int>, date_mweek <int>, date_week <int>,
## #   date_week.iso <int>, date_week2 <int>, date_week3 <int>, date_week4 <int>,
## #   date_mday7 <int>, date_sin365_K1 <dbl>, date_cos365_K1 <dbl>,
## #   date_sin365_K2 <dbl>, date_cos365_K2 <dbl>, date_sin365_K3 <dbl>,
## #   date_cos365_K3 <dbl>, date_sin365_K4 <dbl>, date_cos365_K4 <dbl>,
## #   date_sin365_K5 <dbl>, date_cos365_K5 <dbl>, date_month.lbl_01 <dbl>, …

レシピが完成したら、ワークフローを使ってフィッティングしておく。機械学習アルゴリズムは通常、日付・日時を処理する方法を知らないため、日付列を削除する必要がある。

model_randomforest <- rand_forest(trees = 1000, min_n = 50, mtry = 15) %>%
  set_engine("ranger") %>% 
  set_mode("regression")

model_fit_randomforest <- workflow() %>%
  add_model(model_randomforest) %>%
  add_recipe(recipe %>% step_rm(date)) %>%
  fit(df_train)

model_fit_randomforest
## ══ Workflow [trained] ══════════════════════════════════════════════════════════
## Preprocessor: Recipe
## Model: rand_forest()
## 
## ── Preprocessor ────────────────────────────────────────────────────────────────
## 5 Recipe Steps
## 
## • step_timeseries_signature()
## • step_rm()
## • step_fourier()
## • step_dummy()
## • step_rm()
## 
## ── Model ───────────────────────────────────────────────────────────────────────
## Ranger result
## 
## Call:
##  ranger::ranger(x = maybe_data_frame(x), y = y, mtry = min_cols(~15,      x), num.trees = ~1000, min.node.size = min_rows(~50, x),      num.threads = 1, verbose = FALSE, seed = sample.int(10^5,          1)) 
## 
## Type:                             Regression 
## Number of trees:                  1000 
## Sample size:                      275 
## Number of independent variables:  45 
## Mtry:                             15 
## Target node size:                 50 
## Variable importance mode:         none 
## Splitrule:                        variance 
## OOB prediction error (MSE):       93416.05 
## R squared (OOB):                  0.9529785

最後にProphet Boostモデルのフィッティングを行なう。

model_prophet_boost <- prophet_boost(seasonality_yearly = TRUE) %>%
  set_engine("prophet_xgboost") 

model_fit_prophet_boost <- workflow() %>%
  add_model(model_prophet_boost) %>%
  add_recipe(recipe) %>%
  fit(df_train)

model_fit_prophet_boost
## ══ Workflow [trained] ══════════════════════════════════════════════════════════
## Preprocessor: Recipe
## Model: prophet_boost()
## 
## ── Preprocessor ────────────────────────────────────────────────────────────────
## 4 Recipe Steps
## 
## • step_timeseries_signature()
## • step_rm()
## • step_fourier()
## • step_dummy()
## 
## ── Model ───────────────────────────────────────────────────────────────────────
## PROPHET w/ XGBoost Errors
## ---
## Model 1: PROPHET
##  - growth: 'linear'
##  - n.changepoints: 25
##  - changepoint.range: 0.8
##  - yearly.seasonality: 'TRUE'
##  - weekly.seasonality: 'auto'
##  - daily.seasonality: 'auto'
##  - seasonality.mode: 'additive'
##  - changepoint.prior.scale: 0.05
##  - seasonality.prior.scale: 10
##  - holidays.prior.scale: 10
##  - logistic_cap: NULL
##  - logistic_floor: NULL
## 
## ---
## Model 2: XGBoost Errors
## 
## xgboost::xgb.train(params = list(eta = 0.3, max_depth = 6, gamma = 0, 
##     colsample_bytree = 1, colsample_bynode = 1, min_child_weight = 1, 
##     subsample = 1), data = x$data, nrounds = 15, watchlist = x$watchlist, 
##     verbose = 0, objective = "reg:squarederror", nthread = 1)

モデルのフィッティングが完了したらモデルテーブルに追加する(modeltime_table関数)。これは、予測ワークフローの一部として使用されるため、必要な手順である。

models_tbl <- modeltime_table(
    model_fit_arima,
    model_fit_prophet,
    model_fit_prophet_boost,
    model_fit_randomforest
)
models_tbl
## # Modeltime Table
## # A tibble: 4 × 3
##   .model_id .model     .model_desc              
##       <int> <list>     <chr>                    
## 1         1 <fit[+]>   ARIMA(0,1,1)(0,1,1)[12]  
## 2         2 <fit[+]>   PROPHET                  
## 3         3 <workflow> PROPHET W/ XGBOOST ERRORS
## 4         4 <workflow> RANGER

モデルテーブルにモデルを登録したら、テストデータでモデルを検証する。これはmodeltime_calibrate関数で行なうことができる。

calibration_tbl <- models_tbl %>%
    modeltime_calibrate(new_data = df_test)

calibration_tbl
## # Modeltime Table
## # A tibble: 4 × 5
##   .model_id .model     .model_desc               .type .calibration_data
##       <int> <list>     <chr>                     <chr> <list>           
## 1         1 <fit[+]>   ARIMA(0,1,1)(0,1,1)[12]   Test  <tibble [31 × 4]>
## 2         2 <fit[+]>   PROPHET                   Test  <tibble [31 × 4]>
## 3         3 <workflow> PROPHET W/ XGBOOST ERRORS Test  <tibble [31 × 4]>
## 4         4 <workflow> RANGER                    Test  <tibble [31 × 4]>

これを実行すると、テストデータの観測値とモデルの予測値と残差が記録される。

# ARIMA Model
calibration_tbl %>% 
  pluck(".calibration_data", 1)
## # A tibble: 31 × 4
##    date       .actual .prediction .residuals
##    <date>       <dbl>       <dbl>      <dbl>
##  1 2012-12-01   10490      10449.       41.5
##  2 2013-01-01   10550      10567.      -16.5
##  3 2013-02-01   10540      10572.      -32.1
##  4 2013-03-01   10720      10768.      -47.9
##  5 2013-04-01   10700      10767.      -66.6
##  6 2013-05-01   10750      10765.      -15.4
##  7 2013-06-01   10540      10503.       37.2
##  8 2013-07-01    9030       9019.       10.8
##  9 2013-08-01    9620       9562.       58.0
## 10 2013-09-01   10050       9831.      219. 
## # … with 21 more rows

テストデータでの精度評価を行なう。これはmodeltime_forecast関数で行える。modeltime_forecast関数は、データセットを観測値、モデル1(ARIMA)の予測値、モデル2(prophet)の予測値、モデル3(Prophet Boost)、モデル4(RandomForest)の予測値という順でレコードを積み上げたデータフレームを返す。

calibration_tbl %>%
    modeltime_forecast(
        new_data = df_test,
        actual_data = m750
        )
## # A tibble: 430 × 7
##    .model_id .model_desc .key   .index     .value .conf_lo .conf_hi
##        <int> <chr>       <fct>  <date>      <dbl>    <dbl>    <dbl>
##  1        NA ACTUAL      actual 1990-01-01   6370       NA       NA
##  2        NA ACTUAL      actual 1990-02-01   6430       NA       NA
##  3        NA ACTUAL      actual 1990-03-01   6520       NA       NA
##  4        NA ACTUAL      actual 1990-04-01   6580       NA       NA
##  5        NA ACTUAL      actual 1990-05-01   6620       NA       NA
##  6        NA ACTUAL      actual 1990-06-01   6690       NA       NA
##  7        NA ACTUAL      actual 1990-07-01   6000       NA       NA
##  8        NA ACTUAL      actual 1990-08-01   5450       NA       NA
##  9        NA ACTUAL      actual 1990-09-01   6480       NA       NA
## 10        NA ACTUAL      actual 1990-10-01   6820       NA       NA
## # … with 420 more rows

また、plot_modeltime_forecast関数でテストデータを可視化できる。

calibration_tbl %>%
    modeltime_forecast(
        new_data = df_test,
        actual_data = m750
        ) %>%
    plot_modeltime_forecast(.interactive = FALSE)

評価指標の具体的な数値はmodeltime_accuracy関数で計算できる。この関数は、一般的な精度指標を一気に計算できる

  • MAE: 平均絶対誤差
  • MAPE: 平均絶対パーセント誤差
  • MASE: 平均絶対スケール誤差
  • SMAPE: 対称平均絶対パーセント誤差
  • RMSE: 2乗平均平方根誤差
  • RSQ: R2乗

評価指標を見る限り、テストデータに対しては、Prophet Boostモデルのほうが優秀である。

calibration_tbl %>%
    modeltime_accuracy() %>%
    table_modeltime_accuracy(.interactive = FALSE)
Accuracy Table
.model_id .model_desc .type mae mape mase smape rmse rsq
1 ARIMA(0,1,1)(0,1,1)[12] Test 151.33 1.41 0.52 1.43 197.71 0.93
2 PROPHET Test 175.50 1.68 0.60 1.68 232.88 0.88
3 PROPHET W/ XGBOOST ERRORS Test 148.46 1.42 0.51 1.43 185.46 0.92
4 RANGER Test 663.03 6.16 2.26 6.38 717.87 0.67

この結果から、Prophet Boostモデルで、フルデータセットを再学習させて、将来の予測を行なうことがよいとわかる。この作業はmodeltime_refit関数で実行できる。

この際に特定のモデルを取り出す必要はなく、モデルテーブルで管理しているモデルを使って予測できる。ここでは1年先を予測する。

refit_tbl <- calibration_tbl %>%
    modeltime_refit(data = m750)

refit_tbl %>%
    modeltime_forecast(h = "1 years", actual_data = m750) %>%
    plot_modeltime_forecast(.interactive = FALSE)

Prophet Boostモデルだけでよいのであれば、モデルテーブルから取り除けば良い。

refit_tbl_only_arima <- calibration_tbl %>%
    filter(.model_id == 3) %>% 
    modeltime_refit(data = m750)

refit_tbl_only_arima %>%
    modeltime_forecast(h = "1 years", actual_data = m750) %>%
    plot_modeltime_forecast(.interactive = FALSE)

以上がmodeltimeパッケージの基本的な使い方である。

予測値のデータフレームを参考までに全件出力しておく。

refit_tbl %>%
    modeltime_forecast(h = "1 years", actual_data = m750) %>% 
    print(n = 500)
## # A tibble: 354 × 7
##     .model_id .model_desc               .key   .index     .value .conf…¹ .conf…²
##         <int> <chr>                     <fct>  <date>      <dbl>   <dbl>   <dbl>
##   1        NA ACTUAL                    actual 1990-01-01  6370      NA      NA 
##   2        NA ACTUAL                    actual 1990-02-01  6430      NA      NA 
##   3        NA ACTUAL                    actual 1990-03-01  6520      NA      NA 
##   4        NA ACTUAL                    actual 1990-04-01  6580      NA      NA 
##   5        NA ACTUAL                    actual 1990-05-01  6620      NA      NA 
##   6        NA ACTUAL                    actual 1990-06-01  6690      NA      NA 
##   7        NA ACTUAL                    actual 1990-07-01  6000      NA      NA 
##   8        NA ACTUAL                    actual 1990-08-01  5450      NA      NA 
##   9        NA ACTUAL                    actual 1990-09-01  6480      NA      NA 
##  10        NA ACTUAL                    actual 1990-10-01  6820      NA      NA 
##  11        NA ACTUAL                    actual 1990-11-01  6860      NA      NA 
##  12        NA ACTUAL                    actual 1990-12-01  6950      NA      NA 
##  13        NA ACTUAL                    actual 1991-01-01  6920      NA      NA 
##  14        NA ACTUAL                    actual 1991-02-01  6910      NA      NA 
##  15        NA ACTUAL                    actual 1991-03-01  6960      NA      NA 
##  16        NA ACTUAL                    actual 1991-04-01  6990      NA      NA 
##  17        NA ACTUAL                    actual 1991-05-01  7010      NA      NA 
##  18        NA ACTUAL                    actual 1991-06-01  6890      NA      NA 
##  19        NA ACTUAL                    actual 1991-07-01  6200      NA      NA 
##  20        NA ACTUAL                    actual 1991-08-01  5780      NA      NA 
##  21        NA ACTUAL                    actual 1991-09-01  6550      NA      NA 
##  22        NA ACTUAL                    actual 1991-10-01  6980      NA      NA 
##  23        NA ACTUAL                    actual 1991-11-01  7000      NA      NA 
##  24        NA ACTUAL                    actual 1991-12-01  7040      NA      NA 
##  25        NA ACTUAL                    actual 1992-01-01  7030      NA      NA 
##  26        NA ACTUAL                    actual 1992-02-01  7170      NA      NA 
##  27        NA ACTUAL                    actual 1992-03-01  7150      NA      NA 
##  28        NA ACTUAL                    actual 1992-04-01  7180      NA      NA 
##  29        NA ACTUAL                    actual 1992-05-01  7140      NA      NA 
##  30        NA ACTUAL                    actual 1992-06-01  7100      NA      NA 
##  31        NA ACTUAL                    actual 1992-07-01  6490      NA      NA 
##  32        NA ACTUAL                    actual 1992-08-01  6060      NA      NA 
##  33        NA ACTUAL                    actual 1992-09-01  6870      NA      NA 
##  34        NA ACTUAL                    actual 1992-10-01  6880      NA      NA 
##  35        NA ACTUAL                    actual 1992-11-01  6950      NA      NA 
##  36        NA ACTUAL                    actual 1992-12-01  7030      NA      NA 
##  37        NA ACTUAL                    actual 1993-01-01  6940      NA      NA 
##  38        NA ACTUAL                    actual 1993-02-01  6970      NA      NA 
##  39        NA ACTUAL                    actual 1993-03-01  6990      NA      NA 
##  40        NA ACTUAL                    actual 1993-04-01  7010      NA      NA 
##  41        NA ACTUAL                    actual 1993-05-01  7020      NA      NA 
##  42        NA ACTUAL                    actual 1993-06-01  6890      NA      NA 
##  43        NA ACTUAL                    actual 1993-07-01  6300      NA      NA 
##  44        NA ACTUAL                    actual 1993-08-01  6040      NA      NA 
##  45        NA ACTUAL                    actual 1993-09-01  6730      NA      NA 
##  46        NA ACTUAL                    actual 1993-10-01  6910      NA      NA 
##  47        NA ACTUAL                    actual 1993-11-01  7090      NA      NA 
##  48        NA ACTUAL                    actual 1993-12-01  7120      NA      NA 
##  49        NA ACTUAL                    actual 1994-01-01  7070      NA      NA 
##  50        NA ACTUAL                    actual 1994-02-01  7240      NA      NA 
##  51        NA ACTUAL                    actual 1994-03-01  7180      NA      NA 
##  52        NA ACTUAL                    actual 1994-04-01  7180      NA      NA 
##  53        NA ACTUAL                    actual 1994-05-01  7300      NA      NA 
##  54        NA ACTUAL                    actual 1994-06-01  6900      NA      NA 
##  55        NA ACTUAL                    actual 1994-07-01  6400      NA      NA 
##  56        NA ACTUAL                    actual 1994-08-01  6220      NA      NA 
##  57        NA ACTUAL                    actual 1994-09-01  6960      NA      NA 
##  58        NA ACTUAL                    actual 1994-10-01  7130      NA      NA 
##  59        NA ACTUAL                    actual 1994-11-01  7310      NA      NA 
##  60        NA ACTUAL                    actual 1994-12-01  7300      NA      NA 
##  61        NA ACTUAL                    actual 1995-01-01  7310      NA      NA 
##  62        NA ACTUAL                    actual 1995-02-01  7310      NA      NA 
##  63        NA ACTUAL                    actual 1995-03-01  7510      NA      NA 
##  64        NA ACTUAL                    actual 1995-04-01  7440      NA      NA 
##  65        NA ACTUAL                    actual 1995-05-01  7430      NA      NA 
##  66        NA ACTUAL                    actual 1995-06-01  7030      NA      NA 
##  67        NA ACTUAL                    actual 1995-07-01  6440      NA      NA 
##  68        NA ACTUAL                    actual 1995-08-01  6070      NA      NA 
##  69        NA ACTUAL                    actual 1995-09-01  7200      NA      NA 
##  70        NA ACTUAL                    actual 1995-10-01  7390      NA      NA 
##  71        NA ACTUAL                    actual 1995-11-01  7630      NA      NA 
##  72        NA ACTUAL                    actual 1995-12-01  7630      NA      NA 
##  73        NA ACTUAL                    actual 1996-01-01  7610      NA      NA 
##  74        NA ACTUAL                    actual 1996-02-01  7570      NA      NA 
##  75        NA ACTUAL                    actual 1996-03-01  7690      NA      NA 
##  76        NA ACTUAL                    actual 1996-04-01  7740      NA      NA 
##  77        NA ACTUAL                    actual 1996-05-01  7730      NA      NA 
##  78        NA ACTUAL                    actual 1996-06-01  7340      NA      NA 
##  79        NA ACTUAL                    actual 1996-07-01  6700      NA      NA 
##  80        NA ACTUAL                    actual 1996-08-01  6740      NA      NA 
##  81        NA ACTUAL                    actual 1996-09-01  7500      NA      NA 
##  82        NA ACTUAL                    actual 1996-10-01  7930      NA      NA 
##  83        NA ACTUAL                    actual 1996-11-01  7940      NA      NA 
##  84        NA ACTUAL                    actual 1996-12-01  7960      NA      NA 
##  85        NA ACTUAL                    actual 1997-01-01  7900      NA      NA 
##  86        NA ACTUAL                    actual 1997-02-01  8010      NA      NA 
##  87        NA ACTUAL                    actual 1997-03-01  8170      NA      NA 
##  88        NA ACTUAL                    actual 1997-04-01  8140      NA      NA 
##  89        NA ACTUAL                    actual 1997-05-01  8210      NA      NA 
##  90        NA ACTUAL                    actual 1997-06-01  8180      NA      NA 
##  91        NA ACTUAL                    actual 1997-07-01  7330      NA      NA 
##  92        NA ACTUAL                    actual 1997-08-01  7110      NA      NA 
##  93        NA ACTUAL                    actual 1997-09-01  8020      NA      NA 
##  94        NA ACTUAL                    actual 1997-10-01  8150      NA      NA 
##  95        NA ACTUAL                    actual 1997-11-01  8200      NA      NA 
##  96        NA ACTUAL                    actual 1997-12-01  8040      NA      NA 
##  97        NA ACTUAL                    actual 1998-01-01  8210      NA      NA 
##  98        NA ACTUAL                    actual 1998-02-01  8240      NA      NA 
##  99        NA ACTUAL                    actual 1998-03-01  8350      NA      NA 
## 100        NA ACTUAL                    actual 1998-04-01  8390      NA      NA 
## 101        NA ACTUAL                    actual 1998-05-01  8420      NA      NA 
## 102        NA ACTUAL                    actual 1998-06-01  8280      NA      NA 
## 103        NA ACTUAL                    actual 1998-07-01  7710      NA      NA 
## 104        NA ACTUAL                    actual 1998-08-01  7410      NA      NA 
## 105        NA ACTUAL                    actual 1998-09-01  8180      NA      NA 
## 106        NA ACTUAL                    actual 1998-10-01  8430      NA      NA 
## 107        NA ACTUAL                    actual 1998-11-01  8610      NA      NA 
## 108        NA ACTUAL                    actual 1998-12-01  8570      NA      NA 
## 109        NA ACTUAL                    actual 1999-01-01  8610      NA      NA 
## 110        NA ACTUAL                    actual 1999-02-01  8730      NA      NA 
## 111        NA ACTUAL                    actual 1999-03-01  8910      NA      NA 
## 112        NA ACTUAL                    actual 1999-04-01  8840      NA      NA 
## 113        NA ACTUAL                    actual 1999-05-01  8860      NA      NA 
## 114        NA ACTUAL                    actual 1999-06-01  8930      NA      NA 
## 115        NA ACTUAL                    actual 1999-07-01  8760      NA      NA 
## 116        NA ACTUAL                    actual 1999-08-01  8280      NA      NA 
## 117        NA ACTUAL                    actual 1999-09-01  8650      NA      NA 
## 118        NA ACTUAL                    actual 1999-10-01  8800      NA      NA 
## 119        NA ACTUAL                    actual 1999-11-01  9130      NA      NA 
## 120        NA ACTUAL                    actual 1999-12-01  9130      NA      NA 
## 121        NA ACTUAL                    actual 2000-01-01  9140      NA      NA 
## 122        NA ACTUAL                    actual 2000-02-01  9160      NA      NA 
## 123        NA ACTUAL                    actual 2000-03-01  9290      NA      NA 
## 124        NA ACTUAL                    actual 2000-04-01  9240      NA      NA 
## 125        NA ACTUAL                    actual 2000-05-01  9300      NA      NA 
## 126        NA ACTUAL                    actual 2000-06-01  9280      NA      NA 
## 127        NA ACTUAL                    actual 2000-07-01  8520      NA      NA 
## 128        NA ACTUAL                    actual 2000-08-01  8100      NA      NA 
## 129        NA ACTUAL                    actual 2000-09-01  8970      NA      NA 
## 130        NA ACTUAL                    actual 2000-10-01  9190      NA      NA 
## 131        NA ACTUAL                    actual 2000-11-01  9340      NA      NA 
## 132        NA ACTUAL                    actual 2000-12-01  9340      NA      NA 
## 133        NA ACTUAL                    actual 2001-01-01  9350      NA      NA 
## 134        NA ACTUAL                    actual 2001-02-01  9190      NA      NA 
## 135        NA ACTUAL                    actual 2001-03-01  9490      NA      NA 
## 136        NA ACTUAL                    actual 2001-04-01  9360      NA      NA 
## 137        NA ACTUAL                    actual 2001-05-01  9500      NA      NA 
## 138        NA ACTUAL                    actual 2001-06-01  9520      NA      NA 
## 139        NA ACTUAL                    actual 2001-07-01  8890      NA      NA 
## 140        NA ACTUAL                    actual 2001-08-01  8320      NA      NA 
## 141        NA ACTUAL                    actual 2001-09-01  9370      NA      NA 
## 142        NA ACTUAL                    actual 2001-10-01  9660      NA      NA 
## 143        NA ACTUAL                    actual 2001-11-01 10060      NA      NA 
## 144        NA ACTUAL                    actual 2001-12-01 10040      NA      NA 
## 145        NA ACTUAL                    actual 2002-01-01  9900      NA      NA 
## 146        NA ACTUAL                    actual 2002-02-01 10120      NA      NA 
## 147        NA ACTUAL                    actual 2002-03-01 10060      NA      NA 
## 148        NA ACTUAL                    actual 2002-04-01 10820      NA      NA 
## 149        NA ACTUAL                    actual 2002-05-01 10650      NA      NA 
## 150        NA ACTUAL                    actual 2002-06-01 10650      NA      NA 
## 151        NA ACTUAL                    actual 2002-07-01  9560      NA      NA 
## 152        NA ACTUAL                    actual 2002-08-01  9130      NA      NA 
## 153        NA ACTUAL                    actual 2002-09-01  9810      NA      NA 
## 154        NA ACTUAL                    actual 2002-10-01 10060      NA      NA 
## 155        NA ACTUAL                    actual 2002-11-01 10250      NA      NA 
## 156        NA ACTUAL                    actual 2002-12-01 10230      NA      NA 
## 157        NA ACTUAL                    actual 2003-01-01 10190      NA      NA 
## 158        NA ACTUAL                    actual 2003-02-01 10140      NA      NA 
## 159        NA ACTUAL                    actual 2003-03-01 10350      NA      NA 
## 160        NA ACTUAL                    actual 2003-04-01 10310      NA      NA 
## 161        NA ACTUAL                    actual 2003-05-01 10140      NA      NA 
## 162        NA ACTUAL                    actual 2003-06-01 10040      NA      NA 
## 163        NA ACTUAL                    actual 2003-07-01  9310      NA      NA 
## 164        NA ACTUAL                    actual 2003-08-01  8780      NA      NA 
## 165        NA ACTUAL                    actual 2003-09-01  9530      NA      NA 
## 166        NA ACTUAL                    actual 2003-10-01  9790      NA      NA 
## 167        NA ACTUAL                    actual 2003-11-01  9950      NA      NA 
## 168        NA ACTUAL                    actual 2003-12-01  9900      NA      NA 
## 169        NA ACTUAL                    actual 2004-01-01  9970      NA      NA 
## 170        NA ACTUAL                    actual 2004-02-01  9980      NA      NA 
## 171        NA ACTUAL                    actual 2004-03-01 10160      NA      NA 
## 172        NA ACTUAL                    actual 2004-04-01 10220      NA      NA 
## 173        NA ACTUAL                    actual 2004-05-01 10190      NA      NA 
## 174        NA ACTUAL                    actual 2004-06-01 10020      NA      NA 
## 175        NA ACTUAL                    actual 2004-07-01  9310      NA      NA 
## 176        NA ACTUAL                    actual 2004-08-01  8970      NA      NA 
## 177        NA ACTUAL                    actual 2004-09-01  9700      NA      NA 
## 178        NA ACTUAL                    actual 2004-10-01  9910      NA      NA 
## 179        NA ACTUAL                    actual 2004-11-01 10120      NA      NA 
## 180        NA ACTUAL                    actual 2004-12-01 10220      NA      NA 
## 181        NA ACTUAL                    actual 2005-01-01 10130      NA      NA 
## 182        NA ACTUAL                    actual 2005-02-01 10200      NA      NA 
## 183        NA ACTUAL                    actual 2005-03-01 10330      NA      NA 
## 184        NA ACTUAL                    actual 2005-04-01 10340      NA      NA 
## 185        NA ACTUAL                    actual 2005-05-01 10330      NA      NA 
## 186        NA ACTUAL                    actual 2005-06-01  9850      NA      NA 
## 187        NA ACTUAL                    actual 2005-07-01  8860      NA      NA 
## 188        NA ACTUAL                    actual 2005-08-01  8890      NA      NA 
## 189        NA ACTUAL                    actual 2005-09-01  9640      NA      NA 
## 190        NA ACTUAL                    actual 2005-10-01 10060      NA      NA 
## 191        NA ACTUAL                    actual 2005-11-01 10210      NA      NA 
## 192        NA ACTUAL                    actual 2005-12-01 10330      NA      NA 
## 193        NA ACTUAL                    actual 2006-01-01  9900      NA      NA 
## 194        NA ACTUAL                    actual 2006-02-01  9880      NA      NA 
## 195        NA ACTUAL                    actual 2006-03-01 10050      NA      NA 
## 196        NA ACTUAL                    actual 2006-04-01 10060      NA      NA 
## 197        NA ACTUAL                    actual 2006-05-01 10050      NA      NA 
## 198        NA ACTUAL                    actual 2006-06-01  9990      NA      NA 
## 199        NA ACTUAL                    actual 2006-07-01  8930      NA      NA 
## 200        NA ACTUAL                    actual 2006-08-01  8580      NA      NA 
## 201        NA ACTUAL                    actual 2006-09-01  9140      NA      NA 
## 202        NA ACTUAL                    actual 2006-10-01  9590      NA      NA 
## 203        NA ACTUAL                    actual 2006-11-01  9690      NA      NA 
## 204        NA ACTUAL                    actual 2006-12-01  9700      NA      NA 
## 205        NA ACTUAL                    actual 2007-01-01  9610      NA      NA 
## 206        NA ACTUAL                    actual 2007-02-01  9570      NA      NA 
## 207        NA ACTUAL                    actual 2007-03-01  9770      NA      NA 
## 208        NA ACTUAL                    actual 2007-04-01  9830      NA      NA 
## 209        NA ACTUAL                    actual 2007-05-01  9840      NA      NA 
## 210        NA ACTUAL                    actual 2007-06-01  9710      NA      NA 
## 211        NA ACTUAL                    actual 2007-07-01  8710      NA      NA 
## 212        NA ACTUAL                    actual 2007-08-01  8300      NA      NA 
## 213        NA ACTUAL                    actual 2007-09-01  8910      NA      NA 
## 214        NA ACTUAL                    actual 2007-10-01  9710      NA      NA 
## 215        NA ACTUAL                    actual 2007-11-01  9870      NA      NA 
## 216        NA ACTUAL                    actual 2007-12-01  9980      NA      NA 
## 217        NA ACTUAL                    actual 2008-01-01  9970      NA      NA 
## 218        NA ACTUAL                    actual 2008-02-01  9970      NA      NA 
## 219        NA ACTUAL                    actual 2008-03-01 10120      NA      NA 
## 220        NA ACTUAL                    actual 2008-04-01 10150      NA      NA 
## 221        NA ACTUAL                    actual 2008-05-01 10110      NA      NA 
## 222        NA ACTUAL                    actual 2008-06-01  9970      NA      NA 
## 223        NA ACTUAL                    actual 2008-07-01  8930      NA      NA 
## 224        NA ACTUAL                    actual 2008-08-01  9020      NA      NA 
## 225        NA ACTUAL                    actual 2008-09-01  9200      NA      NA 
## 226        NA ACTUAL                    actual 2008-10-01 10090      NA      NA 
## 227        NA ACTUAL                    actual 2008-11-01 10260      NA      NA 
## 228        NA ACTUAL                    actual 2008-12-01 10330      NA      NA 
## 229        NA ACTUAL                    actual 2009-01-01 10360      NA      NA 
## 230        NA ACTUAL                    actual 2009-02-01 10350      NA      NA 
## 231        NA ACTUAL                    actual 2009-03-01 10560      NA      NA 
## 232        NA ACTUAL                    actual 2009-04-01 10600      NA      NA 
## 233        NA ACTUAL                    actual 2009-05-01 10660      NA      NA 
## 234        NA ACTUAL                    actual 2009-06-01 10580      NA      NA 
## 235        NA ACTUAL                    actual 2009-07-01  9420      NA      NA 
## 236        NA ACTUAL                    actual 2009-08-01  9770      NA      NA 
## 237        NA ACTUAL                    actual 2009-09-01  9680      NA      NA 
## 238        NA ACTUAL                    actual 2009-10-01 10400      NA      NA 
## 239        NA ACTUAL                    actual 2009-11-01 10560      NA      NA 
## 240        NA ACTUAL                    actual 2009-12-01 10600      NA      NA 
## 241        NA ACTUAL                    actual 2010-01-01 10560      NA      NA 
## 242        NA ACTUAL                    actual 2010-02-01 10550      NA      NA 
## 243        NA ACTUAL                    actual 2010-03-01 10790      NA      NA 
## 244        NA ACTUAL                    actual 2010-04-01 10810      NA      NA 
## 245        NA ACTUAL                    actual 2010-05-01 10780      NA      NA 
## 246        NA ACTUAL                    actual 2010-06-01 10710      NA      NA 
## 247        NA ACTUAL                    actual 2010-07-01  9060      NA      NA 
## 248        NA ACTUAL                    actual 2010-08-01  9610      NA      NA 
## 249        NA ACTUAL                    actual 2010-09-01  9770      NA      NA 
## 250        NA ACTUAL                    actual 2010-10-01 10340      NA      NA 
## 251        NA ACTUAL                    actual 2010-11-01 10480      NA      NA 
## 252        NA ACTUAL                    actual 2010-12-01 10180      NA      NA 
## 253        NA ACTUAL                    actual 2011-01-01 10390      NA      NA 
## 254        NA ACTUAL                    actual 2011-02-01 10400      NA      NA 
## 255        NA ACTUAL                    actual 2011-03-01 10590      NA      NA 
## 256        NA ACTUAL                    actual 2011-04-01 10600      NA      NA 
## 257        NA ACTUAL                    actual 2011-05-01 10580      NA      NA 
## 258        NA ACTUAL                    actual 2011-06-01 10300      NA      NA 
## 259        NA ACTUAL                    actual 2011-07-01  8800      NA      NA 
## 260        NA ACTUAL                    actual 2011-08-01  9360      NA      NA 
## 261        NA ACTUAL                    actual 2011-09-01  9650      NA      NA 
## 262        NA ACTUAL                    actual 2011-10-01 10280      NA      NA 
## 263        NA ACTUAL                    actual 2011-11-01 10410      NA      NA 
## 264        NA ACTUAL                    actual 2011-12-01 10240      NA      NA 
## 265        NA ACTUAL                    actual 2012-01-01 10380      NA      NA 
## 266        NA ACTUAL                    actual 2012-02-01 10390      NA      NA 
## 267        NA ACTUAL                    actual 2012-03-01 10580      NA      NA 
## 268        NA ACTUAL                    actual 2012-04-01 10560      NA      NA 
## 269        NA ACTUAL                    actual 2012-05-01 10570      NA      NA 
## 270        NA ACTUAL                    actual 2012-06-01 10240      NA      NA 
## 271        NA ACTUAL                    actual 2012-07-01  8720      NA      NA 
## 272        NA ACTUAL                    actual 2012-08-01  9340      NA      NA 
## 273        NA ACTUAL                    actual 2012-09-01  9650      NA      NA 
## 274        NA ACTUAL                    actual 2012-10-01 10480      NA      NA 
## 275        NA ACTUAL                    actual 2012-11-01 10630      NA      NA 
## 276        NA ACTUAL                    actual 2012-12-01 10490      NA      NA 
## 277        NA ACTUAL                    actual 2013-01-01 10550      NA      NA 
## 278        NA ACTUAL                    actual 2013-02-01 10540      NA      NA 
## 279        NA ACTUAL                    actual 2013-03-01 10720      NA      NA 
## 280        NA ACTUAL                    actual 2013-04-01 10700      NA      NA 
## 281        NA ACTUAL                    actual 2013-05-01 10750      NA      NA 
## 282        NA ACTUAL                    actual 2013-06-01 10540      NA      NA 
## 283        NA ACTUAL                    actual 2013-07-01  9030      NA      NA 
## 284        NA ACTUAL                    actual 2013-08-01  9620      NA      NA 
## 285        NA ACTUAL                    actual 2013-09-01 10050      NA      NA 
## 286        NA ACTUAL                    actual 2013-10-01 10610      NA      NA 
## 287        NA ACTUAL                    actual 2013-11-01 10760      NA      NA 
## 288        NA ACTUAL                    actual 2013-12-01 10570      NA      NA 
## 289        NA ACTUAL                    actual 2014-01-01 10730      NA      NA 
## 290        NA ACTUAL                    actual 2014-02-01 10660      NA      NA 
## 291        NA ACTUAL                    actual 2014-03-01 10900      NA      NA 
## 292        NA ACTUAL                    actual 2014-04-01 11020      NA      NA 
## 293        NA ACTUAL                    actual 2014-05-01 10940      NA      NA 
## 294        NA ACTUAL                    actual 2014-06-01 10770      NA      NA 
## 295        NA ACTUAL                    actual 2014-07-01  9340      NA      NA 
## 296        NA ACTUAL                    actual 2014-08-01  9900      NA      NA 
## 297        NA ACTUAL                    actual 2014-09-01 10360      NA      NA 
## 298        NA ACTUAL                    actual 2014-10-01 10950      NA      NA 
## 299        NA ACTUAL                    actual 2014-11-01 11120      NA      NA 
## 300        NA ACTUAL                    actual 2014-12-01 10990      NA      NA 
## 301        NA ACTUAL                    actual 2015-01-01 10980      NA      NA 
## 302        NA ACTUAL                    actual 2015-02-01 11010      NA      NA 
## 303        NA ACTUAL                    actual 2015-03-01 11250      NA      NA 
## 304        NA ACTUAL                    actual 2015-04-01 11290      NA      NA 
## 305        NA ACTUAL                    actual 2015-05-01 11310      NA      NA 
## 306        NA ACTUAL                    actual 2015-06-01 11000      NA      NA 
## 307         1 ARIMA(0,1,1)(0,1,1)[12]   predi… 2015-07-01  9570.   9179.   9960.
## 308         1 ARIMA(0,1,1)(0,1,1)[12]   predi… 2015-08-01 10133.   9742.  10523.
## 309         1 ARIMA(0,1,1)(0,1,1)[12]   predi… 2015-09-01 10540.  10150.  10931.
## 310         1 ARIMA(0,1,1)(0,1,1)[12]   predi… 2015-10-01 11157.  10767.  11548.
## 311         1 ARIMA(0,1,1)(0,1,1)[12]   predi… 2015-11-01 11317.  10926.  11707.
## 312         1 ARIMA(0,1,1)(0,1,1)[12]   predi… 2015-12-01 11168.  10778.  11559.
## 313         1 ARIMA(0,1,1)(0,1,1)[12]   predi… 2016-01-01 11223.  10833.  11614.
## 314         1 ARIMA(0,1,1)(0,1,1)[12]   predi… 2016-02-01 11221.  10830.  11612.
## 315         1 ARIMA(0,1,1)(0,1,1)[12]   predi… 2016-03-01 11449.  11058.  11839.
## 316         1 ARIMA(0,1,1)(0,1,1)[12]   predi… 2016-04-01 11497.  11106.  11887.
## 317         1 ARIMA(0,1,1)(0,1,1)[12]   predi… 2016-05-01 11493.  11102.  11884.
## 318         1 ARIMA(0,1,1)(0,1,1)[12]   predi… 2016-06-01 11235.  10845.  11626.
## 319         2 PROPHET                   predi… 2015-07-01  9978.   9518.  10438.
## 320         2 PROPHET                   predi… 2015-08-01  9776.   9316.  10236.
## 321         2 PROPHET                   predi… 2015-09-01 10436.   9976.  10897.
## 322         2 PROPHET                   predi… 2015-10-01 10829.  10369.  11289.
## 323         2 PROPHET                   predi… 2015-11-01 10997.  10537.  11457.
## 324         2 PROPHET                   predi… 2015-12-01 10945.  10485.  11405.
## 325         2 PROPHET                   predi… 2016-01-01 10949.  10489.  11409.
## 326         2 PROPHET                   predi… 2016-02-01 10951.  10491.  11411.
## 327         2 PROPHET                   predi… 2016-03-01 11100.  10640.  11560.
## 328         2 PROPHET                   predi… 2016-04-01 11124.  10664.  11584.
## 329         2 PROPHET                   predi… 2016-05-01 11136.  10675.  11596.
## 330         2 PROPHET                   predi… 2016-06-01 10961.  10501.  11421.
## 331         3 PROPHET W/ XGBOOST ERRORS predi… 2015-07-01 10171.   9804.  10537.
## 332         3 PROPHET W/ XGBOOST ERRORS predi… 2015-08-01 10026.   9659.  10392.
## 333         3 PROPHET W/ XGBOOST ERRORS predi… 2015-09-01 10558.  10191.  10924.
## 334         3 PROPHET W/ XGBOOST ERRORS predi… 2015-10-01 11069.  10702.  11435.
## 335         3 PROPHET W/ XGBOOST ERRORS predi… 2015-11-01 11178.  10812.  11545.
## 336         3 PROPHET W/ XGBOOST ERRORS predi… 2015-12-01 11134.  10767.  11500.
## 337         3 PROPHET W/ XGBOOST ERRORS predi… 2016-01-01 11180.  10813.  11546.
## 338         3 PROPHET W/ XGBOOST ERRORS predi… 2016-02-01 11179.  10812.  11545.
## 339         3 PROPHET W/ XGBOOST ERRORS predi… 2016-03-01 11274.  10907.  11640.
## 340         3 PROPHET W/ XGBOOST ERRORS predi… 2016-04-01 11327.  10961.  11694.
## 341         3 PROPHET W/ XGBOOST ERRORS predi… 2016-05-01 11368.  11001.  11734.
## 342         3 PROPHET W/ XGBOOST ERRORS predi… 2016-06-01 11121.  10755.  11488.
## 343         4 RANGER                    predi… 2015-07-01  9758.   8340.  11177.
## 344         4 RANGER                    predi… 2015-08-01  9756.   8338.  11175.
## 345         4 RANGER                    predi… 2015-09-01  9925.   8506.  11343.
## 346         4 RANGER                    predi… 2015-10-01 10251.   8833.  11670.
## 347         4 RANGER                    predi… 2015-11-01 10289.   8871.  11708.
## 348         4 RANGER                    predi… 2015-12-01 10264.   8846.  11683.
## 349         4 RANGER                    predi… 2016-01-01 10217.   8798.  11635.
## 350         4 RANGER                    predi… 2016-02-01 10332.   8913.  11750.
## 351         4 RANGER                    predi… 2016-03-01 10326.   8907.  11744.
## 352         4 RANGER                    predi… 2016-04-01 10316.   8898.  11735.
## 353         4 RANGER                    predi… 2016-05-01 10309.   8890.  11727.
## 354         4 RANGER                    predi… 2016-06-01 10247.   8829.  11666.
## # … with abbreviated variable names ¹​.conf_lo, ²​.conf_hi