One real week, end to end: 2024 Week 5, Ravens @ Bengals — the data gathered, the features built, both prediction machines run, and what actually happened.
Honesty box. Everything below is generated fresh from the real pipeline, walk-forward: the Week 5 prediction uses only 2016–2023 plus 2024 Weeks 1–4. This page runs the audited prior champion (already benchmark-scored on 2024 in the M5 market comparison) — the newer 66.6% model is deliberately withheld from 2024, which is preserved as its untouched one-shot confirmation window. The simulator trains only on seasons ≤2022. 2025–26 remain sealed. Final scores appear on this page only as after-the-fact truth for grading, never as inputs.
Snapcount has two prediction systems with different jobs. Both ran on this game.
One shot per player per week. Twenty gradient-boosted models (5 stats × 4 positions) each read ~100 features built from strictly-prior data and output one number. No play sequencing — game flow enters only through pregame context (the Vegas line, opponent trends). This machine holds every accuracy number on the Nine-Metric Scoreboard.
A state machine: it samples play 1, updates down / distance / clock / score, and lets that state shape play 2 — chaining ~124 plays into drives and a full game, then repeats the whole game 200 times. Game script emerges rather than being assumed. Measured honestly, it trails the pregame machine on accuracy (55.2% Tier A, below the naive bar) — so it powers demos, distributions and reasoning, not the scoreboard.
What actually executes when we predict Week 5. Every arrow is code in the repo; every step is walk-forward legal.
ingest_raw.py.freedb_player (147,457 player-weeks),
freedb_team, freedb_game — every column already screened by the anti-leakage gate.The model never sees the week it predicts. Here are two real players: what they did in Weeks 1–4, and the exact feature values the lag builder produced for Week 5.
Two kinds of lag: last-week values (rushing_yards_lag = the Week 4 number)
capture recent form; trailing means (tm_* = the player's running average over every prior game)
capture the level. The model weighs both, alongside the five other families — that combination is what separates it from
“just averaging”: a pure average scores 62.3% Tier A, this machine 63.9–64.3%, and a perfect average — a
leave-one-out oracle handed each player's true level — tops out at 65.4% on the 2023 tune window (ceiling study, 2026-07-25).
Yes, game statistics are in there: the context family carries the Vegas market's pregame read (implied team total, spread, game total), the opponent's lagged defensive EPA — strictly prior weeks, never this game's — and a divisional flag. Measured honestly, this family sharpens coherence more than raw accuracy (removing it moves Tier A by ~0.0 on 2023) — the forecastable part of game flow is mostly already priced into a player's role.
Every starter-pool player in the game. Each row shows the model's 70% likely range (floor → ceiling) around its projection, and where the truth actually landed. The range method is the shipped serving machinery: the projection ± the player's own lagged week-to-week volatility, conformal-calibrated on the model's 2023 out-of-sample errors — never on this week. Hover any row for detail.
All-nine-metric Tier A rate for each of the fourteen Week 5 games, one dot each.
The simulator chains state play-by-play: GameState → sample a play → advance state → next play,
drive by drive, then repeats the full game 200 times with different random draws.
Each line is one sampled play: the model picks run/pass from the game state, samples yardage and the ball-carrier from learned shares, then the state machine advances down, distance and clock. What happens on a play depends on everything before it — this is where game script lives.
Known simulator artifacts, shown rather than hidden: incompletions display at their true 0 yards (the raw sampler draws yardage independently of the completion flag — an open bug), and carrier allocation on designed runs is still loose — you may see receivers taking handoffs more often than a real coach would call. Both are on the fix list for the play-rollout build; this page shows the machine as it actually is today.
Read this chart honestly: in football's wildest weeks the truth lands far outside any average — this game beat the Vegas total by 30½ points. The simulator's ranges are also systematically low (its scoring is under-calibrated and QB passing isn't modeled yet), which is exactly why it was demoted from the scoreboard after measuring 55.2% Tier A. Its value is the mechanism — sequencing, usage flow, joint outcomes — not the point estimate.
The predictable part is volume. Chase Brown projected 47.0 and ran for 46; Andrei Iosivas 38.6 → 39;
Justice Hill 15.3 → 17 — all Tier A hits built from role features that persist. Derrick Henry (117.5, actual 92) came
from the same machinery — 70.6% of Baltimore's carries, 80% of red-zone carries, 199 rushing yards the week before —
and missed the ±25% window by 2.5 yards. Volume gets you close; it cannot make you exact.
The unpredictable part is efficiency. Ja'Marr Chase projected 69.9 and produced 193 in an overtime
shootout no pregame signal called — the market itself missed this game by 30½ points. That gap is not a fixable model
error; it is the ~42% of weekly variance that belongs to the sport. It is why the honest ceiling for any pregame
predictor is ~70% Tier A, and why our product direction is calibrated ranges — floor / projection / ceiling —
rather than a single number pretending to certainty.
Division of labor. Machine 1 owns the scoreboard. Machine 2 owns sequencing, game script and joint
outcomes — and will power the play-rollout demo. See the full accuracy picture on the
Nine-Metric Scoreboard.
Generated from the live repo pipeline: champion = XGBoost + game context
(cand_tree_context.py), walk-forward, trained through 2024 W4 at prediction time; simulator =
snapcore/models/sim/ play-step + state machine, trained ≤2022, 200 Monte Carlo reps, seed-deterministic.
Starter pool = top 32 QB / 64 RB / 96 WR / 32 TE that week. Vendor projections are never inputs.