Per rispondere alla tua domanda in un termine più generale, è possibile utilizzare l'apprendimento automatico e prevedere previsioni h-steps-ahead . La parte difficile è che devi rimodellare i tuoi dati in una matrice in cui hai, per ogni osservazione il valore effettivo dell'osservazione e i valori passati delle serie temporali per un intervallo definito. Sarà necessario definire manualmente quale sia l'intervallo di dati che sembrano rilevanti per prevedere le serie temporali, in effetti, come si farebbe con un parametro ARIMA. La larghezza / orizzonte della matrice è fondamentale per prevedere correttamente il valore successivo assunto dalla matrice. Se il tuo orizzonte è limitato, potresti perdere gli effetti della stagionalità.
Una volta che lo hai fatto, per prevedere i passi avanti, dovrai prevedere il primo valore successivo in base all'ultima osservazione. Dovrai quindi memorizzare la previsione come "valore reale", che verrà utilizzato per prevedere il secondo valore successivo attraverso un time shifting , proprio come un modello ARIMA. Dovrai ripetere il processo h volte per ottenere i tuoi passi avanti. Ogni iterazione si baserà sulla previsione precedente.
Un esempio che utilizza il codice R sarebbe il seguente.
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)
Ora, ovviamente, non ci sono regole generali per determinare se un modello di serie temporale o un modello di apprendimento automatico sono più efficienti. Il tempo di calcolo potrebbe essere più elevato per i modelli di apprendimento automatico, ma d'altra parte, è possibile includere qualsiasi tipo di funzionalità aggiuntive per prevedere le serie temporali utilizzandole (ad esempio non solo funzioni numeriche o logiche). Un consiglio generale sarebbe quello di testare entrambi e scegliere il modello più efficiente.