AI-United » Allgemein » Vorhersage des Aktienmarktes in Python mit Hilfe von Stocker

Vorhersage des Aktienmarktes in Python mit Hilfe von Stocker

Vorhersage des Aktienmarktes in Python

Die Vorhersage des Aktienmarktes ist ein verlockender „Stein der Weisen“ für Datenanalysten, die nicht so sehr nach materiellem Gewinn streben, sondern mehr durch die Aufgabe selbst motiviert werden. Das tägliche Auf und Ab des Marktes lässt vermuten, dass es Gesetzmäßigkeiten geben muss, die wir oder unsere Modelle erlernen können, um alle diese diplomierten Trader zu besiegen.

Jedes Mal, wenn das gewünschte Ziel nicht erreicht wurde, gibt es drei Möglichkeiten, die Ergebnisse zu bearbeiten:

  1. Die Ergebnisse werden so geändert, dass sie in einem günstigen Licht stehen.
  2. Die Ergebnisse werden verborgen, so bemerkt niemand den Misserfolg;
  3. Die Ergebnisse und Methoden werden allen gezeigt, um den Menschen Möglichkeit geben, daraus etwas zu lernen und vielleicht Verbesserungen vorzuschlagen.

Die dritte Möglichkeit ist zwar die beste Wahl auf Einzel- und Gemeinschaftsebene, erfordert aber einen sehr großen Mut. Man kann die Sonderfälle zeigen, in denen ein Modell Profit bringt. Oder man könnte so tun, als hätte man nicht stundenlang gearbeitet und man wirft es einfach weg. Wie dumm! Tatsächlich bewegt man sich nur dann vorwärts, wenn man oft Misserfolg erlebt und Hunderte von Fehlern macht. Außerdem soll der für solche komplizierte Aufgabe erstelle Python-Code ja nicht umsonst geschrieben werden!

In diesem Artikel werden die Möglichkeiten von Stocker betrachtet, der als ein Instrument zur Marktvorhersage in Python entwickelt wurde.

Stocker zur Vorhersage

Stocker ist ein Python-Werkzeug für die Marktvorhersage. Zuerst sollten die erforderlichen Bibliotheken installiert werden (siehe Dokumentation) und erst danach kann mach Jupyter Notebook im selben Ordner wie das Skript starten und die Klasse Stocker importieren:

from stocker import Stocker

Die Klasse steht nun der Jupyter-Sitzung zur Verfügung. Erstellen Sie ein Objekt der Klasse Stocker, indem Sie ihm einen beliebigen wirklichen Ticker übergeben, zum Beispiel ‚AMZN‘:

amazon = Stocker('AMZN')

AMZN Stocker Initialized. Data covers 1997-05-16 to 2018-01-18.

Jetzt stehen uns 20 Jahre täglicher Daten zu Amazon-Aktien für weitere Forschung zur Verfügung! Der Stocker ist auf Basis der Finanzbibliothek Quandl erstellt und besteht aus über 3.000 Aktienkursen. Verwenden Sie die Methode plot_stock und erstellen Sie ein einfaches Kursen-Diagramm:

amazon.plot_stock()

Maximum Adj. Close = 1305.20 on 2018-01-12.
Minimum Adj. Close = 1.40 on 1997-05-22.
Current Adj. Close = 1293.32.

Stocker wird für die Erkennung und Analyse von allgemeinen Trends und Gesetzmäßigkeiten verwendet. Nun widmen wir unsere Aufmerksamkeit der Vorhersage des zukünftigen Preises. Für Vorhersagen in Stocker wird ein additives Modell genommen. Es betrachtet die Zeitreihen als eine Kombination aus einem Trend und saisonalen Änderungen in verschiedenen zeitweiligen Maßstäben (täglich, wöchentlich und monatlich). Stocker verwendet ein „Vorhersage“-Paket, das von Facebook für die additive Modellierung entwickelt wurde. Die Modellerstellung und Vorhersage wird im Stocker in einer Zeile durchgeführt:

# Vorhersage für die nächsten Tage
model, model_data = amazon.create_prophet_model(days=90)
 
