Auf einen Blick

Ein Entwickler aus der Algorithmic-Trading-Community baute eine vollständige Lopez-de-Prado-Pipeline in Rust — mit 442 bestandenen Tests, null bekannten Bugs und sauberem Code. Das Ergebnis: AUC = 0.50 Out-of-Sample, also nicht besser als purer Zufall. Dieser Fall, der auf Reddit im Subreddit r/algotrading mit 24 Upvotes und 43 Kommentaren diskutiert wurde, trifft einen Nerv in der Community — denn er zeigt, dass technische Korrektheit und statistische Vorhersagekraft zwei völlig verschiedene Dinge sind. Das Problem liegt nicht im Code, sondern in der Natur von Finanzmärkten und subtilen methodischen Fallen, die selbst erfahrene Entwickler übersehen. Wer verstehen will, warum Machine Learning im Trading so schwer ist, findet hier eine ehrliche Analyse.


Was die Quellen sagen

Die einzige öffentlich verfügbare Quelle zu diesem Fall ist ein Reddit-Thread aus r/algotrading, der die Situation präzise auf den Punkt bringt: saubere Implementierung, saubere Tests, aber kein Alpha. Die 43 Kommentare unter dem Post deuten darauf hin, dass das Problem weitreichende Resonanz in der Community erzeugt — denn es ist kein Einzelfall, sondern ein strukturelles Muster.

1 von 1 Quellen referenziert das Lopez-de-Prado-Framework direkt im Kontext von AUC-Problemen Out-of-Sample. Das ist statistisch wenig, inhaltlich aber umso aussagekräftiger, weil es ein bekanntes Phänomen beleuchtet: Die methodischen Herausforderungen aus Marcos Lopez de Prados Buch “Advances in Financial Machine Learning” werden in der Praxis oft unterschätzt.

Widersprüche tauchen regelmäßig in dieser Community auf: Während ein Teil der Entwickler argumentiert, dass ein AUC von 0.50 schlicht bedeutet, dass keine verwertbare Struktur in den Daten vorhanden ist, besteht die andere Seite darauf, dass der Fehler fast immer methodischer Natur ist — falsches Labeling, Data Leakage oder fehlerhafte Cross-Validation. Beide Lager haben recht, je nach konkretem Fall.


Das Lopez-de-Prado-Framework: Was steckt dahinter?

Marcos Lopez de Prado, Quantitative Researcher und Autor des einflussreichen Buches “Advances in Financial Machine Learning” (2018), entwickelte ein Framework, das klassische Machine-Learning-Methoden auf Finanzmärkte anpasst. Die wichtigsten Bausteine:

Triple-Barrier-Labeling: Statt einfacher Up/Down-Labels werden Preisbewegungen durch drei Barrieren definiert — eine obere (Profit-Take), eine untere (Stop-Loss) und eine zeitliche Barriere. Das erzeugt ökonomisch sinnvolle Labels, ist aber komplex in der Implementierung.

Purged K-Fold Cross-Validation: Standard-KFold-CV verletzt bei Zeitreihendaten die IID-Annahme massiv. Lopez de Prado schlägt eine modifizierte Variante vor, die einen “Purgierungsabstand” zwischen Trainings- und Validierungsdaten einbaut, um Look-ahead-Bias zu eliminieren.

Sample Weights: Finanzielle Datenpunkte sind nicht gleich wichtig. Überlappende Labels führen zu Autokorrelation. Sample Weights auf Basis von Uniqueness und Informationsgehalt sollen dieses Problem adressieren.

Meta-Labeling: Ein zweistufiges Modell, bei dem zunächst die Richtung prognostiziert wird und dann die Positionsgröße durch ein zweites Modell bestimmt wird.

In Rust eine solche Pipeline zu bauen, die 442 Tests besteht, ist technisch beeindruckend. Dass das AUC trotzdem bei 0.50 landet, zeigt: Technische Korrektheit ist notwendig, aber nicht hinreichend.


Die sieben häufigsten Ursachen für AUC = 0.50 OOS

1. Subtiles Data Leakage trotz korrektem Code

Data Leakage ist der häufigste Killer von ML-Modellen im Finance-Bereich — und er ist oft unsichtbar. Selbst wenn der Code korrekt ist, können Fehler im Feature-Engineering eingeschlichen sein: Normalisierungsstatistiken, die auf dem gesamten Dataset berechnet wurden, oder gleitende Durchschnitte, die zukünftige Datenpunkte einschließen.

