Unterstützung der Vektorregression für die Vorhersage multivariater Zeitreihen

22

Hat jemand versucht, Zeitreihen mithilfe der Support-Vektor-Regression vorherzusagen?

Ich verstehe Support-Vektor-Maschinen und teilweise Support-Vektor-Regression, aber ich verstehe nicht, wie sie zum Modellieren von Zeitreihen, insbesondere multivariaten Zeitreihen, verwendet werden können.

Ich habe versucht, ein paar Artikel zu lesen, aber sie sind zu hoch. Kann mir jemand erklären, wie sie funktionieren würden, insbesondere in Bezug auf multivariate Zeitreihen?

EDIT: Lassen Sie mich versuchen, um ein bisschen näher zu erläutern, mit einem Aktienkurs-Beispiel.

Angenommen, wir haben Aktienkurse für N Tage. Dann könnten wir für jeden Tag einen Merkmalsvektor konstruieren, der in einem einfachen Fall der Preis des Vortages und der Preis des aktuellen Tages sein könnte. Die Antwort für jeden Merkmalsvektor wäre der Preis des nächsten Tages. Ausgehend vom gestrigen und heutigen Preis wäre es daher das Ziel, den Preis für die nächsten Tage vorherzusagen. Was ich nicht verstehe, ist, dass wir sechs Monate Trainingsdaten haben. Wie würden Sie die neueren Merkmalsvektoren stärker hervorheben?

raconteur
quelle
Können Sie die Papiere posten, auf die Sie sich beziehen?
Ram Ahluwalia
1
Vorhersage von Zeitreihen mit einem lokalen Support-Vektor-Regressionsgerät, Rodrigo Fernandez, svms.org/regression/Fern.pdf Support-Vektor-Regression für die Vorhersage von Finanzzeitreihen, Wei Hao und Songnian Yu, springerlink.com/index/946802600u4552m8.pdf
raconteur

Antworten:

18

Im Kontext der Support-Vektor-Regression ist die Tatsache, dass es sich bei Ihren Daten um Zeitreihen handelt, hauptsächlich methodisch relevant. Sie können beispielsweise keine k-fache Kreuzvalidierung durchführen und müssen beim Ausführen von Backtests Vorsichtsmaßnahmen treffen / Simulationen.

Grundsätzlich ist die Stützvektorregression eine diskriminative Regressionstechnik, ähnlich wie jede andere diskriminative Regressionstechnik. Sie geben ihm eine Reihe von Eingabevektoren und zugehörigen Antworten und es passt zu einem Modell, um zu versuchen, die Antwort bei einem neuen Eingabevektor vorherzusagen. Kernel-SVR hingegen wendet vor dem Lernschritt eine von vielen Transformationen auf Ihren Datensatz an. Dies ermöglicht es, nichtlineare Trends im Datensatz zu erfassen, im Gegensatz zu z. B. linearer Regression. Ein guter Kernel für den Anfang wäre wahrscheinlich der Gaußsche RBF - er hat einen Hyperparameter, den Sie einstellen können. Probieren Sie also ein paar Werte aus. Und wenn Sie ein Gefühl dafür bekommen, was los ist, können Sie andere Kernel ausprobieren.

xxichyichxtyt, die (sagen wir) folgende Woche Rendite auf diese Aktie. Auf diese Weise lernt Ihr SVR, die Rendite der folgenden Woche anhand des aktuellen MA-Spread und des Volumens von 20 Tagen vorherzusagen. (Diese Strategie funktioniert nicht, also sei nicht zu aufgeregt;)).

Wenn die von Ihnen gelesenen Artikel zu schwierig waren, möchten Sie wahrscheinlich nicht versuchen, eine SVM selbst zu implementieren, da dies kompliziert sein kann. In IIRC gibt es ein "Kernlab" -Paket für R mit einer Kernel-SVM-Implementierung und einer Reihe von Kerneln, die einen schnellen Einstieg ermöglichen.

