UPDATE: 2022-12-24 17:18:26

はじめに

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

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

modeltimeパッケージの目的

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

前回は基本的な使い方をまとめており、時系列モデルのハイパーパラメータチューニングを扱う。

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

モデルの作成

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

library(tidymodels)
library(tidyverse)
library(modeltime)
library(timetk)
library(DT)

前回同様、ここでもtimetkパッケージ内のm4_monthlyデータセットのidM750の部分を使用する。

m4_monthly %>% 
  filter(id == "M750") %>% 
  tk_summary_diagnostics(date)
## # A tibble: 1 × 12
##   n.obs start      end        units scale tzone diff.m…¹ diff.q1 diff.…² diff.…³
##   <int> <date>     <date>     <chr> <chr> <chr>    <dbl>   <dbl>   <dbl>   <dbl>
## 1   306 1990-01-01 2015-06-01 days  month UTC    2419200 2592000 2678400  2.63e6
## # … with 2 more variables: diff.q3 <dbl>, diff.maximum <dbl>, and abbreviated
## #   variable names ¹​diff.minimum, ²​diff.median, ³​diff.mean

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

m750 <- m4_monthly %>% filter(id == "M750") %>% select(-id)
m750 %>% datatable()

グラフ化しておく。

m750 %>%
  plot_time_series(.data = ., .date_var = date, .value = value, .interactive = FALSE) + 
  scale_x_date(limits = c(as.Date("1990-01-01"), as.Date("2015-06-01")),
               labels = date_format("%Y/%m"),
               breaks = date_breaks("1 year")) + 
  theme(axis.text.x = element_text(angle = 45, vjust = 0.2, hjust=0.2))

ここでは最終的に12ヶ月の予測を試みる。まずは、予測する分だけデータフレームを拡張する。これはfuture_frame関数で実行でき、2015-07-01から2016-06-01まで、データフレームが拡張されていることがわかる。

m750_extend <- m750 %>%
  future_frame(
        .length_out = 12,
        .bind_data  = TRUE
    )
m750_extend %>% datatable()

拡張したデータを学習データ、テストデータ、予測用データに再分割する。

# 2015-07-01から2016-06-01(n=12)
df_future <- m750_extend %>% filter(is.na(value))
# 1990-01-01から2015-06-01(n=306)
df <- m750_extend %>% filter(!is.na(value))

# <Training/Testing/Total>
# <275/31/306>
df_init   <- initial_time_split(df, 0.9)
df_train  <- df_init %>% training()
df_test   <- df_init %>% testing()

bind_rows(
  df_train %>% summarise(n.obs = n(), start = min(date), end = max(date)) %>% mutate(tag = "train"),
  df_test %>% summarise(n.obs = n(), start = min(date), end = max(date)) %>% mutate(tag = "test"),
  df_future %>% summarise(n.obs = n(), start = min(date), end = max(date)) %>% mutate(tag = "forecast")
)
## # A tibble: 3 × 4
##   n.obs start      end        tag     
##   <int> <date>     <date>     <chr>   
## 1   275 1990-01-01 2012-11-01 train   
## 2    31 2012-12-01 2015-06-01 test    
## 3    12 2015-07-01 2016-06-01 forecast

学習データをクロスバリデーション用に分割する。学習データに5年、評価データに2年、フォールド間のスキップは1年で、分割数は5とする。

m750_resamples <- df_train %>%
  time_series_cv(
    date_var    = date, 
    initial     = "5 years",
    assess      = "2 years",
    skip        = "1 years",
    cumulative  = TRUE,
    slice_limit = 5
  )

m750_resamples %>%
 tk_time_series_cv_plan() %>% 
 group_by(.id) %>% 
 summarise(min = min(date), max = max(date))
## # A tibble: 5 × 3
##   .id    min        max       
##   <chr>  <date>     <date>    
## 1 Slice1 1990-01-01 2012-11-01
## 2 Slice2 1990-01-01 2011-11-01
## 3 Slice3 1990-01-01 2010-11-01
## 4 Slice4 1990-01-01 2009-11-01
## 5 Slice5 1990-01-01 2008-11-01

