uw
Gridcast · demand intelligence

GB electricity demand — forecast, mapped, and proven

A real machine-learning forecast of Great Britain’s electricity demand, trained on 4,891 days of National Energy System Operator data and population-weighted weather. The honest live number: 4.14% MAPE on a real 1–7-day forecast, scored on the temperature that was genuinely forecast at the time — beating both the neural net and the seasonal benchmark. The 4.05% 14-day figure elsewhere on this page is the known-weather upper bound (it assumes a perfect temperature forecast), shown separately. Every figure is an out-of-sample measurement, not a claim.
real data NESO demand 2013–now · 4,891 dayslive skill 4.14% MAPE on a real 1–7-day forecast (genuinely-forecast weather) — beats the neural net (4.90%) and the 6.24% seasonal baselineupper bound 14-day, known-weather 4.05% MAPE — assumes a perfect temperature forecastregional population & weather-scaled estimate
4.14% MAPE
Live forecast error — real 1–7-day forecast on genuinely-forecast weather (the honest number)
2.10pts
Below the 6.24% seasonal baseline — and below the neural net at every lead
4.05% MAPE
14-day, known-weather upper bound — assumes a perfect temperature forecast (not a live number)
8,597
Individual out-of-sample forecasts in the backtest
NESO demandHistoric Demand Data, half-hourly → daily, 4,891 days from 2013.
Open-Meteo weatherERA5 reanalysis + archived “forecast as issued”, population-weighted GB basket.
Out-of-sample onlyExpanding walk-forward, monthly origins — every figure tested on data never trained on.
Free & publicNo proprietary feeds — the whole pipeline runs on openly-licensed public data, cached locally.

Where demand is now — GB by distribution region (estimate, coloured by modelled demand)

East England: 1,618 MWEast England: 1,618 MWEast England: 1,618 MWEast Midlands: 1,308 MWEast Midlands: 1,308 MWLondon: 2,251 MWNorth Wales, Merseyside and Cheshire: 820 MWNorth Wales, Merseyside and Cheshire: 820 MWWest Midlands: 1,564 MWNorth East England: 737 MWNorth East England: 737 MWNorth East England: 737 MWNorth West England: 2,024 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWNorth Scotland: 385 MWSouth East England: 2,315 MWSouth Wales: 582 MWSouth Wales: 582 MWSouth Wales: 582 MWSouth Wales: 582 MWSouth Wales: 582 MWSouth Wales: 582 MWSouth Wales: 582 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWSouth West England: 1,175 MWYorkshire: 1,474 MWSouth and Central Scotland: 1,085 MWSouth and Central Scotland: 1,085 MWSouth and Central Scotland: 1,085 MWSouth and Central Scotland: 1,085 MWSouth and Central Scotland: 1,085 MWSouth and Central Scotland: 1,085 MWSouth and Central Scotland: 1,085 MWSouth and Central Scotland: 1,085 MWSouth and Central Scotland: 1,085 MWSouth and Central Scotland: 1,085 MWSouthern England: 1,963 MW
Tap or hover a region
19,304 MW national
14 GB DNO licence areas · 2026-05-23 · coloured by modelled demand. Select any region for its share, population and local temperature.
Ranked by modelled demand
South East England2,315 MW
London2,251 MW
North West England2,024 MW
Southern England1,963 MW
East England1,618 MW
West Midlands1,564 MW
Yorkshire1,474 MW
East Midlands1,308 MW
South West England1,175 MW
South and Central Scotland1,085 MW
North Wales, Merseyside and Cheshire820 MW
North East England737 MW
South Wales582 MW
North Scotland385 MW
lowerhigher demand
Method — regional is an estimate: ESTIMATE: national demand split by real DNO-area population (ONS) and adjusted by each area's real temperature. No public multi-year half-hourly regional demand history exists to backtest against — national is the rigorous, backtested part. The 14 regions are the real GB DNO Licence Areas (boundaries from NESO’s published GeoJSON, drawn here on the British National Grid). Hover or tap a region for its modelled figure.

The forecast — choose a horizon (recent actuals + the road ahead, with widening uncertainty)

