Ich habe mich mit dem folgenden Problem befasst. Ich habe eine Art Echtzeitsystem und lese jedes Mal, wenn ich den aktuellen Wert lese, eine Zeitreihe (z. B. 1, 12, 2, 3, 5, 9, 1, ...). Ich möchte Methoden (statistisches und maschinelles Lernen) kennen, um den nächsten Wert online vorherzusagen (dh jedes Mal, wenn ein neuer Wert gelesen wird). Ich habe Rs ARIMA und Wekas SMOreg ausprobiert, sie führen zu guten Vorhersagen, aber sie sind etwas langsam, da ich jedes Mal, wenn ein neuer Wert kommt, die Mathematik wiederholen muss.
PS Es wäre auch toll, wenn die Methode ein Konfidenzintervall hätte.
Sind in Ihrem Echtzeitsystem die Beobachtungszeiten inhomogen und die Daten instationär? Wenn Sie etwas Einfaches und Schnelles wollen, empfehle ich die Verwendung der inhomogenen EMA-Operatoren:
Sie aktualisieren die EMA ( ) bei jeder neuen Beobachtung gemäß:Wert
Wert+ = α( newData - Wert ) ,α = 1 - exp( - Δ tτ)
mit einen Glättungs- / Abstimmungsparameter. Es ist eine einfache Möglichkeit, eine Erwartung abzuschätzen.τ
Über das Update kann auch eine einfache Online-Medianschätzung erstellt werden
sgmed += s gn ( newData - med )= ϵ( sg - med )
In der Praxis möchten Sie klein (oder mit mehr Beobachtungen verfallen). Im Idealfall sollte abhängen, wie schief die Aktualisierungen werden. dh wenn tatsächlich dem Median entspricht, sollte auf einheitlich sein . Sie können dies dann auf eine Tiefe ausbalancierte binäre Baumstruktur erweitern, um Quantile mit gleichmäßigem Abstand zu erhalten.ϵϵmedsg{ - 1 , 1 }d2d+ 1- 1
Die Kombination der oben genannten Möglichkeiten sollte Ihnen eine anständige Online-Verteilung Ihrer Daten ermöglichen. Der Baum ist schwierig zu finden, ich habe Implementierungen von beiden in C ++, wenn Sie interessiert sind. Ich verwende beide in der Praxis häufig (finanzielle Echtzeit-Tick-Daten) und sie haben gut funktioniert.
Hallo Murat! Ich habe einen Hyperlink zu dem von Ihnen veröffentlichten Artikel erstellt und Ihre Gleichungen zentriert. Sehen Sie sich den Beitragsverlauf an, wenn Sie daran interessiert sind, wie dies zum späteren Nachschlagen getan werden kann. Es gibt auch einige hilfreiche Schaltflächen am oberen Rand des Textfelds, die angezeigt werden, wenn Sie eine Antwort schreiben, die viele Dinge automatisch für Sie erledigt (z. B. Eingabe von Bildern, Links, Fett / Kursiv und mehr). (+1, übrigens)
Makro
3
Zuerst müssen Sie Ihre Daten zeitlich einbetten. Nehmen Sie beispielsweise als ersten Eingang [1, 12, 2, 3] und als entsprechenden Ausgang [5] und als zweiten Eingang [12, 2, 3, 5] und als entsprechenden Ausgang [9]. (Dies wird mit Verzögerung 4 eingebettet, aber Sie können einen anderen Wert auswählen, der besser passt.)
Jetzt haben Sie ein gültiges Vorhersageproblem. Auf diese Daten können Sie Online-Gauß-Prozesse anwenden . Dies ist eine Methode des maschinellen Lernens, die genau das tut, was Sie beschreiben, und Konfidenzintervalle bereitstellt.
Wenn Ihr Modell nicht stationär ist, können Sie die nicht stationäre Erweiterung, den rekursiven Kernel-Tracker für kleinste Quadrate, ausprobieren . Dieses Papier enthält übrigens Matlab-Code für stationäre und nichtstationäre Fälle.
Diese Methoden sind relativ schnell: Ihre Rechenkomplexität ist quadratisch in Bezug auf die Anzahl der Daten, die Sie im Speicher speichern (was normalerweise ein kleiner, repräsentativer Teil aller verarbeiteten Daten ist). Für schnellere Methoden empfehle ich zum Beispiel die Kernel-Methode der kleinsten mittleren Quadrate, aber ihre Genauigkeit ist geringer.
Wird das von Ihnen empfohlene Verfahren gemeldet, wenn Pegelverschiebungen oder Zeittrendänderungen auftreten? Erkennt es Änderungen der Parameter oder Änderungen der Varianz im Laufe der Zeit? Unterscheidet es zwischen saisonalem auto-regressivem Gedächtnis und saisonalen Dummies?
IrishStat
@IrishStat Ich denke, deine Frage ist rhetorisch. Wenn ein Modell eine einfache Rekursion zum Aktualisieren des Modells haben kann, kann es nicht alle von Ihnen beschriebenen Komplexitäten aufweisen. Manchmal ist es wichtiger, eine richtige Antwort zu erhalten, als eine schnelle Antwort, die schlecht ist. Deshalb habe ich in meiner Antwort gesagt, dass ich es nur tun soll, wenn das Modell gut zu den Daten passt!
Michael R. Chernick
1
@IrishStat Diese Methoden sind "nicht parametrisch", was bedeutet, dass sie kein bestimmtes Modell der Daten annehmen (sie "passen" nur zu den Daten). Sie melden keine Trendänderungen. Sie melden jedoch Vorhersagefehler. Wenn Sie also Trendänderungen finden möchten, können Sie wahrscheinlich einfach nachsehen, wann der Vorhersagefehler ausreichend groß ist.
Steven
Ich bin nicht mit spärlichen Online-Gauß-Prozessen vertraut, aber wenn ich mir den verlinkten Artikel ansehe, halte ich es nicht für richtig, sie als "nichtparametrisch" zu charakterisieren, da sie Gauß-Prozesse für frühere Verteilungen verwenden und eine Reihe von Parametern in ihren "Kalman" einbeziehen -filterähnliche "Rekursion". Es scheint, dass eine Modellstruktur in der Formulierung enthalten sein muss. Ich denke immer noch, dass die Kommentare von IrishStat zutreffen.
Michael R. Chernick
3
Der Kalman-Filter ist ein rekursiver Algorithmus. Es nimmt die neue Beobachtung und kombiniert sie mit der vorherigen Vorhersage. Es wäre gut zu verwenden, aber nur, wenn es ein geeignetes Modell für Ihre Daten ist. Ich bin mir nicht sicher, wie einfach es ist, das Vorhersageintervall zu aktualisieren.
Ich weiß nicht, ob Sie dies versucht haben, aber in R können Sie bei Verwendung der Arima-Funktion das Modell als Eingabe angeben. Wenn Sie also anfangs ein Arima-Modell gefunden haben, sagen wir Arima (1,2,1) mit entsprechenden Glättungskomponenten, können Sie das Modell in späteren Iterationen reparieren, damit es nicht versucht, ein Modell neu anzupassen. Wenn Ihre Daten in diesem Fall stationär sind, sind die Vorhersagen möglicherweise ausreichend gut für Sie - und viel schneller.
Zuerst müssen Sie Ihre Daten zeitlich einbetten. Nehmen Sie beispielsweise als ersten Eingang [1, 12, 2, 3] und als entsprechenden Ausgang [5] und als zweiten Eingang [12, 2, 3, 5] und als entsprechenden Ausgang [9]. (Dies wird mit Verzögerung 4 eingebettet, aber Sie können einen anderen Wert auswählen, der besser passt.)
Jetzt haben Sie ein gültiges Vorhersageproblem. Auf diese Daten können Sie Online-Gauß-Prozesse anwenden . Dies ist eine Methode des maschinellen Lernens, die genau das tut, was Sie beschreiben, und Konfidenzintervalle bereitstellt.
Wenn Ihr Modell nicht stationär ist, können Sie die nicht stationäre Erweiterung, den rekursiven Kernel-Tracker für kleinste Quadrate, ausprobieren . Dieses Papier enthält übrigens Matlab-Code für stationäre und nichtstationäre Fälle.
Diese Methoden sind relativ schnell: Ihre Rechenkomplexität ist quadratisch in Bezug auf die Anzahl der Daten, die Sie im Speicher speichern (was normalerweise ein kleiner, repräsentativer Teil aller verarbeiteten Daten ist). Für schnellere Methoden empfehle ich zum Beispiel die Kernel-Methode der kleinsten mittleren Quadrate, aber ihre Genauigkeit ist geringer.
quelle
Der Kalman-Filter ist ein rekursiver Algorithmus. Es nimmt die neue Beobachtung und kombiniert sie mit der vorherigen Vorhersage. Es wäre gut zu verwenden, aber nur, wenn es ein geeignetes Modell für Ihre Daten ist. Ich bin mir nicht sicher, wie einfach es ist, das Vorhersageintervall zu aktualisieren.
quelle
Ich weiß nicht, ob Sie dies versucht haben, aber in R können Sie bei Verwendung der Arima-Funktion das Modell als Eingabe angeben. Wenn Sie also anfangs ein Arima-Modell gefunden haben, sagen wir Arima (1,2,1) mit entsprechenden Glättungskomponenten, können Sie das Modell in späteren Iterationen reparieren, damit es nicht versucht, ein Modell neu anzupassen. Wenn Ihre Daten in diesem Fall stationär sind, sind die Vorhersagen möglicherweise ausreichend gut für Sie - und viel schneller.
Hoffe das hilft..
quelle