πŸŽ‰ Grid Poet just got an upgrade! Faster data, better charts. Welcome to the new version. 🌱⚑

Documentation

Technical reference for Grid Poet

This documentation is AI-generated by Claude (Anthropic) and reviewed by a human editor. It describes methodology and data sources β€” not internal implementation.

1. DA Price Forecast

Grid Poet forecasts day-ahead electricity prices for the DE-LU bidding zone (Germany + Luxembourg). The forecast is generated daily before the EPEX SPOT day-ahead auction closes at 12:00 CET, predicting 24 hourly prices for the next delivery day (D+1).

The model outputs three quantiles: P10 (10th percentile, lower bound), P50 (median, point forecast), and P90 (90th percentile, upper bound), forming an 80% prediction interval.

1.1 Pipeline Flow

The daily forecast pipeline runs in five stages:

Daily Forecast Pipeline β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ ENTSO-E β”‚ β”‚ ENTSO-E β”‚ β”‚ Open-Meteo β”‚ β”‚ DA prices β”‚ β”‚ Generation mix β”‚ β”‚ Weather fcst β”‚ β”‚ (D-10 β†’ D-1) β”‚ β”‚ Consumption β”‚ β”‚ 6 locations β”‚ β”‚ hourly EUR/MWh β”‚ β”‚ Residual load β”‚ β”‚ (D-10 β†’ D+1) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 1. FETCH & MERGE β”‚ β”‚ Align to UTC hourly β”‚ β”‚ Deduplicate sources β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 2. FEATURE ENGINEERING β”‚ β”‚ Weather aggregation β”‚ β”‚ Calendar features β”‚ β”‚ Price/gen lags (D-1) β”‚ β”‚ Derived (windΒ³, solar) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 3. PREDICT β”‚ β”‚ LightGBM Γ— 3 quantile β”‚ β”‚ β†’ P10, P50, P90 β”‚ β”‚ for 24 delivery hours β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 4. STORE β”‚ β”‚ Save forecast + meta β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ Actuals Scoring (after auction) β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 5. SCORE β”‚ β”‚ MAE, RMSE, bias β”‚ β”‚ 80% coverage check β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
The forecast is generated before the EPEX SPOT day-ahead auction closes at 12:00 CET. All input data is available by forecast time: historical prices up to D-1, ENTSO-E generation up to D-1, TSO wind/solar forecasts for D+1, and weather forecasts for D+1.

1.2 Data Sources

Source Data Resolution
ENTSO-E Transparency Platform DA prices, generation by source, load, cross-border flows, wind/solar forecasts (DE-LU + 13 zones) 15-min / hourly
Energy-Charts (Fraunhofer ISE) Generation mix (fallback source, publishes faster than ENTSO-E for some types) Hourly
Open-Meteo Wind speed (100m), solar radiation, temperature, cloud cover Hourly

Weather Locations

Weather data is fetched from 6 representative locations across Germany, weighted by installed renewable capacity:

LocationCoordinatesRepresents
North Sea54.5Β°N, 7.0Β°EOffshore wind cluster
North53.5Β°N, 10.0Β°EOnshore wind (Schleswig-Holstein, Niedersachsen)
Central West51.5Β°N, 7.5Β°ENRW industrial demand, onshore wind
Central East51.3Β°N, 12.4Β°ESachsen-Anhalt / Brandenburg wind+solar
South West48.8Β°N, 9.2Β°EBaden-WΓΌrttemberg solar
South East48.1Β°N, 11.6Β°EBavaria solar

Wind speed is weighted by installed wind capacity (offshore/onshore splits). Solar radiation is weighted by installed PV capacity (concentrated in southern Germany). Temperature uses equal weighting.

1.3 Features (~37 total)

Weather (D+1 forecast)

  • Capacity-weighted wind speed at 100m hub height
  • Capacity-weighted direct solar radiation
  • Average temperature and cloud cover across locations
  • North–south wind gradient (congestion proxy)
  • North–south radiation gradient

Price Lags (strict no-leakage: D-1 and earlier)

  • Same hour yesterday (D-1) and one week ago (D-7)
  • Yesterday's daily mean, min, max
  • 7-day rolling mean and standard deviation

Generation Lags (D-1)

  • Gas, coal, and renewable generation shares
  • Consumption and residual load
  • Gas-to-coal ratio (implicit fuel economics proxy)

Calendar

  • Hour, day of week, month
  • Weekend, public holiday (all 16 German federal states), bridge day
  • Cyclical encodings (hour sin/cos, month sin/cos)

Derived

  • Wind power proxy β€” wind speed cubed (cubic power law, capped at 25 m/s cut-out)
  • Solar capacity factor proxy β€” radiation adjusted for temperature derating
  • Residual load Γ— peak hour interaction
No-leakage guarantee: All lag features use only data from D-1 or earlier. Weather features use D+1 forecasts (available on the morning of D). No feature uses actual data from the delivery day.

