Какова связь между многошаговым прогнозом временных рядов с переоценкой и ошибками прогноза, полученными с помощью tsCV ()? - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть месячный временной ряд (yt) с 108 наблюдениями (с 1/2010 по 12/2018), которые я разделил на тренировочные [1:84] и тестовые наборы [85: 108]. Моя идея состоит в том, чтобы обучить мою модель в тренировочном наборе и применить ее к тестовому набору, чтобы я мог сравнить полученные прогнозы с реальными наблюдениями из тестового набора (и сделать это для h = 1, 3, 6 и 12). Итак, я хочу получить прогнозы и их ошибки, и использовать его для расчета MAE, MSE и RMSE.

Чтобы получить прогнозы

Я реализую код для нескольких Прогнозы с переоценкой, предоставленные доктором Робом Хиндманом в https://robjhyndman.com/hyndsight/rolling-forecasts/:

h<-1 # repeat to h=3,6 and 12
train<-window(yt, end=c(2016,12))  
test<-window(yt, start=2017)  
n<-length(test)-h+1  
fit<-Arima(train, order=c(0,1,1), seasonal=list(order=c(0,1,1), period=12), method="ML") # model identified by analysing ACF and PACF of yt  
order<-arimaorder(fit)  
fcmat1<-matrix(0, nrow=n, ncol=h)  
for(i in 1:n) {  
  x<-window(yt, end=c(2016,12)+(i-1)/12)  
  refit<-Arima(x, order=order[1:3], seasonal=order[4:6])  
  fcmat1[i,]<-forecast(refit, h=h)$mean  
}

Затем я могу построить значения в fcmat1 в течение yt и визуально получить доступ к разнице между полученные прогнозы и реальные значения yt [85: 108].

Для получения ошибок

В ссылке выше, доктор Роб ссылается на другую страницу, связанную с перекрестная проверка временных рядов (в https://robjhyndman.com/hyndsight/tscv/), и поэтому я подумал о том, чтобы просто выполнить

for_func<-function(x, h){forecast(fit, h=h)}  
e<-tsCV(yt, for_func, h=1)

и использовать «e» для получения мер точности, но затем я запутайтесь, потому что мне кажется, что прогнозы, рассчитанные в for_fun c tsCV, отличаются от прогнозов, полученных ранее (fcmat1), и поэтому будут ошибки. В многоэтапных прогнозах с подходом переоценки я подгоняю модель к обучающему набору и затем «расширяю» ее до оставшихся данных. В подходе tsCV модель Arima применяется ко всем данным (yt), а не только к набору данных поезда.

Если бы я не хотел строить прогнозы, я бы никогда не столкнулся с этой проблемой и Я бы использовал tsCV без сомнений. То же самое, если я просто хочу составить прогноз без оценки его точности (я бы просто использовал многоэтапную переоценку)

Итак, мои вопросы:

  1. Многошаговое прогнозирование с переоценкой и tsCV как-то связаны? Если да, то как?
  2. На практике, какую из следующих функций мне следует использовать для получения ошибок?

    • tsCV ():
e1<-tsCV(yt, for_func, h=1)
  mae1<-mean(abs(e1), na.rm=TRUE)
  mse1<-mean(e1^2, na.rm=TRUE)
  rmse1<-sqrt(mse1)

#           MAE      MSE     RMSE
# h=1  40.80492 2459.470 49.59305
# h=3  43.23866 2846.406 53.35172
# h=6  46.54597 3321.426 57.63181
# h=12 51.19123 3969.944 63.00749
  • Точность () применяется к fcmat
e1<-fcmat1[,1]-test
  mae1ad<-mean(abs(e1), na.rm=TRUE)
  mse1ad<-mean(e1^2, na.rm=TRUE)
  rmse1ad<-sqrt(mse1ad)

#           MAE      MSE     RMSE
# h=1  39.05335 2314.315 48.10733
# h=3  35.95370 2045.558 45.22784
# h=6  45.00950 3301.727 57.46066
# h=12 72.05596 7821.347 88.43838
  • Точность (), как обычно применяется
for1<-forecast(Arima(train, order=c(0,1,1), seasonal=list(order=c(0,1,1), period=12), method="ML"),h=1)
e1ac<-accuracy(for1,test)
  mae1ac<-e1ac[6]
  mse1ac<-e1ac[4]^2
  rmse1ac<-e1ac[4]

#           MAE      MSE     RMSE
# h=1  31.93750 1020.004 31.93750
# h=3  55.97562 5097.511 71.39685
# h=6  42.35456 3628.103 60.23374
# h=12 30.84436 2201.275 46.91774

Может кто-нибудь просветить меня об этом? (и в конечном итоге предупредить меня, если я делаю что-то не так) Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...