Synthetic Data für Backtests: GANs & Diffusion Models in der Praxis.
Historische Marktdaten sind begrenzt. Wer eine Strategie ehrlich auf Tail-Risk und Regime-Wechsel testen will, stößt schnell an die Wand. Synthetic Data — generiert via GAN, TimeGAN oder Diffusion Models — bietet einen Ausweg. Aber: synthetisch ist nicht echt. Wie ich sie nutze, ohne mich selbst zu täuschen.
Eine 10-Jahres-Historie eines liquiden Asset-Universums ist nominell viel Daten. Effektiv aber: ein Bullen-Markt, eine kurze Korrektur, eine Erholung, vielleicht ein größerer Crash. Für statistische Aussagen über Strategie-Robustheit gegen Regime-Wechsel ist das wenig. Synthetic Data verspricht: zehntausende plausibler Marktphasen, beliebig konfigurierbar. Die Frage ist nur, was „plausibel“ in dem Kontext bedeutet.
Warum klassische Bootstraps nicht reichen.
Block-Bootstrap und Stationary Bootstrap erzeugen neue Pfade durch Re-Sampling existierender Returns. Das funktioniert für mittelfristige Statistik gut. Aber:
- Bootstrap kann keine Phasen erzeugen, die nicht in den Daten waren. Wer einen Volatilitäts-Shock à la März 2020 prognostizieren will, kann ihn nicht durch Resampling von ruhigen Phasen herbeiziehen.
- Bootstrap erhält statische Korrelationsstruktur, aber bricht dynamische Volatilitäts-Cluster nach längeren Blöcken.
- Cross-Asset-Co-Movements unter Stress (Korrelation steigt gegen 1 im Crash) werden in normalen Bootstraps nicht reproduziert.
Generative Modelle lernen die Verteilung der Marktdynamik und können daraus neue, nie gesehene Pfade generieren, die statistisch plausibel sind.
QuantGAN und TimeGAN.
QuantGAN (Wiese et al., 2020): adaptiert die Architektur von Wavenet (temporal convolutions) für Finanzdaten. Generiert univariate Return-Reihen, die zentrale Stylized Facts reproduzieren — Volatility Clustering, Heavy Tails, Leverage Effect.
TimeGAN (Yoon et al., 2019): kombiniert ein autoregressives supervisiertes Netzwerk mit einem GAN-Setup. Speziell für multivariate Zeitreihen ausgelegt. Gut für Cross-Asset-Generierung, etwa korrelierte Aktienindizes oder gekoppelte FX-Paare.
Beide haben Schwächen: Modus-Kollaps (das Modell generiert nur einen Teil der echten Verteilung) und Trainings-Instabilität. In der Praxis braucht es mehrere Trainings-Runs und sorgfältige Hyperparameter-Suche.
Diffusion Models (DDPM) für Returns.
Denoising Diffusion Probabilistic Models — seit 2020 dominant in Bildgenerierung — haben sich seit etwa 2023 auch für Finanzdaten etabliert. Idee: ein Vorwärtsprozess fügt iterativ Rauschen zu echten Returns hinzu, ein neuronales Netz lernt den Rückwärtsprozess. Nach Training generiert das Netz aus reinem Rauschen plausible Return-Pfade.
Vorteile gegenüber GANs:
- Stabileres Training, keine Mode-Collapse-Probleme
- Bessere Coverage der Verteilung — auch Tails werden erfasst
- Bedingte Generierung (Conditional DDPM) ist sauber implementierbar: „generiere Pfade unter Vorgabe einer Volatilität“ oder „unter Vorgabe einer Korrelations-Matrix“
Nachteil: Generierung ist langsam. Pro Pfad braucht es oft 50–1.000 Reverse-Steps. Für Strategie-Stress-Tests mit 10.000 Pfaden ist GPU-Zeit Pflicht.
Python-Snippet mit ydata-synthetic.
Die Bibliothek ydata-synthetic bündelt TimeGAN, DoppelGAN und einige Diffusion-Varianten für
Tabellen- und Zeitreihen-Daten.
# TimeGAN auf Returns trainieren und Pfade samplen import numpy as np import pandas as pd from ydata_synthetic.synthesizers.timeseries import TimeGAN from ydata_synthetic.synthesizers import ModelParameters, TrainParameters returns = pd.read_csv('returns.csv', parse_dates=['date'], index_col='date') # Multivariate Return-Reihen: SPY, TLT, GLD, DBC, VIX seq_len = 60 # 60-Tage-Sequenzen n_seq = 5 # 5 Assets model_args = ModelParameters( batch_size=128, lr=5e-4, noise_dim=32, layers_dim=128, latent_dim=24 ) train_args = TrainParameters(epochs=10000, sequence_length=seq_len, number_sequences=n_seq) gan = TimeGAN(model_parameters=model_args, hidden_dim=24, seq_len=seq_len, n_seq=n_seq, gamma=1) gan.train(returns.values, train_args) # 10.000 synthetische Pfade à 60 Tage erzeugen synthetic = gan.sample(10000) # shape: (10000, 60, 5)
Validierung: sind die synthetischen Daten brauchbar?
Ohne Validierung ist Synthetic Data wertlos — ein Mandant zeigte mir 2031 ein TimeGAN-Setup, das auf S&P-Returns trainiert war, aber Renditen mit Standardabweichung 11 % pro Tag generierte. Klar unbrauchbar, aber niemand hatte es geprüft.
Mein Validierungs-Stack:
- Marginal Distributions: KS-Test pro Asset, ob synthetische und echte Returns aus derselben Verteilung kommen. Plus QQ-Plots.
- Autocorrelation: ACF und PACF auf Returns und auf |Returns| (für Volatilitäts-Cluster) vergleichen.
- Cross-Correlation: synthetische Cross-Asset-Korrelations-Matrix vs. echte. Mit Frobenius-Norm der Differenz.
- Stylized Facts: Heavy Tails (Hill-Estimator), Leverage Effect, Volatility Clustering messen — bei echten und synthetischen Daten.
- Train-on-Synthetic-Test-on-Real (TSTR): ein Klassifikator wird auf synthetischen Daten trainiert, auf echten getestet. Performance vergleichen mit Train-on-Real-Test-on-Real.
Erst wenn alle fünf Tests akzeptabel sind, lasse ich synthetische Daten in die Backtest-Pipeline.
Bedingte Generierung: gezielter Stress-Test.
Der wahre Mehrwert von Synthetic Data liegt in conditional generation. Beispiele aus echten Projekten:
- „Generiere 5.000 Pfade unter realisierter Vol = 35 %“ — Stress-Test gegen Hoch-Vol-Phasen, von denen es historisch nur drei gibt.
- „Generiere Pfade mit korrelations-induziertem Co-Movement zwischen Bonds und Aktien“ — den 2022er-Stress-Fall durchspielen.
- „Generiere Pfade nach einem Vol-Shock (initial Spike auf 50 %)“ — Strategie-Verhalten nach Crash testen.
Conditional DDPMs sind hier das Werkzeug der Wahl. TimeGAN kann conditional generieren, ist aber technisch klobiger.
Anwendung: Strategy-Stress-Testing.
Aus einem Mandanten-Projekt 2032: ein systematisches Vol-Carry-Setup auf VIX-Futures. Historisches Backtest: Sharpe 1,3, Max Drawdown 18 %. Synthetic-Stress-Test mit 10.000 Pfaden, davon 1.000 conditional auf „Vol-Spike auf 50 % innerhalb von 5 Tagen“:
- Median Sharpe über alle 10.000 Pfade: 1,12
- 5 %-Quantil Drawdown: 31 %
- In den 1.000 Vol-Spike-Pfaden: Median Drawdown 38 %, 5 %-Quantil 52 %
Das hat den Mandanten dazu gebracht, einen Vol-Trigger einzubauen, der die Strategie bei VIX > 35 in Cash-Modus schickt. Mit Trigger: 5 %-Quantil Drawdown bei 22 %. Live-tauglich.
Caveats und Risiken.
- Extrapolation: GANs und Diffusion Models können Pfade generieren, die historisch unmöglich sind — extrem hohe oder negative Returns. Sanity-Checks sind Pflicht.
- Mode-Collapse: das Modell könnte bestimmte Marktphasen unterrepräsentieren. Vor allem seltene Tails. Hier helfen Diffusion Models über GANs.
- Trainingsdaten-Lock-In: das Modell repliziert nur, was historisch da war. Es erfindet keine neuen Regimes. Wer Negative Rates oder einen neuartigen Stressor testen will, kommt mit klassischer Generation nicht weiter.
- Strategie-Overfitting auf Synthetic: wer Strategien auf synthetischen Daten optimiert, kann das Modell überlisten, nicht den Markt. Selection-Bias verschiebt sich, verschwindet nicht.
Meine Praxis.
Synthetic Data nutze ich ausschließlich als Ergänzung, nie als Ersatz für echte Historie. Konkret:
- Strategie-Entwicklung und initiales Backtesting passieren auf echten Daten.
- CPCV und Permutation Tests laufen auf echten Daten.
- Synthetic Data kommt im Stress-Testing zum Einsatz — speziell Tail-Risk und Regime-Wechsel.
- Conditional Generation wird genutzt, um spezifische Risiko-Szenarien zu durchleben, die historisch zu selten sind.
- Live-Allokationsentscheidungen basieren nie allein auf synthetischen Backtests.
Was Synthetic Data nicht ist: ein Generator für unbegrenzte Datenmengen, mit dem Sie Multiple-Testing-Probleme wegzaubern können. Wer 50.000 Strategien auf synthetischen Daten testet, hat 50.000 Strategien getestet — die DSR-Korrektur gilt unverändert.
Was Synthetic Data ist: ein präzises Werkzeug, um spezifische Schwachstellen einer Strategie sichtbar zu machen. Eingesetzt mit Validierung und kritischem Blick, ist es eine echte Bereicherung des Methoden-Stacks. Eingesetzt ohne Validierung, ist es teurer Selbstbetrug auf GPU-Basis.
Sie wollen Ihre Strategie auf 10.000 synthetische Marktphasen testen — mit ehrlicher Validierung der Daten? Erstgespräch buchen — wir bauen das Synthetic-Data-Setup gemeinsam auf.