ScoutIndex Rating · scoutindex-rating-v1
How the rating is computed
Published in full. A formula change ships as v2 — v1 numbers are never edited after the fact.
One number, 20–99, per player per regular season. It is position-relative: every rating compares a player only to others at the same position that season. It is built entirely from public nflverse / nflfastR data — no proprietary charting. The backbone is EPA (expected points added), blended with volume and a few position-specific rate stats.
The scale
overall = clamp( 60 + 13 · composite_z , 20 , 99 )
| Rating | Meaning |
|---|---|
| ~60 | league-average qualified starter |
| ~75 | clear starter, fringe Pro Bowl |
| 85+ | All-Pro tier |
| 95+ | historically dominant season |
| below ~45 | replacement level |
How a component becomes a number
- Aggregate the player's weekly regular-season rows into season totals and rates.
- Shrink each rate toward the cohort mean by sample size: x_adj = (n·x + k·μ) / (n + k). This stops a backup QB with 12 great throws from topping the list. Volume stats aren't shrunk.
- z-score across the cohort. Stats where lower is better (INTs, fumbles) are negated.
- Weighted-average the z-scores. A component whose stat doesn't exist for a player (e.g. CPOE before 2006) is dropped and the rest renormalized.
QB — qualify: 8 games & 224 attempts
| Component | Metric | Weight |
|---|---|---|
| Dropback efficiency | (passing EPA + rushing EPA) / dropbacks | 0.34 |
| Total EPA | passing EPA + rushing EPA | 0.24 |
| Accuracy | CPOE — completion % over expected (2006+) | 0.12 |
| Ball security | − interceptions / dropbacks | 0.12 |
| Conversion | (passing first downs + ½ passing TD) / dropbacks | 0.08 |
| Volume | dropbacks (attempts + sacks) | 0.10 |
RB — qualify: 8 games & 100 carries
| Component | Metric | Weight |
|---|---|---|
| Rush efficiency | rushing EPA / carry | 0.24 |
| Total EPA | rushing EPA + receiving EPA | 0.24 |
| Yards per carry | rushing yards / carry | 0.12 |
| Conversion | (rushing first downs + ½ rushing TD) / carry | 0.10 |
| Receiving | receiving EPA / target + reception volume | 0.14 |
| Ball security | − fumbles lost / touch | 0.06 |
| Volume | carries + receptions | 0.10 |
WR / TE — qualify: 8 games & 40 / 30 targets
| Component | Metric | Weight |
|---|---|---|
| Target efficiency | receiving EPA / target | 0.30 |
| Total receiving EPA | receiving EPA | 0.22 |
| Yards per target | receiving yards / target | 0.12 |
| Hands & conversion | catch rate × (first downs + ½ TD) / reception | 0.10 |
| Role | target share | 0.14 |
| Volume | targets | 0.12 |
K — qualify: 8 games & 15 FG attempts
| Component | Metric | Weight |
|---|---|---|
| FG make rate | field goals made / attempted | 0.55 |
| Long range | season-long field goal | 0.15 |
| PAT reliability | PAT made / attempted | 0.10 |
| Volume | FG + PAT attempts | 0.20 |
DEF — an impact score, not a true rating
| Component | Metric | Weight |
|---|---|---|
| Pass rush | sacks + ½ tackles for loss | 0.30 |
| Ball skills | 2 × interceptions + passes defended | 0.25 |
| Run defense | tackles for loss + 0.05 × tackles | 0.20 |
| Splash | 3 × defensive TD + 1.5 × forced fumbles | 0.15 |
| Availability | games played | 0.10 |
Box-score stats catch splash plays but miss coverage, gap discipline, and snap share. Treat DEF as 'how much did this player show up in the box score', pending Phase 2 participation data. All metrics per game.
Known limitations (v1)
- Defense is box-score only.
- No opponent adjustment — a strong performance vs. a weak defense looks the same as vs. an elite one.
- No aging curve, no multi-year prior — each season stands alone.
- QB ceilings run lower (~92) than skill positions (~99) because QB stats vary less within their cohort. Honest, not a bug.
- Pre-2006 receivers lose the CPOE / air-yards components.
- No team-defense or special-teams rating yet.
Source: etl/scoutindex_etl/ratings.py. Roadmap — v1.1 weekly game scores; v2 opponent adjustment and per-position calibration; later an Elo team rating feeding ScoutIndex Win Probability.