Northern California Congestion Atlas

Curtailment risk priced for every transmission node in northern California.

CAISO OASIS

Curtailment trigger

Curtailment budget

Annual curtailment hours resampled with a weekly moving-block bootstrap, so episode clustering survives the resampling. This is what a term sheet contracts against.

Distribution of annual hours

Probability of breaching a cap

If the agreement caps curtailment at this many hours a year, this is how often that cap is exceeded.

When the network binds

Share of hours in each month-and-hour slot with material congestion. The structure is the point: scarcity is concentrated, so a flex window can be narrow rather than round the clock.

Share of hours congested

Episode length

Consecutive hours at the selected trigger. Scattered single hours are an operating nuisance; long blocks are a financing problem.

Year over year

Share of hours with material congestion, by calendar year. The direction of travel matters more than any single year.

Every site, ranked

The same measure over the same window at every node. Sort any column — the interesting comparison is between the headline share and the contractible hours, which do not rank the same way.

Method, and what it does not claim

What is measured

CAISO settles every node at LMP = energy + congestion + loss. The congestion component is non-zero exactly when a transmission constraint binds in a way that changes the cost of delivering the next megawatt-hour to that node. A persistently positive congestion component at a load node is the market's own statement that the network around it is capacity-binding.

Two complete calendar years of hourly day-ahead prices at real CAISO settlement nodes, plus the PG&E system reference. Complete years only: retention on this report reaches back to about June 2023, and a partial year weighted toward the congested season would bias the comparison upward.

Why tiers are relative

The PG&E system average is congested in of all hours, and the candidate sites cluster just above it. An absolute threshold puts nearly all of them in one bucket and separates nothing. A developer is not choosing between a congested grid and a clear one; they are choosing between nodes on a grid that already binds.

What it does not claim

This is not a curtailment forecast. A real curtailment probability for a specific new load needs the utility's contingency set, load-flow cases and the interconnection study itself. Congestion pricing is the observable proxy for network scarcity, not a substitute for those.

Retail load in CAISO settles at the load aggregation point rather than nodally, so any dollar figure here is a scarcity signal at a location, not a bill a customer receives.

Attribution is co-occurrence, not causation. CAISO does not publish shift factors, so the binding-element ranking is correlational — a starting point for an engineer who has the shift factors, not a replacement for them.

The bootstrap has two years behind it. Weekly blocks preserve episode clustering, but a tail estimated from few independent weather regimes is indicative rather than actuarial.

Does it survive its own assumptions

Where it stops, and what would fix it

The validation panel is deliberately unflattering. The month-and-hour shape holds up on a year the model never saw. The level does not: congestion fell sharply between the two years, and a backward-looking model cannot see that, so it over-predicts.

  • Contingency and load-flow cases → probability rather than proxy
  • Shift factors → causal attribution instead of correlation
  • Planned outages and in-service dates → the tail the backtest cannot reach
  • Observed flexible-service events → calibration against real curtailment

Each is a utility-side input. That is the point: this is the floor the public record supports, not the ceiling.

1 / 7