Skip to content
Red Zone Rank
Connect your leagueFree email alerts

The 2026 season report monthly dry run — season not over

Headline

Forecast weeks0none · back-filled: 2, 3 (not counted)
Board vs baseline0–0board-weeks won–lost on MAE, forecast weeks, PPR · back-filled 4–7 (not counted)
Start/sit skill—no scored calls yet
ReconciledYes2 weeks against app.accuracy_page · season tiles match

Every source, by position

No forecast week yet — the table fills from the first board published before its week's kickoff, scored the Tuesday after its week is final.
PPR · back-filled weeks — shown, not counted · the board's own score, then every source re-scored on the same rows from the forecast ledger (MAE, ρ below). Green = the source beat the board, brown = it did not.
PositionWeeksRowsMAEρTop-12CoverageBaselineSeason EBUsageOpp-adjMarketvs baseline
QB back-filled2486.140.3610 / 2461%7.65ρ 0.127.50ρ 0.277.35ρ 0.217.26ρ 0.277.11ρ 0.251–0
RB back-filled2724.780.5511 / 2476%5.28ρ 0.474.79ρ 0.574.95ρ 0.525.28ρ 0.505.25ρ 0.47 · 56% own2–0
WR back-filled2727.960.4413 / 2460%6.51ρ 0.375.98ρ 0.466.23ρ 0.436.79ρ 0.386.71ρ 0.35 · 51% own0–2
TE back-filled2485.680.2213 / 2458%5.57ρ 0.104.96ρ 0.395.33ρ 0.205.45ρ 0.185.58ρ 0.06 · 52% own1–1
K back-filled2484.97-0.066 / 2444%4.30ρ -0.103.77ρ -0.04——3.89ρ -0.13 · 54% own0–2
DST back-filled2484.640.3517 / 2458%4.43ρ 0.204.63ρ 0.01———0–2
the ledger stores the box-score sources (baseline, season_eb, usage, opp_adj) AFTER the wind multipliers; there is no separate un-weathered arm — the weather section refits the multipliers instead

The market's weight, Tuesday by Tuesday

The fitted weight of the market source (implied team totals from closing lines) per position — the mean over the components it prices. app.projection_versions keeps only the current pin; `pinned` marks today's pinned fit, earlier Tuesdays' pins are the fits in date order
FitTrained onQBRBWRTEKDST
Sun 2026-09-27 fit-2026w03-mkt2025 W5–2026 W20.2150.1800.1780.1680.352—
Tue 2026-09-29 fit-2026w03-mkt-20260929 pinned2025 W5–2026 W30.2140.1810.1780.1640.352—

What the replay predicted, and what happened

Out of time — weeks after the fit's training span · component MAE on the published boards ÷ the replay's calibrated MAE, median over the position's components (1.00 = as predicted)
PositionComponentsRowsRealised ÷ predictedBeat baseline (realised)Beat baseline (replay)
RB8384×1.235 / 80 / 8
WR7336×1.683 / 72 / 7
TE7224×1.254 / 74 / 7
K9288×1.028 / 96 / 9
DST7224×0.922 / 75 / 7
In sample — weeks inside the fit's training span (a check of the code path, not a forecast) · component MAE on the published boards ÷ the replay's calibrated MAE, median over the position's components (1.00 = as predicted)
PositionComponentsRowsRealised ÷ predictedBeat baseline (realised)Beat baseline (replay)
QB8256×0.883 / 86 / 8
RB8384×1.227 / 80 / 8
WR7336×1.053 / 72 / 7
TE7224×1.214 / 74 / 7
K9288×1.025 / 96 / 9
DST7224×0.884 / 75 / 7

Weather multipliers, refit

Team passing yards (also receiving yards; pass TDs take half the effect) · multiplier relative to the 0–9 mph bucket (n in each bucket)
WindCurrent fileRefit 2019–20262026 observed wind
0–9 mph1.000n 14681.000n 15101.000n 42
10–14 mph0.961n 5240.963n 5441.000n 20
15–19 mph0.911n 2120.911n 2120.997n 0
20+ mph0.838n 600.838n 600.997n 0
Field goals from 50+ yards · multiplier relative to the 0–9 mph bucket (n in each bucket)
WindCurrent fileRefit 2019–20262026 observed wind
0–9 mph1.000n 5451.000n 5711.000n 26
10–14 mph0.980n 1830.977n 1910.922n 8
15–19 mph0.980n 730.977n 730.922n 0
20+ mph0.980n 130.977n 130.922n 0
no non-fixture NWS forecast is stored for a final game of the season yet — the forecast refit waits for real fetches Nothing was written: the shipped parameters change only after the final report.

What the chat said

Medians shown49 numbers · MAE 8.750% of the ranges shown held the actual (target 60%).
Start/sit callsNo calls scored yetSkill = 1 − Brier / 0.25 (a coin flip scores 0).
Review loop · 4 weeks13 answers · 3 up · 0 downGate: 0 sentences checked, 0 repaired, 0 dropped · 0 chip clicks

Into next season's calibration

Pool 2019–202645,241 player-weeks · 3,838 DST-weeksplus 4052 published 20–80 ranges with actuals this season
Spread multipliers nowQB 0.713 · RB 0.86 · WR 1 · TE 1.098 · K 1 · DST 1fitted on 2019–2025; one scalar per position, 20–80 coverage target 60%
What the refit usesitem 9 refits scoring/dist_params.json spread_mult (one scalar per position; 20–80 PIT coverage target 0.60, band 58–62 %) on the pooled replay population — scoring.coverage.population: REG player-weeks (QB/RB/WR/TE/K) and DST-weeks with their replayed baseline means and actual points; the counts here are mart.player_week / mart.dst_week rows, an upper bound, since population() keeps active-roster, non-bye weeks with a replayable mean — plus, for the season, the ledger's published board intervals (kind='set', component='points', p20/p80 with actuals; one row per board a player appears on) as the live check

Reconciliation

Definitions

weatherthe ledger stores the box-score sources (baseline, season_eb, usage, opp_adj) AFTER the wind multipliers; there is no separate un-weathered arm — the weather section refits the multipliers instead
ensemblethe board's proj_median re-scored on the arms' rows (what was shown)
by sourceper format × position × source over the scored weeks, forecast and back-filled apart: MAE and coverage weighted by scored rows, Spearman averaged over weeks (the accuracy page's aggregation)
reconciliationevery week's numbers recomputed through rankings.accuracy_page.week_payload == the stored app.accuracy_page payload; forecast aggregate == the page's season tiles
source coverageshare of scored rows where the source had its own value (otherwise it is scored at the baseline's)