Ein Test besteht, aber die Frage ist: Testet er das Richtige? 442 Unit-Tests können beweisen, dass jede Funktion isoliert korrekt arbeitet — aber kein Test kann beweisen, dass keine Feature-Leckage existiert, wenn Features und Labels gemeinsam berechnet wurden.

2. Fehler in der Purged Cross-Validation

Die korrekte Implementierung von Purged K-Fold ist trickreicher als sie aussieht. Der “Embargo”-Zeitraum muss groß genug sein, um alle überlappenden Labeling-Fenster vollständig auszuschließen. Ist das Embargo zu klein, fließen Informationen aus dem Test-Set in das Training — AUC erhöht sich künstlich in der Entwicklungsphase, kollabiert aber OOS.

3. Das Labels-Problem: Triple-Barrier mit zu weiten Schranken

Wenn die Profit-Take- und Stop-Loss-Barrieren zu weit gesetzt sind, dominiert die zeitliche Barriere. Das Ergebnis: Die meisten Labels werden durch das Ende des Zeithorizonts bestimmt, nicht durch tatsächliche Marktbewegungen. Das macht die Labels informativer für die Uhrzeit als für den Markt.

4. Überangepasste Features durch Multiple Testing

Wer 50 technische Indikatoren berechnet und die fünf besten auswählt, hat nicht die besten Features gefunden — er hat overfittet. Lopez de Prado selbst betont das Problem des “Multiple Testing Bias” ausführlich. Ohne Korrektur (z.B. Bonferroni oder Benjamini-Hochberg) sind scheinbar starke Features oft Zufallsartefakte.

5. Nicht-stationäre Features

Preise selbst sind nicht stationär. Log-Returns sind es besser, aber immer noch nicht ideal. Wenn Feature-Engineering auf rohen Preisen basiert, lernt das Modell möglicherweise Niveau-Abhängigkeiten, die OOS nicht reproduzierbar sind.

6. Klassen-Imbalance und Sample Weights ignoriert

Triple-Barrier-Labeling erzeugt oft stark ungleich verteilte Klassen. Wenn Sample Weights falsch berechnet oder gar nicht verwendet werden, tendiert das Modell dazu, die Mehrheitsklasse vorherzusagen — was sich als AUC nahe 0.50 äußert.

7. Kein Signal in den Daten

Manchmal ist die unbequeme Wahrheit: Das gewählte Instrument, der Zeitrahmen oder die Feature-Kombination enthält schlicht kein vorhersagbares Signal. Märkte sind in vielen Regimen effizient. AUC = 0.50 ist dann nicht Failure — es ist die korrekte Antwort auf eine Frage, auf die es keine Antwort gibt.


Vergleich: Tools für ML-basiertes Algorithmic Trading

ToolPreisBesonderheitSprache
LightGBMKostenlosGradient Boosting, schnell & speichereffizientPython, C++, R
mlfinlab (von Lopez de Prado)Kostenlos (Open Source)Offizielle AFML-Implementierungen in PythonPython
Rust (custom)EntwicklungszeitMaximale Performance, kein OverheadRust
scikit-learnKostenlosBreit verfügbar, gute CV-ToolsPython
XGBoostKostenlosBewährt, leicht zu nutzenPython, R

Preise und Kosten

Das Besondere an diesem technischen Stack: Die Tools selbst kosten nichts. LightGBM ist vollständig kostenlos und Open Source, entwickelt und gepflegt von Microsoft. Es ist eines der meistgenutzten Frameworks für tabellare Daten im Quantitative-Finance-Bereich und übertrifft in vielen Benchmarks klassisches XGBoost in Sachen Trainingsgeschwindigkeit und Speicherverbrauch.

Laut der offiziellen Dokumentation auf lightgbm.readthedocs.io bietet LightGBM:

  • Histogram-basiertes Boosting für drastisch reduzierte Trainingszeit
  • Native Unterstützung für kategorische Features
  • DART (Dropouts meet Multiple Additive Regression Trees) als Regularisierungsoption
  • Paralleles Training auf Multi-Core und GPU

Offizielle LightGBM-Dokumentation auf lightgbm.readthedocs.io — Microsofts Open-Source-Framework für Gradient Boosting

