← Alle Insights

State-Space-Models für Mean-Reversion: dynamisches Modeling des fairen Werts.

Wenn Sie Mean-Reversion handeln wollen, brauchen Sie eine Antwort auf eine schwierige Frage: was ist der faire Wert, zu dem zurückgekehrt wird? In der Praxis ist diese Referenz nie konstant. State-Space-Models bieten den natürlichen Rahmen, um faire Werte, dynamische Betas und sogar Volatilitäten als latente, zeitvariable Größen zu modellieren — interpretierbar, statistisch sauber, in statsmodels mit wenigen Zeilen Code.

State-Space-Repräsentation linearer Modelle.

Ein State-Space-Model besteht aus zwei Gleichungen:

αt ist der latente Zustand, yt die Beobachtung. Praktisch jedes lineare Zeitreihen-Modell — ARIMA, exponential smoothing, structural time series — lässt sich in dieser Form schreiben. Der Vorteil: einheitlicher Algorithmus zur Schätzung (Kalman-Filter), saubere Behandlung fehlender Daten, natürliche Unsicherheits-Quantifizierung.

statsmodels' UnobservedComponents.

statsmodels.tsa.statespace.UnobservedComponents ist die operative Schnittstelle. Sie spezifizieren strukturelle Komponenten (Level, Trend, Cycle, Saisonalität) und der Filter macht den Rest.

from statsmodels.tsa.statespace.structural import UnobservedComponents

# Local Level: latenter Random-Walk-Mittelwert
mod = UnobservedComponents(spread, level='local level')
res = mod.fit(disp=False)

# gefilterter fairer Wert
fair_value = res.filtered_state[0]
residual = spread - fair_value

Das geschätzte fair_value ist die dynamische Mean-Reversion-Referenz. Spread minus fair_value ist Ihr Trading-Signal — typischerweise z-normalisiert über ein rolling-Fenster.

Drei Komponenten-Typen im Überblick.

Local Level: μt+1 = μt + ηt. Der faire Wert folgt einem Random Walk. Geeignet für Spreads, deren langfristiger Mittelwert driftet (Crypto-Pairs, Sektor-Spreads).

Local Linear Trend: μt+1 = μt + βt + ημ, βt+1 = βt + ηβ. Zusätzlich zum driftenden Level ein driftender Trend. Mächtig, aber neigt zu Overfitting — der Trend kann sich an Rauschen anpassen.

Cyclical Component: stochastischer Cycle mit Frequenz und Dämpfung. Brauchbar, wenn echte zyklische Muster vorhanden sind (manche Commodity-Spreads, saisonale Effekte) — meist allerdings ein Overfitting-Risiko.

Filtering vs. Smoothing.

Zentraler Unterschied: Filtering schätzt αt aus Daten bis t (online, kausal). Smoothing schätzt αt aus Daten der gesamten Stichprobe (offline, nicht-kausal).

Für Trading-Backtests immer Filtering verwenden. Smoother-Output kennt die Zukunft und gibt schöne, glatte fair-value-Kurven — die in Live-Trading nicht reproduzierbar sind. Wer Smoothed States ins Backtest-Signal einbaut, erzeugt Look-Ahead-Bias.

Anwendung 1: Dynamic OLS für Spread-Trading.

Erweiterung der klassischen Kointegrations-Beziehung: nicht nur zeitvarianter Intercept, sondern auch zeitvarianter Slope. Wir modellieren yt = αt + βt xt + εt, wobei α und β beide Random Walks sind.

Das ist äquivalent zum Kalman-Filter-Pair-Trading, aber im UnobservedComponents-Framework mit zusätzlicher Maximum-Likelihood-Schätzung der Varianz-Hyperparameter. Vorteil: statsmodels findet automatisch geeignete Q-Matrizen, was die manuelle Kalibrierung erspart, die der reine pykalman-Workflow erfordert.

Anwendung 2: Time-Varying Beta für Marktrisiko.

