Để trả lời câu hỏi của bạn bằng một thuật ngữ tổng quát hơn, có thể sử dụng học máy và dự đoán các bước dự báo trước . Phần khó khăn là bạn phải định hình lại dữ liệu của mình thành một ma trận mà bạn có, cho mỗi lần quan sát giá trị thực của quan sát và các giá trị trong quá khứ của chuỗi thời gian cho một phạm vi xác định. Thực tế, bạn sẽ cần xác định phạm vi dữ liệu xuất hiện có liên quan để dự đoán chuỗi thời gian của mình, trên thực tế, như bạn sẽ tham số mô hình ARIMA. Độ rộng / đường chân trời của ma trận là rất quan trọng để dự đoán chính xác giá trị tiếp theo được lấy bởi ma trận của bạn. Nếu đường chân trời của bạn bị hạn chế, bạn có thể bỏ lỡ các hiệu ứng thời vụ.
Khi bạn đã thực hiện điều đó, để dự đoán bước trước, bạn sẽ cần dự đoán giá trị tiếp theo đầu tiên dựa trên quan sát cuối cùng của bạn. Sau đó, bạn sẽ phải lưu trữ dự đoán dưới dạng "giá trị thực", sẽ được sử dụng để dự đoán giá trị tiếp theo thứ hai thông qua việc dịch chuyển thời gian , giống như mô hình ARIMA. Bạn sẽ phải lặp lại quá trình h lần để có bước h trước. Mỗi lần lặp sẽ dựa vào dự đoán trước đó.
Một ví dụ sử dụng mã R sẽ là ví dụ sau.
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)
Bây giờ rõ ràng, không có quy tắc chung nào để xác định xem mô hình chuỗi thời gian hay mô hình học máy có hiệu quả hơn. Thời gian tính toán có thể cao hơn đối với các mô hình học máy, nhưng mặt khác, bạn có thể bao gồm bất kỳ loại tính năng bổ sung nào để dự đoán chuỗi thời gian của bạn bằng cách sử dụng chúng (ví dụ: không chỉ các tính năng số hoặc logic). Lời khuyên chung sẽ là kiểm tra cả hai, và chọn mô hình hiệu quả nhất.