Methodology
Model mercury-1.0.0 · calibrated on real ERCOT settled load. The call is never naked — here is every input and every coefficient.
What we predict
For each eligible day (June–September for 4CP) we estimate P(this day sets the month's coincident-peak). A day can only be the monthly peak if its load exceeds the month-to-date maximum — the Horizon. We publish two numbers: p_raw (the honest baseline, ERCOT forecast vs the Horizon) and p_final (net of our estimated demand response). Publishing both is the transparency feature.
The model, in math
A calibrated logistic regression over 5 features. z = intercept + Σ wᵢ·featureᵢ, P = 1/(1+e⁻ᶻ).
| Feature | Weight | Meaning |
|---|---|---|
| intercept | -1.6553 | bias |
| margin_gw | 0.5394 | GW over the month-to-date max. Only a new max can be the month peak. |
| load_gw | 0.2257 | Absolute hotness. Peak days sit near seasonal maxima; prunes low-load early-month new maxima. |
| temp_anomaly_f | 0.12 | Heat above normal (prior-weighted for v1.0.0). |
| dow_factor | -0.2202 | Weekday vs weekend/holiday. |
| days_remaining_norm | -2.4296 | Fewer days left -> a new max is more likely to survive as the month peak. The strongest driver in the fit. |
Calibrated on REAL ERCOT settled hourly load, seasons 2022-2024 (get_hourly_load_post_settlements). Fitted by class-weighted L2 logistic regression on the eligible-window daily maxima; label = day was the true monthly peak. Temperature coefficient is a documented prior (0.12/degF), not backtest-fitted, pending historical-weather ingestion (v1.1).
How it scored (backtest, 2022–2024, real settled load)
At the actionable WARNING threshold, WattMarkets reached 16.7% precision vs the naive “alert every new month max” baseline's 14.8% — at 60 false-alarm curtailment hours vs 138. The WATCH tier catches most monthly peaks a day ahead.
The baseline's recall of 100% is a ceiling it only reaches by flagging every new intra-month max. We publish our misses on the Scorecard.
Program config (ERCOT 4CP · 2026)
{
"peaks": {
"period": "month",
"count": 1
},
"eligible_months": [
6,
7,
8,
9
],
"interval_minutes": 15,
"eligible_window_ct": [
"13:00",
"20:00"
],
"levels": {
"watch": 0.25,
"warning": 0.5,
"action_interval": 0.2
}
}Integrity
Every live call is written to an append-only, SHA-256 hash-chained log before its interval closes. Nightly we publish the terminal hash at /v1/scorecard/attestations — anyone can verify we never edited history.
Informational only; curtailment decisions and their outcomes are yours. WattMarkets is not a licensed advisor and makes no guarantee of accuracy.