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
データセットで、コンペティションで使用されたデータ。ここではid
がM750
の部分を使用する。
データは、1990-01-01から始まり、2015-06-01まである。レコード数は306レコードで、間隔は月単位のデータになっている。
<- m4_monthly %>% filter(id == "M750")
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ヶ月)である。
<- initial_time_split(m750, prop = 0.9)
splits <- splits %>% training()
df_train <- splits %>% testing()
df_test
bind_rows(
%>% summarise(start_date = min(date), end_date = max(date), records = n()),
df_train %>% summarise(start_date = min(date), end_date = max(date), records = n())
df_test )
## # 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つを設定する。
<- arima_reg() %>%
model_fit_arima set_engine(engine = "auto_arima") %>%
fit(value ~ date, data = df_train)
<- prophet_reg(seasonality_yearly = TRUE) %>%
model_fit_prophet 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(value ~ date, df_train) %>%
recipe 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())
%>% prep() %>% bake(df_train) recipe
## # 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>, …
レシピが完成したら、ワークフローを使ってフィッティングしておく。機械学習アルゴリズムは通常、日付・日時を処理する方法を知らないため、日付列を削除する必要がある。
<- rand_forest(trees = 1000, min_n = 50, mtry = 15) %>%
model_randomforest set_engine("ranger") %>%
set_mode("regression")
<- workflow() %>%
model_fit_randomforest 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モデルのフィッティングを行なう。
<- prophet_boost(seasonality_yearly = TRUE) %>%
model_prophet_boost set_engine("prophet_xgboost")
<- workflow() %>%
model_fit_prophet_boost 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
関数)。これは、予測ワークフローの一部として使用されるため、必要な手順である。
<- modeltime_table(
models_tbl
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
関数で行なうことができる。
<- models_tbl %>%
calibration_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年先を予測する。
<- calibration_tbl %>%
refit_tbl modeltime_refit(data = m750)
%>%
refit_tbl modeltime_forecast(h = "1 years", actual_data = m750) %>%
plot_modeltime_forecast(.interactive = FALSE)
Prophet Boostモデルだけでよいのであれば、モデルテーブルから取り除けば良い。
<- calibration_tbl %>%
refit_tbl_only_arima 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