Zum Inhalt springen

~/teaching · machine learning · referenz

Den Preis eines Vermögenswerts vorhersagen: Zeitreihen, XGBoost und News-Sentiment, ehrlich gemessen

Ein vollständiges Finanzprojekt, von der Problemstellung bis zum abendlichen Batch-Lauf, bei dem die Messung mehr zählt als das Modell.

Zusammenfassung

Dieser Referenz-Foliensatz des Kurses Machine Learning an der Centrale Méditerranée (Schwerpunkt DDEFI, 2026-2027) geht ein vollständiges studentisches Projekt durch: die Rendite einer liquiden Aktie für den nächsten Tag vorherzusagen, indem man drei Werkzeuge des Kurses kombiniert, nämlich Zeitreihen, Gradient Boosting mit XGBoost und ein Sprachmodell, das den Ton von Finanznachrichten bewertet. Das durchgehende Beispiel ist ein großer, in Paris notierter Energiewert, gewählt, weil er sowohl auf Unternehmensnachrichten als auch auf die Geopolitik des Öls reagiert.

Er richtet sich an Teams, die ein Finanzthema bearbeiten möchten, und an alle, die schon einmal einen Kursverlauf gesehen haben, der zu schön aussieht, um wahr zu sein. Der Foliensatz widmet der Problemstellung, der zeitlichen Zuordnung der Daten und der Evaluation ebenso viel Raum wie den Modellen, denn dort scheitern Marktprojekte gewöhnlich: an einem Leak, an einem fehlenden Referenzmodell oder an einem Gewinn, der verschwindet, sobald die Handelskosten bezahlt sind.

Nach der Lektüre sollten Sie eine Zielvariable festlegen können, die nicht trivial vorhersagbar ist, ein Modell per Walk-Forward validieren, Schlagzeilen in tägliche Merkmale umwandeln, ohne auf morgen zu schauen, messen, was die Nachrichten tatsächlich beitragen, und ein Fazit schreiben, das zur Größe des Ergebnisses passt, auch zu einem Nullergebnis.

Die Folien

Den Preis eines Vermögenswerts vorhersagen: Zeitreihen, XGBoost und News-Sentiment

Referenz. Machine Learning, Centrale Méditerranée, Schwerpunkt DDEFI, 2026-2027. Die Folien gibt es auf Französisch und Englisch; der Link öffnet die englische Fassung.

Folien öffnen (Passwort vom Dozenten)

Der Foliensatz selbst ist für die Studierenden des Kurses verschlüsselt; diese Seite fasst ihn für alle zusammen.

Die Kursseite · Aufmerksamkeit und Transformer, Schritt für Schritt

Aufbau des Foliensatzes

  1. Das Problem, sauber gestellt. Die unterstützte Entscheidung, warum die Zielvariable eine Rendite ist, der Horizont, drei Kennzahlen, die Leitplanken und was die Markteffizienz erhoffen lässt.
  2. Die Daten. Tägliche Kursbalken, einige verzögerte Makroreihen, offene Nachrichtenquellen und die Regel, dass ein Datenpunkt zu der Handelssitzung gehört, in der er bekannt wurde.
  3. Zeitreihen. Log-Renditen, stilisierte Fakten, naive Referenzmodelle, ARIMA und GARCH, Walk-Forward-Validierung, die Bereinigung überlappender Zeilen und die klassischen Leaks.
  4. XGBoost auf verzögerten Merkmalen. Eine Zeitreihe in eine Tabelle verwandeln, sechs Familien von Merkmalen, Tuning ausschließlich auf vergangenen Daten und warum Bäume einen Trend nicht fortschreiben können.
  5. News-Sentiment. Von Wortlisten zu VADER und FinBERT, dann die tägliche Aggregation und der geopolitische Ton aus GDELT.
  6. Die Kombination. Sentiment als zusätzliche Spalten, eine dreistufige Modellleiter, Stacking als Option und ein Ablationsplan.
  7. Ehrlich evaluieren. Eine Walk-Forward-Ergebnistabelle, der Diebold-Mariano-Test und der Binomialtest, eine Strategie nach Kosten und die deflationierte Sharpe-Ratio.
  8. Fallen und Ethik. Regimewechsel, Data Leakage über Schlagzeilen, verschwindende Daten, die EU-Regeln zum Marktmissbrauch und ein gut sichtbarer Haftungsausschluss.
  9. Inbetriebnahme und Teamplan. Der abendliche Batch-Lauf, die Überwachung von Drift, eine kleine Streamlit-Seite, dann der Aufbau des Repositorys und drei Rollen.

