R 中的预测 h2o.automl 模型

Forecast h2o.automl model in R

我第一次学习了 here 中的 R 中的 h2o 教程。我想做的是根据我没有的数据预测模型,这意味着超出测试集的未来日期。

数据是时间序列,在测试集上的预测是这样的:

print(automl.error.tbl)
# A time tibble: 10 x 5
# Index: Time
   Time       actual  pred   error error.pct
   <date>      <dbl> <dbl>   <dbl>     <dbl>
 1 2018-01-31  11.4  11.4   0.0342   0.00300
 2 2018-02-28  14.6  10.4   4.24     0.290  
 3 2018-03-31  12.2  11.4   0.762    0.0625 
 4 2018-04-30  15.0  10.8   4.20     0.281  
 5 2018-05-31  12.8  11.1   1.75     0.137  
 6 2018-06-30   8.67 10.8  -2.15    -0.248  
 7 2018-07-31  12.3  10.3   2.03     0.165  
 8 2018-08-31  13.5  10.4   3.17     0.234  
 9 2018-09-30  10.8   9.72  1.05     0.0976 
10 2018-10-31  10.5  10.7  -0.165   -0.0156 

我不知道该怎么做而且很难找到的是如何预测未来的数据。例如 fpp 我可以做类似的事情:

monthly.hw.fcast <- hw(
  monthly.rr.sub.xts
  , h = 12
  , alpha = monthly.fit.hw$alpha
)

并得到我正在寻找的东西,未来的预测。有没有使用 h20 模型的简单方法?

我的代码如下:

# h2o ####
library(h2o)
tk.monthly %>% glimpse()
tk.monthly.aug <- tk.monthly %>%
  tk_augment_timeseries_signature()
tk.monthly.aug %>% glimpse()

tk.monthly.tbl.clean <- tk.monthly.aug %>%
  select_if(~ !is.Date(.)) %>%
  select_if(~ !any(is.na(.))) %>%
  mutate_if(is.ordered, ~ as.character(.) %>% as.factor)

tk.monthly.tbl.clean %>% glimpse()

train.tbl <- tk.monthly.tbl.clean %>% filter(year < 2017)
valid.tbl <- tk.monthly.tbl.clean %>% filter(year == 2017)
test.tbl  <- tk.monthly.tbl.clean %>% filter(year == 2018)

h2o.init()

train.h2o <- as.h2o(train.tbl)
valid.h2o <- as.h2o(valid.tbl)
test.h2o <- as.h2o(test.tbl)

y <- "readmit.rate"
x <- setdiff(names(train.h2o), y)

automl.models.h2o <- h2o.automl(
  x = x
  , y = y
  , training_frame = train.h2o
  , validation_frame = valid.h2o
  , leaderboard_frame = test.h2o
  , max_runtime_secs = 60
  , stopping_metric = "deviance"
)

automl.leader <- automl.models.h2o@leader

pred.h2o <- h2o.predict(
  automl.leader
  , newdata = test.h2o
)

h2o.performance(
  automl.leader
  , newdata = test.h2o
)

# get mape
automl.error.tbl <- tk.monthly %>%
  filter(lubridate::year(Time) == 2018) %>%
  add_column(
    pred = pred.h2o %>%
      as.tibble() %>%
      pull(predict)
    ) %>%
  rename(actual = readmit.rate) %>%
  mutate(
    error = actual - pred
    , error.pct = error / actual
  )
print(automl.error.tbl)

automl.error.tbl %>%
  summarize(
    me = mean(error)
    , rmse = mean(error^2)^0.5
    , mae = mean(abs(error))
    , mape = mean(abs(error))
    , mpe = mean(error.pct)
  ) %>%
  glimpse()

此数据不适合标准的监督机器学习算法,例如 GBM、随机森林、H2O AutoML 等。这是一个使用单一观察序列的预测问题,其中 "typical" 监督机器学习除了您尝试预测的列(响应)之外,还有多个(或许多)预测变量列时,将使用算法。我会看看其他 time-series/forecasting 算法,例如 ARIMA 或使用深度神经网络,例如 LSTM。