Wilhelm
quelle
@Jason, danke für die Antwort. Ich bin verwirrt darüber, wie ich ältere Daten während des Trainings weniger wichtig machen kann, dh wie ich den letzten 100 Beispielen und nicht den letzten 10.000 Beispielen mehr Bedeutung beimessen kann. Außerdem habe ich einige Erfahrungen in der Arbeit mit SVMs in Python, daher möchte ich diese verwenden.
raconteur
Sie können nicht alle früheren Daten als Merkmalsvektor verwenden. Sie müssen es irgendwie in eine sinnvolle Funktion verwandeln. Betrachten Sie beispielsweise die Mittelung der letzten 20 Werte der Zeitreihe oder den aktuellen Wert der Reihe geteilt durch den gleitenden Durchschnitt. Dies sind Merkmale, die in einer einfachen Zahl ein Importmerkmal des Datensatzes angeben. Überlegen Sie sich etwa 10 Funktionen, die Ihrer Meinung nach so aussagekräftig wie möglich sind. Um ältere Daten weniger wichtig zu machen, sollten Sie sie bei der Definition Ihrer Features weniger wichtig machen (z. B. kürzere gleitende Durchschnittswerte verwenden).
William
@ Jason, lassen Sie mich versuchen, es mit einem Aktienkursbeispiel zu erklären. Angenommen, wir haben Aktienkurse für N Tage. Dann können wir für jeden Tag einen Merkmalsvektor konstruieren, der in einem einfachen Fall der Preis des Vortages und der Preis des aktuellen Tages sein kann. Die Antwort für jeden Merkmalsvektor wäre der Preis des nächsten Tages. Ausgehend vom gestrigen und heutigen Preis wäre es daher das Ziel, den Preis für die nächsten Tage vorherzusagen. Was ich nicht verstehe, ist, dass wir sechs Monate Trainingsdaten haben. Wie würden Sie die neueren Merkmalsvektoren stärker hervorheben?
raconteur
2
Oh, ich verstehe, was du jetzt meinst. Die kurze Antwort lautet: Sie können nicht, zumindest nicht, ohne die SVM überarbeitet zu haben, um den Begriff der Aktualität zu verstehen. Eine SVM wird als xy-Paare definiert, nicht als geordnete xy-Paare, und daher ist die Zielfunktion, die sie minimiert, eine Funktion dieser Paare. OTOH, Sie könnten mehrere separate SVMs ausführen, eine mit dem letzten Monat, eine mit dem letzten Jahr und eine mit den letzten zwei Jahren - und dann einen gewichteten Durchschnitt der Antworten, die Sie zurückerhalten, basierend auf Ihrer persönlichen Präferenz für die letzten vs alte Daten (z. B. 0,7 * letzter Monat + 0,2 * letztes Jahr + 0,1 * letzte 2 Jahre).
William
@ William .. haben Sie eine Empfehlung, welche Algorithmen für maschinelles Lernen für die Vorhersage von Zeitreihen (dasselbe Problem, das raconteur gefragt hat) am besten geeignet sind, außer SVM? Wäre die Antwort anders, wenn sie in einer anderen Domäne angewendet würde? zB Prognose des Aktienkurses gegenüber der Lieferkette (Prognose der Nachfrage der von uns verkauften Produkte).
Lam
1

Meine persönliche Antwort auf die gestellte Frage lautet "Ja". Sie können es als Pro oder Contra ansehen, dass es unendlich viele Möglichkeiten gibt, um die Vergangenheit zu beschreiben. Versuchen Sie, Merkmale auszuwählen, die der Art entsprechen, wie Sie jemandem genau beschreiben, was der Markt gerade getan hat [z. B. "der Preis" ist bei 1,4 "sagt Ihnen nichts, wenn es nicht mit einer anderen Zahl zusammenhängt]. Das einfachste Ziel des SVM ist die Preisdifferenz und das Preisverhältnis für zwei aufeinanderfolgende Tage. Da diese direkt dem Schicksal eines hypothetischen Handels entsprechen, scheinen sie eine gute Wahl zu sein.

Ich muss pedantisch der ersten Aussage von Jason widersprechen: Sie können eine k-fache Kreuzvalidierung in Situationen durchführen, wie sie von raconteur beschrieben wurden, und dies ist nützlich (mit einer Maßgabe, die ich erläutern werde). Der Grund für die statistische Gültigkeit ist, dass die Instanzen des Ziels in diesem Fall keine intrinsische Beziehung aufweisen: Es handelt sich um disjunkte Differenzen oder Verhältnisse. Wenn Sie stattdessen Daten mit einer höheren Auflösung als dem Maßstab des Ziels verwenden, besteht Anlass zur Sorge, dass im Trainingssatz und im Validierungssatz korrelierte Instanzen angezeigt werden, die die Kreuzvalidierung beeinträchtigen (im Gegensatz dazu beim Anwenden der In SVM stehen Ihnen keine Instanzen zur Verfügung, deren Ziele sich mit denen überschneiden, an denen Sie interessiert sind.

Die Effektivität der gegenseitigen Validierung wird dadurch gemindert, dass sich das Verhalten des Marktes im Laufe der Zeit ändert. Es gibt zwei Möglichkeiten, damit umzugehen. Das erste ist, Zeit als Feature zu integrieren (ich fand das nicht sehr nützlich, vielleicht weil die Werte dieses Features in Zukunft alle neu sind). Eine gut motivierte Alternative ist die Verwendung der Walk-Forward-Validierung (dh, Sie testen Ihre Methodik an einem verschiebbaren Zeitfenster und in der Zeit unmittelbar nach diesem Fenster. Wenn sich das Verhalten im Laufe der Zeit ändert, wird das Niels Bohr zugeschriebene Sprichwort " Vorhersagen sind sehr schwierig, vor allem in Bezug auf die Zukunft "sind besonders angebracht. In der Literatur gibt es Hinweise darauf, dass sich das Verhalten der Finanzmärkte im Laufe der Zeit ändert und im Allgemeinen effizienter wird.

Viel Glück!

Elroch
quelle
Willkommen auf unserer Seite!
kjetil b halvorsen
0

Quantum Financier bietet ein Beispiel für die Verwendung eines SVM zur Vorhersage von Finanzserien. Es könnte leicht von einem Klassifizierungssystem (Long / Short) in ein Regressionssystem umgewandelt werden.

Zach
quelle
1
LIEBER GOTT, BITTE, niemand wendet diese Strategie an! So werden Anfänger von der Wall Street geraucht :( Der älteste Trick im Buch ist das Nachrüsten eines statistischen Modells mit einer grundlegenden technischen Analyse wie RSI, sodass die Neulinge glauben, sie hätten Gold getroffen.
William
1
@Jason aus dem Originalbeitrag "Ich möchte auch klarstellen, dass ich nicht der Meinung bin, dass dies ein gutes System ist." Es ist jedoch ein gutes Beispiel für die Anpassung einer Support-Vektor-Maschine an eine Zeitreihe.
Zach