Aby odpowiedzieć na twoje pytanie w bardziej ogólny sposób, można skorzystać z uczenia maszynowego i przewidzieć prognozy na kolejne kroki . Problem polega na tym, że musisz przekształcić dane w macierz, w której masz dla każdej obserwacji rzeczywistą wartość obserwacji i przeszłe wartości szeregów czasowych dla określonego zakresu. Konieczne będzie ręczne zdefiniowanie zakresu danych, które wydają się istotne dla prognozowania szeregów czasowych, tak jak parametr modelu ARIMA. Szerokość / horyzont macierzy ma kluczowe znaczenie dla prawidłowego przewidywania następnej wartości pobranej przez macierz. Jeśli twój horyzont jest ograniczony, możesz przegapić efekty sezonowości.
Po wykonaniu tej czynności, aby przewidzieć kolejne kroki, musisz przewidzieć pierwszą następną wartość na podstawie ostatniej obserwacji. Będziesz musiał zapisać prognozę jako „wartość rzeczywistą”, która posłuży do przewidzenia drugiej następnej wartości poprzez przesunięcie czasowe , podobnie jak model ARIMA. Będziesz musiał iterować proces h razy, aby uzyskać h-kroki do przodu. Każda iteracja będzie opierać się na poprzedniej prognozie.
Przykładem użycia kodu R byłby następujący.
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)
Oczywiście nie ma ogólnych zasad określających, czy model szeregów czasowych czy model uczenia maszynowego jest bardziej wydajny. Czas obliczeniowy może być dłuższy w przypadku modeli uczenia maszynowego, ale z drugiej strony możesz uwzględnić wszelkiego rodzaju dodatkowe funkcje do przewidywania ich szeregów czasowych (np. Nie tylko funkcje numeryczne lub logiczne). Ogólną radą byłoby przetestowanie obu i wybranie najbardziej wydajnego modelu.