Erste Schritte zur Vorhersage finanzieller Zeitreihen durch maschinelles Lernen

12

Ich versuche zu verstehen, wie man maschinelles Lernen eins oder mehr Schritte in die Zukunft voraussagt.

Ich habe eine finanzielle Zeitserie mit einigen beschreibenden Daten und möchte ein Modell bilden und dann das Modell verwenden, um n-Schritte vorauszusagen.

Was ich bisher gemacht habe, ist:

getSymbols("GOOG")

GOOG$sma <- SMA(Cl(GOOG))
GOOG$range <- GOOG$GOOG.High-GOOG$GOOG.Low

tail(GOOG)

           GOOG.Open GOOG.High GOOG.Low GOOG.Close GOOG.Volume GOOG.Adjusted     sma range
2013-05-07    863.01    863.87   850.67     857.23     1959000        857.23 828.214 13.20
2013-05-08    857.00    873.88   852.91     873.63     2468300        873.63 834.232 20.97
2013-05-09    870.84    879.66   868.23     871.48     2200600        871.48 840.470 11.43
2013-05-10    875.31    880.54   872.16     880.23     1897700        880.23 848.351  8.38
2013-05-13    878.89    882.47   873.38     877.53     1448500        877.53 854.198  9.09
2013-05-14    877.50    888.69   877.14     887.10     1579300        887.10 860.451 11.55

Dann habe ich ein randomForest-Modell an diese Daten angepasst.

fit <- randomForest(GOOG$GOOG.Close ~ GOOG$sma + GOOG$range, GOOG)

Was überraschend gut zu passen scheint:

> fit

Call:
 randomForest(formula = GOOG$GOOG.Close ~ GOOG$sma + GOOG$range,      data = GOOG) 
               Type of random forest: regression
                     Number of trees: 500
No. of variables tried at each split: 1

          Mean of squared residuals: 353.9844
                    % Var explained: 97.28

Und versuchte es zu nutzen, um vorherzusagen:

predict(fit, GOOG, n.ahead=2)

Aber diese Vorhersage hat nicht funktioniert.

Ich versuche, den Abschluss vorherzusagen. Sollte ich den anderen Variablen so viele Schritte nacheilen, wie ich die Vorhersage möchte, bevor ich das Modell anpasse?

Wahrscheinlich sollte ich noch viele andere Dinge berücksichtigen, aber dies sind wirklich meine ersten Schritte, um maschinelles Lernen auszuprobieren.

Nikke
quelle

Antworten:

16

Meine erste Beobachtung ist, dass Sie die Inputs im Verhältnis zum Schlusskurs nicht verzögert haben, und deshalb haben Sie eine so gute Übereinstimmung beobachtet. Der SMA (Simple Moving Average) verwendet den Schlusskurs in seiner Berechnung und der High-Low-Bereich umfasst den Schlusskurs. Wenn Sie diesen zur Vorhersage des Schlusskurses verwenden, erhalten Sie eine Vorausschau. Meiner Meinung nach sollten Sie, wenn Sie versuchen, den Schlusskurs zwei Tage im Voraus vorherzusagen, Ihr Modell mit Eingaben erstellen, die mindestens zwei Tage hinter dem Schlusskurs liegen. Einige der Eingaben können um mehr als zwei Tage verzögert sein, aber ich würde einfach anfangen und versuchen, nur eine Handvoll Eingaben zu verwenden.

