Cliff Horizon logo

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)

AttributeDetail
SourceEIA Hourly Electric Grid Monitor
APIEIA Open Data API (free, registration required)
Update frequencyHourly (demand), daily forecasts ~10:00 ET
Historical depthJuly 2015 (demand), July 2018 (sub-regional)
CoverageAll major ISOs — PJM, ERCOT, CAISO, NYISO, ISO-NE, MISO, SPP
Python librarygridstatus (open source, no API key needed)

City-to-ISO Mapping

CityISOLoad ZoneGrid Load Available
New YorkNYISONYC zone
ChicagoPJMComEd zone
Los AngelesCAISOSCE zone
DallasERCOTNorth zone
HoustonERCOTHouston zone
San FranciscoCAISOPG&E zone
PhoenixSRP/APS❌ Not in ISO
DenverPSCo/Xcel❌ Not in ISO
MiamiFPL❌ Not in ISO
AtlantaSouthern 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:

  1. Calculate the expected load for the current temperature forecast
  2. Compare against actual real-time load
  3. If load is anomalously high relative to the temperature forecast → temperature may be underforecast
  4. 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)

SignalFeasibilityv1 StatusReason
Google TrendsMedium — fragile APINot includedpytrends frequently breaks; signal is noisy
Social mediaLow — cost-prohibitiveNot includedTwitter/X API costs $42k+/month; Bluesky too small
Urban mobilityLow — limited geographyNot includedCitibike 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.