Predicted Price on 2018-04-18 = $1,336.98

Es sollte darauf hingewiesen werden, dass die Vorhersage (grüne Linie) ein Konfidenzintervall enthält. Dadurch wird die „Unsicherheit“ des Modells in der Vorhersage widergespiegelt. In unserem Beispiel wird die Breite des Konfidenzintervalls mit einem Konfidenzniveau von 80% festgesetzt. Was wird unter einem Konfidenzintervall verstanden? Das ist ein Intervall, das einen unbekannten Parameter mit einer bestimmten Zuverlässigkeit bedeckt. Je größer die Unsicherheit der Bewertung ist, desto weiter ist sie von den verfügbaren Daten entfernt. Deshalb erweitert sich das Konfidenzintervall ständig im Laufe der Zeit. Bei jeder Vorhersage sollte dieses Konfidenzintervall in Betracht gezogen werden. In der Regel wollen die meisten Leute eine einfache numerische Antwort bekommen, aber die Vorhersage spiegelt die Tatsache wider, dass unsere Welt sehr unsicher ist!

Eine Vorhersage zu machen ist nicht schwer: Man wählt einfach eine bestimmte Zahl, die dann eine Annahme über die Zukunft ist. Das reicht aber nicht aus. Um dem Modell zu vertrauen, muss seine Genauigkeit bewertet werden. Dafür verwendet Stocker eine Reihe von Methoden.

Bewertung von Vorhersagen

Für die Bewertung der Genauigkeit von Vorhersagen werden Trainings- und Testdatensätze benötigt. In den Testdatensatz müssen die Antworten für den tatsächlichen Aktienkurs angegeben werden. In unserem Beispiel werden die Kursdaten für das Jahr 2017 verwendet. Während des Trainings wird es dem Modell verboten, die Antworten des Testsatzes zu sehen. Deshalb werden die Beobachtungen der vergangenen drei Jahre (2014-2016) verwendet. Die Hauptidee des Lernens mit einem Lehrer (überwachtes Lernen) besteht darin, dass das Modell die Gesetzmäßigkeiten und Beziehungen in den Daten des Trainingssatzes erforscht, um sie dann anhand eines Testauszugs korrekt wiedergeben zu können.

Um die Genauigkeit zu quantifizieren, werden folgende Parameter auf der Basis von vorhergesagten und tatsächlichen Werten berechnet:

  • durchschnittlicher numerischer Fehler in Dollar im Test- und Trainingssatz;
  • prozent der Zeit, für die die Richtung der Preisänderung korrekt vorhergesagt wurde;
  • prozent der Zeit, in der der tatsächliche Preis an die Grenze des vorhergesagten Konfidenzintervalls von 80% geriet.

Stocker führt alle Berechnungen automatisch mit angenehmer visueller Begleitung durch:

amazon.evaluate_prediction()

Prediction Range: 2017-01-18 to 2018-01-18.

Predicted price on 2018-01-17 = $814.77.
Actual price on    2018-01-17 = $1295.00.

Average Absolute Error on Training Data = $18.21.
Average Absolute Error on Testing  Data = $183.86.

When the model predicted an increase, the price increased 57.66% of the time.
When the model predicted a  decrease, the price decreased  44.64% of the time.

The actual value was within the 80% confidence interval 20.00% of the time.

Was für eine schreckliche Statistik! Aber lehnen wir trotzdem das Modell nicht ab. Anfangs wird es erwartungsgemäß ziemlich schlecht sein, da einige Standardeinstellungen (Hyper-Parameter genannt) verwendet werden.Sogar wenn die ersten Versuche erfolglos waren, sollte man nicht verzweifeln: Man kann das Modell zwingen, besser zu arbeiten, in dem man eigenartige Hebeln und Knöpfen drückt. In Prophet kann man viele Parameter einstellen. Der wichtigste Parameter ist changepoint prior scale (Skala-Koeffizient der Gewichtsverteilung für Kontrollpunkte). Er hat mit dem Satz von Gewichten zu tun, der die Wendungen und Trendschwankungen überlagert.

