Calibration
How accurate are our projections?
Most fantasy services tell you their projections are good. We show you.
Below is the actual measured accuracy of our projections on a completed week,
side-by-side with what FantasyPros, ESPN, and Sleeper said for the same
players.
These are the projections exactly as a subscriber receives them,
final adjustments included — not an internal version that never ships.
In season
Season 2025, Week 17
The projections we published to subscribers for this week, scored after the
games against what actually happened. Not a re-run and not a re-fit — these
are the numbers that were on the board before kickoff.
The board we served, 2025 Week 17
Player-week-stat outcomes measured
2795
interval accuracy is measured on 2251 of these —
the rest are projections we publish without a range, either because
the stat is too rare to calibrate one or because the range would be
too narrow to state
across 382 of 910 players projected
50% prediction interval
58.2%
contained the actual outcome
Target: 50.0% ·
+8.2 pp
80% prediction interval
82.6%
contained the actual outcome
Target: 80.0% ·
+2.6 pp
90% prediction interval
91.1%
contained the actual outcome
Target: 90.0% ·
+1.1 pp
Reading the pp figure: it is the measured rate minus the
target, so a positive figure means the intervals contained the
outcome more often than we promised and a negative one means they
contained it less often.
These measure the per-stat ranges as published. A player's fantasy-point
floor and ceiling are built from them and then adjusted for whether he was
expected to play, and that adjustment is not scored here.
Backtest
Season 2025, Week 5
A completed week, projected using only what was known before it was played.
Not the week you are currently being projected for — that one has no results
to score against yet.
Walk-forward backtest, 2025 Week 5
Player-week-stat outcomes measured
1578
interval accuracy below is measured on 1542 of these —
the rest are projections we publish without a range, either because
the stat is too rare to calibrate one or because the range would be
too narrow to state
across 277 of 308 players projected
50% prediction interval
57.5%
contained the actual outcome
Target: 50.0% ·
+7.5 pp
80% prediction interval
81.6%
contained the actual outcome
Target: 80.0% ·
+1.6 pp
90% prediction interval
88.8%
contained the actual outcome
Target: 90.0% ·
-1.2 pp
Reading the pp figure: it is the measured rate minus the
target, so a positive figure means the intervals contained the
outcome more often than we promised and a negative one means they
contained it less often.
A "50% prediction interval" is the range we publish
saying "the actual outcome should land inside this band 50% of the time." If
our intervals are well-calibrated, the empirical rate matches the target. The
same applies to the 80% and 90% intervals.
Why this matters. Point projections (a single number per
player) have no calibration story to tell. Without a width, you can't tell a
confident projection from a hopeful one. We publish full prediction intervals
because they let you act on the projection — start a player when the floor
is high, fade him when the ceiling is what you're chasing.
By stat
Empirical coverage, per stat
Cells are colored green when the empirical rate is within 2 percentage points
of the target, yellow within 5 pp, red beyond. Larger samples (high "n") are
more trustworthy than small ones.
| Stat |
n |
Mean actual |
Mean projected |
50% PI |
80% PI |
90% PI |
| Receptions |
198 |
2.66 |
2.35 |
53%
|
81%
|
89%
|
| Receiving TDs |
198 |
0.22 |
0.17 |
—
|
—
|
—
|
| Receiving yards |
198 |
28.98 |
23.80 |
61%
|
82%
|
89%
|
| Receiving first downs |
151 |
1.63 |
1.76 |
52%
|
84%
|
90%
|
| Fumbles lost |
142 |
0.08 |
0.07 |
—
|
—
|
—
|
| Rushing TDs |
89 |
0.24 |
0.25 |
—
|
—
|
—
|
| Rushing yards |
89 |
29.58 |
28.05 |
54%
|
80%
|
91%
|
| Rushing first downs |
84 |
1.58 |
2.03 |
44%
|
83%
|
93%
|
| Interceptions |
30 |
0.50 |
0.57 |
63%
|
87%
|
90%
|
| Passing TDs |
30 |
1.37 |
1.14 |
43%
|
77%
|
77%
|
| Passing yards |
30 |
199.67 |
177.12 |
70%
|
93%
|
97%
|
| Passing first downs |
27 |
10.81 |
9.53 |
63%
|
89%
|
93%
|
| Team defense — blocked kicks |
25 |
0.08 |
0.10 |
—
|
—
|
—
|
| Team defense — fumble rec. |
25 |
0.68 |
1.03 |
—
|
—
|
—
|
| Team defense — INTs |
25 |
0.64 |
0.75 |
64%
|
88%
|
88%
|
| Team defense — pts allowed |
25 |
24.56 |
23.22 |
44%
|
80%
|
96%
|
| Team defense — sacks |
25 |
2.20 |
2.27 |
52%
|
76%
|
92%
|
| Team defense — safeties |
25 |
0.04 |
0.03 |
—
|
—
|
—
|
| Team defense — TDs |
25 |
0.08 |
0.14 |
76%
|
88%
|
92%
|
| FGs made (≤19 yd) |
23 |
0.00 |
0.00 |
—
|
—
|
—
|
| FGs made (20-29 yd) |
23 |
0.39 |
0.37 |
65%
|
65%
|
78%
|
| FGs made (30-39 yd) |
23 |
0.52 |
0.53 |
52%
|
87%
|
96%
|
| FGs made (40-49 yd) |
23 |
0.22 |
0.46 |
61%
|
96%
|
100%
|
| FGs made (50+ yd) |
23 |
0.35 |
0.34 |
—
|
—
|
—
|
| Extra points made |
22 |
2.73 |
2.54 |
64%
|
91%
|
91%
|
-
- 50% PI
-
53%
- 90% PI
-
89%
- Mean actual
- 2.66
- Mean projected
- 2.35
-
- 50% PI
-
—
- 90% PI
-
—
- Mean actual
- 0.22
- Mean projected
- 0.17
-
- 50% PI
-
61%
- 90% PI
-
89%
- Mean actual
- 28.98
- Mean projected
- 23.80
-
Receiving first downs
n = 151
84%
80% PI
- 50% PI
-
52%
- 90% PI
-
90%
- Mean actual
- 1.63
- Mean projected
- 1.76
-
- 50% PI
-
—
- 90% PI
-
—
- Mean actual
- 0.08
- Mean projected
- 0.07
-
- 50% PI
-
—
- 90% PI
-
—
- Mean actual
- 0.24
- Mean projected
- 0.25
-
- 50% PI
-
54%
- 90% PI
-
91%
- Mean actual
- 29.58
- Mean projected
- 28.05
-
Rushing first downs
n = 84
83%
80% PI
- 50% PI
-
44%
- 90% PI
-
93%
- Mean actual
- 1.58
- Mean projected
- 2.03
-
- 50% PI
-
63%
- 90% PI
-
90%
- Mean actual
- 0.50
- Mean projected
- 0.57
-
- 50% PI
-
43%
- 90% PI
-
77%
- Mean actual
- 1.37
- Mean projected
- 1.14
-
- 50% PI
-
70%
- 90% PI
-
97%
- Mean actual
- 199.67
- Mean projected
- 177.12
-
Passing first downs
n = 27
89%
80% PI
- 50% PI
-
63%
- 90% PI
-
93%
- Mean actual
- 10.81
- Mean projected
- 9.53
-
Team defense — blocked kicks
n = 25
—
80% PI
- 50% PI
-
—
- 90% PI
-
—
- Mean actual
- 0.08
- Mean projected
- 0.10
-
Team defense — fumble rec.
n = 25
—
80% PI
- 50% PI
-
—
- 90% PI
-
—
- Mean actual
- 0.68
- Mean projected
- 1.03
-
Team defense — INTs
n = 25
88%
80% PI
- 50% PI
-
64%
- 90% PI
-
88%
- Mean actual
- 0.64
- Mean projected
- 0.75
-
Team defense — pts allowed
n = 25
80%
80% PI
- 50% PI
-
44%
- 90% PI
-
96%
- Mean actual
- 24.56
- Mean projected
- 23.22
-
Team defense — sacks
n = 25
76%
80% PI
- 50% PI
-
52%
- 90% PI
-
92%
- Mean actual
- 2.20
- Mean projected
- 2.27
-
Team defense — safeties
n = 25
—
80% PI
- 50% PI
-
—
- 90% PI
-
—
- Mean actual
- 0.04
- Mean projected
- 0.03
-
Team defense — TDs
n = 25
88%
80% PI
- 50% PI
-
76%
- 90% PI
-
92%
- Mean actual
- 0.08
- Mean projected
- 0.14
-
- 50% PI
-
—
- 90% PI
-
—
- Mean actual
- 0.00
- Mean projected
- 0.00
-
FGs made (20-29 yd)
n = 23
65%
80% PI
- 50% PI
-
65%
- 90% PI
-
78%
- Mean actual
- 0.39
- Mean projected
- 0.37
-
FGs made (30-39 yd)
n = 23
87%
80% PI
- 50% PI
-
52%
- 90% PI
-
96%
- Mean actual
- 0.52
- Mean projected
- 0.53
-
FGs made (40-49 yd)
n = 23
96%
80% PI
- 50% PI
-
61%
- 90% PI
-
100%
- Mean actual
- 0.22
- Mean projected
- 0.46
-
- 50% PI
-
—
- 90% PI
-
—
- Mean actual
- 0.35
- Mean projected
- 0.34
-
- 50% PI
-
64%
- 90% PI
-
91%
- Mean actual
- 2.73
- Mean projected
- 2.54
Targets: 50.0% / 80.0% / 90.0%. Colors: green ≤ 2pp off, yellow ≤ 5pp,
red beyond. Only stats with n ≥ 5 are shown.
Interval coverage is withheld for 8 of the 25 stats below (FGs made (50+ yd), FGs made (≤19 yd), Fumbles lost, Receiving TDs, Rushing TDs, Team defense — blocked kicks, Team defense — fumble rec., Team defense — safeties), and the three PI columns read “—” on those rows. A coverage figure here is a statement about bands that sit inside one another, and for these stats some of the projections we published state percentiles that are not in order — so the figure would not be a measurement of what this page describes. Every other column on those rows is measured over exactly the same outcomes as the rest of the table.
Head to head
Mean absolute error vs. other public projections
For every (player, stat) where both we and the competitor
projected — and where the actual outcome is known — we compute the
absolute miss (|projection − actual|) and average it. Lower is better.
Each cell shows our error and theirs on
that competitor's own rows, because a competitor publishes fewer players
than we do and averaging over different sets of players is not a
comparison. n is the shared row count.
| Stat |
Rows we project |
vs FantasyPros |
vs ESPN |
vs Sleeper |
| Receptions |
198
MAE 1.27
|
1.33
vs 1.60
better · n=91
|
1.32
vs 1.39
better · n=182
|
1.33
vs 1.36
better · n=181
|
| Receiving TDs |
198
MAE 0.29
|
0.37
vs 0.39
better · n=69
|
0.30
vs 0.30
even · n=182
|
0.31
vs 0.31
even · n=179
|
| Receiving yards |
198
MAE 17.42
|
19.88
vs 20.24
better · n=91
|
18.42
vs 18.53
better · n=182
|
18.49
vs 18.20
worse · n=181
|
| Receiving first downs |
151
MAE 0.87
|
— |
— |
— |
| Fumbles lost |
142
MAE 0.14
|
0.22
vs 0.25
better · n=25
|
0.15
vs 0.15
even · n=126
|
0.16
vs 0.16
even · n=107
|
| Rushing TDs |
89
MAE 0.34
|
0.41
vs 0.41
even · n=30
|
0.37
vs 0.36
worse · n=74
|
0.37
vs 0.39
better · n=75
|
| Rushing yards |
89
MAE 18.54
|
23.38
vs 26.59
better · n=36
|
20.43
vs 20.73
better · n=74
|
20.07
vs 22.16
better · n=76
|
| Rushing first downs |
84
MAE 1.11
|
— |
— |
— |
| Interceptions |
30
MAE 0.68
|
0.61
vs 0.66
better · n=12
|
0.78
vs 0.76
worse · n=24
|
0.78
vs 0.80
better · n=24
|
| Passing TDs |
30
MAE 0.95
|
1.21
vs 1.14
worse · n=12
|
1.08
vs 1.10
better · n=24
|
1.08
vs 1.06
worse · n=24
|
| Passing yards |
30
MAE 45.26
|
48.81
vs 63.12
better · n=12
|
45.90
vs 40.42
worse · n=24
|
45.90
vs 44.54
worse · n=24
|
| Passing first downs |
27
MAE 2.82
|
— |
— |
— |
| Team defense — blocked kicks |
25
MAE 0.17
|
— |
— |
— |
| Team defense — fumble rec. |
25
MAE 0.67
|
— |
— |
— |
| Team defense — INTs |
25
MAE 0.75
|
— |
— |
— |
| Team defense — pts allowed |
25
MAE 7.51
|
— |
— |
— |
| Team defense — sacks |
25
MAE 1.40
|
— |
— |
— |
| Team defense — safeties |
25
MAE 0.07
|
— |
— |
— |
| Team defense — TDs |
25
MAE 0.20
|
— |
— |
— |
| FGs made (≤19 yd) |
23
MAE 0.00
|
— |
— |
— |
| FGs made (20-29 yd) |
23
MAE 0.57
|
— |
— |
0.57
vs 0.55
worse · n=23
|
| FGs made (30-39 yd) |
23
MAE 0.61
|
— |
— |
0.61
vs 0.59
worse · n=23
|
| FGs made (40-49 yd) |
23
MAE 0.48
|
— |
— |
0.48
vs 0.51
better · n=23
|
| FGs made (50+ yd) |
23
MAE 0.48
|
— |
— |
0.48
vs 0.46
worse · n=23
|
| Extra points made |
22
MAE 1.00
|
1.17
vs 1.13
worse · n=12
|
— |
1.00
vs 0.95
worse · n=22
|
-
Receptions
198 rows we project
· MAE 1.27
- vs FantasyPros
- 1.33
vs 1.60
better · n=91
- vs ESPN
- 1.32
vs 1.39
better · n=182
- vs Sleeper
- 1.33
vs 1.36
better · n=181
-
Receiving TDs
198 rows we project
· MAE 0.29
- vs FantasyPros
- 0.37
vs 0.39
better · n=69
- vs ESPN
- 0.30
vs 0.30
even · n=182
- vs Sleeper
- 0.31
vs 0.31
even · n=179
-
Receiving yards
198 rows we project
· MAE 17.42
- vs FantasyPros
- 19.88
vs 20.24
better · n=91
- vs ESPN
- 18.42
vs 18.53
better · n=182
- vs Sleeper
- 18.49
vs 18.20
worse · n=181
-
Receiving first downs
151 rows we project
· MAE 0.87
- vs FantasyPros
- —
- vs ESPN
- —
- vs Sleeper
- —
-
Fumbles lost
142 rows we project
· MAE 0.14
- vs FantasyPros
- 0.22
vs 0.25
better · n=25
- vs ESPN
- 0.15
vs 0.15
even · n=126
- vs Sleeper
- 0.16
vs 0.16
even · n=107
-
Rushing TDs
89 rows we project
· MAE 0.34
- vs FantasyPros
- 0.41
vs 0.41
even · n=30
- vs ESPN
- 0.37
vs 0.36
worse · n=74
- vs Sleeper
- 0.37
vs 0.39
better · n=75
-
Rushing yards
89 rows we project
· MAE 18.54
- vs FantasyPros
- 23.38
vs 26.59
better · n=36
- vs ESPN
- 20.43
vs 20.73
better · n=74
- vs Sleeper
- 20.07
vs 22.16
better · n=76
-
Rushing first downs
84 rows we project
· MAE 1.11
- vs FantasyPros
- —
- vs ESPN
- —
- vs Sleeper
- —
-
Interceptions
30 rows we project
· MAE 0.68
- vs FantasyPros
- 0.61
vs 0.66
better · n=12
- vs ESPN
- 0.78
vs 0.76
worse · n=24
- vs Sleeper
- 0.78
vs 0.80
better · n=24
-
Passing TDs
30 rows we project
· MAE 0.95
- vs FantasyPros
- 1.21
vs 1.14
worse · n=12
- vs ESPN
- 1.08
vs 1.10
better · n=24
- vs Sleeper
- 1.08
vs 1.06
worse · n=24
-
Passing yards
30 rows we project
· MAE 45.26
- vs FantasyPros
- 48.81
vs 63.12
better · n=12
- vs ESPN
- 45.90
vs 40.42
worse · n=24
- vs Sleeper
- 45.90
vs 44.54
worse · n=24
-
Passing first downs
27 rows we project
· MAE 2.82
- vs FantasyPros
- —
- vs ESPN
- —
- vs Sleeper
- —
-
Team defense — blocked kicks
25 rows we project
· MAE 0.17
- vs FantasyPros
- —
- vs ESPN
- —
- vs Sleeper
- —
-
Team defense — fumble rec.
25 rows we project
· MAE 0.67
- vs FantasyPros
- —
- vs ESPN
- —
- vs Sleeper
- —
-
Team defense — INTs
25 rows we project
· MAE 0.75
- vs FantasyPros
- —
- vs ESPN
- —
- vs Sleeper
- —
-
Team defense — pts allowed
25 rows we project
· MAE 7.51
- vs FantasyPros
- —
- vs ESPN
- —
- vs Sleeper
- —
-
Team defense — sacks
25 rows we project
· MAE 1.40
- vs FantasyPros
- —
- vs ESPN
- —
- vs Sleeper
- —
-
Team defense — safeties
25 rows we project
· MAE 0.07
- vs FantasyPros
- —
- vs ESPN
- —
- vs Sleeper
- —
-
Team defense — TDs
25 rows we project
· MAE 0.20
- vs FantasyPros
- —
- vs ESPN
- —
- vs Sleeper
- —
-
FGs made (≤19 yd)
23 rows we project
· MAE 0.00
- vs FantasyPros
- —
- vs ESPN
- —
- vs Sleeper
- —
-
FGs made (20-29 yd)
23 rows we project
· MAE 0.57
- vs FantasyPros
- —
- vs ESPN
- —
- vs Sleeper
- 0.57
vs 0.55
worse · n=23
-
FGs made (30-39 yd)
23 rows we project
· MAE 0.61
- vs FantasyPros
- —
- vs ESPN
- —
- vs Sleeper
- 0.61
vs 0.59
worse · n=23
-
FGs made (40-49 yd)
23 rows we project
· MAE 0.48
- vs FantasyPros
- —
- vs ESPN
- —
- vs Sleeper
- 0.48
vs 0.51
better · n=23
-
FGs made (50+ yd)
23 rows we project
· MAE 0.48
- vs FantasyPros
- —
- vs ESPN
- —
- vs Sleeper
- 0.48
vs 0.46
worse · n=23
-
Extra points made
22 rows we project
· MAE 1.00
- vs FantasyPros
- 1.17
vs 1.13
worse · n=12
- vs ESPN
- —
- vs Sleeper
- 1.00
vs 0.95
worse · n=22
Each pairing is computed only over the rows where that competitor
published a projection — a small "n" means narrower coverage on that
stat, and our own number is recomputed on exactly those rows so the two
are like for like. The left column is our error across every row we
project, which is a wider and easier population; it is reported for
context and is deliberately not set against a competitor.
Some sources store a zero where they mean "no projection for this
player", which is not the same claim as projecting zero — scoring it as
a forecast would let a blank count as a miss. We drop any value too
small to be a projection on that stat's own scale, and here that
withheld
162 from FantasyPros
and 19 from Sleeper. Those rows are excluded from both sides of the pairing,
ours included.
Boom rate
How often do the booms we forecast actually happen?
A "boom" is a big week for the position — a top-tier weekly fantasy score (full PPR).
We publish a boom chance for every player we project at
QB, RB, WR and TE.
At K and DEF we publish none — we state a boom bar only
where a second, independent source has checked it, so every K and DEF
row on the rankings board carries a dash under Boom. The rates below are measured at
every position we have a boom band for, K and DEF
included.
Here's how those forecasts held up on the players whose results we have: if we say a
group of players has a 30% chance to boom, about 30% of them should.
We forecast (average boom chance)
10.6%
Actually boomed
13.8%
across 275 player-weeks, 33 not yet scored
| Position |
Boom is |
n |
We forecast |
Actually boomed |
Gap
boomed − forecast
|
| QB |
25+ pts
|
30 |
9% |
13% |
+4 pp
|
| RB |
20+ pts
|
59 |
11% |
8% |
-3 pp
|
| WR |
18+ pts
|
85 |
11% |
14% |
+3 pp
|
| TE |
13+ pts
|
52 |
13% |
21% |
+8 pp
|
| K |
14.5+ pts
|
24 |
6% |
12% |
+6 pp
|
| DEF |
12.5+ pts
|
25 |
12% |
12% |
+0 pp
|
-
QB
Boom is
25+ pts
· n = 30
+4 pp
gap
- We forecast
- 9%
- Actually boomed
- 13%
-
RB
Boom is
20+ pts
· n = 59
-3 pp
gap
- We forecast
- 11%
- Actually boomed
- 8%
-
WR
Boom is
18+ pts
· n = 85
+3 pp
gap
- We forecast
- 11%
- Actually boomed
- 14%
-
TE
Boom is
13+ pts
· n = 52
+8 pp
gap
- We forecast
- 13%
- Actually boomed
- 21%
-
K
Boom is
14.5+ pts
· n = 24
+6 pp
gap
- We forecast
- 6%
- Actually boomed
- 12%
-
DEF
Boom is
12.5+ pts
· n = 25
+0 pp
gap
- We forecast
- 12%
- Actually boomed
- 12%
Reading the Gap: it is what actually boomed minus what we
forecast, so a positive gap means we under-forecast — it
happened more often than we said — and a negative gap means we over-forecast.
Preliminary: based on a single backtest week, so the per-position rates are
still thin and will sharpen as more weeks are measured — this page will show
whether the calibration holds. Boom thresholds are an early cut and may be retuned.
How we measure
Coverage and MAE are computed from the same data file we use internally —
no cherry-picking. Every player who appeared in this week's actuals and
also had a projection from us (or from a competitor) is included in the
tally for the stats they recorded. Stats with fewer than 5 observed
outcomes are dropped; results below that threshold aren't trustworthy.
We measure the projections we ship. Our numbers pass through a final set of
adjustments before they reach you, and the run scored above has been through
exactly those — so what you read here is the accuracy of the product, not of an
earlier step in producing it. When those adjustments change, this page moves
with them.
We rely on calibrated uncertainty — projections that come with honest
prediction intervals, not just point estimates. As more weeks land, this
page will accumulate them, and you'll be able to see whether the calibration
holds up across the season. If it doesn't, you'll see that here too.
Where we get our college numbers
A rookie has no NFL record to project from, so his first-season
numbers lean on what he did in college. Our college numbers come from
CollegeFootballData.com,
a freely accessible, independently run college-football data project
worth knowing about if you follow the draft.