Чтобы ответить на ваш вопрос в более общем плане, можно использовать машинное обучение и прогнозировать h-пошаговые прогнозы . Сложность заключается в том, что вам необходимо преобразовать свои данные в матрицу, в которой вы располагаете, для каждого наблюдения действительное значение наблюдения и прошлые значения временного ряда для определенного диапазона. Вам нужно будет вручную определить, какой диапазон данных представляется релевантным для прогнозирования вашего временного ряда, фактически, так же, как и для параметра ARIMA. Ширина / горизонт матрицы имеет решающее значение для правильного предсказания следующего значения, принятого вашей матрицей. Если ваш горизонт ограничен, вы можете пропустить эффекты сезонности.
После того, как вы это сделаете, для прогнозирования h-шагов вперед вам нужно будет спрогнозировать первое следующее значение на основе вашего последнего наблюдения. Затем вам нужно будет сохранить прогноз как «фактическое значение», которое будет использоваться для прогнозирования второго следующего значения через сдвиг во времени , точно так же, как модель ARIMA. Вам придется повторять процесс h раз, чтобы получить h-шаги вперед. Каждая итерация будет опираться на предыдущий прогноз.
Пример использования кода R будет следующим.
library(forecast)
library(randomForest)
# create a daily pattern with random variations
myts <- ts(rep(c(5,6,7,8,11,13,14,15,16,15,14,17,13,12,15,13,12,12,11,10,9,8,7,6), 10)*runif(120,0.8,1.2), freq = 24)
myts_forecast <- forecast(myts, h = 24) # predict the time-series using ets + stl techniques
pred1 <- c(myts, myts_forecast1$mean) # store the prediction
# transform these observations into a matrix with the last 24 past values
idx <- c(1:24)
designmat <- data.frame(lapply(idx, function(x) myts[x:(215+x)])) # create a design matrix
colnames(designmat) <- c(paste0("x_",as.character(c(1:23))),"y")
# create a random forest model and predict iteratively each value
rfModel <- randomForest(y ~., designmat)
for (i in 1:24){
designvec <- data.frame(c(designmat[nrow(designmat), 2:24], 0))
colnames(designvec) <- colnames(designmat)
designvec$y <- predict(rfModel, designvec)
designmat <- rbind(designmat, designvec)
}
pred2 <- designmat$y
#plot to compare predictions
plot(pred1, type = "l")
lines(y = pred2[216:240], x = c(240:264), col = 2)
Теперь очевидно, что нет общих правил, чтобы определить, являются ли модель временного ряда или модель машинного обучения более эффективной. Вычислительное время может быть выше для моделей машинного обучения, но, с другой стороны, вы можете включать любые типы дополнительных функций для прогнозирования ваших временных рядов, используя их (например, не только числовые или логические функции). Общий совет - проверить оба и выбрать наиболее эффективную модель.