Einstellung der Auswahl von Kontrollpunkten

Kontrollpunkte sind Stellen, wo zeitliche Reihen die Richtung oder Geschwindigkeit der Preisänderung bedeutend beeinflussen (von langsam zunehmenden zu immer schneller werdenden oder umgekehrt). Changepoint prior scale (Skala-Koeffizient der Gewichtsverteilung für Kontrollpunkte) ist die Widerspiegelung der Menge der „Aufmerksamkeit“, die den Punkten der Änderungen vom Aktienkurs gewidmet ist. Es wird für die Kontrolle des Unter- und Über-Trainings des Modells verwendet (auch als Verzerrung-Varianz-Dilemma / bias-variance tradeoff bekannt).

Anders gesagt: Je höher dieser Koeffizient ist, desto mehr werden die Kontrollpunkte in Betracht gezogen und desto flexiblere Anpassung wird erreicht. Dies kann das Übertraining verursachen, da das Modell durch enge Verbundenheit mit den Trainingsdaten die Fähigkeit zur Verallgemeinerung verliert. Das entgegengesetzte Problem ist das Untertraining, das von der Verringerung der Flexibilität durch die Senkung des Wertes verursacht wird.

In diesem Fall werden die Trainingsdaten vom Modell nicht ausreichend „aufmerksam“ verfolgt, infolgedessen werden die wichtigsten Gesetzmäßigkeiten nicht entdeckt. Wie kann man diesen Parameter richtig wählen? Dies ist eher eine praktische als eine theoretische Frage, die mit Hilfe von empirischen Ergebnissen gelöst werden kann. Man unterscheidet zwei verschiedene Methoden zur Auswahl des passenden Wertes in der Klasse Stocker: visuelle und quantitative. Betrachten wir zuerst die visuelle Methode.

# changepoint priors is the list of changepoints to evaluate
amazon.changepoint_prior_analysis(changepoint_priors=[0.001, 0.05, 0.1, 0.2])

Für das Training werden die Daten der letzten drei Jahre genommen. Dann wird die Vorhersage für die nächsten sechs Monate gezeigt. Jetzt werden aber diese Vorhersagen nicht qualitativ bewertet, sondern es wird bloß versucht, die Rolle der Verteilung von Kontrollpunkten zu verstehen.

Bei der niedrigsten Priori-Skala / prior scale (blaue Linie) überdecken sich die Werte nicht ausreichend eng an die Trainingsdaten (schwarze Linie). Sie leben anscheinend ihr eigenes Leben, da sie dem zunehmenden Trend wahrer Daten nur wenig nahekommen. Dagegen bringt die höchste Priori-Skala / prior scale (gelbe Linie) stärker das Modell den Trainingsbeobachtungen näher. Der Standardwert beträgt 0,05 und liegt irgendwo zwischen den beiden Extremen.

Man beachte den Unterschied in der Unsicherheit (gefärbte Intervalle) für verschiedene Skalenparameter:

  • Die kleinste Priori-Skala / prior scale zeigt die größte Unsicherheit in den Trainingsdaten und die kleinste im Testsatz.
  • Die höchste Priori-Skala / prior scale zeigt die kleinste Unsicherheit im Trainingssatz und die größte im Testsatz.

Je höher Priori-Skala / prior scale ist, desto genauer werden die Werte übereingestimmt, da jeder Schritt „aufmerksam“ befolgt wird. Wenn das Model mit den Testdaten arbeitet, beginnt es Fehler zu machen, da es keinen Bezug auf wirkliche Daten hat. Der Markt ist veränderlich, deshalb ist ein flexibleres Modell als das Standardmodell erforderlich, damit es möglich mehr Schablonen verarbeiten kann.

Nun hat man eine Vorstellung vom Einfluss der Priori-Skala / prior scale und man kann verschiedene Werte mithilfe des Trainings- und Testsatzes numerisch schätzen:

amazon.changepoint_prior_validation(start_date='2016-01-04', end_date='2017-01-03', changepoint_priors=[0.001, 0.05, 0.1, 0.2])

