Um Ihre Frage allgemeiner zu beantworten, können Sie maschinelles Lernen verwenden und Prognosen für H-Schritte voraussagen . Der schwierige Teil ist, dass Sie Ihre Daten in eine Matrix umformen müssen, in der Sie für jede Beobachtung den tatsächlichen Wert der Beobachtung und vergangene Werte der Zeitreihen für einen definierten Bereich haben. Sie müssen manuell definieren, welcher Datenbereich für die Vorhersage Ihrer Zeitreihen relevant erscheint, als würden Sie ein ARIMA-Modell parametrisieren. Die Breite / der Horizont der Matrix ist entscheidend , um den nächsten von Ihrer Matrix genommenen Wert korrekt vorherzusagen. Wenn Ihr Horizont eingeschränkt ist, verpassen Sie möglicherweise Saisonalitätseffekte.
Sobald Sie dies getan haben, müssen Sie den ersten nächsten Wert basierend auf Ihrer letzten Beobachtung vorhersagen, um h-Schritte vorauszusagen. Sie müssen dann die Vorhersage als "tatsächlichen Wert" speichern, der verwendet wird, um den zweitnächsten Wert durch eine Zeitverschiebung vorherzusagen , genau wie bei einem ARIMA-Modell. Sie müssen den Prozess h-mal wiederholen, um Ihre h-Schritte voranzutreiben. Jede Iteration basiert auf der vorherigen Vorhersage.
Ein Beispiel für die Verwendung von R-Code wäre das folgende.
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)
Offensichtlich gibt es keine allgemeinen Regeln, um zu bestimmen, ob ein Zeitreihenmodell oder ein Modell für maschinelles Lernen effizienter sind. Die Rechenzeit kann für Modelle des maschinellen Lernens höher sein, andererseits können Sie jede Art von zusätzlichen Funktionen einschließen, um Ihre Zeitreihen anhand dieser Modelle vorherzusagen (z. B. nicht nur numerische oder logische Funktionen). Allgemeiner Rat wäre, beide zu testen und das effizienteste Modell auszuwählen.