Krypto-Währung Preisvorhersage mit Python: Neue Wege in der Finanzanalyse Seit dem kometenhaften Aufstieg des Bitcoin-Preises gibt es ständig Hype rund um den Kryptowährungsmarkt. Jeden Tag tauchen neue alternative Münzen auf - einige davon sind Schwindel, andere schaffen es in wenigen Monaten auf die Liste der Top-Münzen. Das Thema taucht überall auf: sei es im Radio, auf Twitter, Facebook oder am Thanksgiving-Tisch mit Großvater. Die Beteiligten werden in der Regel von Spekulationen angetrieben, in der Hoffnung, mit dem boomenden Markt zu einem Vermögen zu kommen. Ich war neugierig zu sehen, ob die Datenwissenschaft etwas Licht ins Dunkel bringen kann.
Dieses Projekt verwendet historische Preise, Kointegration und makroökonomische Kovariablen, um den zukünftigen Preis einer Münze vorauszusagen. Die Vorhersage außerhalb des Samples war für die ersten ~100 Stunden akzeptabel. Lassen Sie uns eintauchen. Wenn wir über die klassische Zeitreihenanalyse sprechen, glauben wir, dass eine beobachtete Zeitreihe eine Kombination aus einem Muster und einigen zufälligen Variationen ist. Mit diesem Ansatz werden zukünftige Werte auf der Grundlage ihrer historischen Daten vorhergesagt.
Dieser Ansatz funktioniert in den meisten Fällen gut, aber was ist, wenn wir es mit einer Zeitreihe zu tun haben, die eher zufällig als musterähnlich ist? Was ist, wenn eine Zeitreihe rein spekulativ ist und stark auf aktuellen Ereignissen basiert und nicht auf rhythmischen Komponenten? Sie wissen schon... etwas wie Kryptowährungspreise. Also, wenn nicht nur ein einfaches Muster, was treibt die Preise von Kryptowährungen an? Spekulation? Innovation? Rechtliche Fragen? Öffentliche Meinung? Angebot/Nachfrage? Beliebtheit von Bitcoin? Hat etwa eine reiche Person beschlossen, letzte Nacht eine Million Münzen zu kaufen? Okay, genug spekuliert.
Ich werde aufhören zu reden und Ihnen jetzt die Daten zeigen. Was beeinflusst also Kryptopreise? Die meisten Leute sagen, dass Bitcoin die Antwort ist. Die Blockchain-Technologie ist ein dezentrales Datenbanksystem, das erstmals von Bitcoin implementiert wurde. Da Bitcoin immer mehr an Bedeutung gewinnt, kommen immer wieder neue Münzen auf den Markt, die ebenfalls auf der Blockchain-Technologie basieren. Deshalb ist Bitcoin sozusagen die Mutter aller Kryptowährungen, weil sie die coole Technologie zuerst entwickelt haben.
Deshalb denke ich, dass es Sinn macht, dass wenn Bitcoin steigt, jede andere Münze steigt. Wenn es fällt, fällt jede andere Münze. Der folgende Plot zeigt skalierte gleitende Durchschnitte von Bitcoin (grün) und Ethereum (blau). Wie Sie sehen können, sieht die Behauptung ziemlich genau aus. Aber wir werden nicht voreilig Schlüsse ziehen, ohne statistische Methoden zu verwenden.
Später werden wir mehr darüber sprechen, wie man ein "kointegriertes Paar" mit dem Granger-Kausalitätstest identifiziert. Es ist auch ziemlich offensichtlich, dass aktuelle Ereignisse wie rechtliche Probleme oder technologische Game Changer ebenfalls eine Rolle spielen. Erinnern Sie sich, als China im September Krypto verboten hat? Der Preis fiel rapid und alles war in Chaos. In dem Versuch, wichtige Ereignisse wie dieses einzufangen, werden Daten zur Suchfrequenz von Google News über die API Pytrends abgerufen. Der folgende Plot zeigt Spitzen in der Suchfrequenz des Wortes "Kryptowährung" (rot), wenn die Kryptopreise fallen.
Interessant, oder? Die in diesem Projekt verwendeten Suchbegriffe wurden mit dem Google Keyword Tool ausgewählt. Das Tool sagt nicht nur, wie beliebt ein Suchbegriff ist, sondern schlägt auch eine Liste verwandter Keywords vor. Indem die bereitgestellte Liste und die Pytrend-API verwendet werden, werden Daten zur Suchfrequenz von sieben verschiedenen Schlüsselwörtern erhalten. Ich werde in einem späteren Abschnitt näher auf diese Begriffe eingehen. Ein weiterer Faktor, der mir auffällt, ist die öffentliche Wahrnehmung.
Je mehr Käufe, desto mehr Nachfrage und damit höher der Preis. Die Daten hierzu zu erfassen, ist etwas schmerzhaft. Die kostenpflichtige Twitter-API hat alles, was ich brauche, aber ich bin Student und gebe das Geld lieber für Lebensmittel aus. Stattdessen zeichnet die Website redditmetrics.com historische Abonnement-Wachstumsdaten fast jedes Subreddits der Welt auf.
Also wird gescrapt! Der folgende Plot vergleicht das Wachstum des Nem-Subreddits (orange) mit dem historischen Preis von Nem (blau). Genau wie erwartet, hängen das Abonnementwachstum und der Preis durch die Höhen und Tiefen zusammen. Ich hoffe, diese visuellen Darstellungen interessieren Sie. Dies soll Sie nur mit einigen Fachkenntnissen vertraut machen und Sie mit dem Problem bekannt machen, das wir zu lösen versuchen. Wenn die Einführung nicht Ihr Bedürfnis gestillt hat, schauen Sie sich bitte die vollständige EDA auf meinem GitHub hier an.
Als nächstes werde ich direkt in die statistischen Methoden springen, die verwendet wurden, um ein Modell aufzubauen, das den zukünftigen Preis einer Münze vorhersagt. Wie habe ich das Modell aufgebaut? In diesem Abschnitt werden wir uns mit der Methodik auseinandersetzen. Es wird eine Zusammenfassung jedes Schritts sein. Wenn Sie tiefer in den Code eintauchen möchten, bitte verweisen Sie auf mein GitHub-Repository hier. Es wird technisch sein, und ich werde mein Bestes tun, um es unterhaltsam und leicht verdaulich zu gestalten.
Aber wenn Sie nicht an den technischen Details interessiert sind, können Sie gerne direkt zur TLDR-Sektion springen. Identifizierung des Kointegrierten Paares Insgesamt wurden die historischen Preise von 12 Top-Münzen über einen Zeitraum von drei Monaten über die Cryptocompare-API erhalten. Bevor wir jedoch etwas mit der Zeitreihe machen können, müssen wir sicherstellen, dass die Zeitreihe stationär ist. Um die Anforderungen an die Stationarität zu erfüllen, muss eine Zeitreihe einen konstanten Mittelwert, eine konstante Varianz und eine konstante Autokorrelation aufweisen. Klingt viel verlangt, oder? In Wirklichkeit ist keine Zeitreihe perfekt stationär.
Aber keine Sorge, meine Freunde, Dickey & Fuller haben euren Rücken! Augmentierter Dickey-Fuller-Test auf Stationarität. Dies ist ein statistischer Test, der es Ihnen ermöglicht zu überprüfen, ob die Erwartungen an die Stationarität erfüllt sind. Es ist ein Einheitswurzeltest, der bestimmt, wie stark eine Zeitreihe durch einen Trend definiert ist. Der Test verwendet ein autoregressives Modell und optimiert ein Informationskriterium über verschiedene Lagewerte. Die Nullhypothese besagt, dass die Zeitreihe durch eine Einheitswurzel dargestellt werden kann (das bedeutet, dass sie nicht stationär ist).
Einige Statistiker haben den magischen Schwellenwert von 0,05 festgelegt, und viele waren damit einverstanden. Wenn Ihr p-Wert also kleiner als 0,05 ist, könnten Sie die Nullhypothese ablehnen. Aber auch hier sollte das Ergebnis im Hinblick auf ein bestimmtes Problem interpretiert werden, um sinnvoll zu sein. Es stellte sich heraus, dass unter der Annahme eines Schwellenwerts von 0,05 die historischen Preise von allen 12 Münzen den Stationaritätstest nicht bestehen (Überraschung!). In diesem Fall müssen wir die Zeitreihen stationär machen und sie erneut testen.
Differenzieren. Dies ist eine beliebte Methode, um Zeitreihen zu stationarisieren. Sie kann verwendet werden, um Trends und Saisonalität zu entfernen. Für dieses Projekt wird die Differenz der aufeinanderfolgenden Beobachtungen (Lag 1) verwendet. Wenn eine Zeitreihe eine Saisonkomponente hat, sollte der Lagewert der Zeitraum der Saisonalität sein.
In unserem Fall gibt es keine offensichtliche saisonale Komponente. Das Kastendiagramm unten zeigt, wie der durchschnittliche stündliche Ethereum-Durchschnitt während des gesamten Tages relativ konstant ist. Die Varianz variiert, aber es gibt kein offensichtliches Muster. Nachdem wir Lag-1-Differenzen an den Zeitreihen vorgenommen haben, haben alle zwölf Zeitreihen den Dickey-Fuller-Stationaritätstest bestanden! Puh. Granger-Kausalitätstest.
Dies ist ein statistischer Hypothesentest, um festzustellen, ob eine Zeitreihe dazu verwendet wird, eine andere vorherzusagen. Eine Zeitreihe A „verursacht“ eine Zeitreihe B gemäß dem Granger-Kausalitätstest, wenn die Verzögerungswerte von A statistisch signifikante Informationen über zukünftige Werte von B bereitstellen. In diesem Projekt verwenden wir diesen Test, um ein kointegriertes Paar zu identifizieren - ein Paar von Kryptowährungen, bei dem die Verzögerungswerte einer Münze verwendet werden können, um die zukünftigen Werte der anderen Münze vorherzusagen. Jetzt, da die historischen Preisdaten aller zwölf Münzen stationär sind, haben wir insgesamt 132 Datenrahmen erstellt, von denen jeder eine Permutationspaar (nicht zu verwechseln mit einem Kombinationspaar) der historischen Preise der zwölf Münzen ist. Yikes, das ist wirklich verwirrend.
Nehmen wir zum Beispiel an, ich hätte ETH-, BTC- und LTC-Historiendaten. Dann müsste ich sechs Datenrahmen erstellen: ETH- und BTC-Historienpreise, ETH- und LTC-Historienpreise, BTC- und ETH-Historienpreise, BTC- und LTC-Historienpreise, LTC- und ETH-Historienpreise und LTC- und ETH-Historienpreise. Beachten Sie, dass ETH & BTC und BTC & ETH nicht dasselbe bedeuten! Dies soll unsere Daten für den StatsModels Granger-Kausalitätstest vorbereiten. Die Nullhypothese des Tests besagt, dass die Zeitreihe in der zweiten Spalte nicht die Zeitreihe in der ersten Spalte verursacht. Wir müssen testen, ob ETC BTH verursacht oder BTH ETC verursacht.
Deshalb benötigen wir Permutationspaare und keine Kombinationen! Nachdem 132 Tests durchgeführt wurden, wurde das DASH & BCH-Paar zuvor als kointegriertes Paar ausgewählt, da es die stärkste Korrelation aufwies. Bei weiterer Recherche stellte sich jedoch heraus, dass die starke Korrelation auf den Anstieg des koreanischen Handels zurückzuführen ist. Da dies keine normale Bedingung ist, wählen wir stattdessen XEM und IOT (Nem und Iota) als unser kointegriertes Paar aus, da es unter normalen Bedingungen die stärkste Korrelation aufweist. Für dieses Projekt wird der historische Preis von IOT als einer der zukünftigen Preisvorhersager von XEM verwendet. Feature-Auswahl Abfrage von Daten.
Folgendes sind die erhaltenen Daten und ihre Quellen: Cryptocompare-API: XEM- und IOT-Historienpreise im Stundentakt. Pytrends-API: Google News Suchfrequenz des Begriffs "Kryptowährung". Scraping redditmetrics.com: Subreddit "Krypto-Währung", Abonnementwachstum von "Nem" und "Iota". Pytrends-API: Google-Suchfrequenz für die Begriffe "Nem Wallet herunterladen", "Iota Wallet herunterladen", "Nem Preis", "Iota Preis", "Bitcoin Preis", "GPU für Mining" - diese Schlüsselwörter wurden mit dem Google Keyword Tool ausgewählt.
Yahoo Financials API: AMD- und Nvidia-Aktienkurse - dies sind die beiden Top-Semiconductor-Unternehmen, die für das Münzen-Mining verwendet werden. ElasticNet-Regularisierung. Wie Sie vielleicht bereits bemerkt haben, sind die abgerufenen Daten in gewisser Weise zusammenhängend. Zum Beispiel könnten die Google-Suchfrequenz der Begriffe "Bitcoin-Preis" und "Kryptowährung" sehr ähnliche Informationen enthalten. Ein Modell auf der Grundlage von zusammenhängenden Merkmalen wie diesen zu erstellen, schafft Redundanz, und das ist schlecht! Genau wie Menschen aufgrund von Redundanz emotional instabil werden (sprich: irritiert), geraten Maschinen, aufgrund von Multikollinearität, in Panik! Genau hier kommt die ElasticNet-Regularisierung ins Spiel.
Der Algorithmus kombiniert linear die L1- und L2-Strafen der LASSO- und Ridge-Methoden. Er "schrumpft" die Koeffizienten der redundanten Prädiktoren auf Null, wodurch er zu einem Industriestandard bei der Merkmalsauswahl wird. Nach dem Ergebnis von ElasticNet werden Merkmale, die nicht-null Koeffizienten haben, ausgewählt. In diesem Projekt wird ElasticNet auf 13 Prädiktorvariablen angewendet, die oben erworben wurden, wobei der historische Preis von XEM die abhängige Variable ist. Nach der Ausführung des Algorithmus bleiben drei Prädiktoren mit nicht-nullen Koeffizienten übrig.
Diese Merkmale werden verwendet, um das endgültige Modell aufzubauen. Unabhängig vom Ergebnis von ElasticNet habe ich auch versucht, ein Modell mit allen 13 Prädiktoren zu erstellen und das Ergebnis mit dem Modell, das mit den drei ausgewählten Merkmalen erstellt wurde, verglichen. Es stellte sich heraus, dass der Unterschied in der Leistung nicht signifikant ist (MSE = 0,107 für alle 15 Merkmale und MSE = 0,105 für 3 Merkmale). Ich entscheide mich jedoch immer noch für das Modell mit den drei Merkmalen, denn ich denke, je schlanker, desto besser. Aufbau des Modells Für dieses Projekt werden wir das ARIMAX-Modell verwenden, um den zukünftigen Preis von XEM vorherzusagen.
Wie das ARIMA-Modell produziert ARIMAX-Prognosen auf der Grundlage von autoregressiven (AR) und gleitenden Durchschnitten (MA). ARIMAX enthält jedoch auch exogene Variablen im Modell. In diesem Fall werden die zuvor ausgewählten drei Prädiktorvariablen verwendet. Daten-Preprocessing. Da wir bereits über Stationarität und Dickey-Fuller-Tests im vorherigen Abschnitt gesprochen haben, werde ich hier nicht ins Detail gehen.
Die erhaltenen Daten sind bereits vor der ElasticNet-Operation standardisiert, daher müssen wir nur differenzieren und sicherstellen, dass sie den Dickey-Fuller-Test bestehen. Danach werden die Daten bereinigt und in Test- und Trainingssets aufgeteilt. ACF & PACF. Jetzt, wo unsere Daten bereit sind, müssen wir (1) feststellen, ob die Zeitreihe ein AR- oder MA-Prozess ist, und (2) festlegen, welche Ordnung des AR- oder MA-Prozesses wir im Modell verwenden müssen. Die erste Frage kann mit dem ACF beantwortet werden.
Für die AR-Serie sinkt die Korrelation allmählich, ohne einen Abschneidewert zu erreichen. ACF kann auch verwendet werden, um die Lagordnung der MA-Reihe zu bestimmen - das ist der Abschneidewert. Wenn wir jedoch eine AR-Reihe hätten, würde der Abschneidewert von PACF verwendet, um die Lagordnung festzulegen. Die folgenden Diagramme zeigen die ACF und PACF des historischen XEM-Preises. Wie wir sehen können, handelt es sich um einen AR-Prozess, da die ACF keinen Abschneidewert hat.
Wenn wir uns dann die PACF ansehen, schneidet sie bei Lag 1 ab, was der Parameter ist, den wir für unser ARIMAX-Modell verwenden. ARIMAX. Mit AR 1 und 3 exogenen Variablen ist das unten stehende Diagramm der angepasste Wert im Vergleich zum tatsächlichen Wert. Mittels des angepassten Modells wird die XEM-Preisvorhersage erhalten. Das folgende Diagramm zeigt die out-of-sample-Prognose von XEM 600 Schritte in die Zukunft.
Wie erwartet, performt das Modell zu Beginn besser. Dies liegt daran, dass sich die Prognosefehler zusammensetzen, je länger Zeit verstrichen ist. Nach ca. 100 Schritten funktioniert das Modell nicht mehr so gut. Der mittlere quadratische Fehler für Schritte 1-100 beträgt 0,039, während der mittlere quadratische Fehler für Schritte 101-600.