Validation Range 2016-01-04 to 2017-01-03.

 cps  train_err  train_range    test_err test_range
0.001  44.507495   152.673436 149.443609  153.341861
0.050  11.207666    35.840138 151.735924  141.033870
0.100  10.717128    34.537544 153.260198  166.390896
0.200   9.653979    31.735506 129.227310  342.205583

Man muss vorsichtig sein und daran denken, dass diese Validierungswerte mit der Testprobe nicht übereinstimmen sollten. Wenn es so wäre, würde ein Modell erstellt, das für Testdaten besser „vorbereitet“ ist. Dies führt zum Übertraining und Unfähigkeit, unter realen Bedingungen zu funktionieren. Wie es beim maschinellen Lernen üblich ist, werden drei Sätze verwendet: für das Training (2013-2015), für die Validierung (2016) und der Testsatz (2017).

Es wurden vier Priori-Skala / prior scale mit vier Werten bewertet:

  • Trainingsfehler
  • Konfidenzintervall beim Training;
  • Testfehler
  • Konfidenzintervall beim Testen, alle Werte sind in US-Dollar angegeben.

Je höher Priori-Skala / prior scale ist, desto niedriger ist der Trainingsfehler und die Unsicherheit der Daten für das Training. Die Erhöhung des Niveaus von Priori-Skala / prior scale verringert den Testfehler, indem die Intuition gestärkt wird, die nahe an die Daten kommt. Im Allgemeinen ist es eine gute Idee für den Markt. Eine größere Genauigkeit im Testsatz ergibt einen größeren Unsicherheitsbereich in den Testdaten mit der Erhöhung von Priori-Skala / prior scale.

Zwei Diagramme der Validierungsprüfung Stocker veranschaulichen diese Ideen:

Da der höchste Wert von Priori-Skala / prior scale den niedrigsten Testfehler ergab, sollte Priori-Skala / prior scale noch stärker erhöht werden, um zu versuchen, die Ergebnisse zu verbessern. Die Suche kann man präzisieren, indem die Validierungsmethode von zusätzlichen Parametern ergänzt wird:

# test more changepoint priors on same validation range

amazon.changepoint_prior_validation(start_date='2016-01-04', end_date='2017-01-03', changepoint_priors=[0.15, 0.2, 0.25,0.4, 0.5, 0.6])
Vervollkommnende Kurven der Trainings- und Testfehler

Der Fehler des Testsatzes wird bei prior = 0,5 minimiert. Das Attribut des Stocker-Objekts wird entsprechend festgelegt:

amazon.changepoint_prior_scale = 0.5

Man kann auch andere Modelleinstellungen ändern. Beispielsweise die erwarteten Muster oder die Anzahl der in den Trainingsdaten verwendeten Jahre. Um die beste Kombination zu finden, muss man das beschriebene Verfahren mit verschiedenen Werten wiederholen.

Bewertung des vervollkommnenden Modells

Nachdem das Modell optimiert wurde, bewerten wir es erneut:

amazon.evaluate_prediction()

Prediction Range: 2017-01-18 to 2018-01-18.

Predicted price on 2018-01-17 = $1164.10.
Actual price on    2018-01-17 = $1295.00.

Average Absolute Error on Training Data = $10.22.
Average Absolute Error on Testing  Data = $101.19.

When the model predicted an increase, the price increased 57.99% of the time.
When the model predicted a  decrease, the price decreased  46.25% of the time.

The actual value was within the 80% confidence interval 95.20% of the time.

Es sieht schon viel besser aus! Dies zeigt die Bedeutung der Modelloptimierung. Die Verwendung von Standardwerten ergibt eine vernünftige erste Annäherung. Man muss jedoch sicher sein, dass man die korrekten Einstellungen verwendet. Als ein gut bekanntes, aber veraltetes Beispiel kann man die Optimierung des Stereoklanges durch Anpassen von Balance und Fade nennen.

„Betreten wir den Markt“

