Щоб відповісти на ваше питання в більш загальному розумінні, можна скористатися машинним навчанням та передбачити прогнози на крок вперед . Складна частина полягає в тому, що вам потрібно переробити свої дані в матрицю, в якій у вас є для кожного спостереження фактичне значення спостереження та минулі значення часового ряду для визначеного діапазону. Вам потрібно буде вручну визначити, який діапазон даних, які здаються релевантними для прогнозування вашого часового ряду, насправді, як ви б параметризували модель ARIMA. Ширина / горизонт матриці є критично важливим, щоб правильно передбачити наступне значення, прийняте вашою матрицею. Якщо ваш горизонт обмежений, ви можете пропустити наслідки сезонності.
Коли ви зробите це, щоб передбачити h-кроки вперед, вам потрібно буде передбачити перше наступне значення на основі останнього спостереження. Тоді вам доведеться зберігати передбачення як "фактичне значення", яке буде використовуватися для прогнозування другого наступного значення через зміщення часу , подібно до моделі ARIMA. Вам потрібно буде повторити процес h h разів, щоб отримати ваші h-кроки вперед. Кожна ітерація буде залежати від попереднього прогнозу.
Прикладом використання коду R може бути наступний.
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)
Зараз очевидно, що немає загальних правил, які б визначали, чи є модель часових рядів або модель машинного навчання більш ефективною. Час обчислень може бути більшим для моделей машинного навчання, але, з іншого боку, ви можете включити будь-який тип додаткових функцій для прогнозування своїх часових рядів, використовуючи їх (наприклад, не лише числові чи логічні функції). Загальною порадою було б протестувати і те, і вибрати найбільш ефективну модель.