クロスバリデーションの様子をplot_time_series_cv_plan関数で可視化しておく。

m750_resamples %>%
  tk_time_series_cv_plan() %>% 
  plot_time_series_cv_plan(.date_var = date, .value = value, .interactive = FALSE, .facet_ncol  = 1) + 
  scale_x_date(limits = c(as.Date("1990-01-01"), as.Date("2015-06-01")),
               labels = date_format("%Y/%m"),
               breaks = date_breaks("1 year")) + 
  theme(axis.text.x = element_text(angle = 45, vjust = 0.2, hjust=0.2))

データの分割が終わったので、レシピの設定を行なう。step_times_series_signature関数を使用して、日付から多数の特徴量を生成する。

recipe <- recipe(value ~ ., training(m750_resamples$splits[[1]])) %>%
  step_timeseries_signature(date) %>%
  step_rm(matches("(.iso$)|(.xts$)|(day)|(hour)|(minute)|(second)|(am.pm)")) %>%
  step_rm("date_index.num") %>%
  step_mutate(date_month = factor(date_month, ordered = TRUE)) %>%
  step_dummy(all_nominal(), one_hot = TRUE)

recipe %>% prep() %>% bake(df_test) %>% datatable()

データの分割が終わったので、パラメタのチューニングを行なうためのモデルの設定を行なう。今回はProphetBoostモデルを利用する。Prophet Boostモデルは、Prophet と XGBoost を組み合わせたアルゴリズムで、ワークフローを使用してモデルを設定できる。細かい数理的な部分は追えてないのでわからないが、おそらくこういうことだと思われる。

  1. Prophet で単変量時系列へのモデリング
  2. 前処理レシピで提供される外部予測変数を使用し、XGBoost モデルを使用してProphetの残差を回帰。

Prophetは時系列データを様々な要素分解(成長関数、周期性、祝日効果など)して、変化点を検出しながら、モデルを組み立てることができ、時系列データに特化したPropehetでまず予測値を得る。そこから残差を観測値として、XGBoostモデルが学習を繰り返すことで予測モデルが学習していく。

prophet_boost <-
  modeltime::prophet_boost(
    # prophet
    growth = "linear",
    changepoint_num = tune(),
    changepoint_range = tune(),
    seasonality_yearly = TRUE,
    seasonality_weekly = FALSE, # Monthlyデータなので機能しない
    seasonality_daily  = FALSE, # Monthlyデータなので機能しない
    season = "multiplicative",
    prior_scale_changepoints = tune(),
    prior_scale_seasonality = tune(),
    # prior_scale_holidays = NULL,
    # xgboost
    trees = 1000,
    sample_size = c(0.1, 1),
    # mtryを設定すると場合によってはエラーになる。原因不明。
    mtry = tune(),  
    tree_depth = tune(),
    learn_rate = tune(),
    stop_iter = tune(),
    min_n = tune(),
    # loss_reduction = tune(),
  ) %>%
  set_engine('prophet_xgboost')

prophet_boost
## PROPHET Regression Model Specification (regression)
## 
## Main Arguments:
##   growth = linear
##   changepoint_num = tune()
##   changepoint_range = tune()
##   seasonality_yearly = TRUE
##   seasonality_weekly = FALSE
##   seasonality_daily = FALSE
##   season = multiplicative
##   prior_scale_changepoints = tune()
##   prior_scale_seasonality = tune()
##   mtry = tune()
##   trees = 1000
##   min_n = tune()
##   tree_depth = tune()
##   learn_rate = tune()
##   sample_size = c(0.1, 1)
##   stop_iter = tune()
## 
## Computational engine: prophet_xgboost

モデルのハイパーパラメーターの調整はtidymodelsのモデリングフレームワークに従い、workflowsパッケージの関数でワークフローを作成して行なう。

