Combinaison auto.arima () et ets () du package de prévisions

8

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é?

Zach
la source

Réponses:

15

Les probabilités des deux classes de modèle, et donc les valeurs AIC, ne sont pas comparables en raison d'hypothèses d'initialisation différentes. Votre fonction n'est donc pas valide. Je vous suggère d'essayer les deux classes de modèles de votre série et de voir celle qui donne les meilleures prévisions hors échantillon.

Rob Hyndman
la source
J'ai modifié ma question pour inclure une fonction que j'ai écrite pour le faire. Ma nouvelle fonction a-t-elle un sens?
Zach
Si holdout = 0, il utilise l'ajustement d'échantillon qui favorisera le modèle avec plus de paramètres. Mais si Holdout> 0, cela a du sens, bien que vous ayez besoin d'un échantillon assez important pour que la méthode sélectionne le meilleur modèle de manière fiable. En général, je choisirais le modèle à utiliser sur la base d'autres considérations plutôt que de ne considérer que les performances de prévision hors échantillon sur un échantillon de courte durée d'une série. Par exemple, vous pouvez considérer les performances hors échantillon dans l'ensemble de la série (plutôt qu'une série à la fois) et sélectionner la meilleure classe de modèle de cette façon.
Rob Hyndman
merci pour la suggestion, je vais commencer à aller dans cette direction. Dans le cas où ma retenue est égale à zéro, si j'introduisais une sorte de pénalité pour les paramètres?
Zach
1
Comme je le répète, utilisez des performances hors échantillon sur un grand nombre de séries. Vous ne pouvez pas facilement comparer les performances dans l'échantillon des deux classes de modèle.
Rob Hyndman le
Ok, merci pour tous les conseils. Je vais utiliser des performances hors échantillon sur l'ensemble pour choisir une classe de modèle.
Zach