Das Problem stellen: eine Rendite vorhersagen, niemals einen Preis

Der Preis von gestern liegt immer nahe am heutigen, also glänzt jedes Modell, das ihn einfach kopiert, bei Preisen, ohne etwas zu wissen; die ehrliche Zielvariable ist die Veränderung.

Wie das Projekt zum Kreditscoring beginnt auch der Foliensatz mit der Entscheidung. Drei Verwendungen sind möglich: eine Position anpassen, eine Risikoposition absichern oder ein Gremium mit einer täglichen Notiz informieren. Das Projekt wählt die dritte: jeden Abend ein Bericht, keine echte Order und eine simulierte Strategie nur dazu, den Wert des Signals zu beziffern.

Dann kommt die Falle, an der die meisten Börsenprojekte scheitern. Bei einem simulierten Random Walk über 2.520 Tage, bei dem sich nichts vorhersagen lässt, erreicht die Prognose „morgen gleich heute“ auf den Preisen ein R2R^2 von 0,993. Dieselbe Idee, auf Renditen angewandt, ergibt R2=−1.02R^2 = -1.02, schlechter als eine Nullprognose, weil die Differenz zweier unabhängiger Renditen die doppelte Varianz hat. Eine vorhergesagte Kurve, die sich mit einem Tag Verzögerung an die echte anschmiegt, ist daher überhaupt kein Beleg.

Die Zielvariable ist die logarithmische Rendite (log return) des bereinigten Schlusskurses am nächsten Tag, und die Richtung liest man am Vorzeichen der Prognose ab. Alles, was in die Merkmale eingeht, muss zur Informationsmenge Ft\mathcal{F}_t gehören, die zum Pariser Börsenschluss am Tag tt verfügbar ist.

rt+1=ln⁡Ct+1Ct,xt∈Ft,yt=rt+1r_{t+1} = \ln\frac{C_{t+1}}{C_t}, \qquad x_t \in \mathcal{F}_t, \qquad y_t = r_{t+1}
(1)

Log-Renditen werden bevorzugt, weil sie sich über die Zeit addieren: Eine Zielvariable über fünf Tage ist einfach die Summe von fünf eintägigen Zielvariablen. Einfache Renditen addieren sich nicht, wie der Foliensatz an fünf erfundenen Preisen zeigt.

Tabelle 1: Fünf Preise, vier Renditen (Beispiel aus dem Foliensatz, nachgerechnet). Die Summe der Log-Renditen ergibt exakt ln⁡(104/100)\ln(104/100), die Summe der einfachen Renditen dagegen nicht den wahren Gewinn von 4 %.
BewegungLog-RenditeEinfache Rendite
100 → 1020,01980,0200
102 → 99−0,0299−0,0294
99 → 1010,02000,0202
101 → 1040,02930,0297
Summe der vier0,03920,0405

Bemerkung (Was man erhoffen darf). Fama (1970) beschreibt Märkte, in denen öffentliche Information bereits im Preis steckt; Welch und Goyal (2008) fanden, dass die meisten klassischen Prädiktoren der US-Aktienrisikoprämie außerhalb der Stichprobe nicht besser abschneiden als der historische Mittelwert. Das realistische Ziel ist ein kleiner Vorteil, getestet und nach Kosten. Ein sauberer Nachweis, dass das naive Modell nicht geschlagen wird, ist ein gültiges Projektergebnis.

Zurück zum Inhalt.

Walk-Forward-Validierung, Referenzmodelle und Leaks

Bei zeitlich geordneten Daten lernt man auf der Vergangenheit, testet auf dem folgenden Block, rückt weiter und wiederholt das, genau so, als hätte man den Zeitraum Tag für Tag erlebt.

