Sorunuzu daha genel bir terimle cevaplamak için, makine öğrenimini kullanmak ve ileriye dönük adımlar tahmin etmek mümkündür . Zor kısmı, verilerinizi sahip olduğunuz bir matrise yeniden şekillendirmeniz gerektiğidir, her gözlem için gözlemin gerçek değeri ve tanımlanmış bir aralık için zaman serisinin geçmiş değerleri. Aslında, bir ARIMA modelini parametrelendirdiğiniz gibi, zaman dizinizi tahmin etmek için alakalı görünen veri aralığının ne olduğunu manuel olarak tanımlamanız gerekir. Matrisin genişliği / ufku, matrisiniz tarafından bir sonraki değeri doğru tahmin etmek için kritik öneme sahiptir. Ufkunuz kısıtlanırsa, mevsimsellik etkilerini kaçırabilirsiniz.
Bunu yaptıktan sonra, bir sonraki adımı tahmin etmek için, son gözleminize dayanarak bir sonraki ilk değeri tahmin etmeniz gerekir. Ardından, tahmini bir "gerçek değer" olarak saklamanız gerekir; bu değer , tıpkı bir ARIMA modeli gibi, bir zaman kaydırma ile ikinci sonraki değeri tahmin etmek için kullanılır . H adımlarınızı ilerletmek için işlemi h kez yinelemeniz gerekecektir. Her yineleme bir önceki öngörüye dayanacaktır.
R kodunu kullanan bir örnek aşağıdaki gibidir.
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)
Şimdi açık bir şekilde, bir zaman serisi modelinin veya bir makine öğrenme modelinin daha verimli olup olmadığını belirlemek için genel bir kural yoktur. Hesaplama süresi, makine öğrenme modelleri için daha yüksek olabilir, ancak diğer yandan, zaman serilerinizi kullanarak tahmin etmek için herhangi bir ek özellik ekleyebilirsiniz (örneğin, yalnızca sayısal veya mantıksal özellikler değil). Genel tavsiye, her ikisini de test etmek ve en verimli modeli seçmek olacaktır.