Graph Neural Networks im Trading: Asset-Beziehungen lernen.
Klassische ML-Modelle behandeln Aktien wie unabhängige Zeitreihen. Aber Märkte sind ein Netz — Apple und Foxconn hängen zusammen, Banken-Aktien teilen sich Zinsrisiko, Auto-Hersteller einen Halbleitermarkt. Graph Neural Networks modellieren diese Topologie direkt.
Wenn ein Mandant ein Cross-Asset-Setup baut, ist die naheliegende Frage: wie modelliere ich, dass Asset A Asset B beeinflusst? Korrelationen helfen, sind aber statisch und übersehen kausale Strukturen. Graph Neural Networks (GNNs) sind die ML-Antwort auf dieses Problem — und sie haben in den letzten Jahren erstaunlich brauchbare Ergebnisse geliefert.
Die Idee: Aktien als Knoten.
In einem Aktien-Graph sind die Knoten einzelne Wertpapiere und die Kanten Beziehungen zwischen ihnen. Welche Beziehungen sinnvoll sind, ist die zentrale Design-Entscheidung — dazu gleich mehr. Jeder Knoten hat einen Feature-Vektor (z. B. die letzten 30 Returns, Volumen, Volatilität). Jede Kante hat optional Gewichte (z. B. Korrelationsstärke).
Ein GNN lernt, wie Information entlang dieser Kanten fließt. Bei jedem Layer aggregiert ein Knoten Information von seinen Nachbarn — und nach mehreren Layern enthält die Repräsentation eines Knotens Information aus dem gesamten Sub-Graph in seiner k-Nachbarschaft.
Welche Kanten?
Die Kunst ist die Graph-Konstruktion. Vier gängige Ansätze:
- Sektor-Zugehörigkeit: zwei Aktien sind verbunden, wenn sie im selben GICS-Sub-Sektor sind. Einfach, statisch, robust gegen Datenrauschen — aber grob.
- Supply-Chain-Beziehungen: aus Quellen wie FactSet Supply Chain oder eigenen 10-K-Auswertungen. Sehr aussagekräftig, aber teuer in der Beschaffung.
- Korrelations-Graph: Kanten zwischen Aktien mit Return-Korrelation > Schwelle (z. B. 0.5). Dynamisch über Zeit, aber zirkulär: was wir vorhersagen wollen, definiert den Graph.
- Co-Trading-Graph: zwei Aktien sind verbunden, wenn sie häufig in denselben Order-Flows auftreten (institutionelles Trading). Schwer zu bekommen, sehr aussagekräftig.
Ich kombiniere in der Regel zwei oder drei Quellen. Sektor + Supply-Chain + dynamische Korrelation gibt einen hybriden Graph, der robust gegen Daten-Rausch ist und trotzdem aktuelle Marktstruktur erfasst.
GCN vs. GAT.
Zwei Hauptarchitekturen:
Graph Convolutional Network (GCN)
Aggregiert die Nachbar-Features als gewichteter Mittelwert (Gewichte aus der Adjazenz-Matrix). Einfach, schnell, aber alle Nachbarn werden gleich behandelt (modulo statischer Kantengewichte). Gut als Baseline.
Graph Attention Network (GAT)
Lernt für jede Kante eine Attention-Gewichtung — wie wichtig ist Nachbar B für Knoten A? Das ist flexibler und in den meisten Trading-Anwendungen besser, weil die Beziehungsstärke zwischen Aktien je nach Marktphase variiert. Apple und Nvidia sind in Bull-Phasen stark gekoppelt, in Bear-Phasen weniger.
Studie: Feng et al. 2019.
Eine der zitierten Arbeiten im Bereich ist Feng et al., „Temporal Relational Ranking for Stock Prediction" (2019). Sie kombinieren ein LSTM für die Zeitserien-Komponente mit einer Graph-Layer für Cross-Asset-Beziehungen. Auf NYSE und NASDAQ erzielen sie eine Verbesserung im Information Coefficient (IC) von 5 bis 10 Prozent gegenüber LSTM-only Baselines.
5 bis 10 Prozent IC-Verbesserung ist in der Quant-Welt relevant. Es ist nicht spektakulär, aber es ist messbar, und es ist auf realen Daten. Replikationen in anderen Studien (Sawhney et al. 2020, Kim et al. 2022) bestätigen die Richtung — GNNs schlagen klassische Cross-Asset-Modelle wie Multi-Task-Regression oder einfache Feature-Concatenation konsistent, wenn der Graph sinnvoll konstruiert ist.
Implementation mit PyTorch Geometric.
# Einfaches GAT-Modell für Stock-Forecasting import torch import torch.nn as nn from torch_geometric.nn import GATConv class StockGAT(nn.Module): def __init__(self, in_features, hidden=64, heads=4, out_features=1): super().__init__() self.lstm = nn.LSTM(input_size=in_features, hidden_size=hidden, batch_first=True, num_layers=2) self.gat1 = GATConv(hidden, hidden, heads=heads, dropout=0.2) self.gat2 = GATConv(hidden * heads, hidden, heads=1, concat=False, dropout=0.2) self.head = nn.Linear(hidden, out_features) def forward(self, x_seq, edge_index, edge_attr=None): # x_seq: [N_assets, seq_len, in_features] _, (h, _) = self.lstm(x_seq) h = h[-1] # [N_assets, hidden] h = torch.relu(self.gat1(h, edge_index, edge_attr)) h = self.gat2(h, edge_index, edge_attr) return self.head(h).squeeze(-1) # Return-Forecast pro Asset # Training-Loop model = StockGAT(in_features=8) optim = torch.optim.AdamW(model.parameters(), lr=1e-3) for X, edges, y in train_loader: pred = model(X, edges) loss = nn.functional.mse_loss(pred, y) loss.backward() optim.step() optim.zero_grad()
Dynamische Graphs.
Statische Graphs sind ein guter Startpunkt, aber Beziehungen ändern sich. Tesla war früher mit Auto-Herstellern korreliert — heute mehr mit Tech-Wachstumsaktien. Ein moderner Ansatz: Temporal Graph Networks (TGN), die für jeden Zeitpunkt einen eigenen Graph nutzen.
Pragmatisch: ich aktualisiere Korrelationskanten alle 20 Tage neu (rolling 60-Tage-Korrelation, Schwelle 0.4). Sektor- und Supply-Chain-Kanten sind statisch oder werden quartalsweise aktualisiert. Das ist nicht „state of the art", aber es funktioniert in der Praxis und ist erklärbar.
Anwendungen.
- Sektor-Rotation: GNN aggregiert Information über Sektor-Clustern und prognostiziert relative Sektor-Performance. Kapitalumschichtung zwischen Sektoren.
- Pair-Trading: GNN-Embeddings ähnlicher Aktien identifizieren — Pairs mit niedriger Embedding-Distanz aber kurzfristiger Preis-Divergenz sind Kandidaten für Mean-Reversion.
- Risk-Spreading: GNN identifiziert Cluster, die gemeinsam riskant sind. Portfolio-Diversifikation wird nicht auf statischen Sektor-Labels gebaut, sondern auf gelernten Cluster-Strukturen.
- Spillover-Detection: News oder Schocks bei einem Asset breiten sich gemäß Graph aus. GNN kann Folge-Bewegungen in verbundenen Assets antizipieren.
Caveat: Graph-Konstruktion ist Kunst.
Der schwierigste Teil ist nicht die GNN-Architektur — die ist mit PyTorch Geometric in 50 Zeilen Code. Der schwierigste Teil ist die Graph-Konstruktion. Falsche Kanten verschmieren Signal, fehlende Kanten ignorieren echte Information. Es gibt keine etablierte „richtige" Methode, und jede Universums-/Marktphasen-Kombination braucht eigene Validierung.
Mein pragmatischer Test: ablation. Ich trainiere das GNN mit unterschiedlichen Graph-Konstruktionen und vergleiche die OOS-Performance. Wenn ein „random graph" (zufällige Kanten gleicher Dichte) ähnlich gut performt wie der hand-gebaute, ist die Graph-Information wertlos und das GNN ist ein verkappter MLP mit Extra-Schritten.
Meine Praxis.
Ich nutze GNNs nicht als Stand-Alone-Strategie. Ich nutze sie als Feature-Extractor: das GNN erzeugt für jede Aktie ein 32- oder 64-dimensionales Embedding, das die aktuelle Marktstruktur kondensiert. Diese Embeddings landen dann als Features in einem klassischen Klassifizierer (LightGBM, eventuell mit Triple-Barrier-Labels und Meta-Labeling-Architektur).
Der Vorteil dieser Architektur: das GNN liefert die Cross-Asset-Information, die klassische Modelle nicht haben. Die finale Entscheidungs-Schicht bleibt aber interpretierbar — ich kann mit SHAP-Werten zeigen, welche Embedding-Dimensionen einen Trade auslösen. Reines End-to-End-GNN- Trading habe ich noch nicht in Produktion gesehen, das nicht von gravierenden Overfitting- Problemen geplagt war.
Sie haben ein Cross-Asset-Universum und vermuten, dass Strukturen Mehrwert bringen könnten? Erstgespräch buchen — wir prüfen, ob ein GNN-Ansatz tragfähig ist.