Die eigentlichen Kosten in diesem Ökosystem sind nicht monetär — sie sind zeitlich: Eine korrekte Lopez-de-Prado-Pipeline in Produktionsqualität zu implementieren, dauert Monate. In Rust zu implementieren bedeutet: kein Zugang zu Python-Ökosystem-Bibliotheken wie mlfinlab, keine schnellen Iterationszyklen, mehr Debugging-Aufwand für dieselbe Funktionalität. Das ist eine legitime Designentscheidung für Produktionssysteme — aber ein erheblicher Forschungs-Overhead in der Explorationsphase.


Was würde ein erfahrener Quant jetzt tun?

Die Community-Diskussion um diesen Fall legt nahe — auch wenn die konkreten Kommentar-Inhalte nicht vollständig dokumentiert sind — dass die nächsten diagnostischen Schritte folgende sein sollten:

Schritt 1: In-Sample AUC prüfen. Wenn das Modell OOS nicht besser als Zufall ist, in-sample aber AUC > 0.6 zeigt, liegt mit hoher Wahrscheinlichkeit Overfitting oder Data Leakage vor. Liegt auch in-sample AUC nahe 0.50, fehlt schlicht ein Signal.

Schritt 2: Feature Importance analysieren. Permutation Importance (nicht Gain oder Split Count!) kann zeigen, ob überhaupt Features existieren, die konsistenten Beitrag leisten. Wenn alle Features ähnlich unwichtig sind, ist das ein Signal für rauschartige Inputs.

Schritt 3: Walk-Forward-Analyse statt CV. Purged K-Fold ist gut für Hyperparameter-Tuning, aber Walk-Forward-Backtesting (expanding window oder rolling window) gibt ein realistischeres Bild der OOS-Performance.

Schritt 4: Einfacheres Modell testen. Bevor man LightGBM mit 100 Features nutzt: Kann ein logistisches Regressionsmodell mit 3 Features irgendeinen Edge zeigen? Wenn nicht, ist das Problem fundamentaler Natur.

Schritt 5: Datenqualität prüfen. Tick-Daten, Minutendaten, Tagesdaten — jeder Horizont hat andere Effizienz-Eigenschaften. Auf Tagesdaten US-Aktien zu modellieren ist extrem schwer. Illiquidere oder nischigere Assets können mehr vorhersagbare Struktur enthalten.


Fazit: Für wen lohnt es sich?

Das Lopez-de-Prado-Framework ist eines der methodisch solidesten Fundamente für ML-basiertes Trading — aber es ist kein Erfolgsgarant. Es eliminiert bekannte Quellen von illusorischem Alpha: Data Leakage, fehlerhafte CV, naive Labels. Was es nicht liefern kann, ist das Signal selbst.

Rust als Implementierungssprache ist eine interessante Wahl für Produktionssysteme mit Performance-Anforderungen — aber für Forschung und Exploration ist der Overhead erheblich. Die fehlende Anbindung an Python-Bibliotheken wie mlfinlab, pandas, scikit-learn oder LightGBM macht schnelle Iteration schwieriger.

AUC = 0.50 OOS ist kein Versagen der Implementierung — es ist ein ehrliches Ergebnis. Wer diese Zahl sieht, hat zumindest sichergestellt, dass er sich nicht selbst belügt. Das ist mehr wert, als viele glauben. Die nächste Frage lautet: Gibt es überhaupt verwertbare Struktur in diesen Daten, auf diesem Zeitrahmen, mit diesen Features? Und diese Frage beantwortet kein Test, kein Compiler und kein Framework — nur tieferes Verständnis der Marktmikrostruktur.

Für Entwickler, die ernsthaft in Quantitative Finance einsteigen wollen, gilt: Die Investition in das Verständnis der AFML-Methodik lohnt sich. Aber kombiniert sie mit schnellen Iterationszyklen in Python, bevor Performance-Optimierungen in Rust angegangen werden. Signale zu finden ist schwerer als Code zu schreiben — und 0.50 AUC ist die Marktmikrostruktur, die einem das deutlich mitteilt.


Quellen

  1. Reddit: Built a full Lopez de Prado pipeline in Rust. 442 tests pass, 0 bugs, but AUC=0.50 OOS — r/algotrading, Score: 24, 43 Kommentare
  2. LightGBM Dokumentation — Offizielles Microsoft Gradient-Boosting-Framework