Ein Modell kann korrekt sein und dennoch Unsinn produzieren, wenn die zugrunde liegenden Daten auf eine Weise fehlerhaft sind, die niemand geprüft hat. Kapitalmaßnahmen gehören zu den häufigsten Ursachen dafür und zugleich zu den am leichtesten zu übersehenden, denn der Fehler präsentiert sich meist als plausible Zahl statt als offensichtlicher Defekt.
Die Mechanik ist unspektakulär. Ein Unternehmen führt einen Aktiensplit durch, und der Kurs fällt über Nacht um den Split-Faktor, ohne dass sich wirtschaftlich etwas geändert hätte. Es zahlt eine Dividende, und der Schlusskurs am nächsten Morgen rückt nach unten. Es gliedert eine Sparte aus, fusioniert mit einem Wettbewerber oder ändert sein Tickersymbol. Jedes dieser Ereignisse verändert die Rohzeitreihe auf eine Art, die nichts mit der Rendite zu tun hat. Wenn Sie eine Tagesrendite über einen 4-zu-1-Split hinweg berechnen, ohne ihn zu bereinigen, lesen Sie einen Verlust von 75 Prozent ab, den es nie gegeben hat. Speisen Sie das in ein Modell ein, lernt es aus einer Kursbewegung, die ein reines Buchhaltungsartefakt ist.
Bereinigt versus unbereinigt – und warum die Unterscheidung zählt
Es gibt zwei legitime Sichtweisen auf eine Kurshistorie, und sie zu verwechseln ist der Ausgangspunkt für den größten Schaden.
Die unbereinigte Zeitreihe ist das, was an dem jeweiligen Tag tatsächlich über das Tableau lief. Sie ist die richtige Wahl, wenn es Ihnen um den real gehandelten Kurs, die Abwicklung oder jede Berechnung geht, die mit dem übereinstimmen muss, was eine Gegenpartei gesehen hat.
Die bereinigte Zeitreihe rechnet eine Split-Bereinigung und die Dividendenreinvestition rückwirkend in die historischen Kurse ein, sodass eine durchgängige Renditeberechnung über das Ereignis hinweg korrekt ist. Eine Bereinigung ist das, was Sie für Renditen, Momentum, Volatilität und nahezu alles brauchen, worauf ein Modell trainiert. Der Haken: Eine bereinigte Zeitreihe ist keine Tatsache über die Vergangenheit, sondern eine abgeleitete Größe, die sich mit jeder neuen Maßnahme ändert. Der Schlusskurs, den Ihr Datensatz für einen beliebigen Tag vor drei Jahren ausweist, wird nach dem nächsten Split eine andere Zahl sein, obwohl sich an jenem Tag nichts geändert hat. Das ist korrektes Verhalten – aber nur, wenn Ihre Pipeline das weiß und Ihre nachgelagerten Verbraucher ebenfalls.
Die Split-Bereinigung richtig hinzubekommen bedeutet mehr, als nur Kurse zu skalieren. Das Volumen skaliert invers, Dividenden haben ihre eigene Reinvestitionslogik, und die Reihenfolge, in der Sie sich überlappende Maßnahmen anwenden, macht einen Unterschied. Eine Pipeline, die Splits verarbeitet, aber Sonderdividenden ignoriert, wird auf subtile Weise falsch sein – und subtil falsch ist die Art von Fehler, die am schwersten zu erkennen ist.
Wiederverwendete Kennungen zerstören das Entity-Matching
Das schwierigere Problem ist die Identität. Tickersymbole werden recycelt. Ein Symbol, das einem Unternehmen gehörte, kann nach einem Delisting oder einer Fusion einem völlig anderen zugewiesen werden. Kennungsänderungen laufen auch in die andere Richtung: Dieselbe wirtschaftliche Einheit trägt bei verschiedenen Anbietern unterschiedliche Symbole oder ändert das eigene im Lauf der Zeit. Ist Ihr Join-Schlüssel ein Ticker und sonst nichts, wird ein Spin-off oder ein wiederverwendetes Symbol stillschweigend zwei unverbundene Unternehmen zu einer Zeitreihe zusammennähen. Der Chart sieht durchgängig aus. Die Historie ist eine Fiktion.
An dieser Stelle hört eine Kapitalmaßnahme auf, ein reines Kursthema zu sein, und wird zur Frage der Entity Resolution. Die Punkte, die wir bei jedem Feed durcharbeiten:
- Trägt jeder Kursdatensatz eine stabile interne Entity-ID und nicht nur das Anbietersymbol, das an jenem Tag zufällig aktiv war?
- Wenn ein Ticker wiederverwendet wird: Trennt die Pipeline die Zeitreihe am Übergabedatum, statt über ihn hinweg zu verketten?
- Wird bei einer Fusion oder einem Spin-off der Kalender der Kapitalmaßnahmen gegen den Kurs-Feed abgeglichen, sodass der Bruch in beiden sichtbar wird?
- Werden Kennungsänderungen der Anbieter mit Stichtagen erfasst, sodass eine zeitpunktbezogene Abfrage das Symbol auflöst, das damals korrekt war, und nicht das von heute?
Alles zeitpunktbezogen halten
Das letzte Element ist das Timing. Eine Kapitalmaßnahme hat ein Ankündigungsdatum und ein Wirksamkeitsdatum, und die beiden fallen selten zusammen. Ein Backtest, der Kurse mit dem endgültigen Verhältnis bereinigt, bevor die Maßnahme überhaupt angekündigt wurde, liest die Zukunft. Das ist Lookahead, und es schönt die Ergebnisse genau auf die Weise, die eine flüchtige Prüfung übersteht und in der Produktion scheitert.
Die Bereinigung muss also stichtagsgenau versioniert sein. Die Zeitreihe, die ein Backtest an einem bestimmten historischen Tag sieht, sollte nur die Maßnahmen widerspiegeln, die an jenem Tag bekannt und wirksam waren – nicht den vollständigen Satz, den wir heute haben. Das ist aufwendiger zu bauen als eine einzelne, vollständig bereinigte Tabelle, und es ist die einzige Version, die Ihnen sagt, was eine Strategie tatsächlich getan hätte.
Eine übersehene Maßnahme kündigt sich nicht an. Sie verfälscht eine Rendite, diese Rendite verfälscht ein Feature, das Feature verfälscht das Modell, und der Fehler im Entity-Matching kontaminiert stillschweigend alles, was darüber verknüpft wird. Wenn der Eval-Score abzudriften beginnt, liegt die Ursache mehrere Schichten weiter oben in der Kette. Der günstigere Weg ist, den Kalender der Kapitalmaßnahmen als erstklassigen Input zu behandeln, ihn gegen den Kurs-Feed abzugleichen und das Ganze bis zur Quelle hinunter prüfbar zu halten. Mühsam – und weitaus weniger teuer, als es später zu entdecken.