Diffusion Models für Marktdaten: Sampling aus erlernten Verteilungen.
Diffusion Models haben die Bild- und Audio-Welt umgekrempelt. In der Finanzmodellierung sind sie kein Forecasting-Wundermittel — aber ein erstaunlich gutes Werkzeug, um aus historischen Marktdaten plausible, neue Szenarien zu erzeugen. Das ist nicht spektakulär, aber operativ relevant.
Wie Diffusion Models funktionieren — in einem Absatz.
Ein Diffusion Model lernt eine Datenverteilung in zwei Schritten. Forward Process: man fügt sauberen Daten schrittweise Gauß-Rauschen hinzu, bis nach T Schritten reines Rauschen übrigbleibt. Reverse Process: man trainiert ein neuronales Netz, das jeden dieser Schritte umkehrt — Rauschen vorhersagen, abziehen, wiederholen. Am Ende kann man aus reinem Gauß-Rauschen schrittweise echte-aussehende Samples generieren.
Für Marktdaten heißt das: das Modell lernt nicht „was kommt morgen", sondern „wie sieht eine plausible Return-Trajektorie aus, gegeben die historische Verteilung". Das ist eine generative Aufgabe, keine prädiktive.
Warum nicht einfach Bootstrap?
Die naive Alternative ist Block-Bootstrap: man schneidet historische Return-Segmente zufällig zusammen. Das ist schnell, simpel und in vielen Fällen ausreichend. Diffusion Models bringen genau dann einen Mehrwert, wenn:
- Conditional Sampling nötig ist: „Generiere mir Pfade, gegeben Inflation = 5 %, VIX = 30, Yield-Curve invertiert."
- Stylized Facts erhalten bleiben müssen: Vol-Cluster, Fat-Tails, Leverage-Effekt — Bootstrap zerstört Autokorrelations-Strukturen.
- Out-of-Sample-Szenarien gefragt sind: Pfade, die nicht 1:1 aus der Historie stammen, aber konsistent mit ihr sind.
Wer nur unbedingte Stress-Pfade braucht, kommt mit Block-Bootstrap weit. Wer konditionale Szenarien für Macro-Regime oder Stresstests braucht, profitiert von Diffusion.
Eine Minimal-Skizze in PyTorch.
Für 1D-Returns reicht ein UNet1D oder ein flacher Conv-Block. Das Trainings-Loop ist der Standard-DDPM-Loop:
import torch
import torch.nn as nn
class UNet1D(nn.Module):
# vereinfachtes UNet auf 1D-Returns
def __init__(self, dim=64):
super().__init__()
self.down1 = nn.Conv1d(1, dim, 3, padding=1)
self.down2 = nn.Conv1d(dim, dim*2, 3, stride=2, padding=1)
self.mid = nn.Conv1d(dim*2, dim*2, 3, padding=1)
self.up2 = nn.ConvTranspose1d(dim*2, dim, 4, stride=2, padding=1)
self.up1 = nn.Conv1d(dim*2, 1, 3, padding=1)
self.t_emb = nn.Linear(1, dim*2)
def forward(self, x, t):
h1 = torch.relu(self.down1(x))
h2 = torch.relu(self.down2(h1))
h2 = h2 + self.t_emb(t).unsqueeze(-1)
m = torch.relu(self.mid(h2))
u2 = torch.relu(self.up2(m))
return self.up1(torch.cat([u2, h1], dim=1))
def train_step(model, x0, T=1000):
t = torch.randint(0, T, (x0.size(0), 1)).float() / T
noise = torch.randn_like(x0)
alpha = (1 - t).sqrt()
sigma = t.sqrt()
xt = alpha.unsqueeze(-1) * x0 + sigma.unsqueeze(-1) * noise
pred_noise = model(xt, t)
return ((pred_noise - noise)**2).mean()
Für Conditional Diffusion erweitert man den Time-Embedding um einen Context-Vektor (Macro-Features, Regime-Label, VIX-Level) und reicht ihn an alle Layer durch.
Diffusion vs. GANs.
Vor Diffusion waren GANs die generative Methode der Wahl, auch für Finanzdaten (QuantGAN, FinGAN). In der Praxis hat Diffusion drei Vorteile, die für unsere Use-Cases entscheidend sind:
- Stabileres Training. Keine Min-Max-Spielchen, kein Modus-Kollaps. Wer schon mal einen GAN auf Returns trainiert hat, weiß, wie nervig das ist.
- Bessere Coverage. GANs neigen dazu, häufige Patterns zu überbetonen und Tails zu vernachlässigen. Diffusion deckt die Verteilung gleichmäßiger ab.
- Likelihood-konsistent. Diffusion Models haben eine sauber definierte Evidence-Lower-Bound — das hilft beim Vergleich verschiedener Modelle.
Nachteil: Sampling ist deutlich teurer, weil man T Reverse-Schritte braucht (oft 50–1.000). Mit DDIM oder Consistency-Models lässt sich das auf 1–10 Schritte beschleunigen.
Anwendung: 10.000 Marktszenarien für Stress-Tests.
Der konkrete Use-Case, in dem ich Diffusion produktiv einsetze, ist die Generierung synthetischer Marktszenarien für Portfolio-Stress-Tests. Workflow:
- Training auf ~30 Jahren täglicher Multi-Asset-Returns (Equities, Bonds, FX, Commodities).
- Conditioning auf Macro-Indikatoren: Inflation, Yield-Spread, Vol-Regime.
- Sampling von 10.000 Pfaden je 250 Handelstagen für ein gegebenes Macro-Szenario.
- Portfolio-Bewertung über alle Pfade, daraus VaR, ES, Worst-Case-Drawdown.
Das Ergebnis ist nicht „die Vorhersage", sondern eine Verteilung. Genau das, was Risiko-Management braucht — und was klassische Mean-Variance-Tools nicht liefern.
Validierung — der wichtigste Schritt.
Ein Diffusion Model auf Returns kann unsinnige Pfade erzeugen und trotzdem niedrigen Loss zeigen. Validierung läuft deshalb über Stylized Facts. Ich prüfe systematisch mindestens:
- Marginal-Verteilung: Histogramme der generierten vs. echten Returns. Kurtosis, Skewness, Tails.
- Autokorrelation der Returns: sollte nahe 0 sein (Random-Walk-Eigenschaft).
- Autokorrelation der absoluten Returns: sollte positiv und langsam abklingend sein (Vol-Cluster).
- Leverage-Effekt: negative Korrelation zwischen Returns und zukünftiger Volatilität.
- Cross-Asset-Korrelationen: realistische Stress-Korrelations-Spike-Verhalten.
Ein Modell, das diese fünf Tests nicht passiert, ist für Stress-Tests unbrauchbar — egal wie hübsch die Sample-Pfade aussehen.
Was Diffusion NICHT kann.
Ich habe Diffusion-Modelle mehrfach als „die nächste Forecasting-Revolution für Quants" angepriesen gesehen. Das ist falsch. Das Modell lernt die unbedingte Verteilung der Returns. Es weiß nicht, was morgen passiert. Wer Diffusion als Trade-Signal-Generator einsetzt, missversteht die Methode fundamental.
Was Diffusion nicht liefert:
- Punkt-Forecasts für morgen.
- Trade-Signale.
- Alpha über klassische Modelle hinaus.
Was Diffusion liefert:
- Konditionale Szenario-Verteilungen.
- Tail-realistische Stress-Pfade.
- Data-Augmentation für nachgelagerte Trainings (mit Vorsicht — Diffusion kann hier auch Bias verstärken).
Meine Praxis.
In Risk-Workflows nutze ich Diffusion als Ergänzung zur klassischen Monte-Carlo-Simulation mit GARCH oder Stochastic-Vol-Modellen. Diffusion glänzt bei konditionalen Macro-Stress-Szenarien — „Wie sähe mein Portfolio in einem 1970er-Stagflations-Regime aus?" — wo parametrische Modelle an strukturellen Annahmen scheitern.
Für Trade-Signale verwende ich Diffusion nicht. Wer mir mit einem Diffusion-basierten Alpha-Modell kommt, bekommt dieselbe skeptische Rückfrage wie bei jedem anderen Black-Box-Setup: zeige mir das Out-of-Sample-Setup und die Walk-Forward-Ergebnisse, bevor wir über Conditioning-Tricks reden.
Sie wollen Diffusion-basierte Stress-Tests in Ihr Risk-Setup integrieren? Erstgespräch buchen — wir bewerten, ob es Ihren Anwendungsfall trifft.