Validierungsübergreifende Zeitreihenanalyse


37

Ich habe das Caret-Paket in R verwendet, um Vorhersagemodelle für Klassifizierung und Regression zu erstellen. Caret bietet eine einheitliche Oberfläche, um Modell-Hyperparameter durch Cross-Validierung oder Boot-Strapping zu optimieren. Wenn Sie beispielsweise ein einfaches Modell für die Klassifizierung der nächsten Nachbarn erstellen, wie viele Nachbarn sollten Sie verwenden? 2? 10? 100? Caret hilft Ihnen bei der Beantwortung dieser Frage, indem Sie Ihre Daten erneut abtasten, verschiedene Parameter ausprobieren und dann die Ergebnisse aggregieren, um zu entscheiden, welche die beste Vorhersagegenauigkeit ergeben.

Ich mag diesen Ansatz, weil er eine robuste Methodik für die Auswahl von Modell-Hyperparametern bietet. Wenn Sie die endgültigen Hyperparameter ausgewählt haben, liefert er eine kreuzvalidierte Schätzung, wie gut das Modell ist, wobei die Genauigkeit für Klassifizierungsmodelle verwendet wird und RMSE für Regressionsmodelle.

Ich habe jetzt einige Zeitreihendaten, für die ich ein Regressionsmodell erstellen möchte, wahrscheinlich unter Verwendung einer zufälligen Gesamtstruktur. Was ist angesichts der Art der Daten eine gute Technik, um die Vorhersagegenauigkeit meines Modells zu bewerten? Wenn zufällige Gesamtstrukturen nicht wirklich für Zeitreihendaten gelten, wie lässt sich dann ein genaues Ensemblemodell für die Zeitreihenanalyse erstellen?


Ich fand die Frage wirklich interessant. Gibt es eine Möglichkeit, eine Frage zu markieren, um ihr zu folgen?
Mariana Soffer

1
@mariana soffer Klicken Sie auf das Sternsymbol unter den Auf- / Ab-Pfeilen.
Zach

4
Caret unterstützt jetzt die zeitreihenübergreifende
captain_ahab

1
@Zach Dies ist ein alter Beitrag, aber ich frage mich, ob Sie irgendwelche neuen Gedanken haben? Sind Ihnen aktuelle Arbeiten zur sequentiellen Modellvalidierung bekannt?
HoraceT

Antworten:


10

Die "klassische" k-fache Kreuzvalidierungstechnik basiert auf der Tatsache, dass jede Stichprobe im verfügbaren Datensatz (k-1) -mal verwendet wird, um ein Modell zu trainieren, und einmal, um es zu testen. Da es sehr wichtig ist, Zeitreihenmodelle für "zukünftige" Daten zu validieren, trägt dieser Ansatz nicht zur Stabilität des Modells bei.

Eine wichtige Eigenschaft vieler (meist?) Zeitreihen ist die Korrelation zwischen den benachbarten Werten. Wie von IrishStat ausgeführt, spielt diese Korrelation (oder mangelnde Unabhängigkeit) eine wichtige Rolle, wenn Sie frühere Messwerte als unabhängige Variablen Ihres Modellkandidaten verwenden. Dies ist ein weiterer Grund, warum die k-fache Kreuzvalidierung keine gute Idee ist.

Eine Möglichkeit, dieses Problem zu lösen, besteht darin, die Daten zu "überbemustern" und zu dekorrelieren. Wenn der Dekorrelationsprozess erfolgreich ist, ist die Verwendung der Kreuzvalidierung für Zeitreihen weniger problematisch. Es wird jedoch das Problem der Validierung des Modells mit zukünftigen Daten nicht lösen

Klarstellungen

Mit der Validierung des Modells für zukünftige Daten meine ich, das Modell zu konstruieren, auf neue Daten zu warten, die während der Modellkonstruktion nicht verfügbar waren, zu testen, zu verfeinern usw. und sie für diese neuen Daten zu validieren .

Mit Überabtastung der Daten meine ich das Sammeln von Zeitreihendaten mit einer Frequenz, die viel höher ist als praktisch erforderlich. Zum Beispiel: Aktienkurse alle 5 Sekunden abtasten, wenn Sie wirklich an stündlichen Änderungen interessiert sind. Wenn ich hier "Sampling" sage, meine ich nicht "Interpolieren", "Schätzen" usw. Wenn die Daten nicht mit höherer Frequenz gemessen werden können, ist diese Technik bedeutungslos


Was ist die "klassische" Methode, um ein Modell für zukünftige Daten zu validieren? Was meinst du mit Überabtastung? Danke!
Zach

TppT

@bgbg Ich stehe vor einem sehr ähnlichen Problem und habe gerade Ihren Beitrag gefunden. Können Sie einige Referenzen zum Oversampling und zur Dekorrelation von Zeitreihendaten anführen? Ich würde denken, wenn der Speicher in der Zeitreihe kurz genug ist (könnte zeigen, dass eine Arima passt), könnte man einfach "nicht überlappende" Samples nehmen und die übliche Kreuzvalidierung durchführen. Jeder Gedanke war willkommen.
HoraceT

9