1.4 Model

LightGBM gradient-boosted decision trees with quantile regression objective. Three separate models predict P10, P50 (median), and P90, sharing the same feature set.

A single model covers all 24 hours with hour as a feature, rather than 24 separate hour-specific models. This gives the model more training data per hour and lets it learn cross-hour patterns.

Training approach

Historical data from January 2024 to present. Walk-forward evaluation: train on all data except the last 30 days, test on the final 30 days. Hyperparameters are tuned to minimize MAE on the held-out test set.

1.5 Evaluation

Metrics

MetricDescription
MAEMean absolute error β€” average distance between forecast and actual price
RMSERoot mean squared error β€” penalises large errors more heavily
Mean biasAverage (forecast βˆ’ actual). Positive = systematically overestimating
80% coverageFraction of actuals falling within the P10–P90 interval. Target: 80%
Skill score1 βˆ’ (MAE / baseline_MAE). Positive = better than persistence (same-hour D-1)

Baseline

The persistence baseline predicts tomorrow's price = today's price for the same hour. This is the simplest reasonable forecast and the benchmark to beat. A skill score of 0.40 means the model reduces MAE by 40% compared to persistence.

Performance metrics and detailed error analysis are available on the forecast page.

1.6 Timestamp Conventions

Power market timestamps are interval-aligned: 14:00 means the interval from 14:00 to 15:00 (left-aligned). All internal timestamps use naive UTC.

DST transitions are handled explicitly: a CET delivery date may have 23, 24, or 25 hours. Display conversion to Berlin time is applied in the frontend.

2. Grid Poet Image Pipeline

The image pipeline runs hourly and transforms live grid data into AI-generated artwork:

  1. Fetch β€” current generation mix, consumption, weather from ENTSO-E + Open-Meteo
  2. Analyse β€” Claude AI writes an analysis, poem, and image prompt based on the grid state
  3. Generate β€” FLUX.2 Pro creates a painting in the 19th-century German Romantic landscape tradition
  4. Publish β€” image + metadata saved, served on the main page

Each image captures a moment in Germany's energy transition β€” the interplay of wind, solar, fossil fuels, and weather β€” through the lens of landscape painting.

3. Captured Prices & Cannibalization

The Analytics page shows captured prices and generation-vs-price scatter plots using hourly market data.

Source data

DataSourceUnit
DA priceENTSO-EEUR/MWh
Wind onshoreENTSO-EGW
Wind offshoreENTSO-EGW
SolarENTSO-EGW
BiomassENTSO-EGW
HydroENTSO-EGW
Natural gasENTSO-EGW
Hard coalENTSO-EGW
Brown coal (lignite)ENTSO-EGW
Consumption (total load)ENTSO-EGW

Derived metrics

MetricFormula
Captured price (per technology) Ξ£(priceh Γ— genh) / Ξ£(genh) β€” volume-weighted average DA price
Baseload price Ξ£(priceh) / N β€” simple arithmetic mean, the reference line
Net import max(0, consumption βˆ’ total generation) β€” positive during import hours
Why captured prices matter: When wind and solar generate the most, they depress market prices (the merit order effect). The captured price shows the actual revenue per MWh each technology earns β€” typically below baseload for renewables. This "cannibalization" is a key metric for renewable economics.

4. European Markets

The Markets page compares day-ahead electricity prices, generation mixes, and cross-border flows across 14 European bidding zones: Germany (DE-LU), France (FR), Netherlands (NL), Austria (AT), Poland (PL), Denmark West (DK1), Belgium (BE), Czech Republic (CZ), Spain (ES), Portugal (PT), Norway South (NO1), Sweden Mid (SE3), Finland (FI), and Great Britain (GB).

Data sources

Day-ahead prices for continental zones are sourced from the ENTSO-E Transparency Platform (authoritative TSO data). Generation mix data is sourced from Energy-Charts (Fraunhofer ISE, CC BY 4.0). GB uses Elexon BMRS (settlement prices, not DA auction).

Timestamps

All timestamps refer to the delivery interval β€” the time during which power was physically delivered. Timestamps are left-aligned: "14:00" means 14:00–15:00.

Cross-border flows

Cross-border data shows scheduled commercial exchanges for Germany. Positive values = export from DE, negative = import to DE. Source: ENTSO-E Transparency Platform (values in GW).

5. Data Attribution

  • ENTSO-E β€” Transparency Platform: DA prices, generation, load, cross-border flows (14 zones)
  • Energy-Charts β€” Fraunhofer ISE: generation mix fallback (CC BY 4.0)
  • Elexon β€” BMRS: GB settlement prices
  • Open-Meteo β€” open-source weather API (ECMWF, DWD, and other NWP models)
  • FLUX.2 Pro β€” Black Forest Labs: image generation
  • Claude β€” Anthropic: analysis, poetry, and image prompts