Layer 2 — Behavioural Data
Grid load and demand signals — orthogonal human-response data that correlates with weather conditions.
Layer 2 adds behavioural signals — data generated by human responses to weather — as an orthogonal input to the calibration pipeline.
Core Insight
Electricity demand responds directly to temperature. A grid load anomaly at 2pm carries forward-looking information about weather conditions that NWP models may not yet reflect. If grid load is spiking in Houston but the latest GFS run predicts moderate temperatures, one of them is wrong — and the grid load is measuring actual conditions on the ground.
Grid Load Data (EIA)
| Attribute | Detail |
|---|---|
| Source | EIA Hourly Electric Grid Monitor |
| API | EIA Open Data API (free, registration required) |
| Update frequency | Hourly (demand), daily forecasts ~10:00 ET |
| Historical depth | July 2015 (demand), July 2018 (sub-regional) |
| Coverage | All major ISOs — PJM, ERCOT, CAISO, NYISO, ISO-NE, MISO, SPP |
| Python library | gridstatus (open source, no API key needed) |
City-to-ISO Mapping
| City | ISO | Load Zone | Grid Load Available |
|---|---|---|---|
| New York | NYISO | NYC zone | ✅ |
| Chicago | PJM | ComEd zone | ✅ |
| Los Angeles | CAISO | SCE zone | ✅ |
| Dallas | ERCOT | North zone | ✅ |
| Houston | ERCOT | Houston zone | ✅ |
| San Francisco | CAISO | PG&E zone | ✅ |
| Phoenix | SRP/APS | — | ❌ Not in ISO |
| Denver | PSCo/Xcel | — | ❌ Not in ISO |
| Miami | FPL | — | ❌ Not in ISO |
| Atlanta | Southern Co | — | ❌ Not in ISO |
Key finding: Only 6 of the 10 probable ForecastEx cities are in ISOs with readily available grid load data. The remaining 4 are served by vertically integrated utilities without public real-time load data.
How Grid Load Feeds the Engine
Grid load enters the pipeline as a modifier, not a replacement for NWP data:
- Calculate the expected load for the current temperature forecast
- Compare against actual real-time load
- If load is anomalously high relative to the temperature forecast → temperature may be underforecast
- Adjust the ensemble probability distribution accordingly
The adjustment is small and conservative — grid load is a noisy signal. But it's orthogonal to the NWP data, which makes even a small signal valuable in combination.
Other Signals (Assessed and Deprioritised)
| Signal | Feasibility | v1 Status | Reason |
|---|---|---|---|
| Google Trends | Medium — fragile API | Not included | pytrends frequently breaks; signal is noisy |
| Social media | Low — cost-prohibitive | Not included | Twitter/X API costs $42k+/month; Bluesky too small |
| Urban mobility | Low — limited geography | Not included | Citibike data covers NYC/Chicago only |
Grid load is the only Layer 2 signal included in v1. Others may be added in future versions if feasibility improves.