A Cascade Study · Weather → Grid → Price

When a cold snap becomes a price shock, three countries away.

A ~360-node graph of Europe's energy system and a learned propagation operator that advances stress along its edges — and a rigorous account of what it can, and cannot, forecast.

01 · THE SHOCKWeather does not stay where it lands.

A cold, near-windless week over Germany is not one event. Gas burn climbs to cover the wind deficit; interconnector flows tighten across the continent; days later the strain surfaces as a price spike in Italy and a curtailment notice at an aluminium smelter in Alsace. The shock propagates — through physical infrastructure, market coupling, and fuel logistics — and it does so with delays measured in hours to weeks.

Cascade models that propagation explicitly. Weather regions, generation fleets, interconnectors, prices, gas infrastructure, industry and companies become nodes; the physical and economic couplings between them become edges, each carrying a language description embedded into a vector. A learned operator reads each node's recent history and advances stress along the graph over five horizons, from 6 hours to 14 days.

357
graph nodes
675
typed edges
143
forecast targets
18.8M
hourly rows

02 · WHAT IT GETS RIGHTRanking where the system is under strain.

Give the operator a moment in history and ask which parts of the network will be stressed over the next one to fourteen days. On held-out years it ranks stressed-versus-quiet nodes with an AUC of 0.74 — comfortably above persistence, the honest baseline that assumes today's stress simply continues, and above a per-node GRU that ignores the graph entirely.

Whole-system stress ranking · AUC · held-out test years (2022, 2024)

operator
(edge-text)
0.738
operator
(one-hot)
0.725
GRU
(no graph)
0.665
persistence
0.652
climatology
0.500
Median AUC over 21 test episodes. The operator beats persistence and a graph-blind GRU at locating system stress. Bars scaled 0–1; 0.50 is random.

03 · THE HARDER QUESTIONWhich quiet node lights up next?

Ranking overall stress is useful, but it is not the question a reinsurer prices. The consequential question is onset: among the nodes that look healthy today, which will be disrupted by the end of the week? This is the newly-disrupted slice — nodes quiet before the shock (|z| < 1.5 over the prior week) that then cross the disruption threshold.

On this slice the standard baselines are not merely weak but structurally blind. Persistence scores an AUC of 0.34 — worse than a coin flip — because a quiet node offers it nothing to extrapolate. That looks like open headroom for a model that can read the graph. It is not.

Three independent methods were aimed at this slice. All three land below random — and for the same reason.

Newly-disrupted ranking · pooled AUC with 95% bootstrap CI · val + test

0.50 · random
quantile
median
0.30
exceedance
classifier
0.35
upper-tail
excess
0.48
Pooled over 24,376 within-episode pairs (206 positives, 26 episodes); CI half-widths ≈ 0.03. Axis spans 0.20–0.55; dashed line marks random (0.50). Even the best rule fails to clear it; a classifier trained directly on the rare positives is significantly anti-predictive.

The exceedance classifier is the sharp test. It is a dedicated head that predicts, per node and horizon, the probability that stress crosses the disruption threshold, trained with class-weighting against the rare positives. It scores 0.35 — below chance. The reason is not a tuning gap; it is structural. The slice is defined as the quiet-before nodes, and a node's own quietness is the single strongest predictor of it staying quiet. Any score that reads recent history therefore ranks the eventual spikers below the nodes that stay calm. To surface a quiet-then-spiking node, the evidence has to arrive entirely through its graph neighbours — and on this graph that signal is too faint to overcome the node's own autocorrelation.

This is a covariate-shift result stated plainly: the feature that predicts exceedance in the training distribution — dominated by already-active nodes — generalises in the wrong direction to the quiet subpopulation.

04 · THE ABLATIONDoes language on the edges help?

Each edge carries an LLM-written description, embedded to 1024 dimensions, of the coupling it represents. The natural hypothesis: semantic edge conditioning should beat a bare 13-dimensional edge-type one-hot. The matched-capacity ablation says otherwise — text and one-hot tie at every cell of the evaluation.

A perturbation probe rules out the boring explanation. Shuffling the embeddings within each edge type moves the operator's outputs by 0.47× their scale: the model demonstrably reads the per-edge text. It simply gains no forecast skill from it on this graph.

The final test is zero-shot generalisation. Hold two entire edge types out of training, then evaluate on the full graph: a one-hot arm has an untrained row for the unseen type, whereas semantic text ought to interpolate from similar types. It does the opposite. On the nodes fed by the held-out edges, the text arm's forecast error degrades by +0.042 when those types are removed, against +0.001 for one-hot — a thirtyfold larger hit, while unaffected control nodes stay flat for both. Per-edge semantics give the model something specific to lean on, and that specificity makes it more brittle to an edge type it never saw, not less.

reads per-edge text · 0.47× output sensitivity no in-distribution skill gain vs one-hot zero-shot · text +0.042 vs one-hot +0.001 · more brittle

05 · HOW IT WAS MEASUREDThe rigor is the point.

A negative result is only worth stating if the measurement is trustworthy. Cascade's evaluation was built to be defensible before any model was judged against it.

The same rigor turns on the model itself. A pinball-trained forecaster should be honest about its own uncertainty, so its P10–P90 band ought to cover roughly 80% of what actually happens. On the held-out years it covers 66%. The median is close to calibrated (it sits above 46% of outcomes, near the ideal 50%), but the interval is too narrow: the operator is over-confident on the tails.

Predictive-interval calibration · edge-text arm · test years

nominal 80%
P10 coverage
0.14
target 0.10
P50 coverage
0.46
target 0.50
P90 coverage
0.80
target 0.90
12,234 node-horizon positions, test episodes. The P10–P90 band captures 66% against a nominal 80%; both tails are too tight (14% of truths fall below P10, 20% exceed P90). Under-dispersion is the signature of a variance-shrinking objective — and it is the same mechanism behind the newly-disrupted blindness: the model under-represents exactly the tail where onset lives.

A worthwhile secondary finding: adding the exceedance objective as a multi-task term slightly improved the regression head it shared parameters with (validation stress-ranking AUC 0.688 → 0.743). The auxiliary classification task regularised the forecaster even as its own ranking failed.

06 · LIMITATIONSWhat I would not overclaim.