26GW24GW21GW19GW17GWtoday10 May14 May18 May22 May26 May30 May3 Junnational mean demand (MW)
26GW24GW22GW19GW17GWtoday3 May11 May19 May27 May4 Jun12 Jun20 Junnational mean demand (MW)
28GW25GW22GW19GW17GWtoday9 Apr1 May23 May14 Jun6 Jul28 Jul19 Augnational mean demand (MW)
40GW34GW28GW22GW17GWtoday25 Mar3 Jun12 Aug21 Oct30 Dec10 Mar19 Maynational mean demand (MW)
recent real demand (NESO outturn) Gridcast forecast P10–P90 band
4.05% MAPE
Backtested error, 14 days ahead — out-of-sample
+35%
Better than the seasonal-naive baseline (6.24% MAPE)
23.0GW
Peak forecast demand by 14 days (2026-05-26)
±7.3%
Honest uncertainty band (P10–P90 of realised error)
The real forecast. Leads 1–14 are backtested with the actual temperature that occurred — this is the model’s skill given a good weather forecast (an upper bound; a live 14-day run also inherits the weather forecast’s own decay). This is the sharpest, most trustworthy horizon.
5.00% MAPE
Backtested error, 30 days ahead — out-of-sample
+19%
Better than the seasonal-naive baseline (6.20% MAPE)
23.7GW
Peak forecast demand by 30 days (2026-06-18)
±8.5%
Honest uncertainty band (P10–P90 of realised error)
Beyond ~2 weeks weather is not predictable, so the 30-day view uses climatological normal temperature for each day. The error rises a little versus 14-day — that rise is exactly the value of having a real weather forecast.
5.18% MAPE
Backtested error, 90 days ahead — out-of-sample
+16%
Better than the seasonal-naive baseline (6.14% MAPE)
24.0GW
Peak forecast demand by 90 days (2026-07-22)
±9.3%
Honest uncertainty band (P10–P90 of realised error)
A seasonal/calendar forecast on normal weather. Useful for planning the shape of the season, not a day-precise number — the uncertainty band is wider and shown honestly.
5.32% MAPE
Backtested error, 365 days ahead — out-of-sample
+16%
Better than the seasonal-naive baseline (6.30% MAPE)
35.2GW
Peak forecast demand by 365 days (2027-01-12)
±9.3%
Honest uncertainty band (P10–P90 of realised error)
A full-year calendar+trend outlook on normal weather. This is a structural forecast (annual cycle, weekday pattern, demand trend), explicitly NOT a weather-driven one. Treat the band, not the line, as the answer.
The dark line is the latest published real demand; the teal line is the model’s forward forecast for the selected horizon. The next 15 days use a live Open-Meteo weather forecast (the genuine weather-driven regime); beyond the weather forecast’s reach the line falls back to climatological normal temperature. The shaded band is the measured P10–P90 error spread from the backtest, not a hand-drawn guess — tightest on days with a live weather forecast, wider on the climatology-driven tail.

Does the model actually work? (the honest backtest)

We hold out 2024–2025, train only on earlier data, and forecast forward — rolling the cutoff monthly so every horizon is tested on data the model never saw (8,597 forecasts in all). The bar to beat is a proper seasonal-naive baseline (last year’s like-for-like day), the standard honest benchmark. MAPE = mean absolute percentage error.

4.05%14-day MAPE — the headline, measured on 410 out-of-sample forecasts
16–38 GWrange of real demand the model was tested against
1,029 MWtypical absolute miss per day at 1–14 days

Predicted vs actual — every OOS forecast

2020252530303535perfect = on the lineactual demand (GW)forecast (GW)
one forecast perfect (predicted = actual)

A typical forecast in full — origin 2025-09-22

28GW24GW19GW22 Sep29 Sep5 Oct
forecast (MAPE 4.2%) what actually happened band
Left: every one of the 410 out-of-sample 14-day forecasts plotted against the demand that actually occurred — a tight cloud hugging the dashed identity line is the model’s skill, made visible. Recompute the average error off this cloud and you get the 4.05% headline exactly, because it is that set. Right: one typical origin (the run whose 4.2% error is closest to the 4.05% average — deliberately not a flattering pick) showing the forecast, its band, and the real outturn day by day.

Accuracy by lead time — how far can you trust it?

9%4%0%actual weather (14d)climatology (long horizon)1d3d5d7d9d11d13d21d45d90d180d365dforecast lead time (days ahead)
Gridcast seasonal baseline actual-weather window (≤14d)
Gridcast is sharpest in the first two weeks where it uses the actual weather (shaded), then settles to a steady ~5% as it falls back to climatology for the long horizons — still comfortably below the baseline at every lead. The honest reading: trust the day-level number out to ~2 weeks; beyond that, read the seasonal shape and the band. The chart above is the known-weather upper bound — for the genuine live-forecast number, see the next section.

Proven live skill — real forecasts vs what actually happened (the genuine out-of-sample record)

This is the honest live number. Unlike the backtest above — which feeds the model the temperature that actually occurred (an upper bound on demand-model skill, assuming a perfect weather forecast) — here we feed it the temperature that was genuinely forecast 1–7 days ahead at the time (Open-Meteo’s archived “forecast as issued”), then score it against the demand that really happened. Fully out-of-sample, monthly walk-forward over 2024-07-01 to 2026-05-23, 4,844 individual day-forecasts. This is what we predicted versus what occurred — no hindsight.

~4.1% average error on a real 1–7 day forecast, and it barely grows with how far ahead we look (it stays within a 0.35-point band across leads 1–7) — because at a week out the weather forecast is good enough that our model, not the weather, is the limit.

4.14%average GBM error across leads 1–7, on genuinely-forecast weather
3.98–4.33%full range 1d to 7d — the line barely rises with lead time
+34%better than the 6.24% seasonal-naive baseline (both beat the seasonal-naive baseline at every lead)
4,844real day-forecasts scored against actual NESO demand