Eine Kreuzvalidierung mit gemischten Zeilen würde das Modell aus der Zukunft lernen lassen, um die Vergangenheit vorherzusagen. Der Foliensatz ersetzt sie durch die Walk-Forward-Validierung (walk-forward validation): Man trainiert auf allem bis zu einem Datum (wachsendes Fenster) oder nur auf den letzten Jahren (rollierendes Fenster), sagt den nächsten, unberührten Block vorher und rückt einen Block weiter. Aneinandergereiht ergeben die Testblöcke die Out-of-Sample-Ergebnisse. In scikit-learn heißt das TimeSeriesSplit.

Die Arithmetik der Aufteilung im Foliensatz

  1. Historie. Zehn Jahre Handel ergeben etwa 2.520 Handelstage.
  2. Erstes Trainingsfenster. Drei Jahre, also 756 Handelstage, vor dem ersten Test.
  3. Testblöcke. Je ein Quartal, 63 Handelstage.
  4. Folds. (2520−756)/63=28(2520 - 756)/63 = 28 Folds, die 28×63=176428 \times 63 = 1764 Testtage abdecken, für jedes Modell dieselben Tage.

Jedes Modell wird mit einem Referenzmodell (baseline) verglichen, in der Praxis mit mehreren, die vor allem anderen geschrieben werden. Eine Rendite von null vorherzusagen ist beim RMSE die härteste Messlatte; die gestrige Rendite zu wiederholen (Persistenz) verdoppelt ungefähr die Fehlervarianz. ARIMA (Box und Jenkins) und GARCH (Bollerslev, 1986) vervollständigen den Werkzeugkasten für Zeitreihen: ARIMA findet auf täglichen Renditen meist winzige Koeffizienten, was eher Effizienz als Scheitern bedeutet, während GARCH die Größe der morgigen Bewegung vorhersagt, nicht ihr Vorzeichen.

σt+12=ω+α rt2+β σt2\sigma^2_{t+1} = \omega + \alpha\, r_t^2 + \beta\, \sigma^2_t
(2)

Bei einer Zielvariable über fünf Tage teilen sich benachbarte Zeilen vier Tage ihrer Zielwerte. López de Prado (2018) empfiehlt dafür Bereinigung und Sperrfrist (purging and embargo): Man entfernt die Trainingszeilen, deren Zielwert in den Testblock hineinreicht, und fügt danach eine Sperrfrist hinzu, wenn Trainingsdaten auf den Test folgen. Bei einer eintägigen Zielvariable und reinem Walk-Forward schrumpft die Bereinigung auf eine einzige Zeile.

Data Leakage, also Information aus der Zukunft, die ins Modell gelangt, tritt in drei Familien auf: der Look-Ahead-Bias (ein Merkmal mit Datum tt, das aber erst später bekannt ist, etwa eine US-Reihe, die nach Paris schließt), der Survivorship-Bias (Aktien aus dem heutigen Index auswählen) und mit der Zukunft neu berechnete Statistiken (Standardisierung über die gesamte Stichprobe, revidierte Makrodaten). Der nützlichste Test im Repository schneidet alle Rohdaten an einem Datum ab, baut die Zeile dieses Tages neu auf und prüft, ob sie mit der entsprechenden Zeile der vollständigen Tabelle identisch ist.

Zurück zum Inhalt.

XGBoost auf verzögerten Merkmalen

Ein Baummodell kennt keine Zeit, also wird jeder Tag zu einer Zeile, deren Spalten nur beschreiben, was vor dem Börsenschluss geschah, und deren Label die Rendite des nächsten Tages ist.

Sogenannte verzögerte Merkmale (lagged features) geben einem Modell, das nur Zeilen und Spalten sieht, die Vergangenheit: die Rendite des Tages und der vier Tage davor über shift(k), eine kumulierte 20-Tage-Rendite für das Momentum, eine rollierende 20-Tage-Volatilität und die GARCH-Prognose, einen 14-Tage-RSI (Wilder, 1978), den Wochentag und einige um einen Tag verzögerte Makroreihen von FRED. Die Zielvariable wird um eine Zeile nach oben verschoben (shift(-1)), und ein einziger Vorzeichenfehler an dieser Stelle bedeutet, dass das Modell eine Rendite lernt, die es bereits kennt. Die letzte Zeile hat keinen Zielwert: Sie ist diejenige, die heute Abend vorhergesagt wird, also darf ein globales dropna() sie nicht entfernen.

import numpy as np, pandas as pd, xgboost as xgb

