Kombinieren von auto.arima () und ets () aus dem Prognosepaket

8

Ich habe die Funktionen ets () und auto.arima () aus dem Prognosepaket verwendet, um eine große Anzahl univariater Zeitreihen vorherzusagen . Ich habe die folgende Funktion verwendet, um zwischen den beiden Methoden zu wählen, aber ich habe mich gefragt, ob CrossValidated bessere (oder weniger naive) Ideen für die automatische Prognose hat.

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: Was ist mit dieser Funktion?

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
}

Das "Holdout" ist die Anzahl der Perioden, die Sie als Test außerhalb der Stichprobe verwenden möchten. Die Funktion berechnet dann basierend auf diesem Parameter ein Anpassungsfenster und ein Testfenster. Anschließend werden die Funktionen auto.arima und ets im Anpassungsfenster ausgeführt und diejenige mit der niedrigsten MAE im Testfenster ausgewählt. Wenn der Holdout gleich 0 ist, wird die Anpassung in der Stichprobe getestet.

Gibt es eine Möglichkeit, das ausgewählte Modell nach Auswahl automatisch mit dem vollständigen Datensatz zu aktualisieren?

Zach
quelle

Antworten:

15

Die Wahrscheinlichkeiten der beiden Modellklassen und damit die AIC-Werte sind aufgrund unterschiedlicher Initialisierungsannahmen nicht vergleichbar. Ihre Funktion ist also ungültig. Ich schlage vor, Sie probieren die beiden Modellklassen Ihrer Serie aus und sehen, welche die besten Prognosen außerhalb der Stichprobe liefert.

Rob Hyndman
quelle
Ich habe meine Frage so bearbeitet, dass sie eine Funktion enthält, die ich dazu geschrieben habe. Ist meine neue Funktion sinnvoll?
Zach
Wenn holdout = 0 ist, wird die Insample-Anpassung verwendet, wodurch das Modell mit mehr Parametern bevorzugt wird. Wenn jedoch Holdout> 0 ist, ist dies sinnvoll, obwohl Sie für die Methode ein ziemlich großes Holdout-Beispiel benötigen, um das beste Modell zuverlässig auszuwählen. Im Allgemeinen würde ich das zu verwendende Modell aufgrund anderer Überlegungen auswählen, anstatt nur die Prognoseleistung außerhalb der Stichprobe für eine kurze Holdout-Stichprobe aus einer Serie zu berücksichtigen. Sie können beispielsweise die Out-of-Sample-Leistung für das gesamte Serienensemble (und nicht für jeweils eine Serie) berücksichtigen und auf diese Weise die beste Modellklasse auswählen.
Rob Hyndman
Danke für den Vorschlag, ich werde anfangen, mich in diese Richtung zu bewegen. In dem Fall, in dem mein Holdout gleich Null ist, was ist, wenn ich eine Strafe für Parameter eingeführt habe?
Zach
1
Verwenden Sie, wie ich immer wieder sage, die Out-of-Sample-Leistung für eine große Anzahl von Serien. Sie können die Leistung der beiden Modellklassen im Beispiel nicht einfach vergleichen.
Rob Hyndman
Ok, danke für all die Ratschläge. Ich werde die Out-of-Sample-Performance für das gesamte Ensemble verwenden, um eine Modellklasse auszuwählen.
Zach