workflow <- workflow() %>%
    add_model(prophet_boost) %>%
    add_recipe(recipe) 
workflow
## ══ Workflow ════════════════════════════════════════════════════════════════════
## Preprocessor: Recipe
## Model: prophet_boost()
## 
## ── Preprocessor ────────────────────────────────────────────────────────────────
## 5 Recipe Steps
## 
## • step_timeseries_signature()
## • step_rm()
## • step_rm()
## • step_mutate()
## • step_dummy()
## 
## ── Model ───────────────────────────────────────────────────────────────────────
## PROPHET Regression Model Specification (regression)
## 
## Main Arguments:
##   growth = linear
##   changepoint_num = tune()
##   changepoint_range = tune()
##   seasonality_yearly = TRUE
##   seasonality_weekly = FALSE
##   seasonality_daily = FALSE
##   season = multiplicative
##   prior_scale_changepoints = tune()
##   prior_scale_seasonality = tune()
##   mtry = tune()
##   trees = 1000
##   min_n = tune()
##   tree_depth = tune()
##   learn_rate = tune()
##   sample_size = c(0.1, 1)
##   stop_iter = tune()
## 
## Computational engine: prophet_xgboost

そして、tune_grid関数を使用して、クロスバリデーションでパラメタの最適値を探索する。ただ、私がmodeltimesパッケージやProphetBoostモデルを理解してないためか、多数のエラー、ワーニングが出る…。

set.seed(1989)
tune_results <- tune_grid(
    object     = workflow,
    resamples  = m750_resamples,
    param_info = parameters(workflow),
    grid       = 30,
    metrics = metric_set(rmse, mae, mape)
    )

パラメタの組み合わせを見るときは、show_best関数で取り出す。ここではmape基準でクロスバリデーションの結果を確認する。

tune_results %>% 
  show_best(n = 10, metric = "mape") %>% 
  datatable()

あとは、ベストなバラメタをselect_best関数で取り出して、ワークフローのパラメタをfinalize_workflow関数で更新する。そして、取りあえずデータは何でも良いので、形式的にフィッティングしておく。

tuned_best_params <- tune_results %>%
    select_best("mape")

best_workflow <- workflow %>%
    finalize_workflow(parameters = tuned_best_params)

# ここのデータはなんでもよい
model_predicted_best_workflow <- best_workflow %>%
    fit(training(m750_resamples$splits[[1]])) 

model_predicted_best_workflow
## ══ Workflow [trained] ══════════════════════════════════════════════════════════
## Preprocessor: Recipe
## Model: prophet_boost()
## 
## ── Preprocessor ────────────────────────────────────────────────────────────────
## 5 Recipe Steps
## 
## • step_timeseries_signature()
## • step_rm()
## • step_rm()
## • step_mutate()
## • step_dummy()
## 
## ── Model ───────────────────────────────────────────────────────────────────────
## PROPHET w/ XGBoost Errors
## ---
## Model 1: PROPHET
##  - growth: 'linear'
##  - n.changepoints: 20
##  - changepoint.range: 0.629681361559778
##  - yearly.seasonality: 'TRUE'
##  - weekly.seasonality: 'FALSE'
##  - daily.seasonality: 'FALSE'
##  - seasonality.mode: 'multiplicative'
##  - changepoint.prior.scale: 0.00800693435048087
##  - seasonality.prior.scale: 11.8613867207823
##  - holidays.prior.scale: 10
##  - logistic_cap: NULL
##  - logistic_floor: NULL
## 
## ---
## Model 2: XGBoost Errors
## 
## xgboost::xgb.train(params = list(eta = 5.05798197161862e-05, 
##     max_depth = 14L, gamma = 0, colsample_bytree = 1, colsample_bynode = 0.806451612903226, 
##     min_child_weight = 31L, subsample = c(0.1, 1)), data = x$data, 
##     nrounds = 1000, watchlist = x$watchlist, verbose = 0, early_stopping_rounds = 17L, 
##     objective = "reg:squarederror", nthread = 1)