r = np.log(px["Close"]).diff()                # Log-Rendite, bekannt zum Börsenschluss
X = pd.concat({f"lag{k}": r.shift(k) for k in range(5)}, axis=1)
X["vol20"] = r.rolling(20).std()               # nur rückwärts gerichtetes Fenster
X["mom20"] = r.rolling(20).sum()
y = r.shift(-1)                                 # Zielvariable: Rendite von morgen
ok = X.notna().all(axis=1) & y.notna()          # die Zeile von heute Abend bleibt außen vor
model = xgb.XGBRegressor(max_depth=3, learning_rate=0.02,
                         subsample=0.8, n_estimators=500)
model.fit(X[ok].iloc[:-250], y[ok].iloc[:-250])  # nur ein Fold, zur Veranschaulichung
pred = model.predict(X[ok].iloc[-250:])

XGBoost (Chen und Guestrin, 2016) fügt nacheinander kleine Bäume hinzu und bestraft die Anzahl der Blätter und die Größe der Blattwerte. Bei Renditen, wo das Signal schwach ist, zählt diese Regularisierung: flache Bäume, eine kleine Lernrate, Subsampling und frühes Stoppen (early stopping). Der Validierungsdatensatz für das frühe Stoppen ist das letzte Stück des Trainingsfensters, niemals der Testblock, und die Hyperparameter werden, einmal über alle Folds gewählt, in einer Konfigurationsdatei eingefroren. Die Details des Boostings stehen in der Notiz zu Random Forests und Gradient Boosting.

L=∑iℓ(yi,y^i)+∑kΩ(fk),Ω(f)=γT+12λ∥w∥2\mathcal{L} = \sum_i \ell(y_i, \hat y_i) + \sum_k \Omega(f_k), \qquad \Omega(f) = \gamma T + \tfrac12 \lambda \lVert w \rVert^2
(3)

Zwei weitere Punkte. Die Permutationswichtigkeit und SHAP-Werte zeigen, was das Modell genutzt hat; Volatilitätsmerkmale landen oft auf Platz eins, weil sie bei der Größe der Bewegung helfen, nicht bei ihrer Richtung. Und ein Baum sagt Mittelwerte von Blättern vorher, kann also nie über den größten Wert hinausgehen, den er gesehen hat: Bei einem steigenden Preis bleibt er flach auf seinem Randblatt stehen. Eine stationäre Zielvariable, die Rendite, beseitigt das Problem.

Zurück zum Inhalt.

News-Sentiment: Lexika, FinBERT und GDELT

Jede Schlagzeile erhält einen Score zwischen minus eins und plus eins, die Scores eines Handelstags werden gemittelt, und diese Mittelwerte werden zu einigen zusätzlichen Spalten der Tabelle.

Der Foliensatz steigt dieselbe Leiter hinauf wie bei den Modellen, diesmal für die Sentimentanalyse (sentiment analysis). Eine Finanz-Wortliste (Loughran und McDonald, 2011) zählt positive und negative Wörter; sie entstand, weil allgemeine Wörterbücher Wörter wie liability oder tax als negativ einstufen, obwohl sie in einem Finanztext nur buchhalterische Posten sind. VADER (Hutto und Gilbert, 2014) ergänzt Regeln für Verneinung und Verstärker, wurde aber für soziale Medien entwickelt. FinBERT (Araci, 2019) ist ein BERT-Modell, das auf Finanztexten weitertrainiert wurde; dank Attention liest es jedes Wort im Kontext, sodass „Kosten sinken“ und „Umsätze sinken“ nicht gleich bewertet werden.

s=p+−p−∈[−1,1]s = p_{+} - p_{-} \in [-1, 1]
(4)

FinBERT liefert drei Wahrscheinlichkeiten (positiv, negativ, neutral); der Score behält die Differenz der beiden Extreme, und die größte Wahrscheinlichkeit dient als Konfidenz. Eine Nachprüfung durch den Dozenten im Oktober 2026 ergab, dass eine knappe Schlagzeile und ein vollständiger Satz mit derselben Bedeutung entgegengesetzte Scores erhalten können; testen Sie das Modell also zuerst an Ihren echten Schlagzeilen. Es sagt außerdem, ob eine Nachricht gut ist, nicht ob sie überraschend war, und gerade die Überraschung bewegt die Kurse.