In Bezug auf Ihr Ziel, den Schlusskurs vorherzusagen, denke ich, dass Schlusskurse zu laut sind, um als Zielvariablen verwendet zu werden, und dass ihre Verwendung zu einer Überanpassung oder Optimierung des falschen Ziels führt. Stattdessen würde ich zunächst den Schlusskurs mit einem gleitenden Durchschnitt glätten und dann die Richtung der Preisänderung in den nächsten zwei Tagen vorhersagen. Zum Beispiel könnte ich den Abschluss durch eine 5-Tage-SMA des Abschlusses ersetzen und dann die Preisänderung der SMA als 1 codieren, wenn sie in den nächsten zwei Tagen positiv war, und als 0, wenn sie nicht positiv war. Da die Ausgabevariable jetzt als 1 oder 0 codiert ist, ist dies ein gutes Problem, das Sie mit der von Ihnen verwendeten Funktion für zufällige Gesamtstrukturen lösen sollten. Sie können auch andere Klassifizierungsalgorithmen wie logistische Regression, neuronale Netze und SVMs ausprobieren und einige davon zu einem Ensemble zusammenfassen, um Ihre Leistung zu verbessern. Es ist immer noch schwierig, dieses Problem ohne Überanpassung zu lösen, aber es ist ein Schritt in die richtige Richtung. Ein weiteres warnendes Wort ist, dass Ihr endgültiges Modell die nächsten zwei Tage mit erstaunlicher Genauigkeit als positiv oder negativ einstufen kann, aber dennoch Geld verliert, weil es einige große Züge falsch einstuft.

Ich würde auch empfehlen, Ihr Modell auf mehr als einem Wertpapier aufzubauen, damit der Algorithmus für maschinelles Lernen nicht die Eigenheiten einer Aktie berücksichtigt. Ich würde mit mindestens 5 Aktien beginnen, die nicht stark miteinander korrelieren.

Das Trading on the Edge von Guido Deboeck ist ein guter Ausgangspunkt, um die Anwendungen des maschinellen Lernens für die Vorhersage von Finanzzeitreihen zu erkunden. Es ist ein älteres Buch, also weit hinter der Technologie zurück, die wir heute zur Verfügung haben, aber es ist ein guter Anfang. Ich würde auch New Trading Systems and Methods von Kaufman und Expert Trading Systems von John Wolberg empfehlen.

CrossValidatedTrading
quelle
ok, danke für diese gute antwort. Das Beispiel war für mich ein besseres Verständnis dafür, wie die Daten eingerichtet werden, damit randomForest sie verwenden kann. Aber jetzt weiß ich, dass ich die Eingaben verzögern muss, damit es funktioniert. Wäre es sinnvoll, den SMA-Preis in Ihrem Beispiel als Ausgabevariable zu haben, oder müsste er 0 oder 1 sein? \ n Danke auch für die Buchempfehlungen, die mich mit ihnen vertraut machen.
Nikke
Sie könnten auf jeden Fall den SMA-Preis als Ausgabevariable verwenden. Das Problem wird immer komplexer. Anstatt eine Richtung vorherzusagen, versuchen Sie jetzt, einen genauen Preiswert vorherzusagen. Nach meiner Erfahrung ist dies eine sehr schwierige Sache für einen Maschinenalgorithmus, der außerhalb des Samples gut abschneidet. Wenn Sie sich jedoch nur mit dem Einrichten von Zeitreihendaten für die Vorhersage vertraut machen, ist dies möglicherweise ein guter Ausgangspunkt, insbesondere wenn dies für Sie intuitiver ist als die Richtungsvorhersage. Sie können auch versuchen, den Preis vorherzusagen, bei dem sich zwei gleitende Durchschnitte kreuzen.
CrossValidatedTrading
Hallo, habe einige Features erstellt und ein Modell erstellt: pastie.org/7958695 Ich glaube, ich habe die Mechanik herausgefunden. Dieses Modell ist jedoch nur allzu gebogen. Haben Sie etwas Ähnliches getan und wirklich davon Gebrauch gemacht? Wäre cool mehr zu reden.
Nikke
Ich bin immer offen für detailliertere Gespräche. Meine Kontaktinformationen befinden sich in meinem Profil. Schicken Sie mir eine E-Mail, wenn Sie möchten.
CrossValidatedTrading
Habe einige einfache Regressionen durchgeführt, um Renditen vorherzusagen, die im Vergleich zur Vorhersage eines Preis-Leistungs-Verhältnisses funktionieren sollten. Neben der Vorhersage der Rendite muss eine Rendite vorhergesagt werden, die groß genug ist, um Spread & Commish usw. zu schlagen. Meins ist in der Pastete, die ich im vorherigen Kommentar gepostet habe.
Nikke