Competition Factor · forecasting track record
Our track record
We publish player-production projections before every
marquee slate and we keep the receipts. This is the whole record, graded against
the actual box scores — 1573 projections and counting.
The bar we set for ourselves is simple: beat the naive baseline (each
player’s prior-season per-game average). Green cells below are where the
opponent-adjusted projection earns its keep.
College football
892
Projections graded
29 voided · 0 pending
54%
Beat naive baseline
on 850 comparable rows
6–2
Components vs naive
MAE win/loss by stat
28–14
Unit-edge record
biggest-mismatch calls
| Component | n | Our MAE | Naive MAE | Verdict |
|---|
| Pass yds | 89 | 70.03 | 81.53 | beats naive |
| Pass TD | 89 | 0.91 | 0.98 | beats naive |
| INT | 58 | 0.69 | 0.65 | trails naive |
| Rush yds | 121 | 33.63 | 35.64 | beats naive |
| Rush TD | 92 | 0.59 | 0.63 | beats naive |
| Rec | 118 | 1.86 | 1.94 | beats naive |
| Rec yds | 207 | 19.06 | 19.38 | beats naive |
| Rec TD | 118 | 0.45 | 0.43 | trails naive |
NFL
681
Projections graded
85 voided · 39 pending
53%
Beat naive baseline
on 660 comparable rows
6–2
Components vs naive
MAE win/loss by stat
—
Unit-edge record
biggest-mismatch calls
| Component | n | Our MAE | Naive MAE | Verdict |
|---|
| Pass yds | 76 | 62.01 | 67.53 | beats naive |
| Pass TD | 76 | 0.75 | 0.81 | beats naive |
| INT | 59 | 0.63 | 0.63 | trails naive |
| Rush yds | 81 | 27.33 | 27.81 | beats naive |
| Rush TD | 64 | 0.64 | 0.65 | beats naive |
| Rec | 87 | 1.95 | 1.89 | trails naive |
| Rec yds | 151 | 22.40 | 23.39 | beats naive |
| Rec TD | 87 | 0.51 | 0.53 | beats naive |
Methodology. Every projection is published before kickoff
and never edited after. We grade by joining each projection to the
player’s actual game (by player id and kickoff-date window) in the same
box-score data that feeds the ratings. MAE is the mean absolute error against
those actuals, in each stat’s own units; the naive baseline is the
player’s prior-season per-game average — the number you’d guess
with no opponent adjustment at all. Rows adjusted for availability before kickoff
(a projected starter ruled out) are voided, not re-graded — they never
count for or against us. The unit-edge record grades each game’s single
biggest pre-game unit mismatch exactly as published before kickoff (never
recomputed from later ratings): did the favored side land on the right side of
the league-average line for that phase. Games whose published unit grid was not
archived are excluded from that record and marked on their week’s page.
The projections never change; the grades follow the best data we have
— when a data or identity error is found after grading (a late box score, one
player split across two ids), we fix the data, regrade, and say so on that
week’s page.