Pour répondre à votre question de manière plus générale, il est possible d'utiliser le machine learning et de prédire les prévisions h-steps-ahead . La partie délicate est que vous devez remodeler vos données dans une matrice dans laquelle vous avez, pour chaque observation, la valeur réelle de l'observation et les valeurs passées de la série chronologique pour une plage définie. Vous devrez définir manuellement quelle est la plage de données qui semble pertinente pour prédire votre série chronologique, en fait, comme vous paramétrez un modèle ARIMA. La largeur / horizon de la matrice est critique pour prédire correctement la prochaine valeur prise par votre matrice. Si votre horizon est restreint, vous risquez de manquer les effets de saisonnalité.
Une fois que vous avez fait cela, pour prévoir les étapes h à venir, vous devrez prédire la première valeur suivante en fonction de votre dernière observation. Vous devrez ensuite stocker la prédiction en tant que «valeur réelle», qui sera utilisée pour prédire la deuxième valeur suivante à travers un décalage temporel , tout comme un modèle ARIMA. Vous devrez répéter le processus h fois pour obtenir votre h-étapes en avance. Chaque itération s'appuiera sur la prédiction précédente.
Un exemple utilisant le code R serait le suivant.
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)
Maintenant, évidemment, il n'y a pas de règles générales pour déterminer si un modèle de série chronologique ou un modèle d'apprentissage automatique sont plus efficaces. Le temps de calcul peut être plus long pour les modèles d'apprentissage automatique, mais d'un autre côté, vous pouvez inclure tout type de fonctionnalités supplémentaires pour prédire vos séries chronologiques en les utilisant (par exemple, pas seulement des fonctionnalités numériques ou logiques). Un conseil général serait de tester les deux et de choisir le modèle le plus efficace.