Report card
Week 9 report card: how GridIron's own projections did
Quick answer: GridIron's Week 9 projections missed by an average of 5.2 PPR points across 187 graded players. On the 185 of them with earlier games this season we missed by 5.2, better than the 5.6 a simple last-4-games average would have missed by. 36% of projections landed within 3 points of the actual score and 56% within 5.
- Players graded
- 187
- Average miss
- 5.2 pts
- Within 5 pts
- 56%
- Season average miss
- 5.2 pts
How did we grade Week 9?
A projection is only worth something if you know how often it's right. Here is Week 9's report card for GridIron's own numbers: 187 players, graded against what they actually scored, and against the simplest baseline there is.
Who is graded: every QB, RB, WR and TE we projected as available for at least 5 PPR points who recorded a stat line in Week 9. The projection graded is the last version we published before that player's kickoff. 13 projections rebuilt after the game had started are left out. Players we projected who didn't play are listed separately and are not in the average.
The miss is the gap between projected and actual PPR points, ignoring direction, and the average miss is the mean of those gaps. The baseline is the player's average over his last 4 games played before Week 9: the number you'd get with no model at all. A projection that can't beat it isn't earning its keep.
Projections come from /projections/{week}?source=gridiron and actual points from the weekly stats on /players, both in the GridIron API.
How accurate were our Week 9 projections by position?
| Position | Players | Our average miss | Last-4 average miss | Within 5 pts |
|---|---|---|---|---|
| QB | 32 | 6.4 | 6.0 | 50% |
| RB | 47 | 4.7 | 5.6 | 57% |
| WR | 71 | 5.5 | 5.6 | 54% |
| TE | 37 | 4.4 | 5.2 | 65% |
| All | 187 | 5.2 | 5.6 | 56% |
The last-4 column covers the 185 players with at least one earlier game this season; on those same players our average miss was 5.2.
TEs were the easiest position to project in Week 9 (average miss 4.4) and QBs the hardest (6.4). Positions score on different scales, so the fairer read is each row against its own last-4 column.
What were our biggest hits in Week 9?
Among the 36 players we projected highest in Week 9, these landed closest to the number. Getting a 20-point player within a point or two is the hard part; getting a 5-point player close is mostly arithmetic.
| Player | Pos | Team | Projected | Actual | Diff |
|---|---|---|---|---|---|
| James Cook | RB | BUF | 16.6 | 16.7 | +0.1 |
| Chris Olave | WR | NO | 16.4 | 16.8 | +0.4 |
| Bo Nix | QB | DEN | 16.0 | 16.7 | +0.7 |
| Amon-Ra St. Brown | WR | DET | 15.8 | 16.6 | +0.8 |
| Kirk Cousins | QB | LV | 16.7 | 15.6 | -1.1 |
| Christian McCaffrey | RB | SF | 21.5 | 22.7 | +1.2 |
What were our biggest misses in Week 9?
A miss is a miss, so here are the largest in each direction. Where the snap counts show an obvious reason (a player who left early, or one whose role suddenly grew) we note it; otherwise we don't guess.
| Player | Pos | Team | Projected | Actual | Diff | Context |
|---|---|---|---|---|---|---|
| Carson Wentz | QB | MIN | 14.8 | -0.8 | -15.6 | — |
| Malik Willis | QB | MIA | 17.4 | 4.8 | -12.6 | — |
| Josh Jacobs | RB | GB | 12.7 | 0.5 | -12.2 | Played 15% of snaps; his average before this week was 62%. |
| Jared Goff | QB | DET | 17.7 | 6.3 | -11.4 | — |
| D'Andre Swift | RB | CHI | 14.3 | 3.1 | -11.2 | — |
| Player | Pos | Team | Projected | Actual | Diff | Context |
|---|---|---|---|---|---|---|
| Kayshon Boutte | WR | HOU | 5.2 | 28.5 | +23.3 | — |
| Jordan Love | QB | GB | 15.3 | 36.2 | +20.9 | — |
| C.J. Stroud | QB | HOU | 15.6 | 36.4 | +20.8 | — |
| Matthew Golden | WR | GB | 12.6 | 32.4 | +19.8 | — |
| Shedeur Sanders | QB | CLE | 5.0 | 22.7 | +17.7 | — |
Across every graded player, actual points averaged 0.4 below the projection, so the week ran close to even overall.
Who did we project who didn't play?
We projected these players as available for at least 5 points and they recorded no stats in Week 9: Deshaun Watson (QB, CLE, 14.1), Jacoby Brissett (QB, ARI, 12.5), George Pickens (WR, DAL, 11.4), Tanner McKee (QB, PHI, 10.4), Kendre Miller (RB, NO, 9.8), Emanuel Wilson (RB, SEA, 9.3), Kyle Monangai (RB, CHI, 9.2), Ladd McConkey (WR, LAC, 8.4), Marcus Mariota (QB, WAS, 7.6), Tyrone Tracy Jr. (RB, NYG, 7.5), Athan Kaliakmanis (QB, WAS, 7.4), Kendrick Bourne (WR, ARI, 7.0) and 14 more. They aren't in the average miss above, but each one was a projection a lineup may have trusted, so we list them. Projections are published before game-day inactives, so a late scratch lands here; the injury status at kickoff is the check that catches it.
How have our projections done in 2026 so far?
Every 2026 week with GridIron projections, graded the same way. "Ours, same players" is our average miss on just the players who also have a last-4 baseline, so the two columns beside it compare like with like.
| Week | Players | Our average miss | Ours, same players | Last-4 average miss | Within 5 pts |
|---|---|---|---|---|---|
| Week 9 | 187 | 5.2 | 5.2 | 5.6 | 56% |
| Season | 187 | 5.2 | 5.2 | 5.6 | 56% |
We've beaten the last-4 baseline in 1 of 1 graded week this season, and over the season our average miss is 5.2 against 5.6 on the same players.
What are we watching next week?
- QBs were the hardest call this week (6.4 average miss). If the same position tops the list again next week, that's a pattern, not noise.
- We beat the baseline this week (5.2 against 5.6). We came closer than the last-4 average for 59% of the players graded.
- 26 projected players didn't play. Projections are built before inactives, so re-check statuses before each kickoff.
- One week is a small sample. A single game swings on a touchdown or a long play; the season table is the better guide to how far to trust the numbers.
How can I grade GridIron projections myself?
Every number on this page is reproducible from the API. Fetch our projections for the week, sweep /players for the actual points, and compare:
import requests
API = "https://api.gridirondata.com/api/v1"
H = {"x-api-key": "YOUR_KEY"}
SEASON, WEEK = "2026", 9
# Our projections for the week (one call).
rows = requests.get(f"{API}/projections/{WEEK}", headers=H,
params={"source": "gridiron", "scoring": "ppr", "season": SEASON}).json()["projections"]
# Actual PPR points: one paginated sweep of /players.
players, cursor = {}, None
while True:
params = {"limit": 100, **({"cursor": cursor} if cursor else {})}
body = requests.get(f"{API}/players", headers=H, params=params).json()
players.update({p["player_id"]: p for p in body["players"]})
cursor = body.get("next_cursor")
if not cursor:
break
misses = []
for r in rows:
gp = r["gridiron_projection"] or {}
stats = players.get(r["player_id"], {}).get("seasons", {}).get(SEASON, {}).get("weekly_stats", {})
row = stats.get(str(WEEK))
if gp.get("available") is False or gp.get("projected_points") is None or not row:
continue
misses.append(abs(row["fantasy_points_ppr"] - gp["projected_points"]))
print(f"{len(misses)} players, average miss {sum(misses) / len(misses):.1f} PPR")
That's one call for the projections and about 18 for the player sweep. A free key gets the current week's projections; earlier weeks and the weekly stats take Basic ($5/month). Our projections may be shown to your own users under the Pro + Commercial license. See the GridIron projections guide and how they're built.
Frequently asked questions
What is a good average miss for weekly fantasy projections?
Weekly fantasy scoring is noisy, so even good projections miss by several points on average for players projected for 5 or more PPR. The useful test isn't the raw number but whether a projection beats a simple baseline on the same players, week after week.
Why grade against a last-4-games average?
Because it's what you'd use with no model at all: each player's average over his last four games played. If a projection can't beat that, it isn't adding anything. It's also easy to check yourself.
Which projections are graded?
GridIron's own projections only, the last version published before each player's kickoff, for QBs, RBs, WRs and TEs projected as available for at least 5 PPR points who played. Players who didn't play are listed separately and left out of the average.
How do I get GridIron projections?
From /projections/{week}?source=gridiron (or the gridiron_projection object on every /projections row). A free key gets the current week; Basic gets every week; Pro adds the per-stat lines and game context.