Die Zuordnungsregel: Eine Schlagzeile gehört zur ersten Handelssitzung, deren Schluss nach ihrer Veröffentlichungszeit liegt, alle Zeiten in UTC umgerechnet. Eine Meldung, die an einem Freitag um 18:45 Uhr Pariser Zeit erscheint, kommt in die Zeile des Montags (merge_asof mit Vorwärtsrichtung erledigt das). Falsche Zeitzonen sind das häufigste Leak in Sentiment-Projekten.

St=∑isi e−λΔi∑ie−λΔi,λ=ln⁡2HalbwertszeitS_t = \frac{\sum_i s_i\, e^{-\lambda \Delta_i}}{\sum_i e^{-\lambda \Delta_i}}, \qquad \lambda = \frac{\ln 2}{\text{Halbwertszeit}}
(5)
Tabelle 2: Tägliche Aggregation mit einer Halbwertszeit von 24 Stunden (illustrative Scores aus dem Foliensatz, nachgerechnet). Das Gewicht beträgt 2−Δ/242^{-\Delta/24}.
SchlagzeileScoreAlter zum BörsenschlussGewicht
1+0,82 h0,944
2−0,620 h0,561
3+0,330 h0,420
Einfacher Mittelwert0,167
Gewichteter Mittelwert0,283

Der gewichtete Mittelwert ist höher, weil die positive Schlagzeile die jüngste ist. Der Tag erhält außerdem die Anzahl der Schlagzeilen, damit das Modell „neutral“ von „keine Nachrichten“ unterscheiden kann. GDELT, eine offene Datenbank, die die Weltpresse alle fünfzehn Minuten in Ereignisse, Themen und Ton codiert, liefert geopolitische Spalten: den durchschnittlichen Ton der Ereignisse in Ölförderländern, die Zahl materieller Konflikte im Vergleich zu ihrem 60-Tage-Niveau, den Ton von Artikeln zum Thema Energie und das Aufmerksamkeitsvolumen. Die Listen der Länder und Themen werden festgelegt, bevor man die Ergebnisse ansieht.

Zurück zum Inhalt.

Die Signale kombinieren und messen, was die Nachrichten beitragen

Die einfachste Kombination ist eine einzige Tabelle mit Preisen, Makro, Sentiment und Geopolitik nebeneinander, gefolgt von einer sorgfältigen Prüfung, ob das Weglassen der Nachrichten etwas ändert.

Die Sentiment-Merkmale kommen zu den verzögerten Werten und Makrospalten derselben Zeile hinzu, jedes mit dokumentiertem Verfügbarkeitszeitpunkt, und ein einziges XGBoost-Modell entscheidet, ob es sie nutzt. Das Projekt vergleicht drei Stufen: ein naives Modell (Rendite null, Fortschreibung des Vorzeichens für die Richtung), ein komplexeres (ARIMA oder Ridge auf denselben verzögerten Werten, was den Effekt der Nichtlinearität isoliert) und das schwere XGBoost-Modell mit allen Merkmalsfamilien. Die Regel, die entscheidet, ob das schwere Modell gewinnt, wird vor jeder Berechnung im Entscheidungsprotokoll festgehalten.

Tabelle 3: Der Ablationsplan: dieselben Hyperparameter, dieselben Seeds, dieselben 28 Folds; jede Zeile wird mit der vorherigen verglichen.
LaufSpalten von XGBoostFrage
APreiseReicht die Kurshistorie?
BA + MakroHilft der Kontext?
CB + FinBERTHelfen Unternehmensnachrichten?
DC + GDELTBringt die Geopolitik zusätzlich etwas?
EC mit VADERIst der Transformer seine Kosten wert?

Das Team notiert das erwartete Ergebnis, bevor es die Ablationsstudie (ablation study) startet. Ist C nicht besser als B, ist das ein legitimes Ergebnis, vereinbar mit der halbstrengen Form der Markteffizienz. Stacking (Wolpert, 1992) wird als Alternative angeboten: spezialisierte Basismodelle, deren Prognosen durch eine Ridge-Regression gemischt werden, vorausgesetzt, die Gewichte werden nur auf Out-of-Sample-Prognosen gelernt, die per Walk-Forward entstanden sind; sonst vertraut die Mischung dem Modell, das am stärksten überangepasst ist.

