보다 일반적인 용어로 질문에 대답 하기 위해 머신 러닝을 사용하고 사전 예측을 예측할 수 있습니다. 까다로운 부분은 각 관측치에 대해 관측치의 실제 값과 정의 된 범위에 대한 시계열의 과거 값을 갖는 행렬로 데이터를 재구성해야한다는 것입니다. 실제로 ARIMA 모델을 매개 변수화 할 때 시계열 예측과 관련이있는 데이터 범위를 수동으로 정의해야합니다. 행렬의 너비 / 수평선은 행렬 에서 취한 다음 값을 정확하게 예측하는 데 중요 합니다. 수평선이 제한되어 있으면 계절 효과를 놓칠 수 있습니다.
이 단계를 완료 한 후에는 미리 단계를 예측하려면 마지막 관찰을 기반으로 첫 번째 다음 값을 예측해야합니다. 그런 다음 예측을 "실제 값"으로 저장해야합니다.이 값 은 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)
이제 시계열 모델 또는 기계 학습 모델이 더 효율적인지 여부를 결정하는 일반적인 규칙은 없습니다. 기계 학습 모델의 경우 계산 시간이 더 길어질 수 있지만, 시계열을 사용하여 시계열을 예측하기 위해 모든 유형의 추가 기능을 포함 할 수 있습니다 (예 : 숫자 또는 논리 기능). 일반적인 조언은 두 가지를 모두 테스트하고 가장 효율적인 모델을 선택하는 것입니다.