Wenn Sie eine Long-Strategie haben und das Marktrisiko hedgen wollen, brauchen Sie das Beta der Strategie gegenüber dem Markt. Ein statisches Beta aus historischer Regression ist immer falsch — Strategien haben strukturell zeitvariantes Exposure (Faktor-Drift, Regime-Effekte).

State-Space-Modell: rstratt = αt + βt rmktt + εt, mit αt, βt als Random Walks. Sie bekommen für jeden Tag eine aktuelle Beta-Schätzung plus Konfidenzband. Hedge-Größe entsprechend anpassen.

In meiner Praxis: dieses Setup läuft als nightly Job für jede Mandanten-Strategie mit Marktrisiko-Hedge. Beta-Schätzung wird jeden Morgen aktualisiert, Hedge-Position entsprechend rebalanced. Trivialer Aufwand, signifikante Verbesserung gegenüber statischem Hedge.

Anwendung 3: Stochastic Volatility (light).

Ein „leichtes" stochastisches Volatilitätsmodell lässt sich als State-Space-Approximation bauen: log(σt2) folgt einem Random Walk, beobachtbar sind quadrierte Returns (oder Realized Volatility, falls verfügbar). Das ist nicht so präzise wie ein echtes Stochastic-Volatility-Modell mit Particle Filtering, aber rechentechnisch trivial und in 80 % der Use-Cases ausreichend.

Anwendung: dynamic Vol-Targeting. Position sizing basiert auf der gefilterten Vol-Schätzung, nicht auf einem fixen Lookback-Window. Vorteil gegenüber rolling-StdDev: schnellere Adaption an Regime-Wechsel, weniger Lag.

Vergleich gegen GARCH-Familie.

Wer Volatilitäten modelliert, denkt zuerst an GARCH. Wo State-Space sinnvoll ergänzt oder ersetzt:

In der Praxis: GARCH für tägliche Forecasts, State-Space wenn die Vol selbst als unsichere latente Größe modelliert werden soll (z. B. für Bayesian Risk-Management). Beide nutzen — abhängig vom Anwendungsfall — ist normal.

Caveat: Identifikations-Probleme bei vielen Latenten.

State-Space-Models sind verführerisch flexibel. Man kann beliebig viele latente Komponenten hineinpacken — Level, Trend, Cycle, mehrere Saisonalitäten, Time-Varying Beta auf mehrere Faktoren. Das Problem: die Likelihood-Funktion wird flach. Verschiedene Parameterkombinationen erklären die Daten ähnlich gut, der Filter wird instabil.

Faustregel: maximal 2–3 latente Komponenten pro beobachteter Serie. Bei mehrdimensionalen Beobachtungen kann es mehr werden, aber jede zusätzliche Komponente sollte durch ein Likelihood-Ratio-Test oder ein Informations-Kriterium gerechtfertigt sein. Sonst bauen Sie ein Modell, das im Backtest brillant ist und live driftet.

Meine Praxis: State-Space für Interpretierbarkeit.

Wann setze ich State-Space-Models ein? Wenn ich interpretieren will, was im Modell passiert. Time-Varying Beta ist ein zeitlich aufgelöster Wert, den ich Mandanten erklären kann. Local Level für fairen Wert eines Spreads ist transparent. Stochastic Vol als latenter Random Walk ist nachvollziehbar.

Wann nicht? Wenn pure Predictive Power das Ziel ist. Für Forecasting in dichten, nichtlinearen Datenstrukturen schlagen Gradient-Boosted Trees, Neural Nets und ihre Verwandten State-Space-Models fast immer — bei deutlich geringerer Interpretierbarkeit.

Mein Setup: State-Space als Interpretations-Layer auf Strategien (Faktor-Exposure, faire Werte, Volatilitäts-Schätzung). Predictive Models laufen daneben, ohne die saubere statistische Struktur erzwingen zu wollen. Das ist nicht akademisch elegant, aber es funktioniert in der Live-Anwendung.

Sie wollen dynamische Beta-Schätzung oder Time-Varying Mean-Reversion in Ihrem System? Erstgespräch buchen — wir bauen es passend.