http://robjhyndman.com/researchtips/crossvalidation/ enthält einen schnellen Tipp zur Kreuzvalidierung von Zeitreihen. Hinsichtlich der Verwendung einer zufälligen Gesamtstruktur für Zeitreihendaten ... ich bin mir nicht sicher, obwohl es eine seltsame Wahl zu sein scheint, da das Modell mit Bootstrap-Beispielen ausgestattet ist. Natürlich gibt es klassische Zeitreihenmethoden (z. B. ARIMA) und ML-Techniken wie Neuronale Netze ( Beispiel pdf ). Vielleicht können einige der Zeitreihenexperten kommentieren, wie gut ML-Techniken im Vergleich zu zeitreihenspezifischen Algorithmen funktionieren.


2
Das trifft den Nagel auf den Kopf. Ich versuche herauszufinden, wie man Techniken des maschinellen Lernens auf Zeitreihenanalysen anwendet.
Zach

Ich hatte bereits zuvor Erfolg damit, Zufallsforste für Prognosen zu verwenden. Check out: biomedcentral.com/1471-2105/15/276
captain_ahab

6

Hier ist ein Beispielcode für die Kreuzvalidierung von Zeitreihenmodellen. Ich habe diesen Code in meinem Blog erweitert und das foreach-Paket integriert , um die Dinge zu beschleunigen und einen möglichen xreg-Ausdruck bei der Kreuzvalidierung zu berücksichtigen.

Hier ist eine Kopie des Codes aus Rob Hyndmans Blog:

library(fpp) # To load the data set a10
plot(a10, ylab="$ million", xlab="Year", main="Antidiabetic drug sales")
plot(log(a10), ylab="", xlab="Year", main="Log Antidiabetic drug sales")

k <- 60 # minimum data length for fitting a model
n <- length(a10)
mae1 <- mae2 <- mae3 <- matrix(NA,n-k,12)
st <- tsp(a10)[1]+(k-2)/12

for(i in 1:(n-k))
{
  xshort <- window(a10, end=st + i/12)
  xnext <- window(a10, start=st + (i+1)/12, end=st + (i+12)/12)
  fit1 <- tslm(xshort ~ trend + season, lambda=0)
  fcast1 <- forecast(fit1, h=12)
  fit2 <- Arima(xshort, order=c(3,0,1), seasonal=list(order=c(0,1,1), period=12), 
      include.drift=TRUE, lambda=0, method="ML")
  fcast2 <- forecast(fit2, h=12)
  fit3 <- ets(xshort,model="MMM",damped=TRUE)
  fcast3 <- forecast(fit3, h=12)
  mae1[i,1:length(xnext)] <- abs(fcast1[['mean']]-xnext)
  mae2[i,1:length(xnext)] <- abs(fcast2[['mean']]-xnext)
  mae3[i,1:length(xnext)] <- abs(fcast3[['mean']]-xnext)
}

plot(1:12, colMeans(mae1,na.rm=TRUE), type="l", col=2, xlab="horizon", ylab="MAE",
     ylim=c(0.65,1.05))
lines(1:12, colMeans(mae2,na.rm=TRUE), type="l",col=3)
lines(1:12, colMeans(mae3,na.rm=TRUE), type="l",col=4)
legend("topleft",legend=c("LM","ARIMA","ETS"),col=2:4,lty=1)

Ergebnisse


Hallo Zach. Ich habe eine etwas andere Version von Hyndmans Code implementiert, um die entsprechende Anzahl von Begriffen für ein Regressionsmodell mit Zeitreihen zu ermitteln. Leider zeigte das CV-Fehlerdiagramm mehrere lokale Minima, die mich fragten, wie ich die Anzahl der Begriffe richtig auswählen sollte. Das vollständige Problem wird hier beschrieben . Haben Sie schon einmal etwas Ähnliches erlebt?
Jroberayalas

5

Wenn Sie Zeitreihendaten haben, liegt möglicherweise ein Problem mit Freiheitsgraden vor. Wenn Sie beispielsweise 4 Beobachtungen in stündlichen Abständen durchführen und sich dann für die Verwendung von 241 Beobachtungen in Abständen von 1 Minute entscheiden, haben Sie 241 Beobachtungen, die jedoch nicht unbedingt unabhängig voneinander sind. Wenn Sie diese 241 Werte / Messungen an ein Analysepaket senden, kann das Paket davon ausgehen, dass es sich um 241 unabhängige Werte handelt, während es seine besondere Magie ausführt. Wenn Sie Zeitreihendaten haben, müssen Sie möglicherweise Ihre Analysen aktualisieren. Ich kenne das Programm nicht, auf das Sie sich beziehen, aber es ist eine vernünftige Vermutung von meiner Seite (ich könnte mich irren!), Dass es sich wahrscheinlich nicht um Tests (F-Tests / T-Tests ... usw.) handelt, die auf Ihre Problemmenge zutreffen.


1

Ich kann Ihnen 2 interessante Artikel empfehlen, die online zu lesen sind. 1. Gestreamtes Lernen: One-Pass-SVMs von Piyush Rai, Hal Daum´e III, Suresh Venkatasubramanian. 2. Streaming k-means approximation von Nir Ailon

Hoffe es klärt dich ein wenig über deine Vorstellungen auf


Können Sie Links zu diesen Artikeln bereitstellen? Vielen Dank.
Zach

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.