J'ai utilisé les fonctions ets () et auto.arima () du package de prévisions pour prévoir un grand nombre de séries chronologiques univariées. J'ai utilisé la fonction suivante pour choisir entre les 2 méthodes, mais je me demandais si CrossValidated avait des idées meilleures (ou moins naïves) pour la prévision automatique.
auto.ts <- function(x,ic="aic") {
XP=ets(x, ic=ic)
AR=auto.arima(x, ic=ic)
if (get(ic,AR)<get(ic,XP)) {
model<-AR
}
else {
model<-XP
}
model
}
/ edit: Et cette fonction?
auto.ts <- function(x,ic="aic",holdout=0) {
S<-start(x)[1]+(start(x)[2]-1)/frequency(x) #Convert YM vector to decimal year
E<-end(x)[1]+(end(x)[2]-1)/frequency(x)
holdout<-holdout/frequency(x) #Convert holdout in months to decimal year
fitperiod<-window(x,S,E-holdout) #Determine fit window
if (holdout==0) {
testperiod<-fitperiod
}
else {
testperiod<-window(x,E-holdout+1/frequency(x),E) #Determine test window
}
XP=ets(fitperiod, ic=ic)
AR=auto.arima(fitperiod, ic=ic)
if (holdout==0) {
AR_acc<-accuracy(AR)
XP_acc<-accuracy(XP)
}
else {
AR_acc<-accuracy(forecast(AR,holdout*frequency(x)),testperiod)
XP_acc<-accuracy(forecast(XP,holdout*frequency(x)),testperiod)
}
if (AR_acc[3]<XP_acc[3]) { #Use MAE
model<-AR
}
else {
model<-XP
}
model
}
Le "holdout" est le nombre de périodes que vous souhaitez utiliser comme test hors échantillon. La fonction calcule ensuite une fenêtre d'ajustement et une fenêtre de test en fonction de ce paramètre. Ensuite, il exécute les fonctions auto.arima et ets sur la fenêtre d'ajustement, et choisit celle avec le MAE le plus bas dans la fenêtre de test. Si le holdout est égal à 0, il teste l'ajustement dans l'échantillon.
Existe-t-il un moyen de mettre à jour automatiquement le modèle choisi avec l'ensemble de données complet, une fois qu'il a été sélectionné?