ここまでくれば、modeltimeのワークフローに戻って作業ができる。ということで、これまで通りmodeltimeのワークフローに従って、モデルテーブルに登録する。

models_tbl <- modeltime_table(
    model_predicted_best_workflow
)
models_tbl
## # Modeltime Table
## # A tibble: 1 × 3
##   .model_id .model     .model_desc              
##       <int> <list>     <chr>                    
## 1         1 <workflow> PROPHET W/ XGBOOST ERRORS

その後はmodeltime_calibrate関数でテストデータに対するキャリブレーションを行なう。

calibration_tbl <- models_tbl %>% 
  modeltime_calibrate(df_test)

calibration_tbl %>% 
  pluck(".calibration_data", 1) %>% 
  datatable()

テストデータと観測値をグラフで確認する。

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

評価指標を確認するためにはtable_modeltime_accuracy関数を利用する。

calibration_tbl %>%
  modeltime_accuracy(new_data = df_test) %>%
  table_modeltime_accuracy(.interactive = FALSE)
Accuracy Table
.model_id .model_desc .type mae mape mase smape rmse rsq
1 PROPHET W/ XGBOOST ERRORS Test 173.25 1.69 0.59 1.67 224.3 0.85

テストデータでの検証も終わったら、あとはフルデータでモデルの再学習を行なう。

refit_tbl <- calibration_tbl %>% 
             modeltime_refit(data = m750)
refit_tbl
## # Modeltime Table
## # A tibble: 1 × 5
##   .model_id .model     .model_desc               .type .calibration_data
##       <int> <list>     <chr>                     <chr> <list>           
## 1         1 <workflow> PROPHET W/ XGBOOST ERRORS Test  <tibble [31 × 4]>

その後は、当初の目的であった、2015-07-01から2016-06-01の間の予測を行なう。

refit_tbl %>%
    modeltime_forecast(actual_data = m750, new_data = df_future) %>%
    plot_modeltime_forecast(.interactive = TRUE, .legend_show = FALSE)

下記は観測値と予測値を統合したデータで、おまけとして出力する。そのまま出力しておく。

refit_tbl %>%
    modeltime_forecast(actual_data = m750, new_data = df_future) %>% 
  print(n = 500)
## # A tibble: 318 × 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 PROPHET W/ XGBOOST ERRORS predi… 2015-07-01  9673.   9230.  10116.
## 308         1 PROPHET W/ XGBOOST ERRORS predi… 2015-08-01  9554.   9111.   9997.
## 309         1 PROPHET W/ XGBOOST ERRORS predi… 2015-09-01 10263.   9820.  10706.
## 310         1 PROPHET W/ XGBOOST ERRORS predi… 2015-10-01 10741.  10298.  11184.
## 311         1 PROPHET W/ XGBOOST ERRORS predi… 2015-11-01 10915.  10471.  11358.
## 312         1 PROPHET W/ XGBOOST ERRORS predi… 2015-12-01 10862.  10419.  11306.
## 313         1 PROPHET W/ XGBOOST ERRORS predi… 2016-01-01 10853.  10410.  11296.
## 314         1 PROPHET W/ XGBOOST ERRORS predi… 2016-02-01 10854.  10411.  11298.
## 315         1 PROPHET W/ XGBOOST ERRORS predi… 2016-03-01 11023.  10580.  11466.
## 316         1 PROPHET W/ XGBOOST ERRORS predi… 2016-04-01 11065.  10622.  11509.
## 317         1 PROPHET W/ XGBOOST ERRORS predi… 2016-05-01 11067.  10624.  11510.
## 318         1 PROPHET W/ XGBOOST ERRORS predi… 2016-06-01 10880.  10436.  11323.
## # … with abbreviated variable names ¹​.conf_lo, ²​.conf_hi