为了更笼统地回答您的问题,可以使用机器学习并预测h步长预测。棘手的部分是,您必须将数据重塑为矩阵,其中每个观测值必须具有观测值的实际值和定义范围内时间序列的过去值。实际上,您将需要定义哪些与预测时间序列相关的数据范围是多少,就像您要为ARIMA模型设置参数一样。矩阵的宽度/水平对于正确预测矩阵的下一个值至关重要。如果您的视线受到限制,则可能会错过季节性影响。
完成此操作后,要预测h步长,您将需要根据上一次观察来预测第一个下一个值。然后,您必须将预测存储为“实际值”,该值将用于通过时移预测第二个下一个值,就像ARIMA模型一样。您将必须重复处理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)
显然,现在没有通用的规则可以确定时间序列模型还是机器学习模型更有效。对于机器学习模型,计算时间可能会更长,但另一方面,您可以包括任何类型的附加功能,以使用它们来预测时间序列(例如,不仅仅是数字或逻辑功能)。一般建议是同时测试这两者,然后选择最有效的模型。