Every US commercial reactor reports its power level to the NRC daily — public, free, no lag. Capacity-weight those daily statuses and you reconstruct EIA’s official monthly US nuclear generation figure at r = 0.988, MAPE 1.45%, roughly 104 days (14.9 weeks) before EIA publishes it. That reconstruction is the proven half of this signal — a real, mechanistic information lead. The second half is the trading question: the tradeable instrument is UNG(US Natural Gas Fund — lost nuclear output is mostly replaced by gas-fired generation), and the event study of unplanned reactor trips against UNG forward returns is below, verdict included. Nothing on this page clears our validation bar yet— the trade leg is research, now in live forward validation on /track-record.
The nowcast leg is mechanistic, not statistical: it sums public nameplate capacity times public daily power-level reports and compares the monthly total against EIA’s own published number. There is nothing to overfit — there are no free parameters at all.
The trading leg is a straightforward Spearman IC of the surprise signal against forward returns on three energy-linked ETFs, graded on a 70/30 chronological in-sample/out-of-sample split, and every cell below is reported — including the ones that are null or wrong-signed. No parameter search, no cherry-picked lag, no cherry-picked asset.
Residuals in the nowcast carry a clean, understood seasonal bias (winter undershoot ~2–2.5%) because capacity-weighting uses fixed nameplate MWe while reactors genuinely run above nameplate output in cold weather — a real physical effect, flagged rather than adjusted away. XLU has zero rows in the fleet’s price tables (checked every prices table on the box), so its cells are null for lack of data, not omitted for looking bad.
Daily fleet output (solid, capacity-weighted from 1,656 NRC unit-day observations across 95 units) against a strictly-prior expected baseline (dashed blue: the mean output for that day-of-year across strictly prioryears only — 2022 has no prior in-sample year, so its baseline is null, never backfilled with future data). The shaded band is the surprise. Red ticks mark the five largest unplannedcapacity-loss events (≥95%→0% power, outside the Mar–May / Sep–Nov refueling seasons) by MWe lost. The grey envelope is the ±1.96σ accuracy wave-bound: expected output ± 1.96× the standard deviation of prior-years’ surprise in a ±10-day day-of-year window (min 30 observations, no lookahead — which is why the envelope only exists once two full prior years have accrued). Actual output escaping the envelope = a statistically abnormal fleet day.
Across the full sample: 272total ≥95%→0% unit-days, of which 115fall outside the two scheduled refueling seasons and are flagged unplanned. Grand Gulf 1 (1,401 MWe, the single largest US reactor unit) is a repeat tripper and dominates the top-5 by raw MWe lost — a size artifact, not a claim that it is unusually unreliable per outage.
Solid blue = EIA Monthly Energy Review official nuclear generation (published with a long lag). Dashed black + dots = our nowcast, built purely from public daily NRC reactor-status data, available in real time. The r and MAPE above are computed over the full 51-month series (2022-01–2026-03); the chart below plots the most recent 6 months for legibility — the table beneath it is the same 6 rows, numerically.
As of today (2026-07-14) the newest published EIA month is 2026-03; the daily NRC feed is complete through 2026-07-14 — a 104-day publication lead. Worst 5 months by absolute % error (all in the same seasonal direction — see methodology notes above):
The economic chain is mechanical: when a large reactor trips offline unexpectedly, the lost output is replaced mostly by gas-fired generation, so the naive story says unplanned trips should be bullish natural gas. The listed instrument closest to that exposure is UNG— liquid, retail-tradeable, front-month Henry Hub. So we condition on the event: on all 64unplanned trips ≥1,000 MWe in the daily NRC file since 2022, what did UNG actually do next? The answer is real, and it is the opposite of the naive more-gas-burn story:
| Horizon | Event-day mean | Unconditional mean | Excess | t |
|---|---|---|---|---|
| +1d | 4.5 bps | -9.9 bps | 14.4 bps | 0.33 |
| +3d | -230.1 bps | -29.4 bps | -200.7 bps | -2.77 |
| +5d | -370.7 bps | -48.4 bps | -322.4 bps | -3.42 |
Method: unplanned outage events >=1,000 MWe lost -> UNG log-return next k trading days vs unconditional mean; t = excess/(sigma_all/sqrt(n)). The excess column is measured against UNG’s own drifting unconditional mean over the same horizons, so UNG’s structural roll-decay drift is netted out of the excess — but the drift still means the short side of UNG is the flattered side of any event study.
The data lead is strong; the trade is clustered and hard.A −322 bps excess at +5d with |t| > 3 looks tradeable on paper, but the t-stat assumes 64 independent events and they are not independent: repeat trippers cluster (Grand Gulf 1 alone fires 5 of the top 5 events by MWe lost), so the effective sample is materially smaller than 64 and the true t is materially weaker than −3.4. Add UNG’s roll-decay drift and the fact that “unplanned” is defined as outside-refueling-season — which embeds seasonality — and this does not clear our bar. Nothing here is proven alpha.
The fair test is forward, where clustering can’t be argued away: this exact rule (short UNG after an unplanned ≥1,000 MWe trip) is paper-trading live as PT-001-UNG-OUTAGE on /track-record, marked against real closes. If the forward ledger confirms, it graduates; if not, it retires in public like the others.
The daily lead-lag leg does notsurvive our validation gates — nothing below clears |t| ≥ 2 out-of-sample, UNG flips sign between in-sample and out-of-sample, and XLU has no price data on the box at all. The nowcast leg above is the proven data product; the numbers below are reported in full because we grade everything we test, not just what works.
| Asset | Lag (days) | n | IC (IS) | t (IS) | IC (OOS) | t (OOS) |
|---|---|---|---|---|---|---|
| UNG (nat-gas ETF) | 1 | 1,288 | -0.0387 | -1.16 | 0.0852 | 1.68 |
| 2 | 1,285 | -0.0141 | -0.42 | 0.0754 | 1.48 | |
| 3 | 1,284 | -0.0142 | -0.43 | 0.0440 | 0.86 | |
| 4 | 1,283 | -0.0181 | -0.54 | 0.0632 | 1.24 | |
| 5 | 1,282 | -0.0155 | -0.46 | 0.0695 | 1.36 | |
| XLU (utilities ETF) | 1 | 0 | — | — | — | — |
| 2 | 0 | — | — | — | — | |
| 3 | 0 | — | — | — | — | |
| 4 | 0 | — | — | — | — | |
| 5 | 0 | — | — | — | — | |
| XLE (energy ETF) | 1 | 1,288 | 0.0052 | 0.16 | 0.0540 | 1.06 |
| 2 | 1,285 | 0.0195 | 0.58 | 0.0379 | 0.74 | |
| 3 | 1,284 | 0.0311 | 0.93 | 0.0151 | 0.30 | |
| 4 | 1,283 | 0.0121 | 0.36 | -0.0026 | -0.05 | |
| 5 | 1,282 | 0.0400 | 1.20 | 0.0001 | 0.00 |
Signal = day-over-day change in surprise_gw (consecutive calendar days only). Response = forward log-return over the lag’s trading days, entered at the first trading close strictly after the signal date (no same-day information). t = IC · √((n−2)/(1−IC²)). No parameter search was performed — these are the only lags and assets ever graded for this signal.
DAILY SERIES: NRC daily reactor power status (2022-01-01..2026-07-14, 155259 unit-day rows, 95 units with Wikipedia-sourced net capacities from /root/proof_nrc/build_proof.py). fleet_gw(d)=sum(capacity_MWe*power_pct/100)/1000. BASELINE (chronologically honest): expected_gw for a day in year Y = mean fleet_gw over a 21-day centered day-of-year window (doy-10..doy+10) using ONLY years strictly before Y; 2022 has no prior in-sample year so expected/surprise are null for 2022 (no lookahead, ever). surprise_gw = fleet_gw - expected_gw. EVENTS: any unit going >=95% power to 0% day-over-day; drops outside the scheduled refueling seasons (Mar-May, Sep-Nov) are flagged unplanned. GRADING: signal = day-over-day change in surprise_gw (consecutive calendar days only). For each asset and horizon k=1..5, response = forward log-return over the k trading days beginning the first trading day strictly after the signal date (entry at prior trading close; no same-day information). Spearman IC on a 70/30 chronological split, t = IC*sqrt((n-2)/(1-IC^2)). XLU has no rows in the fleet's index_closes table (or any prices table on the box), so XLU cells are null for lack of data, not omitted. The proven leg of this signal is the nowcast itself: monthly aggregation of this series matches EIA MER official generation at r=0.988 / MAPE 1.45%, published ~104 days ahead of EIA. The trading-leg ICs are reported as-is, nulls included; no parameter search was performed.
The UNG outage trade is paper-trading live as PT-001-UNG-OUTAGEon the forward ledger — entries, marks, and retirement reasons all published, nothing deleted. That ledger, not this backtest, is what decides whether this becomes a signal. See /track-record for the live ledger, or /demo for the free-tier proof panel.