在R中预测h2o.automl模型

时间:2019-01-04 15:56:30

标签: r time-series h2o

我第一次遵循了一个教程,其中涉及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()

1 个答案:

答案 0 :(得分:0)

此数据不适用于标准的受监督机器学习算法,例如GBM,Random Forest,H2O AutoML等。这是使用单个观察序列的预测问题,其中“典型”受监督机器学习算法旨在除了您要预测的列(响应)之外,当您有多个(或许多)预测变量列时,也可以使用。我将研究其他时间序列/预测算法,例如ARIMA,或使用深度神经网络,例如LSTM。