Live error by lead time — GBM vs neural net vs baseline

7%4%0%1d2d3d4d5d6d7dforecast lead time (days genuinely ahead)
Gridcast (GBM, production) neural-net benchmark seasonal baseline
Forecast-input MAPE, leads 1–7 — the temperature was really only known as a forecast, not after the fact.

What we forecast vs what happened — 3-day lead, full window

39GW33GW27GW22GW16GW1 Jul7 Oct13 Jan21 Apr28 Jul3 Nov9 Feb18 Maynational demand (MW) · forecast issued 3 days ahead
actual demand (NESO outturn) Gridcast forecast (issued 3d ahead)
Every day of the 2024-07-01 to 2026-05-23 out-of-sample window — the literal track record, forecast against realised demand.
Model choice is evidenced. The production gradient-boosting model (HistGradientBoosting (production)) beats the neural-net benchmark (MLPRegressor (64,32), standardised inputs) at every lead, 1–7 days — 3.98–4.33% vs 4.71–5.12% MAPE.
Honest about reach. This live skill is proven to 7 days — that is the cap of the public “forecast as issued” weather archive, not a model limit. The 14-day figure shown earlier on this page is the known-weather upper bound (it assumes a perfect temperature forecast), not yet a proven live number. We show both, clearly separated, rather than blur the two.

Why this matters for energy trading (the localised-demand angle)

Demand is the slow, knowable side of the power market.

Wholesale electricity prices are set where supply meets demand. Supply (wind, solar, interconnectors) is volatile and hard to call; demand, by contrast, is dominated by weather and the calendar — exactly what a model like this captures, and exactly why a backtested 4.0% national error is tradeable signal rather than noise. Concretely:

  • A sharper demand call sizes the residual. Net demand (demand minus embedded renewables) is what the wholesale and balancing markets actually price. Being 35% closer than the standard benchmark on the demand leg tightens the whole net-load estimate.
  • Localised swings are where the dislocations live. A cold snap that hits Scotland harder than the South West shifts demand between regions, not just in total — the regional view (estimate today, a real series once half-hourly DNO data is licensed) is built to surface exactly that spatial spread.
  • The honesty is the edge. A forecast you can audit — measured nationally, labelled where it is estimated — is one you can actually size a position against. Overclaimed accuracy is worse than none.
Illustrative of the use-case, not a trading recommendation. Gridcast forecasts demand only; it does not forecast price.

The demand trend is real — and the model accounts for it (annual mean ND)

38GW30GW22GW34.9’13’15’17’19’21’23’2527.9’26
GB National Demand (ND) has fallen materially since 2013 — partly genuine efficiency, partly the rise of embedded (rooftop/distribution) solar and wind that ND does not “see”. A naive model trained on old years would over-predict today; Gridcast carries an explicit demand-trend feature so recent forecasts stay calibrated. This is why the backtest trains only on data before each forecast. An honest caveat: the 2024–25 backtest window sat in a flat-demand era (annual mean barely moved), so the long-horizon error understates what trend-extrapolation would cost in a year of strong drift — the 365-day figure is honest for a steady period, not a worst case.

How it’s built

  • Data (real, public, free). Demand: NESO Historic Demand Data, half-hourly National Demand aggregated to daily, 2013-01-01 to 2026-05-23. Weather: Open-Meteo ERA5 reanalysis, a population-weighted basket of 14 GB cities. All cached locally.
  • Model. Gradient-boosted regression trees (scikit-learn HistGradientBoosting) on calendar features (day-of-week, annual cycle, bank holidays, demand trend) and weather (temperature, heating/cooling degree-days).
  • Backtest. Expanding-window walk-forward, monthly origins, full 365-day forecast blocks, strict train/test time separation. No random splits (which would leak the future into the past).
  • Honesty about weather. 14-day uses actual weather (a real forecast regime); 30/90/365-day use climatological normals because weather is not predictable that far out — so the long horizons are calendar/trend forecasts with wide, measured bands, never dressed up as weather-accurate.
  • Honesty about region. National is backtested; regional is a population- and weather-scaled estimate, because clean regional demand history is not public. Labelled as such throughout.
GridcastGB electricity demand intelligence · a Savernake research prototype
Out-of-sample verified NESO Open-Meteo Free public data
National demand forecast trained and backtested on real, public NESO and Open-Meteo data (4,891 days, generated 2026-06-13 09:46). Every accuracy figure is a genuine out-of-sample walk-forward result, not an in-sample fit. The regional map is a clearly-labelled population/weather-scaled estimate — there is no public multi-year half-hourly regional demand series to backtest against, and we say so rather than imply one. Methodology & code: gridcast_data.py (data), gridcast_model.py (model + backtest), gridcast_regional.py (regional estimate), gridcast_site.py (this page). No proprietary or client systems were used. © Savernake — built on free, public data.