Para responder sua pergunta em um termo mais geral, é possível usar o aprendizado de máquina e prever previsões h-steps-ahead . A parte complicada é que você precisa remodelar seus dados em uma matriz na qual possui, para cada observação, o valor real da observação e os valores passados da série temporal para um intervalo definido. Você precisará definir manualmente qual é o intervalo de dados que parece relevante para prever suas séries temporais, na verdade, como você configuraria um modelo ARIMA. A largura / horizonte da matriz é fundamental para prever corretamente o próximo valor obtido pela sua matriz. Se o seu horizonte for restrito, você poderá perder os efeitos da sazonalidade.
Depois de fazer isso, para prever as etapas h à frente, você precisará prever o primeiro valor seguinte com base em sua última observação. Você precisará armazenar a previsão como um "valor real", que será usado para prever o segundo próximo valor através de uma mudança de tempo , assim como um modelo ARIMA. Você precisará iterar o processo h vezes para obter seus h-passos à frente. Cada iteração dependerá da previsão anterior.
Um exemplo usando o código R seria o seguinte.
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)
Agora, obviamente, não há regras gerais para determinar se um modelo de série temporal ou um modelo de aprendizado de máquina são mais eficientes. O tempo computacional pode ser maior para os modelos de aprendizado de máquina, mas, por outro lado, você pode incluir qualquer tipo de recurso adicional para prever sua série temporal usando-os (por exemplo, não apenas recursos numéricos ou lógicos). O conselho geral seria testar os dois e escolher o modelo mais eficiente.