How it works · what it can't do

About & limitations

GreenWindow forecasts Great Britain's national grid carbon intensity for the next 48 hours, recommends a start time for flexible jobs, and grades its own forecasts as the actual values arrive. Every 6 hours an automated pipeline fetches fresh data, runs each model, stores the forecast exactly as issued, and scores past forecasts.

Models

Seasonal naive (yesterday / last week)
Repeats the value from 24 h or 168 h earlier. The benchmark every model must beat.
SARIMAX + weather
Dynamic harmonic regression: ARMA errors, Fourier terms for daily and weekly cycles, and temperature, 100 m wind, solar radiation and bank-holiday regressors.
Chronos-2
A pretrained time-series foundation model (Amazon, 120M parameters) used zero-shot, without and with the weather covariates.
NESO
The grid operator's own published forecast, stored as issued so it can be scored fairly.

Every model sees the same trailing window of data (56 days for classical models, 28 days of context for Chronos-2) and must output a P10, P50 and P90 for each of the next 48 hours.

How the planner decides

It averages the forecast over every possible job window and picks the lowest (median in "expected" mode, P90 in "cautious" mode). A choice is marked robust only if its P90 average is below the run-now window's P10 average. Averaging quantiles across hours assumes forecast errors are perfectly correlated, which overstates uncertainty; the robust flag is deliberately conservative.

Known biases and limitations

  1. Modelled target. The "actual" intensity is NESO's own estimate, not a meter reading. Models learn NESO's methodology.
  2. Average, not marginal. This is the average carbon intensity of the grid. Moving a job to a low-average hour does not guarantee the same cut in marginal emissions, so we never say "CO₂ saved".
  3. Optimistic backtest weather. Backtests use archived weather forecasts that are closer to reality than a true 1–2-day-ahead forecast, so weather-driven models look better in backtests than live. The live leaderboard corrects this.
  4. Possible pretraining overlap. Chronos-2 may have seen similar electricity series in training. Only live scoring on genuinely future data rules out leakage.
  5. Regime drift. Britain's grid is decarbonising and its mix keeps changing. Short training windows limit, but do not remove, the problem.
  6. One country. Results are for Great Britain only and do not transfer to other grids.
  7. Operator forecast vintage. Past NESO forecasts returned by the API have unknown lead times, so historical comparisons with NESO are not a fair head-to-head. Only our live snapshots are.
  8. Weather aggregation. Weather comes from seven fixed points (London, Birmingham, Glasgow and four offshore wind areas) with fixed weights, a simplification of where wind and solar actually are. Wind speed is turned into an estimated share of wind capacity with a generic turbine power curve, not a fitted one.
  9. Revisions. Recent actuals can be revised. Each run re-reads the last 7 days and rescoring is idempotent.
  10. Weather API terms. Open-Meteo's free tier is for non-commercial use. This is a portfolio project.

Data sources

  • Carbon intensity (actuals and operator forecast): NESO Carbon Intensity API, licensed CC BY 4.0.
  • Weather (Historical Forecast and Forecast APIs): Open-Meteo.com, licensed CC BY 4.0.
  • Bank holidays: England, from the open-source holidays package.