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.
| Position | Weeks | Rows | MAE | ρ | Top-12 | Coverage | Baseline | Season EB | Usage | Opp-adj | Market | vs baseline |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| QB back-filled | 2 | 48 | 6.14 | 0.36 | 10 / 24 | 61% | 7.65ρ 0.12 | 7.50ρ 0.27 | 7.35ρ 0.21 | 7.26ρ 0.27 | 7.11ρ 0.25 | 1–0 |
| RB back-filled | 2 | 72 | 4.78 | 0.55 | 11 / 24 | 76% | 5.28ρ 0.47 | 4.79ρ 0.57 | 4.95ρ 0.52 | 5.28ρ 0.50 | 5.25ρ 0.47 · 56% own | 2–0 |
| WR back-filled | 2 | 72 | 7.96 | 0.44 | 13 / 24 | 60% | 6.51ρ 0.37 | 5.98ρ 0.46 | 6.23ρ 0.43 | 6.79ρ 0.38 | 6.71ρ 0.35 · 51% own | 0–2 |
| TE back-filled | 2 | 48 | 5.68 | 0.22 | 13 / 24 | 58% | 5.57ρ 0.10 | 4.96ρ 0.39 | 5.33ρ 0.20 | 5.45ρ 0.18 | 5.58ρ 0.06 · 52% own | 1–1 |
| K back-filled | 2 | 48 | 4.97 | -0.06 | 6 / 24 | 44% | 4.30ρ -0.10 | 3.77ρ -0.04 | — | — | 3.89ρ -0.13 · 54% own | 0–2 |
| DST back-filled | 2 | 48 | 4.64 | 0.35 | 17 / 24 | 58% | 4.43ρ 0.20 | 4.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
| Fit | Trained on | QB | RB | WR | TE | K | DST |
|---|---|---|---|---|---|---|---|
| Sun 2026-09-27 fit-2026w03-mkt | 2025 W5–2026 W2 | 0.215 | 0.180 | 0.178 | 0.168 | 0.352 | — |
| Tue 2026-09-29 fit-2026w03-mkt-20260929 pinned | 2025 W5–2026 W3 | 0.214 | 0.181 | 0.178 | 0.164 | 0.352 | — |
What the replay predicted, and what happened
| Position | Components | Rows | Realised ÷ predicted | Beat baseline (realised) | Beat baseline (replay) |
|---|---|---|---|---|---|
| RB | 8 | 384 | ×1.23 | 5 / 8 | 0 / 8 |
| WR | 7 | 336 | ×1.68 | 3 / 7 | 2 / 7 |
| TE | 7 | 224 | ×1.25 | 4 / 7 | 4 / 7 |
| K | 9 | 288 | ×1.02 | 8 / 9 | 6 / 9 |
| DST | 7 | 224 | ×0.92 | 2 / 7 | 5 / 7 |
| Position | Components | Rows | Realised ÷ predicted | Beat baseline (realised) | Beat baseline (replay) |
|---|---|---|---|---|---|
| QB | 8 | 256 | ×0.88 | 3 / 8 | 6 / 8 |
| RB | 8 | 384 | ×1.22 | 7 / 8 | 0 / 8 |
| WR | 7 | 336 | ×1.05 | 3 / 7 | 2 / 7 |
| TE | 7 | 224 | ×1.21 | 4 / 7 | 4 / 7 |
| K | 9 | 288 | ×1.02 | 5 / 9 | 6 / 9 |
| DST | 7 | 224 | ×0.88 | 4 / 7 | 5 / 7 |
Weather multipliers, refit
| Wind | Current file | Refit 2019–2026 | 2026 observed wind |
|---|---|---|---|
| 0–9 mph | 1.000n 1468 | 1.000n 1510 | 1.000n 42 |
| 10–14 mph | 0.961n 524 | 0.963n 544 | 1.000n 20 |
| 15–19 mph | 0.911n 212 | 0.911n 212 | 0.997n 0 |
| 20+ mph | 0.838n 60 | 0.838n 60 | 0.997n 0 |
| Wind | Current file | Refit 2019–2026 | 2026 observed wind |
|---|---|---|---|
| 0–9 mph | 1.000n 545 | 1.000n 571 | 1.000n 26 |
| 10–14 mph | 0.980n 183 | 0.977n 191 | 0.922n 8 |
| 15–19 mph | 0.980n 73 | 0.977n 73 | 0.922n 0 |
| 20+ mph | 0.980n 13 | 0.977n 13 | 0.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)