Product
GridCast v1.4 in production

Martin Edslev
Price models read the market, not just the grid
v1.4 is live in production, and it covers four pieces of work: our price models now take market expectation into account, they’re trained to better capture spikes, the lead-time specialization from v1.3 has been extended to every remaining signal, and our load models got both leaner and sharper in the hours that matter most.
Price models that read the market
Until now our day-ahead price models worked from fundamentals alone, which includes our own load, wind and solar forecasts, plus weather and calendar. v1.4 adds market expectation to that picture, before day-ahead gate closure.
It’s the largest single improvement in the release. Every day-ahead price signal we forecast improved, with error on the pre-closure forecast down 3.3 €/MWh on average. Just as importantly, the models under-call the market far less than they used to: average bias fell by more than half.

Models tuned for spikes
A model trained to minimize average error learns to hedge toward the middle. That’s a reasonable strategy most hours of the day but an inefficient one in exactly the hours traders care about.
v1.4 changes how the price models are trained, so the model compresses less toward the mean. In the Netherlands, error on the top 5% of prices fell 12.4%.

Lead-time specialization all around
v1.3 split wind, solar, load and day-ahead price into separate models per lead-time band, because a two-hour forecast and a three-day forecast rely on different features: one is driven by recent observations, the other by weather. v1.4 extends that to the signals we hadn’t yet covered, which are cross-border exchanges and every production mode, coal, gas, nuclear and the rest.
Seven of our eight exchange forecasts improved on net flow, and production modes improved by 1.32 percentage points across lead times. Training got around two-thirds faster for both.
Our forecasts have always been built on what the grid is doing. With v1.4, they also read what the market expects it to do.