Zurück zum Inhalt.

Ehrliche Kennzahlen: Tests, Kosten und die Zahl der Versuche

Ein Modell, das an 52 von 100 Tagen richtig liegt, hat vielleicht nur Glück, und eine Strategie, die profitabel aussieht, kann sich nach Abzug der Gebühren in Luft auflösen oder dann, wenn man mitzählt, wie viele Varianten ausprobiert wurden.

Drei Kennzahlen führen vom Modell zum Geschäft: der RMSE gegenüber der Nullprognose, der Anteil richtiger Richtungen gegenüber 50 % und die annualisierte Sharpe-Ratio einer einfachen Regel „long oder flat“ nach Kosten. Jeder Unterschied muss einen Test bestehen. Der Diebold-Mariano-Test (DM test) (1995) fragt, ob die mittlere tägliche Differenz der quadrierten Fehler zweier Prognosen größer ist als das Rauschen.

dt=e1,t2−e2,t2,DM=dˉsd/n1/2  ∼H0  N(0,1)d_t = e_{1,t}^2 - e_{2,t}^2, \qquad DM = \frac{\bar d}{s_d / n^{1/2}} \;\overset{H_0}{\sim}\; \mathcal{N}(0,1)
(6)

Durchgerechnetes Beispiel aus dem Foliensatz: naives Modell (1) gegen XGBoost (2), acht erfundene Tage

  1. Verlustdifferenzen. Tag 1 ergibt 1.22−1.02=0.441.2^2 - 1.0^2 = 0.44, und die acht Werte sind 0,44, −0,17, 0,81, 0,12, −0,19, 0,57, 0,20 und 0,25 (in Einheiten von 10−410^{-4}).
  2. Mittelwert und Streuung. dˉ=0.254\bar d = 0.254 und sd=0.347s_d = 0.347.
  3. Statistik. DM=0.254/(0.347/8)=2.07DM = 0.254 / (0.347/\sqrt8) = 2.07, über 1,96: Man wäre versucht, XGBoost für besser zu erklären.
  4. Korrektur für kleine Stichproben. Harvey, Leybourne und Newbold (1997) multiplizieren mit 7/8\sqrt{7/8}, was 1,94 ergibt, zu vergleichen mit 2,36 für eine Student-t-Verteilung mit 7 Freiheitsgraden: keine Schlussfolgerung möglich. Nur ein langer Testzeitraum kann entscheiden.

Für die Richtungen behandelt der Binomialtest das Modell wie eine Münze. Über die 1.764 Testtage entsprechen 52,0 % richtige Richtungen 917 Treffern und einem einseitigen p-Wert von 0,050, ein Grenzfall. Stellt man die Formel um, braucht eine Quote von 52 % etwa 1.691 Handelstage (6,7 Jahre), um auf dem Signifikanzniveau von 5 % zu bestehen, und 51 % brauchen 6.764 Tage. Ist der Wert an mehr als der Hälfte der Tage gestiegen, ist „immer aufwärts“ die richtige Messlatte, nicht 50 %.

πt+1=post rt+1−c ∣post−post−1∣,SR=πˉsπ252\pi_{t+1} = \text{pos}_t\, r_{t+1} - c\,\lvert \text{pos}_t - \text{pos}_{t-1} \rvert, \qquad SR = \frac{\bar\pi}{s_\pi}\sqrt{252}
(7)

Die Kosten entscheiden über viele Projekte. In der Illustration des Foliensatzes ergibt ein Bruttogewinn von 0,04 % pro Tag bei einer täglichen Standardabweichung von 1 % eine Sharpe-Ratio von 0,63; zahlt man an 40 % der Tage 5 Basispunkte, halbiert sich der mittlere Gewinn, und die Sharpe-Ratio fällt auf 0,32. Schließlich simuliert der Foliensatz Strategien ganz ohne Vorhersagekraft: Über ein Jahr erreicht die beste von 100 im Mittel eine annualisierte Sharpe-Ratio von fast 2,5. Daher die deflationierte Sharpe-Ratio (deflated Sharpe ratio) von Bailey und López de Prado (2014) und die Mindestregel, jede ausprobierte Konfiguration offenzulegen.

Zurück zum Inhalt.

Fallen, Ethik und Inbetriebnahme

