Fraktionale Differenzierung:Definition, Formel und Stationarität
Offizielle Definition
Die Fraktionale Differenzierung (in der Fachliteratur oft als Fracdiff bezeichnet) ist ein mathematisches Transformationsverfahren für Finanzzeitreihen im Bereich des maschinellen Lernens, maßgeblich formalisiert durch Marcos López de Prado (2018). Sie löst das zentrale Dilemma der quantitativen Datenvorverarbeitung: Ganze Differenzierungsgrade (d = 1, wie tägliche Renditen) erzeugen zwar statistische Stationarität, löschen jedoch das gesamte langfristige Marktgedächtnis (Memory) über historische Preisfundamente aus. Bei unberührten Kursen (d = 0) bleibt das Gedächtnis vollständig erhalten, doch die Nicht-Stationarität führt zu Scheinkorrelationen. Durch die Wahl einer reellen Zahl d zwischen 0 und 1 transformiert die fraktionale Differenzierung Zeitreihen in streng stationäre Features, während das Maximum an Vorhersageinformation für Algorithmen konserviert wird.
Steckbrief: Fraktionale Differenzierung auf einen Blick
| Kategorie: | Machine Learning & NLP / Algorithmischer Handel & Backtesting |
| Begründer: | Marcos López de Prado (2018, „Advances in Financial Machine Learning“) |
| Mathematische Basis: | Fraktionale Infinitesimalrechnung, Binomialreihen-Expansion des Lag-Operators |
| Primäre Input-Parameter: | Preiszeitreihe (Xt), Differenzierungsgrad (d), Schwellenwert-Toleranz (τ) |
| Typischer Optimalwert: | d zwischen 0,30 und 0,50 (Stationarität bei Korrelation > 0,90 zum Originalpreis) |
| Hauptnutzen: | Erzeugung ML-konformer stationärer Daten ohne Zerstörung des Trendgedächtnisses |
Methodische Funktionsweise: Stationarität versus Marktgedächtnis
Machine-Learning-Modelle erfordern stationäre Trainingsdaten, da sich ihre statistischen Eigenschaften (Mittelwert und Varianz) über die Zeit nicht verändern dürfen. Standardmäßig berechnen Quants einfache Renditen (d = 1). Dies führt jedoch dazu, dass das Modell verlernt, auf welchem absoluten Bewertungsniveau sich der Markt befindet. Ein Kurssturz von 5 Prozent bei einem Allzeithoch sieht für das Modell exakt genauso aus wie ein 5-Prozent-Sturz nach einem monatelangen Bärenmarkt. Die fraktionale Differenzierung überbrückt diesen Informationsverlust durch kontinuierliche Skalierung.
Der Zielkonflikt und der ADF-Optimalwert
Zur Bestimmung des idealen Differenzierungsgrades d führt man für Werte von d = 0 bis d = 1 in Schritten von 0,05 den Augmented-Dickey-Fuller-Test (ADF) durch. Gleichzeitig misst man die Korrelation der transformierten Reihe zur Originalzeitreihe. Das Ziel ist es, den kleinstmöglichen Wert d* zu identifizieren, bei dem die Nullhypothese einer Einheitswurzel (Nicht-Stationarität) beim 95-Prozent-Konfidenzniveau verworfen werden kann. In liquiden Aktien- und Futures-Märkten genügt hierfür meist ein d zwischen 0,35 und 0,45. Bei diesem Wert ist die Reihe bereits stationär, bewahrt aber noch rund 90 bis 95 Prozent des ursprünglichen Preissignals.
Interaktiver Simulator
Verändere den Differenzierungsgrad d und beobachte den Erhalt des Marktgedächtnisses in Echtzeit.
Stationarität vs. Memory Simulator
Praxis-Intuition: Das Memory-Dilemma einfach veranschaulicht
Die Markt-Analogie: Warum $d = 1$ unter Amnesie leidet
Betrachte den Unterschied zwischen Kursen und Renditen wie das Armaturenbrett eines Autos:
- Der Originalkurs ($d = 0$): Entspricht dem Gesamtkilometerstand. Er zeigt genau, wie weit das Auto über seine gesamte Lebensdauer gefahren ist, steigt aber permanent an (nicht stationär).
- Die Standard-Rendite ($d = 1$): Entspricht dem Tachometer. Er misst die aktuelle Geschwindigkeit von Moment zu Moment (stationär), vergisst aber augenblicklich, ob du eine 5.000-Kilometer-Fahrt hinter dir hast oder frisch aus der Garage rollst.
Warum ML-Modelle ohne Gedächtnis scheitern (Das 4-%-Problem)
Wenn ein Machine-Learning-Modell nur mit täglichen Renditen (d = 1) trainiert wird, verliert es den Bezug zum Bewertungsniveau. Ein Kurssturz von -4 % an einem Allzeithoch sieht für den Algorithmus exakt identisch aus wie ein Sturz von -4 % nach einem monatelangen Crash am Marktboden.
Der Ausweg durch Fracdiff (d ≈ 0,35):
Die fraktionale Differenzierung zieht dem Signal nur so viel Gedächtnis ab, wie für das Bestehen des ADF-Stationaritätstests (p < 0,05) zwingend erforderlich ist. Das Modell erhält stationäre Daten, behält aber noch rund 85 bis 90 % der historischen Preisniveaus im Speicher.
Mathematische Entwicklung und Fixed-Width Window (FFD)
Formal basiert die Differenzierung auf der Binomialreihen-Entwicklung des Lag-Operators B:
Die Gewichte wk für jede historische Verzögerung k lassen sich iterativ über eine einfache Rekursionsvorschrift ermitteln:
Da unendliche Reihen in der Praxis nicht berechenbar sind und expandierende Fenster zu Beginn der Historie weniger Speicherpunkte besitzen als am Ende, entwickelte López de Prado das Fixed-Width Window Fracdiff (FFD). Hierbei werden alle Gewichte abgeschnitten, deren Betrag unter eine winzige Fehlertoleranz τ (beispielsweise 1e-4) fällt. Die transformierte Zeitreihe ergibt sich als gewichtete Summe über ein festes Zeitfenster der Länge l:
Dieses feste Fenster stellt sicher, dass jede Beobachtung mit identischer historischer Information gewichtet wird und kein Look-Ahead-Bias entsteht.
Python-Implementierung: FFD nach López de Prado
Die folgende Referenz-Implementierung in reinem NumPy berechnet die fraktionalen Gewichte über die rekursive Binomialentwicklung, schneidet Werte unterhalb der Fehlertoleranz $\tau$ (Cut-off) ab und wendet das feste Zeitfenster (Fixed-Width Window) ohne zeitlichen Versatz auf die Zeitreihe an:
import numpy as np
import pandas as pd
def get_ffd_weights(d: float, threshold: float = 1e-4, max_lags: int = 1000) -> np.ndarray:
w = [1.0]
for k in range(1, max_lags):
w_k = -w[-1] * (d - k + 1.0) / k
if abs(w_k) < threshold:
break
w.append(w_k)
return np.array(w[::-1])
def frac_diff_ffd(series: pd.Series, d: float, threshold: float = 1e-4) -> pd.Series:
weights = get_ffd_weights(d=d, threshold=threshold)
width = len(weights)
res = {}
for i in range(width - 1, len(series)):
window = series.iloc[i - width + 1 : i + 1]
res[series.index[i]] = np.dot(weights, window.values)
series_name = series.name if series.name is not None else "close"
return pd.Series(res, name=f"{series_name}_ffd_d{d:.2f}")
Hinweis für Produktivsysteme: Für sehr umfangreiche Tick- oder Intraday-Daten empfiehlt sich die Vektorisierung via Fast Fourier Transform (FFT) oder kompilierte Numba-Schleifen, um die Faltung über Millionen Zeitschritte latenzfrei auszuführen.
Einsatz am Kapitalmarkt: Robustes Feature Engineering im Algo-Trading
In professionellen Quant-Forschungsabteilungen bildet FFD das Fundament der Datenarchitektur:
- Überlegene Input-Features für ML-Klassifikatoren: Werden baumbasierte Modelle (Random Forests, Gradient Boosting) oder neuronale Netze mit fraktional differenzierten Kursen gefüttert, steigt die Vorhersagekraft signifikant gegenüber Modellen, die nur einfache Renditen nutzen. Die Modelle erkennen zyklische Extrempunkte, ohne gegen Stationaritätsannahmen zu verstoßen.
- Optimale Synergie mit Meta-Labeling: Das sekundäre ML-Modell im Meta-Labeling kann dank erhaltener Memory-Strukturen wesentlich präziser beurteilen, ob ein Trade in einem überkauften oder überverkauften Marktregime ausgelöst wird.
- Beseitigung von instabilen Regime-Shifts: Reine Rendite-Features ignorieren makroökonomische Niveaus. Fraktionale Features transportieren die Historie der letzten Wochen und Monate verlustfrei in das Trainingsfenster.
Methodische Grenzen und Fallstricke
Trotz ihrer theoretischen Eleganz verlangt die Implementierung Sorgfalt:
- Rechenaufwand bei Tick- und Intraday-Daten: Die Faltung langer Zeitreihen mit Hunderten historischen Gewichten pro Zeitschritt erfordert erhebliche Rechenkapazitäten, weshalb vektorisierte oder C-optimierte Bibliotheken unverzichtbar sind.
- Sensitivität der Gewichtstoleranz (τ): Wird der Schwellenwert zu groß gewählt, bricht das FFD-Fenster zu früh ab und das Verfahren verliert seine Stationaritätseigenschaften. Ein zu kleiner Wert bläht die Historie unnötig auf.
- Instabilität bei historischen Strukturbrüchen: Kommt es zu extremen Marktsprüngen (Flash Crashes), können fraktionale Zeitreihen temporär Phantomschwankungen abbilden, bis die extremen Gewichte aus dem Fenster herauswandern.
Häufig gestellte Fragen zur fraktionalen Differenzierung
Eine ganze Differenzierung von d = 1 eliminiert jegliches Gedächtnis der Zeitreihe vollständig. Das Modell verliert sämtliche Informationen über Unterstützungs- und Widerstandszonen, historische Bewertungsniveaus und übergeordnete Trendzyklen.
Man testet aufsteigende Werte von d über den Augmented-Dickey-Fuller-Test (ADF). Der niedrigste Wert, bei dem der p-Wert unter 0,05 fällt und somit statistische Stationarität nachweist, wird als optimales d gewählt.
Standard-Fracdiff nutzt ein expandierendes Fenster, wodurch frühe Datenpunkte mit weniger Historie berechnet werden als spätere (Gefahr von Schätzverzerrungen). FFD nutzt ein festes Fenster mit konstantem Informationsumfang für jeden Zeitschritt.
Mathematisch ja, für Finanzzeitreihen ist dies jedoch nicht sinnvoll. Da Finanzkurse integriert von der Ordnung 1 sind, genügt immer ein Wert zwischen 0 und 1, um Stationarität zu erreichen.