Ohne Zweifel ist die Vorhersage eine aufregende Tätigkeit. Das wahre Vergnügen ist jedoch zu beobachten, wie diese Vorhersagen auf dem realen Markt widerspiegelt werden. Mit Hilfe der Methode evalu_prediction kann man auf dem Markt spielen, indem das Modell für den Bewertungszeitraum verwendet wird. Verwenden wir die beschriebene Strategie und vergleichen sie mit der einfachen Strategie buy and hold während des gesamten Zeitraums.

Unsere Strategie hat einfache Regeln:

  1. Jeden Tag, wenn eine Aktiensteigerung vom Modell vorhergesagt wird, kaufen wir Aktien am Anfang des Tages und verkaufen sie am Ende des Tages. Und umgekehrt, wird eine Preissenkung vorhergesagt, kaufen wir keine Aktie.
  2. Wenn wir Aktien kaufen und die Preise dabei im Laufe des Tages steigen, erzielen wir einen entsprechenden Gewinn, der durch die  Anzahl der vorhandenen Aktien teilbar ist.
  3. Wenn wir Aktien kaufen und die Preise sinken, haben wir einen Verlust, der durch die Anzahl der vorhandenen Aktien teilbar ist.

Diese Strategie wird täglich für den gesamten Bewertungszeitraum verwendet. In unserem Fall ist es das ganze Jahr 2017. Um zu spielen, muss die Anzahl der Aktien auf den Methodenaufruf übertragen werden. Stocker spiegelt den Prozess des Abspielens der Strategie in Zahlen und Diagrammen wider:

# Going big
amazon.evaluate_prediction(nshares=1000)

You played the stock market in AMZN from 2017-01-18 to 2018-01-18 with 1000 shares.

When the model predicted an increase, the price increased 57.99% of the time.
When the model predicted a  decrease, the price decreased  46.25% of the time.

The total profit using the Prophet model = $299580.00.
The Buy and Hold strategy profit = $487520.00.

Thanks for playing the stock market!

Wir haben eine  wertvolle Lektion erhalten: Kaufen und Halten! Trotz der Tatsache, dass ein beträchtlicher Gewinn nach dem Abspielen der oben beschriebenen Strategie erzielt wurde, ist es viel besser, nur einfach zu investieren und Aktien zu halten. Gibt es Fälle, bei denen unsere Modellstrategie besser als die Methode buy and hold ist? Um diese Frage zu beantworten, versuchen wir mit anderen Testperioden. Die beschriebene Methode ist ziemlich konservativ: Wir spielen nicht, wenn ein Marktabschwung vorhergesagt wird. Dementsprechend arbeitet diese Methode besser als die Strategie buy and hold, wenn die Aktien sinken.

Spielen Sie nur mit unechtem Geld!

Es war klar, dass unser Modell es schaffen kann! Es besiegte jedoch den Markt nur dann, als die Möglichkeit entstand, einen Testzeitraum zu wählen.

Zukunftsvorhersage

Da es jetzt ein passendes Modell gibt, kann man Vorhersagen für die Zukunft machen, indem die Methode predict_future() verwendet wird:

amazon.predict_future(days=10)
amazon.predict_future(days=100)
Vorhersage für 10 Tage
Vorhersage für 100 Tage

In großem und ganzen betrachtet das Modell Amazon mit Optimismus wie die meisten „Profis“.

Die Vorhersage des beliebten Dienstes Tipranks.com – Finden Sie 10 Unterschiede zu der Vorhersage mit Stocker

Wie erwartet nimmt die Unsicherheit mit der Zeit zu. Wenn wir die beschriebene Methode für das wahre Geschäft verwenden, würden wir täglich ein neues Modell trainieren und Vorhersagen für einen Zeitraum von nicht mehr als einem Tag treffen.

In diesem Artikel wurde untersucht, wie der Aktienmarkt in Python von Stocker vorhergesagt wird, welche Werkzeuge und Methoden zur Vorhersage verwendet werden. Sollten Sie Fragen dazu haben, so können Sie sich an das Team von AI-United.de per Mail oder Q&A wenden.

Quelle

AI-United-Redaktion

Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.