Märkte wechseln das Regime, Schlagzeilen können genau die Bewegung beschreiben, die man vorhersagt, Quellen ändern sich ohne Vorwarnung, und eine öffentliche Prognose zu einer echten Aktie hat rechtliche Grenzen.

  • Regime. Der Crash von 2020, als der VIX im März über 80 schloss, und der Energieschock von 2022 veränderten die Volatilität und die Ölabhängigkeit eines Energiewerts. Weisen Sie die Ergebnisse nach Zeiträumen getrennt aus, und vergleichen Sie wachsende und rollierende Fenster.
  • Data Leakage über Schlagzeilen. Viele Schlagzeilen erzählen den Handelstag nach („Aktie rutscht um 4 % ab“). Dem falschen Tag zugeordnet, sagen sie perfekt vorher. Der Foliensatz behandelt eine Richtungsgenauigkeit über 60 % als Alarmsignal, eine persönliche Vorsichtsregel, und schlägt vor, die Nachrichten um einen weiteren Tag zu verschieben: Ein einbrechender Score ist verdächtig.
  • Daten in Bewegung. Bereinigte Kurse werden nach jeder Dividende neu berechnet, delistete Aktien verschwinden aus kostenlosen Quellen, Makroreihen werden revidiert (ALFRED bewahrt die früheren Datenstände auf), RSS-Feeds vergessen. Rohdateien werden datiert, mit einem Hash versehen und nie überschrieben.
  • Recht und Offenlegung. Die EU-Marktmissbrauchsverordnung (Nr. 596/2014) verbietet Insidergeschäfte und die Verbreitung irreführender Informationen. Das Projekt nutzt nur öffentliche Quellen, platziert keine echte Order und stellt oben im README und in der Oberfläche klar, dass es sich um ein Lehrprojekt handelt, nicht um eine Anlageberatung.

Inbetriebnahme bedeutet einen abendlichen Batch-Lauf, etwa eine Stunde nach Börsenschluss, der dieselben Funktionen wie der Backtest für einen einzigen Tag aufruft und einen datierten Bericht schreibt; ein Test vergleicht die Prognose des Batch-Laufs für einen vergangenen Tag mit der des Backtests. Drift, behandelt in der Notiz zu Drift und konformer Vorhersage, wird auf drei Ebenen überwacht: Verteilungen der Merkmale (PSI), Volumen der Quellen (ein Feed bei null ist kaputt, nicht ruhig) und die kumulierte Trefferquote, deren Schwankungsband bei reinem Zufall über 60 Tage etwa ±12,7 Prozentpunkte beträgt. Eine kleine Streamlit-Seite liest nur die Berichte und kann daher kein Leak einführen.

Zurück zum Inhalt.

Das Wichtigste in Kürze

  1. Sagen Sie eine Rendite oder eine Richtung vorher, niemals ein Preisniveau: Auf Preisen ergibt selbst ein Random Walk ein R2R^2 nahe 1.
  2. Jedes Merkmal hat einen Verfügbarkeitszeitpunkt, und eine Schlagzeile gehört zur ersten Handelssitzung, die nach ihrer Veröffentlichung schließt.
  3. Validieren Sie per Walk-Forward, mit Referenzmodellen (null, Persistenz), die auf denselben Tagen und unter derselben Kostenannahme berechnet werden.
  4. Sentiment geht als einige tägliche Spalten in XGBoost ein; eine vorab festgelegte Ablation zeigt, ob es etwas beiträgt.
  5. Ein Unterschied ist erst nach einem Test ein Ergebnis: Diebold-Mariano für die Fehler, binomial für die Richtungen und genug Testtage, um einen kleinen Vorteil zu erkennen.
  6. Zählen Sie jede ausprobierte Konfiguration, und geben Sie die Sharpe-Ratio nach Kosten an; die beste von vielen nutzlosen Strategien sieht trotzdem gut aus.
  7. Ein sauberes, gut getestetes Fazit, dass das naive Modell nicht geschlagen wird, ist in der Finanzwelt ein gültiges Ergebnis.

Glossar

