Как предсказать будущие значения временных рядов, используя h2o.predict - PullRequest
2 голосов
/ 19 июня 2019

Я изучаю книгу «Практический анализ временных рядов с помощью R» и застрял на примере использования пакета машинного обучения h2o.Я не понимаю, как использовать функцию h2o.predict.В примере требуется аргумент newdata, в данном случае это тестовые данные.Но как вы прогнозируете будущие значения временных рядов, если вы на самом деле не знаете этих значений?

Если я просто игнорирую аргумент newdata, я получаю: предсказания с отсутствующим аргументом newdata еще не реализованы.

library(h2o)

h2o.init(max_mem_size = "16G")


train_h <- as.h2o(train_df)
test_h <- as.h2o(test_df)
forecast_h <- as.h2o(forecast_df)


x <- c("month", "lag12", "trend", "trend_sqr")
y <- "y"

rf_md <- h2o.randomForest(training_frame = train_h,
                          nfolds = 5,
                          x = x,
                          y = y,
                          ntrees = 500,
                          stopping_rounds = 10,
                          stopping_metric = "RMSE",
                          score_each_iteration = TRUE,
                          stopping_tolerance = 0.0001,
                          seed = 1234)

h2o.varimp_plot(rf_md)

rf_md@model$model_summary

library(plotly)

tree_score <- rf_md@model$scoring_history$training_rmse
plot_ly(x = seq_along(tree_score), y = tree_score,
        type = "scatter", mode = "line") %>%
  layout(title = "Random Forest Model - Trained Score History",
         yaxis = list(title = "RMSE"),
         xaxis = list(title = "Num. of Trees"))

test_h$pred_rf <- h2o.predict(rf_md, test_h)

test_1 <- as.data.frame(test_h)

mape_rf <- mean(abs(test_1$y - test_1$pred_rf) / test_1$y)
mape_rf

Ответы [ 2 ]

2 голосов
/ 19 июня 2019

H2O-3 не поддерживает традиционные алгоритмы временных рядов (например, ARIMA).Вместо этого рекомендуется рассматривать случай использования временных рядов как контролируемую проблему обучения и выполнять предварительную обработку для конкретных временных рядов.

Например, если ваша цель состояла в том, чтобы предсказать продажи магазина завтра, вы могли бы рассматривать это как проблему регрессии, где вашей целью были бы продажи.Однако, если вы попытаетесь обучить контролируемую модель обучения необработанным данным, ваши шансы будут довольно низкими.Таким образом, хитрость заключается в добавлении исторических атрибутов, таких как лаги, в качестве шага предварительной обработки.

Если мы натренировали модель на неизмененном наборе данных, средняя абсолютная ошибка составляет около 35%.

enter image description here

Если мы начнем добавлять исторические функции, такие как продажи за предыдущий день для этого магазина, мы можем уменьшить значение средней абсолютной ошибки примерно до 15%.

enter image description here

Хотя H2O-3 не поддерживает отставание, вы можете использовать газированную воду для выполнения этой предварительной обработки.Вы можете использовать Spark для генерации лагов на группу, а затем использовать H2O-3 для обучения регрессионной модели.Вот пример этого процесса: https://github.com/h2oai/h2o-tutorials/tree/master/best-practices/forecasting

0 голосов
/ 19 июня 2019

Обучающие данные, train_df должны иметь все столбцы, перечисленные как x (c("month", "lag12", "trend", "trend_sqr")) и y ("y"), тогда как данные, которые вы передаете h2o.predict(), просто должны иметь столбцы в x; y-столбец - это то, что будет возвращено в качестве прогноза.

Поскольку у вас есть особенности (в x), такие как отставание, тренд и т. Д., Тот факт, что это временной ряд, не имеет значения. (Но вы должны быть очень осторожны при подготовке этих функций, чтобы убедиться, что вы не используете в них какую-либо информацию, которая не была известна на тот момент - но я думаю, что книга уже подчеркивала это.)

Обычно с временным рядом для данной строки в обучающих данных ваши x данные являются данными, известными в момент времени t, а значение в столбце y является интересующим значением в момент времени t + 1. , Поэтому, когда вы делаете прогноз, вы задаете x значения в качестве значений в момент , и возвращаемое предсказание - это то, что произойдет дальше.

...