logarithmische Rendite (log return)
Der Logarithmus des Verhältnisses zweier aufeinanderfolgender Preise; Log-Renditen addieren sich über die Zeit.
Walk-Forward-Validierung (walk-forward validation)
Auf der Vergangenheit trainieren, auf dem folgenden Block testen, dann weiterrücken; der Ersatz für die gemischte Kreuzvalidierung bei Zeitreihen.
verzögerte Merkmale (lagged features)
Spalten mit vergangenen Werten einer Reihe (um einen oder mehrere Tage verschoben), damit ein tabellarisches Modell die Historie sieht.
Data Leakage
Informationen aus der Zeit nach dem Entscheidungszeitpunkt, die in die Merkmale oder den Trainingsdatensatz gelangen und Ergebnisse liefern, die sich im Livebetrieb nicht reproduzieren lassen.
Bereinigung und Sperrfrist (purging and embargo)
Das Entfernen von Trainingszeilen, deren Zielwert sich mit dem Testzeitraum überschneidet, sowie einer Marge danach, wenn Zielwerte mehrere Tage umfassen.
Referenzmodell (baseline)
Eine naive Prognose, etwa Rendite null oder Persistenz, die jedes Modell auf denselben Tagen schlagen muss.
Sentimentanalyse (sentiment analysis)
Die Umwandlung eines Textes in einen Score für seinen Ton, hier zwischen minus eins und plus eins pro Schlagzeile.
Ablationsstudie (ablation study)
Jeweils eine Familie von Merkmalen entfernen oder hinzufügen, um ihren Grenzbeitrag zu messen.
Stacking
Die Prognosen mehrerer Basismodelle mit einem Metamodell kombinieren, das auf ihren Out-of-Sample-Prognosen trainiert wird.
Diebold-Mariano-Test (DM test)
Ein Test auf gleiche Prognosegüte, beruhend auf den täglichen Differenzen der Verluste zweier Prognosen.
deflationierte Sharpe-Ratio (deflated Sharpe ratio)
Eine um die Zahl der ausprobierten Strategien korrigierte Sharpe-Ratio, verglichen mit dem Maximum, das allein durch Zufall zu erwarten ist.
Drift
Eine zeitliche Veränderung der Eingaben, der Quellen oder der Leistung eines Modells im Produktivbetrieb.

Die anderen Notizen des Kurses

Eine öffentliche Zusammenfassung pro Foliensatz, in der Reihenfolge des Kurses.

  1. EinführungKI-Winter, Arbeitsmarkt und Methode
  2. WerkzeugeKaggle, GitHub, Python: die Werkzeuge
  3. Sitzung 1Projektrahmen und kleinste Quadrate
  4. Sitzung 2Maximum Likelihood und logistische Regression
  5. Sitzung 3Gradientenabstieg, Ridge und Lasso
  6. Sitzung 4Entscheidungsschwelle und reproduzierbares ML
  7. HausaufgabeML-Projekt abstecken: der Projektsteckbrief
  8. Sitzung 5Kernel, SVM und Entscheidungsbäume
  9. Sitzung 6Random Forests, Boosting, ehrlicher Vergleich
  10. Sitzung 7SHAP, Fairness, PCA und Clustering
  11. HausaufgabeEin einfaches Modell mit vollständiger Methode
  12. Sitzung 8Neuronale Netze, Drift, konforme Vorhersage
  13. HausaufgabeEin ausgeliefertes Machine-Learning-Projekt
  14. Sitzung 9Ein Machine-Learning-Projekt verteidigen
  15. ReferenzProjekt zum Kreditausfallscore
  16. ReferenzAktienrenditen: XGBoost und Sentiment
  17. ReferenzPython-Code für jedes ML-Modell
  18. ReferenzDeep Learning, das Wesentliche
  19. ReferenzML-Projekte mit offenen Daten nach Branche
  20. ReferenzHandbuch für Daten- und KI-Fachleute
  21. ReferenzData Engineering, SRE und Cloud
  22. ReferenzPanorama der Machine-Learning-Modelle

Alle Notizen als Leseliste

Aufmerksamkeit und Transformer, Schritt für Schritt

Über diese Notizen

Vom Dozenten auf Grundlage der Folien verfasst, als öffentliche Zusammenfassung: die Kernideen, die Formeln und ein durchgerechnetes Beispiel. Die Übungen, ihre Lösungen, die Tests und die Bewertung bleiben im Foliensatz, für die Studierenden des Kurses.

Stand: .