Methodologyadmin

SHAPE Score Derivation

The statistical correlations and methodology behind each SHAPE component weighting — how we quantify Situation, Health, Athleticism, Production, and Efficiency.

Curated by: Durham Baxter — Founder & Owner, Ball Street Analytics
Updates with eventsPublished: 2026-04-10Updated: 2026-04-1015 min read

SHAPE Scoring Framework

SHAPE is Ball Street Analytics' proprietary player evaluation model. Each player is scored 0-100 across five components, which are combined into a weighted composite:

ComponentWhat It Measures
S — SituationTeam context, opportunity share, scheme fit
H — HealthDurability, injury risk, age-adjusted availability
A — AthleticismPhysical traits (combine + in-game tracking)
P — ProductionHistorical fantasy output, trajectory
E — EfficiencyPer-touch value, EPA, advanced metrics

The optimal weight for each component — and whether those weights should vary by position — is derived empirically in the final section of this article. Each preceding section isolates one pillar, quantifies its predictive power, and identifies the sub-component weights within it. The final section then combines all five pillars and iteratively optimizes the top-level coefficients against historical outcomes.


Part 1: Situation (S) — Deep Dive

The Situation score captures a player's opportunity environment. The hypothesis: a mediocre player in an elite situation outscores an elite player in a terrible situation in fantasy football, making situation the strongest external predictor of fantasy outcomes.

Sub-Component Inputs

Sub-ComponentData Source
Opportunity Score (target/touch/snap share)player_workload_metrics, player_snap_season
Contract Investmentcontracts_raw.apy_cap_pct
Draft Capitalpre_draft_profile.draft_pick
Voided Snap Shareplayer_snap_season (normalized departed %)
Vegas Implied Team Totalgame-level lines
QB/Coach Stabilitycoaching_changes + players_raw
Team Contextteam_season_overview.composite_score

The analysis below evaluates every sub-component using a consistent 10-year methodology. For metrics that change during the season (snap share, target share, team win%), we use lagged R² — prior-year metric predicting next-year fantasy PPG — to eliminate look-ahead bias. For metrics that are known before the season starts (contract APY, SOS, Vegas lines), we use concurrent R², which is appropriate because the input is available at draft time. Each section includes position-level breakdowns, since the Situation score affects QBs fundamentally differently than skill positions.

Correlation Analysis: Situation Sub-Components vs. Fantasy PPG

Dataset: 2,877–5,560 player-seasons (QB/RB/WR/TE, 2015–2024, ≥8 games, regular season) from players_raw, contracts_raw, team_schedule_context, and games_raw. Lagged metrics use prior-year values to predict next-year fantasy PPG. Concurrent metrics (marked with *) are pre-season inputs where concurrent R² is appropriate.

Complete R² Reference Table — All Situation Sub-Components

DatasetTypeALLQBRBWRTE
Prior-Year PPGLagged0.5660.2440.4100.5120.511
Target ShareLagged0.2720.2010.4500.432
Touch ShareLagged0.1280.1530.3050.4470.445
Snap ShareLagged0.2990.0420.3040.3130.250
Contract APY*Concurrent0.2620.1230.2320.2660.258
Vegas Implied Total*Concurrent0.0370.2630.0270.0360.038
Team Win %Lagged0.0140.0730.0090.0230.005
Personnel UsageLagged<0.020.0230.0020.0020.018
Team Total PlaysLagged0.0000.0060.0010.0000.001
Strength of Schedule*Concurrent0.0000.0000.0000.0000.000

Concurrent vs. Lagged Inflation (how much same-year data overstates predictive power):

MetricPositionLagged R²Concurrent R²Inflation
Snap ShareQB0.0420.3087.3x
Snap ShareRB0.3040.6752.2x
Snap ShareWR0.3130.4801.5x
Snap ShareTE0.2500.4301.7x
Target ShareWR0.4500.7601.7x
Target ShareTE0.4320.7701.8x
Carry ShareRB0.2530.6502.6x

Key findings:

  1. Prior-year PPG is the strongest single predictor (R² = 0.57 all positions), but this belongs in the Production (P) component, not Situation. Situation must add signal beyond what production already captures.
  2. Individual opportunity metrics dominate. Target share (R² = 0.45 WR/TE), touch share (R² = 0.31 RB), and snap share (R² = 0.30 RB) are the backbone of Situation. These are lagged metrics — prior-year opportunity genuinely predicts next-year output.
  3. Contract APY is the best pre-season signal (R² = 0.26). Unlike opportunity metrics, APY is known before the season starts and doesn't require lagging. It's the second-strongest Situation input overall.
  4. Vegas team totals are QB-specific. R² = 0.26 for QBs (matching contract APY) but only 0.03-0.04 for skill positions. The QB is the team total; individual skill players are not.
  5. Team-level metrics are mostly noise. Win%, volume, SOS, and personnel usage all produce R² < 0.03 for non-QB positions. The team is not the player — individual opportunity captures what matters.
  6. The Situation score needs position-specific formulas. QB situation is driven by stability and team quality (Vegas). RB situation is about touch share. WR/TE situation is about target share. A uniform formula undervalues position-specific signals.

1.1 Opportunity

The opportunity score encapsulates snap share, target share, carry share, and depth chart position into a single metric. This is the heaviest-weighted sub-component because volume is the #1 driver of fantasy scoring.

Key question: Is 40% the right weight? What is the actual R-squared between opportunity score and next-season fantasy PPG?

1.1.1 Snap Share

Prior-Year Snap Share → Next-Year Fantasy PPG (10-Year Lagged, 2015–2024)

Prior-Year Snap Share vs. Next-Year Fantasy PPG

Each dot is one player-season pair (year N snap % → year N+1 PPG). 1,910 pairs across 2015-2024, min 8 games both seasons.

QB
RB
WR
TE
R² = 0.299

10-year lagged R² by position — Snap Share:

  • WR: R² = 0.313 (N=789) — moderate; snap share is a proxy for target opportunity
  • RB: R² = 0.304 (N=482) — meaningful; backs who hold snaps tend to keep producing
  • TE: R² = 0.250 (N=414) — weaker; blocking snaps dilute the signal
  • QB: R² = 0.042 (N=225) — nearly useless; all starters are at ~95%+
  • All: R² = 0.299 (N=1,910)

Concurrent inflation check: Same-year snap share produces R² = 0.68 for RBs (2.2x inflation vs lagged 0.30) and R² = 0.31 for QBs (7.3x inflation vs lagged 0.04). The current opportunity_score uses concurrent data — its reported accuracy is largely illusory.

Data integrity issue (V1 — resolved in V2): The team_target_share table used Sleeper IDs while all other tables use GSIS IDs. The join in player_workload_metrics silently failed, producing NULL target share for every WR/TE. V2 bypasses this table and sources target share directly from historic_player_season. See Section 1.10 for the full V2 implementation record.

1.1.2 Target Share

Target share measures what percentage of a team's total targets a player receives. For pass-catchers (WR/TE), this is the most direct measure of opportunity — it captures role, usage, and offensive design in a single number. RBs receive targets too, though at a much lower rate. QBs are excluded (they throw the targets, they don't receive them).

Prior-Year Target Share → Next-Year Fantasy PPG (10-Year Lagged, 2015–2024)

Prior-Year Target Share vs. Next-Year Fantasy PPG

Each dot is one player-season pair (year N target share → year N+1 PPG). 1,770 pairs across 2015-2024, min 8 games both seasons. QB excluded.

QB
RB
WR
TE
R² = 0.272

10-year lagged R² by position — Target Share:

  • WR: R² = 0.450 (N=838) — strongest opportunity metric for receivers; nearly half of next-year variance
  • TE: R² = 0.432 (N=423) — almost as strong; target-heavy TEs are sticky producers
  • RB: R² = 0.201 (N=509) — moderate; pass-catching backs retain value but targets alone miss rush volume
  • All (WR+TE+RB): R² = 0.272 (N=1,770)

Concurrent inflation: Same-year target share gives R² = 0.76 for WR and 0.77 for TE — about 1.7–1.8x inflation. This is the lowest inflation ratio of any opportunity metric, confirming target share is the most genuinely predictive (least circular) measure.

vs. Snap Share: For WR (0.45 vs 0.29) and TE (0.43 vs 0.23), target share dominates snap share. A player can have high snaps but run decoy routes — target share captures actual usage, not just presence on the field.

1.1.3 Touch Share

Touch share measures a player's share of their team's total touches (targets + carries). This is a unified volume metric that works across positions. For QBs, only carries count as touches (pass attempts are not touches — a QB's rushing workload is the relevant opportunity signal).

Prior-Year Touch Share → Next-Year Fantasy PPG (10-Year Lagged, 2015–2024)

Prior-Year Touch Share vs. Next-Year Fantasy PPG

Each dot is one player-season pair (year N touch share → year N+1 PPG). 1,998 pairs across 2015-2024, min 8 games both seasons. QB touches = carries only.

QB
RB
WR
TE
R² = 0.128

10-year lagged R² by position — Touch Share:

  • WR: R² = 0.447 (N=838) — nearly identical to target share (0.450); WR touches are mostly receptions
  • TE: R² = 0.445 (N=423) — also nearly identical to target share (0.432); same reason
  • RB: R² = 0.305 (N=509) — stronger than target share alone (0.201); adding carries captures the full RB workload
  • QB: R² = 0.153 (N=228) — weak; rushing volume is a secondary signal for QBs
  • All: R² = 0.128 (N=1,998) — low ALL-position R² because the metric means different things for each position

Key insight — Touch share vs. Target share for RBs: Touch share (R² = 0.305) is a 52% improvement over target share (R² = 0.201) for RBs. Carries are the dominant volume driver for backs, and target share misses it. For WR/TE, there is no difference — touches ≈ targets for pass-catchers.

Concurrent inflation: Same-year touch share gives R² = 0.76 for RBs and 0.78 for WRs — about 2.5x and 1.7x inflation respectively. The RB inflation (2.5x) is higher than WR (1.7x), consistent with the pattern that RB workload is more volatile year-to-year.

1.2 Team-Based Metrics

The opportunity metrics above (1.1) all measure individual player usage. But what about the environment around the player? Team-level factors — offensive quality, coaching continuity, play volume, and scheme — attempt to capture the rising/falling tide that lifts or sinks all players on a roster. A naive Situation formula might allocate 40% of its weight to team-based inputs (team grade + team volume). The analysis below tests whether that allocation is justified.

1.2.1 Team Win/Loss %

Prior-Year Team Win % → Next-Year Fantasy PPG (10-Year Lagged, 2015–2024)

Prior-Year Team Win % vs. Next-Year Fantasy PPG

Each dot is one player-season pair (year N team win % → year N+1 PPG). 1,790 pairs across 2015-2024, min 8 games both seasons.

QB
RB
WR
TE
R² = 0.014

10-year lagged R² by position — Team Win %:

  • QB: R² = 0.073 (N=203) — the strongest position, but far weaker than any individual opportunity metric. Winning teams tend to keep winning because they have good QBs — but causality is circular.
  • WR: R² = 0.023 (N=752) — negligible
  • RB: R² = 0.009 (N=458) — negligible; RBs on bad teams still get volume in garbage time
  • TE: R² = 0.005 (N=377) — negligible
  • All: R² = 0.014 (N=1,790)

This is the most position-dependent metric in the entire analysis. For QBs, prior-year team win % has weak-but-real predictive value (R² = 0.07). For every other position, it explains <2.5% of next-year variance — effectively noise. Winning teams don't produce better fantasy WRs/RBs/TEs the following year.

1.2.2 QB/Coach Stability

Does team continuity at QB and head coach predict offensive fantasy output? Unlike the metrics above, this is not lagged — QB and coaching changes are known before the season starts, making this actionable offseason information. Data covers all offensive positions (QB/RB/WR/TE) from 2016–2024, ≥8 games played.

Fantasy PPG by QB/Coach Stability (2016–2024)

Distribution of season-level fantasy PPG (PPR) by team QB/coach continuity status. White line = median, diamond = mean. Sorted by median descending.

QB
RB
WR
TE
NaN-Infinity-Infinity-Infinity-Infinity-Infinity-InfinitySeason PPG (PPR)

Median PPG by stability category — QB:

CategoryNMedianMeanΔ vs Baseline
Same QB, Same Coach16116.9416.52
Same QB, New Coach3615.6615.82-1.28
New QB, Same Coach5515.0014.97-1.94
Rookie QB, Same Coach2513.5513.96-3.39
New QB, New Coach2012.5213.55-4.42
Rookie QB, New Coach1211.8913.12-5.05

QBs show the most dramatic stability effect. A returning QB in the same system produces 5+ PPG more than a rookie in a new scheme. This is the strongest situational signal for QBs — stronger than team win % (R² = 0.07).

Median PPG by stability category — WR:

CategoryNMedianMeanΔ vs Baseline
Same QB, New Coach1438.599.07+0.38
New QB, Same Coach2108.238.83+0.02
Same QB, Same Coach6018.219.19
New QB, New Coach817.848.40-0.37
Rookie QB, Same Coach987.748.16-0.47
Rookie QB, New Coach586.877.55-1.34

WRs are the only position where "Same QB, New Coach" improves production. New offensive coordinators may unlock pass-heavy schemes when they inherit a proven QB. Rookie QBs depress WR output by 0.5–1.3 PPG.

Median PPG by stability category — RB:

CategoryNMedianMeanΔ vs Baseline
Same QB, Same Coach3658.889.82
New QB, New Coach498.719.49-0.17
Same QB, New Coach948.439.16-0.45
New QB, Same Coach1468.259.07-0.63
Rookie QB, Same Coach598.168.77-0.72
Rookie QB, New Coach347.628.04-1.26

RBs are the most resilient to QB/coach turnover. The full-range gap (baseline to worst) is only 1.26 PPG — rushing volume is less dependent on passing game continuity. RBs may actually benefit from bad QB play via increased rushing usage.

Median PPG by stability category — TE:

CategoryNMedianMeanΔ vs Baseline
Same QB, Same Coach3006.046.79
Same QB, New Coach755.785.91-0.26
New QB, Same Coach1135.756.54-0.29
Rookie QB, New Coach294.655.43-1.39
Rookie QB, Same Coach444.505.77-1.54
New QB, New Coach384.185.67-1.86

TEs are the most disrupted by instability. Any change from the baseline costs ~0.3–1.9 PPG. Rookie QBs and full overhauls hurt TEs disproportionately — new QBs don't target TEs at the same rate as established starters who have built trust with their tight end.

Key takeaways for SHAPE weighting:

  1. QB/coach stability should be position-weighted. QBs lose ~5 PPG in full-turnover scenarios vs ~1.3 PPG for RBs. A uniform weight undervalues the QB impact and overvalues the RB impact.
  2. "Rookie QB, New Coach" is the strongest negative signal across all positions — a clear penalty worth incorporating.
  3. WR is an exception — new coaches can help WR production when paired with a returning QB. This should dampen the coaching-change penalty for WRs.
  4. RB stability weighting should be minimal given the narrow 1.26 PPG range across all categories.

1.2.3 Team Volume

Teams that run more plays create more fantasy-relevant touches. The current formula scales linearly from a 55-play baseline. But does prior-year team volume actually predict next-year individual fantasy scoring?

Prior-Year Total Team Plays → Next-Year Fantasy PPG (10-Year Lagged, 2015–2024)

Prior-Year Total Team Plays vs. Next-Year Fantasy PPG

Each dot is one player-season pair (year N team total offensive plays → year N+1 PPG). 1,998 pairs across 2015-2024, min 8 games both seasons.

QB
RB
WR
TE
R² = 0.000

10-year lagged R² by position — Total Team Plays:

  • QB: R² = 0.006 (N=228) — not significant
  • RB: R² = 0.001 (N=509) — not significant
  • WR: R² = 0.000 (N=838) — not significant
  • TE: R² = 0.001 (N=423) — not significant
  • All: R² = 0.000 (N=1,998)

Verdict: Prior-year team play volume explains 0% of next-year fantasy PPG variance across every position. This is the single weakest dataset in the entire analysis. The chart visually confirms it — a pure cloud with a perfectly flat trend line. Once you know a player's individual snap/target/carry share, knowing how many total plays their team runs adds zero predictive information.

Implication for SHAPE (V1 — resolved in V2): The V1 15% weight on team volume was dead weight. V2 removed team volume entirely and reallocated to target share for WR/TE, touch share for RB, and QB/coach stability. See Section 1.10.

1.2.4 Personnel Usage

Does a team's offensive personnel scheme predict next-year fantasy output? Teams that run more 11 personnel (3 WR sets) might boost WR value; 12 personnel (2 TE sets) might benefit TEs. The heatmap below shows R² for each personnel grouping (year N usage rate) vs next-year PPG (year N+1) by position.

Prior-Year Personnel Usage Rate vs. Next-Year Fantasy PPG (2016–2024, Lagged)

Personnel Usage R² Matrix (Lagged)

Each cell shows R² between a team's year N personnel grouping usage rate and individual year N+1 fantasy PPG. Higher = more predictive. N=1,790 lagged pairs per cell.

Key R² values (all <0.025):

PersonnelQBRBWRTEInterpretation
11 (3WR)0.0000.0010.0020.00911-personnel rate has no predictive value for any position
12 (2TE)0.0000.0020.0000.000Running more 2-TE sets doesn't predict TE output next year
21 (2RB)0.0000.0020.0010.012Negligible for RBs despite being RB-heavy personnel
22 (2RB 2TE)0.0070.0010.0000.018Highest TE signal but still <2%
13 (3TE)0.0230.0000.0060.000Strongest single cell — 13 personnel rate weakly predicts QB PPG

Verdict: Prior-year personnel grouping usage explains <2.5% of variance in every single cell of this matrix. The strongest signal (13 personnel rate predicting QB PPG at R²=0.023) is barely above noise. Teams that run specific personnel packages do not produce measurably better fantasy players at any position the following year.

Why this makes intuitive sense: Personnel grouping is a scheme choice, not an opportunity metric. A team can run 70% 11-personnel and still have a WR3 getting 5 targets/game. What matters for fantasy is the individual player's share of opportunity (target share, touch share), not the formation the team lines up in.

Implication for SHAPE: Personnel usage should not be a direct input to the Situation score. It may have indirect value through scheme-fit analysis (e.g., a WR joining a team that runs 75% 11-personnel has more positional opportunity), but as a standalone predictor it's noise.

1.3 Contract Investment

The team-based metrics above (1.2) showed that team-level environment explains very little of individual fantasy output. But there's one team-level decision that does directly predict individual usage: how much the team pays a player. Contract APY (average per year) is a pre-season signal — it's locked in before a single snap is played. Teams that invest heavily in a player are publicly committing to feature them, creating a direct link between team spending and individual opportunity. This means we can use concurrent correlation (same-season APY vs. same-season PPG) without the inflation concerns that plague snap share and other in-season metrics.

1.3.1 APY vs. Fantasy PPG

Contract APY vs. Same-Season Fantasy PPG (2015-2024, Concurrent)

Contract APY vs. Fantasy PPG (2015-2024)

Concurrent: APY is known pre-season. N=3,104 player-seasons (>=8 games, REG). Source: contracts_raw + players_raw.

QB
RB
WR
TE
PositionRSlopeN
QB0.1230.3500.106338
RB0.2320.4820.819816
WR0.2660.5150.4151,294
TE0.2580.5080.501656
All0.2620.5120.3493,104

Key takeaways:

  • R² = 0.26 overall — this is the second-strongest single predictor behind opportunity score (R² = 0.45). Contract investment genuinely correlates with fantasy output.
  • QB signal is weakest (R² = 0.12). QB APYs are so inflated relative to other positions that the signal is compressed. A $55M/yr QB doesn't produce 5x a $10M/yr QB. The ceiling is the ceiling.
  • WR signal is strongest (R² = 0.27). The WR market is the most efficient — teams that pay elite WR money genuinely funnel targets to those players. The slope (0.415 PPG per $1M APY) means a $20M/yr WR produces ~4 PPG more than a $10M/yr WR on average.
  • RB has the steepest slope (0.82). Each $1M of RB APY correlates with 0.82 additional PPG — the strongest per-dollar signal. But the narrow RB APY range ($0-16M vs QB $0-60M) limits total variance explained.
  • Value plays exist everywhere. Rookie-deal players (CMC 2019 at $4.3M, Mahomes 2018 at $4.1M, Hurts 2022 at $1.5M) dramatically outperform their APY — the contract hasn't caught up to production yet.

Why this is concurrent, not lagged: APY is locked in before the season starts. A player signed to a 4-year/$80M deal in March has a $20M APY entering September. Unlike snap share (which is measured during the season), APY is a true pre-season input. Concurrent R² is appropriate here.

Implication for SHAPE: Contract APY percentile within position is a valid Situation input. R² = 0.26 confirms the 20% sub-weight is well-calibrated. The metric captures team commitment that opportunity score alone cannot — a team can pay a player elite money but not yet have played a game.

1.3.2 Contract Year Effect

Does performance change in a player's contract year? The "prove-it" theory suggests players in their final contract year play harder to secure their next deal. We test this using all 3,104 player-seasons where we can identify whether a player was in their contract year (final season of their deal) or not.

Fantasy PPG: Contract Year vs. Non-Contract Year (2015-2024)

N=3,104 player-seasons (>=8 games, REG). Contract year = final season of deal.

QB
RB
WR
TE
NaN-Infinity-Infinity-Infinity-Infinity-Infinity-InfinityFantasy PPG (PPR)

Contract Year Effect by Position:

PositionContract Year PPGNon-CY PPGDifferencep-valueN (CY)N (Non-CY)
QB14.6616.11-1.450.00985253
RB8.0810.10-2.02<0.001282534
WR7.519.71-2.21<0.001431863
TE5.856.90-1.06<0.001220436
All7.9010.00-2.10<0.0011,0182,086

The contract year "bump" is a myth — it's actually a penalty.

Contract year players score 2.1 PPG less than non-contract year players across the board. This is statistically significant at p<0.001 for every position except QB (p=0.009, still significant). The effect is strongest for WRs (-2.21 PPG) and RBs (-2.02 PPG).

Why this makes intuitive sense: Contract years don't happen at a player's peak — they happen when the contract is expiring. A player signed to a 4-year deal in 2020 hits their contract year in 2023. By definition, these players are 4 years older, more likely to have declining production, and may be losing snaps to younger/cheaper replacements. The "motivation" effect, if it exists, is overwhelmed by the aging/decline selection effect.

The real confound: Contract year players are older and further from peak. Non-contract year players include early-career players on rookie deals or fresh extensions — players at or near their production peak. The contract year flag is actually a proxy for "how far along in career decline."

Implication for SHAPE: The flat +5 point contract year bonus is empirically wrong — it should be a penalty, not a bonus. Recommended action:

  1. Remove the +5 contract year bonus entirely. The data clearly shows contract year players produce less, not more.
  2. If anything, apply a small negative adjustment (-2 to -3 points) for contract year players, reflecting the aging/decline signal.
  3. The contract year flag remains useful as a volatility indicator (higher bust risk) even if the directional effect is negative.

1.4 Strength of Schedule

So far, the strongest Situation signals are individual-level (opportunity R² = 0.30-0.45) and financial (contract APY R² = 0.26). Team-based metrics have been weak. But two more pre-season inputs remain popular in the fantasy community: strength of schedule and Vegas lines. We test both below.

Does playing against weaker defenses produce higher fantasy output? Strength of schedule (SOS) is a popular draft-day input — analysts love to highlight players with "cake schedules." Our SOS metric uses prior-year opponent points allowed per game, averaged across a team's full schedule. Higher values mean easier schedules (opponents gave up more points the prior year). This is forward-looking: the SOS is knowable before the season starts.

SOS vs. Same-Season Fantasy PPG (2016-2024, Concurrent)

Strength of Schedule vs. Fantasy PPG (2016-2024)

SOS = avg opponent pts allowed (prior year). Higher = easier schedule. N=2,877 player-seasons (>=8 games, REG).

QB
RB
WR
TE
PositionRSlopeN
QB0.000-0.008-0.031312
RB0.000-0.014-0.065756
WR0.000-0.003-0.0111,204
TE0.0000.0200.065605
All0.0000.0030.0162,877

Strength of schedule explains exactly 0% of fantasy variance. R² = 0.000 across all positions, with no position even reaching R² = 0.001. The p-values range from 0.62 to 0.93 — completely insignificant.

Why SOS fails as a fantasy predictor:

  • SOS is a team-level metric applied to individual players. Even if a team faces an easy schedule, the distribution of fantasy points within that team depends on individual opportunity — which SOS doesn't capture.
  • Defensive quality is noisy year-over-year. Prior-year points allowed is a weak predictor of current-year defensive performance. Defenses change dramatically through free agency, injury, and scheme shifts.
  • Fantasy scoring is matchup-agnostic at the season level. Over 17 games, the variance from individual matchups averages out. SOS matters more for weekly projections than season-long valuation.
  • The range is too compressed. The difference between the easiest schedule (24.9 opp pts/game) and hardest (19.2) is only 5.7 points — not enough to meaningfully separate fantasy outcomes.

Implication for SHAPE: Strength of schedule should receive zero weight in the season-long Situation score. It may have marginal utility for weekly start/sit decisions, but as a draft-day input it is pure noise. Any SHAPE weight currently allocated to schedule strength should be redistributed to higher-signal inputs.

1.5 Vegas Implied Team Totals

Vegas lines embed enormous amounts of information — coaching changes, roster moves, schedule, and market expectations — into a single number. Using game-level lines from games_raw, we compute the season-average Vegas implied team total for each team: implied_total = (game_total +/- spread) / 2.

Important caveat: These are game-level closing lines set at kickoff, not pre-season projections. They adjust week-to-week based on injuries and performance. A true pre-season signal would use pre-season team win totals or player season props (yards/TD o/u lines). We identify data sources for these below, but the current analysis uses in-season game lines as a proxy.

Vegas Implied Team Total vs. Same-Season Fantasy PPG (2016-2024, Concurrent)

Vegas Implied Team Total vs. Fantasy PPG (2016-2024)

Season-avg implied team total from game-level lines. N=2,877 player-seasons (>=8 games, REG).

QB
RB
WR
TE
PositionRSlopeN
QB0.2630.5130.813312
RB0.0270.1630.297756
WR0.0360.1900.3151,204
TE0.0380.1940.246605
All0.0370.1910.3532,877

Vegas implied team total is a tale of two signals:

For QBs, it's a powerhouse (R² = 0.26). QBs are the single player most responsible for team scoring. A team that Vegas expects to score 28 pts/game has a QB producing ~0.81 more PPG for every additional implied point. The QB is the team total — so Vegas lines directly predict QB fantasy output.

For skill positions, it's weak (R² = 0.03-0.04). RBs, WRs, and TEs each contribute a fraction of team scoring. A team can score 28 pts/game through any combination of its skill players — knowing the total doesn't tell you which individual benefits. The R² of ~0.03 is statistically significant (p<0.001 for all) but explains almost nothing.

Comparison to SOS: Vegas implied total is infinitely better than SOS (R² = 0.037 vs 0.000 overall), but the signal is overwhelmingly concentrated in QBs. For non-QBs, it's barely better than team win% (R² = 0.01-0.03).

Why Vegas team totals fail for skill positions:

  • Team total != individual allocation. A 28-point team can have one 20-PPG WR and two 5-PPG WRs, or three 10-PPG WRs. The total is the same.
  • Individual opportunity metrics already capture this. A player's target share or touch share is a direct measure of how much of the team's offense flows through them — Vegas totals are a crude upstream proxy.
  • QB is the exception because the QB touches every offensive snap. There's no "QB2" splitting opportunities.

Data gap: pre-season odds would be a stronger signal

The game-level lines used above are set at kickoff, incorporating in-season information (injuries, early performance) that wouldn't be available at draft time. True pre-season signals would include:

  1. Pre-season team win totals (e.g., KC o/u 11.5 wins). Available historically via SportsOddsHistory.com going back 10+ years. These capture the market's pre-season view of team quality before any games are played. Action: scrape and load into a team_preseason_futures table.

  2. Pre-season player season props (e.g., Ja'Marr Chase o/u 1,250 receiving yards, o/u 9.5 TDs). Available via The Odds API from May 2023 onward (paid plan). Only ~3 seasons of historical data — not yet enough for a robust 10-year study, but worth collecting for forward validation. Action: add player_season_props table, backfill from 2023.

  3. Pre-season fantasy points o/u — some books offer season-long fantasy totals. The ultimate predictor, but availability is sporadic.

Pre-season player props would likely be the strongest single predictor of fantasy output because they embed individual opportunity context, team quality, and market expectations into one number. This is a high-priority data pipeline gap.

Implication for SHAPE:

  • QB Situation score should include Vegas implied team total as a meaningful input (~15% sub-weight). R² = 0.26 rivals contract APY — even with in-season lines. Pre-season win totals would isolate the true forward-looking signal.
  • Non-QB Situation score should give Vegas team totals minimal weight (~5%). The signal exists but is largely redundant with opportunity metrics.
  • Pre-season player props, when available, would likely outperform all current Situation sub-components for all positions. This is the single highest-value data pipeline addition for SHAPE v2.

1.6 Draft Capital as Rookie Situation Signal

For rookies, we have no prior-year opportunity metrics (target share, snap share, etc.). Draft capital is the strongest pre-NFL proxy for expected opportunity — teams invest first-round picks in players they intend to start immediately.

Loading draft data...
Draft RangeQB Avg PPGRB Avg PPGWR Avg PPGTE Avg PPGRB Starter%WR Starter%RB 0-game%
Picks 1-1012.715.811.99.781%72%0%
Picks 11-329.410.410.28.353%51%9%
Round 28.59.08.26.944%38%18%
Round 35.47.96.85.236%25%14%
Rounds 4-54.75.34.34.016%14%21%
Rounds 6-7+3.53.53.62.915%8%37%

The draft capital gradient is steep and consistent:

  • RB has the sharpest drop-off. Picks 1-10 average 15.8 PPG with 81% starter rate and zero 0-game seasons. Rounds 6-7+ average 3.5 PPG with 37% zero-game rate — a 4.5x PPG multiplier from top-10 to late rounds. Every top-10 RB plays; most day-three RBs never become relevant.
  • WR follows a similar gradient. Top-10 WRs average 11.9 PPG (72% starter) vs 3.6 PPG (8% starter, 37% never play) for day-three picks. Including 0-PPG busts makes the drop-off much steeper than filtering to "players who saw the field."
  • QB is binary with a steep cliff. Picks 1-10 average 12.7 PPG. By round 3 it drops to 5.4 PPG with 32% zero-game rate. Most mid-to-late round QBs never start.
  • TE has a clear gradient but weak separation at the top. Picks 1-10 (9.7 PPG) and picks 11-32 (8.3 PPG) are relatively close, but day-three TEs collapse to 2.9-4.0 PPG. TE is developmental — early picks get opportunity, late picks get cut.
  • The 0-game rate is the hidden story. Rounds 4-5 RBs have a 21% chance of posting 0 games in a season; rounds 6-7+ hit 37%. When evaluating rookies, draft capital doesn't just predict ceiling — it predicts whether they play at all.

Implication for scoring: Draft pick should be a primary Situation input for rookies (weight 25-35%), decaying to zero after year 2 as actual production data becomes available. The decay should be faster for RB (immediate impact position) than WR/TE (developmental).

1.7 Voided Snap Share — Opportunity Vacuum

Beyond draft capital, all players are affected by how much positional opportunity their team has vacated. We define voided snap share as the normalized percentage of prior-season snap share at a position that belongs to departed players: departed_snap_pct / total_position_snap_pct * 100. This produces a clean 0-100% scale where 0% means every incumbent returned and 100% means the entire positional room turned over.

We include all player-seasons — returning incumbents (who benefit from stability), rookies (who step into vacuums), and veteran additions (traded/signed) — with no minimum games threshold. This gives 4,879 player-seasons across 2016-2024.

Loading voided snap data...
Voided %QB Ret PPGQB Rk PPGQB New PPGRB Ret PPGRB Rk PPGRB New PPG
0-20%12.975.745.408.865.893.99
20-40%13.737.035.328.526.014.68
40-60%11.4811.757.218.457.135.58
60-80%10.8711.178.967.787.575.60
80-100%9.3312.289.326.698.206.97

The story changes depending on player type:

  • Returning players show an inverse signal — they produce best on stable rosters (0-20% voided). QB returners average 12.97 PPG on stable teams, declining to 9.33 when the positional room turns over entirely. High voided % means their supporting cast changed, slightly depressing output.
  • Rookies show the strongest positive gradient. Rookie QBs jump from 5.74 PPG (0-20% voided) to 12.28 PPG (80-100% voided) — a 114% increase when stepping into a vacated starting role. Rookie RBs swing from 5.89 to 8.20 PPG, a 39% increase when replacing a departed bellcow. With no minimum games filter, the low-void rookies now properly include the many who barely played — showing how opportunity vacuum is what unlocks rookie production.
  • Vet additions mirror the rookie pattern but with a lower ceiling. New-vet QBs go from 5.40 PPG on stable teams to 9.32 PPG on teams with massive turnover — these are the bridge-to-starter opportunities.
  • WR shows minimal signal across all types (R²=0.003). Target redistribution is too diffuse — losing one WR doesn't predictably funnel share to any single replacement. TE is similarly flat (R²=0.010).

Correlations by player type reveal the mechanism: rookie QBs show R²=0.146 (p=0.002) — the strongest sub-group signal in the Situation inputs. New-vet QBs show R²=0.073 (p<0.001) and new-vet RBs R²=0.038 (p<0.001), both validated by monotonic bucket trends.

Implication for scoring: Voided snap share is a context-dependent signal — it helps incoming players (rookies, vet additions) but is neutral-to-negative for returning incumbents. Apply as a continuous input for rookie/new-vet QB and RB projections (weight 15-20%), using the normalized 0-100% scale. The 60% threshold separates opportunity-rich situations from crowded ones. Minimal value for WR/TE.

1.8 Combined Rookie Opportunity — Capital x Void Interaction

Draft capital and voided snap share are each useful independently, but the interaction between them produces a stronger predictor than either alone. A 1st-round QB drafted into a massive vacuum is a fundamentally different prospect than one drafted into a stable depth chart — and a day-3 QB into that same vacuum is different again.

Loading rookie opportunity data...
Draft TierQB Low VoidQB High VoidRB Low VoidRB Mid VoidRB High Void
Picks 1-1016.7 (n=1)14.4 (n=14)16.0 (n=2)18.1 (n=2)24.1 (n=1)
Picks 11-3210.7 (n=4)5.9 (n=1)10.7 (n=1)15.8 (n=3)
Round 27.8 (n=1)12.7 (n=2)9.0 (n=5)11.9 (n=8)10.2 (n=5)
Round 33.3 (n=4)10.1 (n=3)6.1 (n=5)8.3 (n=11)7.9 (n=9)
Rounds 4-74.0 (n=4)9.6 (n=11)4.3 (n=31)5.3 (n=48)5.3 (n=22)

The 2D interaction reveals what neither input shows alone:

  • RB: draft capital dominates, void amplifies. Top-10 RBs into high void average 24.1 PPG (Barkley) vs 16.0 PPG into low void. For day 2-3 RBs, the void effect is weaker but still present: round 3 RBs jump from 6.1 PPG (low void) to 7.9-8.3 PPG (mid-high void). The formula is multiplicative — capital sets the ceiling, void determines how quickly a rookie reaches it.
  • QB: void rescues low capital. Day 3 QBs into high void average 9.6 PPG (Prescott 17.9, Milton 19.2, Howell 18.3 among the hits) vs 4.0 PPG into low void. For 1st-round QBs, void matters less because they start regardless — the team clears the path.
  • WR/TE: void adds nothing. 1st-round WRs into high void (10.5 PPG) are comparable to low void (11.2 PPG). WR production depends on target share redistribution, not raw positional vacancy. TE follows the same non-pattern.

Regression: Combined vs Individual

ModelQB R²RB R²WR R²TE R²
Draft pick alone0.2680.3330.2490.153
Log(draft pick) alone0.3220.4380.2940.229
Voided % alone0.1460.0230.0090.000
Log(pick) + Void (additive)0.3590.4500.2980.235
Log(pick) x Void (interaction)0.3890.4570.2990.235

The interaction model outperforms either individual input for QB (+6.7% R² lift over log-pick alone), with modest gains for RB (+1.9%). WR and TE show no meaningful benefit from adding void.

The resulting formula:

Rookie PPG ≈ -k × ln(draft_pick) + m × voided_pct + intercept

Where m (the void coefficient) is meaningful for QB (0.025) and RB (0.029), near-zero for WR/TE.

Implication for scoring: Use the combined log(pick) x void interaction as the primary Rookie Situation input (weight 30-40%), superseding separate draft capital and void sub-scores. The interaction captures what neither alone can: a day-3 QB drafted into a massive vacuum is a fundamentally different prospect than one drafted into a stable depth chart. Decay to zero after year 2 as actual production data becomes available. For WR/TE rookies, use draft capital alone — void adds no signal.

1.9 Situation Summary

What We Tested

Across 10 sub-components, we analyzed 2,877-3,104 player-seasons spanning 2015-2024 using a consistent methodology: lagged R² for in-season metrics (prior-year input predicting next-year PPG) and concurrent R² for pre-season inputs (APY, SOS, Vegas lines that are known before Week 1). The table below ranks every Situation input by predictive power.

Sub-ComponentTypeBest R²Best PositionVerdict
Target ShareLagged0.45WRCore input for WR/TE
Touch ShareLagged0.45WR/TECore input for RB (0.31)
Snap ShareLagged0.31WRUseful but weaker than target/touch
Contract APYConcurrent0.27WRBest pre-season signal, all positions
Vegas Team TotalConcurrent0.26QBStrong for QB, weak for others
Team Win %Lagged0.07QBMarginal QB signal, noise elsewhere
QB/Coach StabilityCategorical~5 PPG swingQBActionable offseason signal
Personnel UsageLagged0.02TENoise across the board
Team VolumeLagged0.00--Zero signal, dead weight
Strength of ScheduleConcurrent0.00--Zero signal at season level
Contract YearCategorical-2.1 PPGAllPenalty, not a bonus
Draft CapitalConcurrent1.8x PPG multRBPrimary rookie signal
Voided Snap ShareLagged0.146 R² (rookie QB)QBStrong QB/RB signal for incoming players
Capital x VoidCombined0.389 R²QBBest rookie model — interaction outperforms either input

Situation Formula — Three Player Buckets

A single formula cannot serve all players. A returning starter's situation is defined by what they did last year. A rookie's situation is defined by draft capital and team need. A player moving to a new team has prior production but in a different context — their old-team metrics carry signal but are attenuated. Every position gets every component; only the weights change based on what the data says matters for each bucket.

The R² values below come from a comprehensive analysis of 4,482 player-seasons (2017-2024), classified into three buckets — Returning (2,405), Rookie (508), Moving (1,569) — with every sub-component correlated against next-season PPG by position and bucket.

Full R² Matrix — Sub-Component x Bucket x Position:

ComponentRet QBRet RBRet WRRet TERk QBRk RBRk WRRk TEMov QBMov RBMov WRMov TE
Target Share (lag).014.299.536.499.001.175.346.377
Touch Share (lag).455.446.525.409.108.237.296.239
Snap Share (lag).368.469.453.328.049.254.192.214
Contract APY.325.265.338.369.250.235.171.104.093.196.374.309
Voided Snap %.008.004.001.010.138.022.012.000.075.043.010.015
Log(Draft Pick).124.223.129.110.339.436.281.220.051.113.047.204

Bold = R² > 0.10 and p < 0.05 (statistically significant and practically meaningful).


Returning — Situation Formula:

Returning players have full prior-year opportunity data. Lagged share metrics are the dominant predictors — R² ranges from 0.30-0.54 across positions. Contract APY is the strongest pre-season signal (R² = 0.27-0.37). Voided snap share is noise for returners (R² < 0.01 across all positions).

QB (Returning): Full model R² = 0.502

S_QB_ret = (touch_share x 0.30) + (snap_share x 0.25)
         + (contract_apy x 0.25) + (target_share x 0.05)
         + (voided_snap x 0.00) + (draft_capital x 0.00)
         + (vegas_implied x 0.10) + (qb_coach_stability x 0.05)

Touch share (R² = 0.455) dominates for returning QBs — it captures passing volume better than target share (R² = 0.014, which is a WR/TE metric). Snap share (R² = 0.368) is the second signal: a QB who played 95%+ snaps last year is the entrenched starter. Contract APY (R² = 0.325) captures the franchise vs bridge gap. Vegas implied total and stability add QB-specific context. Voided snap share and draft capital have no residual value for a returning QB — their situation is fully defined by what they did last year.

RB (Returning): Full model R² = 0.508

S_RB_ret = (snap_share x 0.30) + (touch_share x 0.30)
         + (target_share x 0.15) + (contract_apy x 0.20)
         + (voided_snap x 0.00) + (draft_capital x 0.05)

Snap share (R² = 0.469) and touch share (R² = 0.446) are near-equal for returning RBs — snap share captures three-down role, touch share captures workload within those snaps. Target share (R² = 0.299) adds receiving-back signal. Contract APY (R² = 0.265) rounds out the formula. Draft capital retains a small residual signal (R² = 0.223) because early-round RBs sustain higher usage even years later.

WR (Returning): Full model R² = 0.566

S_WR_ret = (target_share x 0.35) + (touch_share x 0.30)
         + (contract_apy x 0.20) + (snap_share x 0.10)
         + (voided_snap x 0.00) + (draft_capital x 0.05)

Target share (R² = 0.536) is the single strongest predictor in the entire Situation analysis — a WR's share of team targets defines their ceiling. Touch share (R² = 0.525) is nearly as strong and captures the same signal from a usage angle. Contract APY (R² = 0.338) is the best pre-season input. Snap share is weaker (R² = 0.453) but additive in the multivariate model. Voided snap share adds nothing (R² = 0.001).

TE (Returning): Full model R² = 0.542

S_TE_ret = (target_share x 0.35) + (contract_apy x 0.25)
         + (touch_share x 0.20) + (snap_share x 0.10)
         + (qb_coach_stability x 0.05) + (voided_snap x 0.00)
         + (draft_capital x 0.05)

Target share (R² = 0.499) and contract APY (R² = 0.369) are both stronger for TE than any other position — TE production is driven by scheme trust and financial commitment. Touch share (R² = 0.409) and snap share (R² = 0.328) are additive. QB/coach stability gets weight because TEs are the most disrupted by coaching turnover (up to 1.9 PPG loss).


Rookie — Situation Formula:

Rookies have no prior-year opportunity data — lagged share metrics are unavailable. Draft capital and contract APY fill the void. Voided snap share is meaningful for QB only (R² = 0.138).

QB (Rookie): Full model R² = 0.433

S_QB_rk = (draft_capital x 0.35) + (contract_apy x 0.25)
        + (voided_snap x 0.15) + (vegas_implied x 0.15)
        + (qb_coach_stability x 0.10)

Log(draft pick) (R² = 0.339) is the primary signal — first-round QBs play, late-round QBs don't. Contract APY (R² = 0.250) is the strongest pre-season input, capturing the difference between a #1 overall pick's rookie deal and a 5th-rounder's. Voided snap share (R² = 0.138, p=0.002) is uniquely meaningful for rookie QBs — a team that lost its starter needs the rookie to play now. Vegas implied and stability add QB-specific context.

RB (Rookie): Full model R² = 0.446

S_RB_rk = (draft_capital x 0.40) + (contract_apy x 0.25)
        + (voided_snap x 0.10) + (team_context x 0.25)

Log(draft pick) (R² = 0.436) is the single strongest rookie signal across all positions — RBs are the most immediate-impact position. Contract APY (R² = 0.235) separates 1st-round investments from depth picks. Voided snap share (R² = 0.022, p=0.06) is borderline but directionally correct and validated by the monotonic bucket trend. Team context (offensive quality, run-pass ratio) gets meaningful weight for RBs since their volume depends heavily on game script.

WR (Rookie): Full model R² = 0.321

S_WR_rk = (draft_capital x 0.40) + (contract_apy x 0.30)
        + (voided_snap x 0.05) + (qb_stability x 0.10)
        + (team_context x 0.15)

Log(draft pick) (R² = 0.281) is the primary signal. Contract APY (R² = 0.171) is the second. Voided snap share adds essentially nothing (R² = 0.012) — WR opportunity redistribution is too diffuse to predict which specific rookie benefits. QB stability gets weight because rookie WRs develop faster in stable passing systems.

TE (Rookie): Full model R² = 0.238

S_TE_rk = (draft_capital x 0.35) + (contract_apy x 0.20)
        + (qb_stability x 0.20) + (voided_snap x 0.00)
        + (team_context x 0.25)

Log(draft pick) (R² = 0.220) is the primary signal. Contract APY is weaker for rookie TEs (R² = 0.104) than any other position — the market underprices TEs because they take 2-3 years to develop. QB/coach stability gets the highest weight of any position because TE production is the most scheme-dependent. Voided snap share adds nothing (R² = 0.000). The full model R² of 0.238 is the lowest of any bucket — rookie TE production is genuinely hard to predict.


Moving (Veteran Team Change) — Situation Formula:

Players who changed teams have prior-year data but it's attenuated — their old-team metrics are less predictive than a returner's because the new team's scheme, coaching, and role may differ. Lagged shares still carry signal (R² = 0.11-0.38) but are roughly 40-60% weaker than for returners. Contract APY is critical — the new deal reflects what the acquiring team expects. Voided snap share is meaningful for QB (R² = 0.075) and RB (R² = 0.043) because it captures how much opportunity the new team is vacating for them.

QB (Moving): Full model R² = 0.133

S_QB_mov = (touch_share x 0.15) + (contract_apy x 0.20)
         + (voided_snap x 0.20) + (snap_share x 0.10)
         + (vegas_implied x 0.15) + (qb_coach_stability x 0.10)
         + (draft_capital x 0.10)

Moving QBs are the hardest bucket to predict (R² = 0.133). Touch share (R² = 0.108) is the best lagged signal but far weaker than for returners (0.455). Voided snap share (R² = 0.075, p<0.001) is the unique moving-QB signal — a team that lost its starter and signed a vet is giving that vet the keys. Contract APY (R² = 0.093) captures the bridge-starter vs franchise investment. Vegas implied and draft capital contribute small signals.

RB (Moving): Full model R² = 0.313

S_RB_mov = (snap_share x 0.20) + (touch_share x 0.20)
         + (contract_apy x 0.20) + (target_share x 0.15)
         + (voided_snap x 0.10) + (draft_capital x 0.15)

Snap share (R² = 0.254) and touch share (R² = 0.237) still predict for moving RBs — a three-down back on his old team tends to get a similar role on his new team. Contract APY (R² = 0.196) captures the acquiring team's expected investment. Target share (R² = 0.175) captures pass-catching backs. Voided snap share (R² = 0.043, p<0.001) adds the opportunity-vacuum signal. Draft capital (R² = 0.113) retains residual value — early-round RBs carry draft pedigree for years.

WR (Moving): Full model R² = 0.494

S_WR_mov = (contract_apy x 0.30) + (target_share x 0.25)
         + (touch_share x 0.20) + (snap_share x 0.10)
         + (voided_snap x 0.05) + (draft_capital x 0.10)

Contract APY (R² = 0.374) is actually the strongest single signal for moving WRs — stronger than for returners (0.338). The acquiring team's financial commitment is the clearest indicator of expected role. Target share (R² = 0.346) and touch share (R² = 0.296) from the old team still carry strong signal. Snap share (R² = 0.192) is weaker. Voided snap share adds nothing (R² = 0.010). Draft capital retains a small signal (R² = 0.047).

TE (Moving): Full model R² = 0.508

S_TE_mov = (target_share x 0.30) + (contract_apy x 0.25)
         + (touch_share x 0.15) + (snap_share x 0.10)
         + (draft_capital x 0.15) + (voided_snap x 0.05)

Target share (R² = 0.377) from the old team is the strongest signal — a TE who earned heavy targets will likely get a similar role on his new team. Contract APY (R² = 0.309) captures the financial commitment. Draft capital (R² = 0.204) is the strongest of any moving position — early-round TEs carry pedigree signal even after team changes. Voided snap share is minimal (R² = 0.015).


Eliminated: Team volume (R² = 0.00), strength of schedule (R² = 0.00), personnel usage (R² < 0.02), and the +5 contract year bonus (empirically a -2.1 PPG penalty).

Key Findings

  1. Three buckets, not one. The data clearly shows that Returning, Rookie, and Moving players respond to fundamentally different signals. A single formula dilutes all three. Returning players are best predicted by lagged opportunity (R² = 0.45-0.54). Rookies by draft capital (R² = 0.22-0.44). Moving players by a blend of attenuated prior-team metrics and new-team contract investment (R² = 0.13-0.51).
  2. Lagged opportunity metrics attenuate ~40-60% for moving players. A returner's target share predicts at R² = 0.536 (WR); the same metric for a WR who changed teams predicts at R² = 0.346. The signal survives team changes but is significantly weaker — role, scheme, and coaching all change.
  3. Contract APY is the universal signal. It is statistically significant (p<0.001) for every bucket and every position except moving QBs (p=0.001). For moving WRs it is actually the strongest single predictor (R² = 0.374), surpassing even target share — the acquiring team's financial commitment is the clearest statement of expected role.
  4. Voided snap share is a QB/RB-only signal, strongest for new arrivals. Rookie QBs: R² = 0.138 (p=0.002). Moving QBs: R² = 0.075 (p<0.001). Moving RBs: R² = 0.043 (p<0.001). For WR and TE across all buckets: R² < 0.015. The mechanism is clear: QB and RB are single-player positions where a vacancy directly creates a starting role. WR/TE opportunity redistribution is too diffuse.
  5. Draft capital is the primary rookie signal and retains residual value. For rookies: R² = 0.22-0.44 across all positions. But draft capital also carries signal for returning players (R² = 0.11-0.22) and moving players (R² = 0.05-0.20) — early-round picks sustain higher usage for years. The weight decays but never fully disappears.
  6. Moving QBs are the hardest to predict. Full model R² = 0.133 — the lowest of any bucket-position combination. QB production depends on system fit, offensive line, and weapon quality in ways that no pre-season metric fully captures. This is a known limitation.
  7. Rookie TEs are nearly unpredictable. Full model R² = 0.238. TE production depends on scheme trust and route maturity that takes 2-3 years to develop. Draft capital (R² = 0.220) is the only reliable input; everything else is noise.
  8. The contract year "bump" is a myth. Contract year players produce 2.1 PPG less across all positions (p<0.001). Eliminated from the formula.

Future Data Priorities

The analysis above identifies two high-value datasets not yet in the pipeline that would likely improve Situation scoring:

  1. Pre-season team win totals — Available from SportsOddsHistory.com for 10+ years. This would replace the in-season Vegas proxy with a true pre-season market signal. Expected to strengthen the QB Situation input and may reveal a stronger non-QB signal than game-level lines (which incorporate in-season noise).

  2. Pre-season player season props (yards, TDs, fantasy o/u) — Available from The Odds API from 2023 onward. Only ~3 years of data limits historical validation, but these are likely the single strongest predictor of season-long fantasy output because they embed individual opportunity, team context, and market expectations into one number. This is the highest-priority data pipeline addition for SHAPE v2.

  3. Positional SOS — Our current SOS uses aggregate opponent points allowed, which is a blunt instrument. Position-specific SOS (e.g., opponent fantasy points allowed to WRs) may carry more signal than the aggregate version that scored R² = 0.000. Worth testing if the data becomes available through players_raw opponent splits.

1.10 Situation V2 Implementation Record

What Changed from V1 to V2

The V1 Situation formula used a single formula for all players:

S = opp_score x 0.40 + team_grade x 0.25 + team_vol_pct x 0.15 + contract_pct x 0.20 + contract_bonus

This produced mean scores of ~28 (centered at the bottom of the scale) because:

  1. opportunity_score from player_workload_metrics was broken — 3,510/3,510 rows had NULL proj_target_share due to a Sleeper ID vs GSIS ID join failure. The score (mean=13, median=0) was essentially just snap share.
  2. team_grade and team_volume had R² = 0.00-0.07 — dead weight diluting real signal.
  3. A single formula could not serve returning starters, rookies, and players changing teams.

V2 replaces this with 12 position-specific formulas (3 buckets x 4 positions) derived from the R² analysis in Section 1.9. Each formula uses only inputs with statistically significant predictive power (R² > 0.10, p < 0.05) for that specific bucket-position combination.

New Data Sources

SourceField(s) UsedPurpose
historic_player_season (seasons N-1, N-2)targets, carries, games_playedTouch share, target share (bypasses broken player_workload_metrics)
player_snap_season (seasons N-1, N-2)snap_count, team, positionSnap share + voided snap computation
coach_assignmentscoach_name, seasonHC stability detection (same HC year-over-year), HC tenure
games_rawspread_line, total_lineVegas implied team total: (total_line - spread_line) / 2
pre_draft_profiledraft_pickDraft capital: max(0, min(100, 100 - 18 x ln(pick)))
player_contract_contextapy_pct_of_capContract investment as % of salary cap

Removed: player_workload_metrics.opportunity_score (broken), team_grade weighting, team_volume weighting, contract year +5 bonus (empirically -2.1 PPG).

Player Bucket Classification

Each player is classified into exactly one bucket based on roster state:

BucketDefinitionData Available
ReturningSame team as prior season, years_exp > 0Full prior-year opportunity metrics
Rookieyears_exp = 0Draft capital, contract, voided snap, team context only
MovingDifferent team than prior season, years_exp > 0Attenuated prior-team metrics + new-team contract

Team comparison uses prior-season snap data (player_snap_season) matched against current roster team.

Voided Snap Share Computation

For each team x position group, we compute what percentage of prior-year snaps departed:

  1. Sum all snaps by team x position from season N-1
  2. Identify players from that group who are NOT on the same team in season N
  3. Voided % = departed snaps / total position snaps

This feeds rookie and moving-player formulas where it captures the opportunity vacuum.

Percentile Normalization

Raw Situation scores have correct ordering but compressed scale — most cluster between 20-60 before normalization. To achieve the target distribution, we apply position-specific percentile mapping:

  1. For each position, compute each player's percentile rank among their position peers (with tie-breaking: (rank + ties x 0.5) / N x 100)
  2. Map the percentile to a target score via piecewise linear function:
pct ≤ 20  → score = 5 + (pct/20) x 45         // 5 → 50
pct ≤ 50  → score = 50 + ((pct-20)/30) x 20    // 50 → 70
pct ≤ 75  → score = 70 + ((pct-50)/25) x 10    // 70 → 80
pct ≤ 95  → score = 80 + ((pct-75)/20) x 10    // 80 → 90
pct ≤ 100 → score = 90 + ((pct-95)/5) x 9      // 90 → 99

This curve was tuned to produce approximately: 5% >90, 15-20% 80-90, 20-25% 70-80, centered around 70 median.

Resulting Distribution (688 Active Players, April 2026)

PositionNMeanMedianP25P75P90>90%80-90%70-80%<50%
QB9864.1705481876.1%19.4%25.5%18.4%
RB16364.0705380885.5%21.5%23.9%19.0%
WR27064.1705380886.3%20.4%24.1%17.0%
TE15764.0705381885.7%20.4%24.8%21.0%

Leaderboard Validation (Top 5 per Position)

Pos#1#2#3#4#5
QBJayden Daniels (98)Lamar Jackson (96)Jalen Hurts (94)Josh Allen (93)Joe Burrow (91)
RBSaquon Barkley (98)Breece Hall (96)Bijan Robinson (96)Alvin Kamara (96)Jonathan Taylor (94)
WRJa'Marr Chase (99)Malik Nabers (98)Justin Jefferson (97)Garrett Wilson (97)Drake London (96)
TETrey McBride (98)Travis Kelce (97)Brock Bowers (96)George Kittle (95)Hunter Henry (94)

Ordering is correct — elite situations (bell-cow backs, alpha WR1s, premium TEs) score highest. Backups, committee players, and fringe roster players score lowest.


Part 2: Health (H) — Deep Dive

The Health score captures a player's durability, injury risk, and age-adjusted availability. The hypothesis: players who miss games are less likely to produce the following year, and the type of injury, timing, and the player's age all modulate that risk differently by position.

Current Health Score (V1)

injury_factor = max(0.70, 1.0 - games_missed_3yr x 0.02)
              x max(0.0, 1.0 - avg_severity x 0.02)

H = (confidence_multiplier x 100 x 0.40)
  + (age_factor x 100 x 0.25)
  + (games_missed_score x 0.20)
  + (recurrence_score x 0.15)

The analysis below evaluates each component using injury data from player_injury_history (ground-truth games missed), injuries_raw (injury types and weekly reports), and players_master (birth dates for age curves). All analyses use 2015-2024 data with a >10% snap share filter — players must have had a meaningful role in the games they played (QB: ≥10 pass att/game, RB: ≥5 touches/game, WR/TE: ≥10% target share). This captures injured starters who only played a few games while excluding bench players and practice-squad call-ups who would pollute the signal. No minimum games threshold is applied — a starter who plays 2 games before an ACL tear is included.

2.1 Games Missed History

Does a player's injury history predict next-season production? We compute the rolling 3-year average of games missed for each player, then correlate against next-year fantasy PPG. This directly tests the core premise of the Health score: that past injuries are a forward-looking signal.

3-Year Avg Games Missed vs. Next-Season Fantasy PPG (2018-2024, Lagged)

3-Year Avg Games Missed vs. Next-Season Fantasy PPG

Rolling 3-year avg of games missed (min 2 of 3 years) vs. year N+1 PPG. N=1,159 player-seasons (>10% snap share, REG).

QB
RB
WR
TE
PositionRSlopeN
QB0.292-0.541-0.662198
RB0.030-0.174-0.359323
WR0.089-0.298-0.622473
TE0.076-0.276-0.398165
All0.056-0.237-0.4161,159

Games missed history is a strong signal — especially for QBs. By filtering to players with >10% snap share (meaningful contributors when active), we isolate the relationship between injury history and production without bench-player noise.

  • QB is the most injury-sensitive position (R² = 0.29). Each game missed per year in the 3-year window costs a QB ~0.66 PPG the following season. A QB averaging 5 missed games/year projects over 3 PPG lower than a fully healthy QB. QBs who miss significant time lose scheme continuity, timing with receivers, and sometimes their job entirely.
  • WR is the second-most sensitive (R² = 0.09). Each game missed costs ~0.62 PPG. WRs depend on route-running precision and target-share momentum that erodes with missed reps.
  • TE shows meaningful signal (R² = 0.076). Stronger than expected — TEs who miss time lose the blocking trust and route rapport that takes seasons to build. The position's late development curve makes lost reps particularly costly.
  • RB is the least affected (R² = 0.03). RB production is driven by opportunity (touches), not historical availability. A healthy RB who gets the starting job produces regardless of past injury. This aligns with the "replaceable" nature of the position.

Why the snap share filter matters: Raw unfiltered data includes hundreds of practice-squad call-ups and emergency depth players who never get hurt because they barely play. Including them in the "healthy baseline" drags healthy-player averages down to 6 PPG and creates a false signal. The >10% snap share filter ensures every player in the study was a real contributor — someone whose production (or lack thereof) is meaningful.

Implication for SHAPE: The games_missed_3yr penalty in V1 (0.02 per game missed) is directionally correct but far too weak for QBs and should be position-weighted. QBs need the steepest penalty (~0.04 per game), WRs ~0.04, TEs ~0.03, and RBs ~0.02.

2.2 Injury Timing

When a player misses games matters for their next-season outlook. A player who exits in Week 3 has a fundamentally different recovery timeline than one who leaves in Week 16. Using players_raw weekly data, we classify each player-season by the last week they recorded stats, then examine next-season PPG.

Next-Season PPG by Prior-Year Injury Timing (2016-2024)

Players classified by last week with recorded stats in prior season. N=1,864 player-seasons (>10% snap share, REG).

QB
RB
WR
TE
NaN-Infinity-Infinity-Infinity-Infinity-Infinity-InfinityNext-Season PPG (PPR)

Next-Season PPG by Injury Timing (All Positions):

CategoryNMean PPGMedian PPGvs. Full Season
Full Season (15+ gm)93312.5612.31
Late Exit (Wk14+)70010.469.90-2.10
Mid-Season Exit (Wk9-13)1409.729.05-2.84
Early Exit (Wk1-8)919.668.98-2.90

Timing creates a clear gradient. Full-season players produce 12.56 PPG the following year, while early exits drop to 9.66 — a 2.9 PPG gap. The gradient is steady: late exits lose 2.1 PPG, mid-season exits lose 2.8, and early exits lose 2.9. This pattern is only visible when we filter to meaningful contributors — bench players mask the gradient entirely.

Position-specific timing effects:

PositionFull SeasonLate ExitMid ExitEarly ExitFull-to-Worst Gap
QB16.8312.6711.7012.36-5.13
RB11.539.468.839.29-2.70
WR12.2310.658.798.51-3.72
TE10.049.478.968.31-1.73
  • QBs show the largest full-to-worst gap (-5.1 PPG). Mid-season exits are the worst category for QBs (11.70 PPG) — likely reflecting injuries serious enough to sideline a starter but occurring too late for a full offseason recovery.
  • WRs show a clear gradient: late exits still produce 10.65, but early exits crater to 8.51 PPG (-3.7 gap). Early-season WR injuries destroy the route-tree chemistry and target-share momentum built during camp.
  • RBs are the most resilient across timing categories. Even early-exit RBs produce 9.29 PPG — the position's opportunity-driven nature means a healthy RB gets work regardless of prior-year timing.
  • TEs show the smallest gap (-1.7 PPG). TE production is sticky — established TEs maintain their role even after missing time, and the position's blocking component provides job security.

Why timing matters with clean data: The snap share filter ensures every player in the study was a legitimate contributor. Among these players, earlier injuries correlate with worse next-year outcomes — a gradient that was invisible in both the over-filtered (8-game minimum) and unfiltered approaches.

Implication for SHAPE: Injury timing deserves a small modifier within the Health formula. Mid-season and early-season injuries should receive a 1.15x penalty multiplier compared to late-season exits, reflecting the ~0.8 PPG additional cost. The V1 formula's focus on games missed count alone misses this timing signal.

2.3 Injury Type & Recurrence

Not all injuries are equal. A hamstring strain has a different recurrence profile and career impact than a torn ACL or a concussion. Using injuries_raw, we categorize the 158 distinct injury types into 6 body regions and analyze recurrence rates and next-season PPG impact.

Next-Season PPG by Prior-Year Injury Type (2016-2024)

Players grouped by their primary injury category in the prior season. N=1,864 player-seasons (>10% snap share, REG).

QB
RB
WR
TE
NaN-Infinity-Infinity-Infinity-Infinity-Infinity-InfinityNext-Season PPG (PPR)

Recurrence Rates by Injury Category:

Injury TypeTotalRecurredRecurrence RatePPG (Recurred)PPG (Cleared)Diff
Hamstring/Soft Tissue3538724.6%11.7611.58+0.18
Ankle/Foot2774516.2%11.8311.01+0.82
Knee/ACL135118.1%10.9010.85+0.05
Concussion5347.5%8.5010.27-1.77
Shoulder/Upper14496.2%12.7111.87+0.84
Back/Core10254.9%13.0011.33+1.66

Next-Season PPG by Injury Type (all >10% snap share contributors):

CategoryNMean PPGMedian PPGvs. Healthy
Healthy (0 missed)57011.5611.17
Shoulder/Upper14411.9211.32+0.36
Hamstring/Soft Tissue35311.6311.11+0.07
Back/Core10211.4110.98-0.15
Minor/Unreported23011.3710.68-0.19
Ankle/Foot27711.1510.60-0.41
Knee/ACL13510.8510.85-0.71
Concussion5310.138.51-1.43

Key findings:

  1. Hamstring/soft tissue injuries are the most chronic (24.6% recurrence). One in four players with a hamstring/groin/calf injury will have the same type of injury the following year. Despite minimal per-occurrence PPG impact, the compounding risk of repeated soft tissue injuries makes this the category most deserving of a SHAPE penalty.

  2. Ankle/foot injuries recur at 16.2% — the second-highest rate. This is substantially higher than the 13% seen in unfiltered data. Among meaningful contributors, ankle injuries are persistent and costly (+0.82 PPG for those who re-injure, likely reflecting players who "play through" recurring ankle issues).

  3. Concussions have the worst PPG impact (-1.43 vs. healthy, -1.77 for recurrence). Concussion is the only category where recurrence actively depresses production. Players who suffer repeat concussions produce 8.50 PPG vs. 10.27 for those who clear — likely reflecting lingering cognitive effects or teams limiting snap counts.

  4. Knee/ACL shows the second-worst baseline impact (-0.71 PPG). But recurrence is relatively low (8.1%) and the PPG difference between recurred and cleared is negligible (+0.05). Modern ACL recovery is effective — the risk is in the return timeline, not long-term production.

  5. The healthy baseline is now clean. With the snap share filter, "Healthy (0 missed)" players average 11.56 PPG — legitimate contributors, not bench warmers. This lets us see the true injury penalty: most categories produce within ~0.5 PPG of healthy, but concussions and knee injuries show meaningful deficits.

Implication for SHAPE:

  • Hamstring/soft tissue should receive a recurrence multiplier (1.5x the standard games-missed penalty) to account for the 25% re-injury rate
  • Concussion should receive a dedicated penalty — the only category with both meaningful PPG impact (-1.43) and severe recurrence consequences (-1.77)
  • Ankle/foot recurrence (16.2%) is underappreciated and deserves a 1.3x multiplier
  • Knee/ACL penalty should be time-bounded — the 8.1% recurrence and -0.71 PPG gap are modest for players who make it back to meaningful snaps

2.4 Age Curves

Age is the most fundamental health variable — it determines baseline injury risk, recovery speed, and production trajectory. Using birth dates from players_master, we compute each player's age at the start of the season (September 1) and plot against same-season fantasy PPG. This is concurrent (age is known pre-season) and includes all player-seasons from 2015-2024 with the >10% snap share filter.

Player Age vs. Fantasy PPG by Position (2015-2024)

Age at Sept 1 of season. N=3,075 player-seasons (>10% snap share, REG). All 4 offensive positions.

QB
RB
WR
TE
PositionRSlopeNAge Range
QB0.002+0.038+0.04658421-37+
RB0.002-0.044-0.07997821-32
WR0.003+0.051+0.0741,13521-34
TE0.030+0.174+0.16237821-32
All0.011+0.103+0.1423,07521-37+

Age explains almost nothing in a cross-sectional sample (R² ≤ 0.03). This is expected — at any given age, there are elite producers and league-average starters. The signal is in the shape of the curve, not the linear fit. The snap share filter gives us cleaner curves by excluding bench players who never contributed.

Peak Ages by Position (highest mean PPG with N ≥ 10):

PositionPeak AgePeak Mean PPGDecline OnsetDecline Shape
QB~3614.13No clear decline through 37Remarkably flat plateau 22-37
RB~2110.02Age 28Plateau 21-27, then gradual decline
WR~3011.59Age 33Slow rise through 20s, peak 29-31
TE~3110.09Age 32+Steady rise through career, late peak

QB — The Ageless Position: QBs who maintain >10% snap share show a remarkably flat production plateau from age 22 through 37 — mean PPG hovers between 12.5 and 14.1 across the entire range. Age 36 shows the highest mean (14.13 PPG, N=16), reflecting that QBs who keep starting into their late 30s are the elite arm talents. The V1 age curve (peak=32, cliff=37) is well-calibrated for the cliff but underestimates the breadth of the plateau.

RB — Earliest Peak, Clearest Decline: RBs peak at age 21 (10.02 mean PPG) — rookie-deal bell cows receiving massive workloads. The production holds relatively steady through 27 (~9.3-9.8 PPG), then drops noticeably: age-28 RBs produce 8.56 PPG, age-30 produces 8.53, and by 32 the sample thins to just 12 players. The V1 curve (peak=26, cliff=29) is reasonable for the cliff but overestimates peak age — the data shows 21-24 as the true peak window.

WR — The Late Bloomer: WRs with meaningful snap share improve steadily through their 20s and peak at age 29-30 (11.13-11.59 mean PPG). This reflects the learning curve of route running and the time it takes to earn a team's primary target share. Decline is gentle — age-33 WRs still produce 9.95 PPG. The V1 curve (peak=28, cliff=33) is close but underestimates peak by 1-2 years.

TE — The Slowest Developer: TEs peak at age 31 (10.09 mean PPG) with a steady rise from 7.50 at age 21. The position's dual demands of blocking and receiving mean young TEs are still learning, and elite production doesn't materialize until the late 20s or early 30s. The V1 curve (peak=29, cliff=34) underestimates peak age by 2 years.

Survivorship caveat: Even with the snap share filter, older players in this sample are disproportionately the good ones — poor older players retire or lose their snap share (and exit the filtered set). A longitudinal approach tracking year-over-year decline for the same player would fully address this. The snap share filter does partially help: players who decline to <10% snap share before retiring are excluded at the age where their production cratered, which is more honest than including them at artificially low PPG.

Implication for SHAPE:

  • The V1 age curves should be recalibrated based on the empirical peaks: QB plateau 22-37, RB 21-24 with cliff at 28, WR 29-31, TE 31
  • Age factor should use steeper cliffs for RBs (start at 28, not 29) and much gentler curves for QBs (flat plateau through late 30s)
  • WR and TE peaks should be shifted 1-2 years later than V1 assumed
  • A longitudinal cohort study (tracking the same player over time) remains the gold standard for a future update

2.5 Career Continuation Probability

The analyses above answer "how does injury/age affect next-season PPG?" — a single-season lens. But SHAPE is a universal value used across both re-draft and dynasty leagues. A player's Health score should reflect not just whether they'll produce this year, but whether they'll still be a meaningful contributor 2-3 years from now.

Consider two RBs entering the 2025 season: Bijan Robinson (age 22) and Derrick Henry (age 31). Both will likely play this year. But their 3-year outlooks couldn't be more different.

Using our >10% snap share cohort data, we compute the career continuation probability — given a player is a meaningful contributor at age X, what percentage of similar players were still meaningful contributors at age X+1, X+2, and X+3?

Career Traces & Continuation Probability by Position (2015-2024)

Top: individual career PPG traces (faint lines) with median overlay (white). Bottom: % of players at each age still active 1, 2, and 3 years later. >10% snap share filter.

Loading career data...

RB Career Continuation — The Position With the Steepest Cliff:

Current AgeNStill Active +1yr+2yr+3yr
2211674%70%64%
2416268%55%43%
2610965%52%31%
286553%31%19%
302746%28%9%
311750%20%7%

A 22-year-old RB has a 64% chance of still being a meaningful contributor in 3 years. A 31-year-old RB has a 7% chance. That's a 9x difference in career runway that the single-season PPG analysis completely misses.

The Bijan vs. Henry Example:

  • Bijan Robinson (22): 74% chance of meaningful snaps next year, 70% in 2 years, 64% in 3 years. If he plays, he'll be at peak RB age with a 10+ PPG baseline.
  • Derrick Henry (31): 50% chance next year, 20% in 2 years, 7% in 3 years. Even if he produces 10 PPG this season, his dynasty value is a fraction of Bijan's because the expected production window is vanishing.

All Positions — 3-Year Continuation Rate:

AgeQBRBWRTE
2258%64%60%50%
2451%43%57%42%
2649%31%41%57%
2859%19%37%25%
3071%9%33%39%
3270%43%*16%22%

*RB age 32 N=12, inflated by survivorship — only Frank Gore types reach 32.

Position-Specific Career Runway Patterns:

  • QB: The most durable position. 3-year continuation stays above 50% until age 35. QBs who hold starting jobs into their 30s tend to keep them — the attrition happens at younger ages when backups fail to win jobs.
  • RB: The steepest cliff. 3-year continuation drops from 64% at age 22 to 9% at age 30. By 28, a majority of RBs who were starters two years prior have already lost their role. This is the most important dynasty differentiator of any metric in this study.
  • WR: Gradual decline. 3-year continuation holds above 40% through age 29, then drops to 16% at 32. WRs have a longer productive window than RBs but eventually face the same cliff.
  • TE: Most volatile due to smaller sample. 3-year continuation is inconsistent (57% at 26, 25% at 28, 39% at 30) because the position has both blocking-specialist TEs who get replaced and elite pass-catchers who persist.

Continuation by Performance Tier

The analysis above treats all players at an age equally. But a 29-year-old CMC is not the same as a 29-year-old RB2. Does elite production buy career longevity?

We stratified the continuation data by fantasy finish tier — top 12 (positional elite), top 13-24, top 25-36, and top 37-48 — in the base season, then tracked whether those players were still meaningful contributors 1, 2, and 3 years later.

Career Continuation by Performance Tier (2015-2024)

% of players at each fantasy tier still active with >10% snap share. Toggle between +1, +2, and +3 year horizons. Ranked by total season fantasy points (PPR).

Loading tier continuation data...

RB — Elite Production Buys Runway:

AgeTop 12 (3yr)Top 13-24 (3yr)Top 25-36 (3yr)Top 37-48 (3yr)
2290%100%80%67%
2486%70%50%67%
25100%64%43%62%
2692%22%33%50%

The tier gap is massive. At age 26, 92% of elite RBs (top 12) are still active 3 years later compared to just 22% of RB2s (top 13-24). Being an RB1 doesn't just mean better production — it buys 4x the career runway. By age 27-28, top-12 RBs are the only tier with reliable 3-year continuation; lower tiers have already fallen off the cliff.

This makes intuitive sense: teams invest in and protect their bell-cow backs. A top-12 RB at 26 is likely on a second contract, entrenched in the offense. A top-24 RB at 26 is likely being replaced by a draft pick.

WR — The Slow Burn Advantage:

AgeTop 12 (3yr)Top 13-24 (3yr)Top 25-36 (3yr)Top 37-48 (3yr)
2582%100%62%47%
2793%50%50%10%
2983%n/a40%86%*

Elite WRs at 27 have 93% 3-year continuation vs 10% for fringe WR3/4s. The tier gap widens with age — at 25, fringe WRs still have a 47% shot, but by 27 that drops to 10%. WR1s maintain near-certain continuation well into their late 20s.

TE — Elite Is Everything:

AgeTop 12 (3yr)Top 13-24 (3yr)Top 25-36 (3yr)
2482%50%10%
2786%29%10%
2967%n/a33%

The TE position shows the most extreme tier stratification. Top-12 TEs (Kelce, Andrews, Kittle types) have 82-86% 3-year rates through their mid-20s. Below the top 12, continuation craters — a TE2 at age 27 has just a 29% 3-year rate, while a TE3 at 24 has only 10%. The tight end position is binary: either you're elite or you're replaceable.

The McCaffrey vs. RB2 Example:

The original Bijan vs. Henry comparison showed age differences. Tier stratification adds the production dimension:

  • A 26-year-old RB1 (top 12): 92% 3-year continuation — near certainty of sustained production
  • A 26-year-old RB2 (top 13-24): 22% 3-year continuation — likely replaced within 2 seasons
  • That's a 4.2x career runway multiplier just from production tier at the same age

This means SHAPE's continuation component should be tier-adjusted, not just age-based. A top-12 RB at 27 has better continuation odds than a top-36 RB at 23.

Why This Matters for SHAPE:

The tier-stratified data reveals that career continuation is not just an age function — it's a production x age interaction. A simple age-based continuation lookup (e.g., "28-year-old RB = 19% 3yr rate") dramatically undervalues elite producers and overvalues replacement-level players at the same age.

For SHAPE, this means the continuation component should use tier-adjusted continuation rates rather than age-only rates. The formula becomes:

  1. Production curve — expected PPG given the player is active (the snap-share-filtered age curves from Section 2.4)
  2. Tier-adjusted continuation — likelihood of still being a meaningful contributor, conditional on both age AND current production rank

This gives SHAPE three-dimensional resolution:

  • Bijan Robinson (22, RB1): 90% 3-year continuation — near-certain dynasty asset
  • Derrick Henry (31, RB1): Still elite when active, but only the rare Gore/Peterson types persist at this age — his continuation probability reflects that history
  • Replacement RB (26, top 25-36): Just 33% 3-year continuation despite being "young" — production tier matters as much as age

2.6 Health Summary

What We Tested

Five analyses across 1,159-3,075 player-seasons using a >10% snap share filter (QB: ≥10 pass att/game, RB: ≥5 touches/game, WR/TE: ≥10% target share). This filters out bench players and practice-squad call-ups while including injured starters who only played a few games. No minimum games threshold.

Sub-ComponentTypeKey FindingStrength
3-Year Games MissedLaggedQB R²=0.29, WR R²=0.09, TE R²=0.08Strong for QB, moderate for WR/TE
Injury TimingCategoricalFull-season vs. early exit = 2.9 PPG gap; clear gradientModerate
Injury RecurrenceCategoricalHamstring 25% recurrence; concussion worst PPG impactModerate
Age CurvesConcurrentR² ≤0.03 but peak ages differ sharply by positionShape matters
Career ContinuationCohortRB 3yr rate: 64% at 22 → 9% at 30; QB stays >50% until 35Strong for dynasty
Tier-Adjusted ContinuationCohort x RankTop-12 RB at 26: 92% 3yr vs Top-24: 22% — 4.2x multiplierCritical for dynasty

Recommended V2 Health Formula

The V1 Health score treats all positions the same and uses uniform penalties. The data supports position-specific tuning with a dual-horizon structure: a next-season component (for re-draft value) and a tier-adjusted career continuation component (for dynasty value). The tier stratification study shows that continuation probability depends on both age AND production rank — a top-12 RB at 26 has 92% 3-year continuation vs 22% for a top-24 RB at the same age.

QB:

H_QB = (tier_continuation(age, rank, 3yr) x 0.20)
     + (games_missed_score(penalty=0.04/game) x 0.35)
     + (age_factor(peak=28, cliff=38) x 0.20)
     + (injury_timing_mod(early=1.15x) x 0.10)
     + (recurrence_score x 0.15)

QBs are the most injury-sensitive position (R²=0.29). Games missed history is the dominant next-season signal. Tier-adjusted continuation gets 20% weight — elite QBs at 28 have near-certain 3-year continuation (75-100%), while fringe starters at 34+ drop below 20%.

RB:

H_RB = (tier_continuation(age, rank, 3yr) x 0.35)
     + (age_factor(peak=22, cliff=28) x 0.25)
     + (games_missed_score(penalty=0.02/game) x 0.15)
     + (soft_tissue_flag x 0.15)
     + (recurrence_score x 0.10)

Tier-adjusted continuation is the dominant RB health signal. The key finding: a top-12 RB at age 26 has 92% 3-year continuation while a top-24 RB at the same age has only 22% — a 4.2x multiplier. This captures the difference between an entrenched bell-cow being protected and a committee back being replaced by a draft pick. The age-only cliff (64% at 22 → 9% at 30) tells only half the story.

WR:

H_WR = (tier_continuation(age, rank, 3yr) x 0.20)
     + (games_missed_score(penalty=0.04/game) x 0.30)
     + (age_factor(peak=30, cliff=33) x 0.20)
     + (recurrence_score x 0.20)
     + (injury_timing_mod(early=1.15x) x 0.10)

WR tier stratification shows elite producers (top 12) maintain 93% 3-year continuation at age 27 vs 10% for fringe WR4s. The gap is less extreme than RB but still meaningful — an elite WR at 29 (83%) has dynasty runway that a WR3 at 25 (62%) can't match.

TE:

H_TE = (tier_continuation(age, rank, 3yr) x 0.25)
     + (games_missed_score(penalty=0.03/game) x 0.25)
     + (age_factor(peak=31, cliff=33) x 0.20)
     + (recurrence_score x 0.20)
     + (injury_type_modifier x 0.10)

TE shows the most extreme tier stratification of any position. Top-12 TEs at 27 have 86% 3-year continuation while top-25-36 TEs have just 10% — the position is binary. Continuation weight is bumped to 25% (from 20%) to reflect this: in dynasty, a top-12 TE is a categorically different asset than a TE2.

Recommended Health Variable Weights

VariableWhat It CapturesQBRBWRTEEvidence
Tier-Adjusted Continuation3-year career runway conditional on age + production rank20%35%20%25%RB: 4.2x multiplier at age 26; TE: 8.6x at age 27
Games Missed (3yr avg)Injury proneness — chronic unavailability signal35%15%30%25%QB R²=0.29 (dominant); WR R²=0.09; TE R²=0.08
Age FactorProduction curve if active (position-specific peak/cliff)20%25%20%20%RB peak 22 cliff 28; WR peak 30; TE peak 31; QB plateau 22-37
Injury Recurrence RiskSoft tissue chronic risk + concussion severity flag15%10%20%20%Hamstring 25% recurrence; concussion -1.77 PPG impact
Injury Timing ModifierPenalty for early-season exits (acute risk signal)10%15%10%10%Full season → early exit = 2.9 PPG gap
100%100%100%100%

How to read this table: Each column sums to 100% — the weight that variable receives in the final Health sub-score for that position. Bold percentages indicate the dominant signal for that position.

Position rationale:

  • QB: Games missed dominates (35%) because QB injury history is the single strongest predictor of next-season PPG across all positions (R²=0.29). Tier continuation is lower-weighted (20%) because QB careers are naturally long.
  • RB: Tier-adjusted continuation dominates (35%) — it's the strongest dynasty signal in the entire SHAPE model. Age factor is second (25%) because the RB production cliff is sharp and early. Games missed is de-emphasized (15%) because RB injury history has weak predictive power (R²=0.03).
  • WR: Games missed (30%) and recurrence risk (20%) lead — WRs are moderately injury-sensitive and soft tissue injuries recur frequently. Continuation and age factor split the dynasty component evenly.
  • TE: Continuation (25%) is elevated because the position is binary — elite TEs persist, everyone else churns. Games missed and recurrence share equal weight (25% + 20%) reflecting moderate injury sensitivity.

Scoring Mechanics: From Data to 1-100

Each sub-score is normalized to a realistic band where no active player hits 0. The floor reflects "still in the league but maximum risk" and the ceiling reflects "optimal health profile."

Recency Weighting: Games missed, injury recurrence, and injury timing all use a 50/30/20 recency weight across the three most recent seasons. A player who tore his ACL two years ago but played 17 games last season should score higher than one who just went on IR. The formula: weighted_value = (year_N × 0.50) + (year_N-1 × 0.30) + (year_N-2 × 0.20).

Sub-Score 1 — Tier-Adjusted Continuation (range: 15-95)

score = max(15, tier_continuation_pct(position, age, rank_tier))

Direct lookup from the tier-stratified continuation table. The percentage is the score — a 22-year-old RB1 with 90% 3-year continuation scores 90. Floored at 15 because even the worst-case active player has nonzero probability of persisting.

Fallback chain when the tier×age cell has insufficient data (N<5):

  1. Age-only continuation rate for the position
  2. Position default (QB: 80, RB: 60, WR: 65, TE: 55) for rookies with no age history

Sub-Score 2 — Games Missed (range: 30-95)

recency_missed = (missed_yr0 × 0.50) + (missed_yr1 × 0.30) + (missed_yr2 × 0.20)
score = max(30, 95 - recency_missed × 4.5)

Linear penalty of 4.5 points per recency-weighted game missed. A perfectly healthy player (0 missed) scores 95. A player averaging 6 missed games scores ~68. A chronically unavailable player (14+ missed) hits the floor at 30. The penalty rate is uniform across positions — position-specific injury sensitivity is captured by the weight, not the normalization.

Recency-Weighted Games MissedScore
095
381
668
1050
14+30 (floor)

Sub-Score 3 — Age Factor (range: 20-95)

score = max(20, (median_ppg_at_age / peak_median_ppg) × 95)

Uses the position-specific empirical age curves from Section 2.4 (snap-share-filtered). The peak age for each position maps to 95; all other ages scale proportionally. This captures the production-if-active component — how much a player at this age typically produces relative to the position's best years.

PositionPeak AgeScore at PeakScore at 30Score at 35
QB28 (plateau 22-37)959288
RB2295~35~20
WR309595~55
TE319590~45

Sub-Score 4 — Injury Recurrence Risk (range: 35-95)

score = max(35, 95 - Σ(deductions per injury in last 3 seasons, recency-weighted))

Deduction schedule per injury occurrence (recency-weighted: most recent season injuries count at full value, year N-1 at 60%, year N-2 at 40%):

Injury TypeDeduction (current season)Rationale
Soft tissue (hamstring, groin, calf)-1225% recurrence rate; chronic risk
Concussion-15Worst PPG impact (-1.77); cumulative concern
Structural (ACL, Achilles)-20Season-ending; recovery uncertainty
Other (ankle, shoulder, knee non-ACL)-5Lower recurrence risk

A player with a clean 3-year injury history scores 95. A player who had hamstring issues last year (-12) and a concussion two years ago (-15 × 0.60 = -9) scores 95 - 12 - 9 = 74. The recency weighting means old injuries fade — that ACL from 3 years ago penalizes less than a fresh soft tissue concern.

Sub-Score 5 — Injury Timing (range: 50-95)

score = recency_weighted average of seasonal timing scores
Most Recent Season ExitScore
Full season (15+ games)95
Late exit (Week 14+)80
Mid-season exit (Week 9-13)65
Early exit (Week 1-8)55
Did not play (IR from prior season)50

The narrowest band of any sub-score because timing is the least differentiating variable. A player who exited early last year but played full seasons the prior two years: (55 × 0.50) + (95 × 0.30) + (95 × 0.20) = 27.5 + 28.5 + 19.0 = 75.

Final Health Score

H = (w_continuation × continuation_score)
  + (w_games_missed × games_missed_score)
  + (w_age_factor × age_factor_score)
  + (w_recurrence × recurrence_score)
  + (w_timing × timing_score)

Using the position-specific weights from the table above. The theoretical range for active players is approximately 25-95, with the bulk of NFL starters landing in the 55-90 band.

Example Calculations

Bijan Robinson — 22yo RB, RB1, clean injury history:

Sub-ScoreValueWeightContribution
Tier Continuation (22, RB, top 12)900.3531.5
Games Missed (0/yr)950.1514.3
Age Factor (RB peak)950.2523.8
Recurrence (clean)950.109.5
Timing (full season)950.1514.3
H = 93

Patrick Mahomes — 29yo QB, QB1, mostly healthy:

Sub-ScoreValueWeightContribution
Tier Continuation (29, QB, top 12)850.2017.0
Games Missed (~1/yr)900.3531.5
Age Factor (QB plateau)920.2018.4
Recurrence (minor)900.1513.5
Timing (full season)950.109.5
H = 90

Derrick Henry — 31yo RB, RB1 when active, moderate injury history:

Sub-ScoreValueWeightContribution
Tier Continuation (31, RB, top 12)250.358.8
Games Missed (~3/yr recency)810.1512.2
Age Factor (RB at 31, past cliff)350.258.8
Recurrence (foot history, fading)700.107.0
Timing (mostly full seasons)900.1513.5
H = 50

Michael Thomas — 31yo WR, outside top 24, very injury-prone:

Sub-ScoreValueWeightContribution
Tier Continuation (31, WR, top 37-48)180.203.6
Games Missed (~12/yr recency)410.3012.3
Age Factor (WR at 31, post-peak)500.2010.0
Recurrence (ankle + hamstring, recent)450.209.0
Timing (early exits, recent)550.105.5
H = 40

The spread is meaningful: Bijan (93) → Mahomes (90) → Henry (50) → Thomas (40). Two players with identical current-season PPG can have dramatically different Health scores based on age, tier, injury history, and career runway.

Key Findings

  1. QBs are the most injury-sensitive position — by far. 3-year games missed explains 29% of next-year QB PPG variance. The V1 formula massively underweights QB injury history. A QB averaging 5 missed games/year projects 3+ PPG lower than a healthy counterpart.
  2. RB career continuation is the strongest dynasty differentiator. The 3-year active rate drops from 64% at age 22 to 9% at age 30 — a 7x difference. This single metric captures more dynasty-relevant information than any PPG-based analysis.
  3. Elite production buys career runway — dramatically. Tier-stratified continuation reveals a 4.2x multiplier at RB age 26 (top 12: 92% vs top 24: 22%). TE shows the most extreme stratification: top-12 TEs at 27 have 86% 3-year rates vs 10% for TE3s. Continuation probability must be tier-adjusted, not age-only.
  4. Injury timing creates a clear gradient. Full-season players produce 12.56 PPG → late exits 10.46 → mid exits 9.72 → early exits 9.66. This graduated pattern only emerges when filtering to meaningful contributors.
  5. Hamstring/soft tissue is the most chronic injury type (25% recurrence). One in four players with these injuries will have the same type again. Concussions have the worst PPG impact (-1.77 for recurrence) despite low frequency.
  6. Age must be decomposed AND tier-adjusted for SHAPE to work across formats. A single "age factor" blends production-if-active with probability-of-being-active, losing critical dynasty information. The V2 formula uses age_factor (production curve), tier_continuation (career runway conditional on production rank), so the same SHAPE score tells a re-draft manager "he'll be healthy this year" AND tells a dynasty manager "he'll still be relevant in 3 years — and whether he's a lock or a coin flip."

Future Data Priorities

  1. Longitudinal aging study — Track the same player over multiple seasons for true year-over-year decline curves, complementing the cross-sectional cohort continuation data.
  2. Injury severity from medical reports — The current report_primary_injury field is coarse (e.g., "Knee" could be a bruise or an ACL tear). More granular severity data would sharpen the recurrence and timing analyses.
  3. Tier continuation with larger sample — Some tier x age cells have N<10, especially at older ages. As the data window extends beyond 2024, these cells will fill in and reduce noise in the tier-adjusted lookup table.

2.7 Health V2 Implementation Record

What Changed from V1 to V2

The V1 Health formula used 4 crude inputs with uniform position weights:

H = (confidence_multiplier x 100 x 0.40)
  + (age_factor x 100 x 0.25)
  + (max(0, 100 - games_missed_3yr x 6) x 0.20)
  + (max(0, 100 - seasons_injured x 15) x 0.15)

This produced 30-37% of players above 90 (target is 5%) because all 4 inputs cluster at 80-100 for most active players. confidence_multiplier (typically 0.85-1.0) and age_factor (typically 0.8-1.0) dominate 65% of the score and both default high. There was no position-specific tuning, no tier-adjusted continuation, no injury type classification, and no recency weighting.

V2 replaces this with 5 sub-components, each with position-specific weights derived from the R² analysis in Sections 2.1-2.6.

V2 Sub-Components

1. Tier-Adjusted Continuation (range 15-95)

Direct lookup from hardcoded continuation tables derived from the cohort study (Section 2.5-2.6). The table maps (position, age, production_tier) to 3-year continuation probability. Production tier is computed from the player's best recent season fantasy finish (top 12, top 24, top 36, top 48, below). Ages between table entries are linearly interpolated.

Fallback chain: tier-adjusted → age-only → position default (QB:80, RB:60, WR:65, TE:55 for rookies).

2. Games Missed — Recency-Weighted (range 30-95)

recency_missed = (missed_yr0 x 0.50) + (missed_yr1 x 0.30) + (missed_yr2 x 0.20)
score = max(30, 95 - recency_missed x 4.5)

Per-season games missed from player_injury_history, weighted by recency. A perfectly healthy player scores 95. A player averaging 6 missed games scores ~68. Chronically unavailable (14+) hits the floor at 30. Rookies default to 90 (clean pro history).

3. Age Factor — Position-Specific Curves (range 20-95)

Hardcoded lookup tables from the empirical age curves (Section 2.4, snap-share-filtered). Peak ages: QB plateau 22-37, RB 21-22 with cliff at 28, WR 29-30, TE 31. Scores interpolated between table ages.

4. Injury Recurrence Risk (range 35-95)

Injury reports from injuries_raw are classified into 5 categories with per-occurrence deductions (recency-weighted: current season 1.0x, N-1 0.6x, N-2 0.4x):

CategoryInjuriesDeduction
Soft tissueHamstring, Groin, Calf, Quad, Hip, Oblique-12
ConcussionConcussion, Head-15
StructuralACL, Achilles, Knee-20
Ankle/footAnkle, Foot, Toe, Fibula-8
OtherShoulder, Back, Wrist, etc.-5

score = max(35, 95 - Σ(deductions)). Rookies default to 90.

5. Injury Timing (range 50-95)

Derived from games_played / team_games ratio per season:

RatioClassificationScore
≥88%Full season (15+ games)95
≥76%Late exit (Week 14+)80
≥47%Mid-season exit (Week 9-13)65
>0%Early exit (Week 1-8)55
0%Did not play50

Recency-weighted average across 3 seasons (0.50 / 0.30 / 0.20).

Position-Specific Weights

Sub-ComponentQBRBWRTE
Tier Continuation20%35%20%25%
Games Missed35%15%30%25%
Age Factor20%25%20%20%
Recurrence15%10%20%20%
Timing10%15%10%10%

Percentile Normalization

After computing raw Health scores, the same percentile normalization curve used for Situation is applied per position to achieve the target distribution shape.

Data Fallback: Games Missed from Production Data

The player_injury_history table has gaps — some player-seasons are missing entirely (e.g., Aiyuk's 2024 ACL season). When a season is missing from player_injury_history, the formula falls back to historic_player_season.games_played and estimates games missed as 17 - games_played. This fallback also applies to the injury timing sub-score.

Resulting Distribution (688 Active Players, April 2026)

PositionNMeanMedianP25P75P90>90%80-90%70-80%<50%
QB9864.0705480885.1%21.4%25.5%21.4%
RB16364.1705380876.1%22.1%22.7%17.8%
WR27064.3705081887.0%18.1%26.3%13.3%
TE15764.0705280885.7%22.3%24.2%21.0%

Leaderboard Validation (Top 5 per Position)

Pos#1#2#3#4#5
QBJared Goff (98)Josh Allen (96)Baker Mayfield (93)Sam Darnold (93)Bo Nix (91)
RBAshton Jeanty (98)Bijan Robinson (97)Jahmyr Gibbs (96)James Cook (96)Javonte Williams (94)
WRDJ Moore (99)Jaxon Smith-Njigba (98)Ja'Marr Chase (97)Justin Jefferson (97)CeeDee Lamb (96)
TEPat Freiermuth (98)Trey McBride (96)Isaiah Likely (96)Cole Kmet (96)Dalton Schultz (93)

Bottom 5 RBs: James Conner (6), Aaron Jones (7), Glen Coffee (10), Le'Veon Bell (10), Alvin Kamara (10) — the tier-adjusted continuation correctly penalizes aging RBs with declining career runway.

Aiyuk case study: Dropped from 99 (V1, no injury data) to 82 (V2). The formula now catches both his missed 2025 season (0 games, 17 missed at weight 0.50) and his 2024 ACL (7 games played, 10 missed at weight 0.30) via the production fallback. Still in 80-90% tier because he's 27 (prime WR age) with elite-tier continuation, but properly penalized for 1.5 missed seasons.


Part 3: Athleticism (A) — Deep Dive

Athleticism is the most static component in SHAPE. Unlike Health (which changes every season) or Production (which updates weekly), a player's athletic profile is largely fixed at the combine — they run the 40 once, and that number follows them for their entire career. This makes it critically important for rookies and prospects where we have no NFL production data, but raises a key question: does combine performance actually predict fantasy success?

Our dataset: 1,339 players matched between combine records (2000-2024) and NFL career fantasy production. All correlations use PPR scoring and require a minimum 8 career games.

3.1 Do Individual Combine Drills Predict Fantasy Production?

We correlated each combine drill result with a player's best single-season PPG (minimum 8 games) — the peak output that represents a player's ceiling.

Combine Drill Correlation with Best Season PPG (R-squared)

Higher = stronger correlation between drill result and peak fantasy production. N=91-459 per cell. Speed Score = weight-adjusted 40 time.

But R-squared captures only linear relationships. What if elite producers cluster in a specific window rather than tracking a straight line? The scatter plots below show every player's drill result (x-axis) against their best-season PPG (y-axis), with the shaded band marking where the top 20% of PPG producers fall (10th-90th percentile range).

Loading drill scatter data...

Several patterns emerge that linear regression misses:

  • RB 40-yard dash shows a clear ceiling effect — almost no elite RB runs slower than 4.63, but plenty of fast backs still bust. The elite window is tight: 4.37-4.63s.
  • TE Speed Score has the widest elite-vs-all separation: elite TEs cluster at 95-123 while the overall median sits at 101. This confirms Speed Score as the strongest single TE predictor.
  • WR drills show nearly identical distributions between elite and non-elite producers — visually confirming the near-zero R² values. The elite window is essentially the same as the full population.
  • Bench Press for all positions shows broad, overlapping clouds with no visible separation — raw strength doesn't predict fantasy production.

The headline: individual drills are mostly noise — except for tight ends.

DrillQBRBWRTE
Speed ScoreR²=0.070R²=0.045R²=0.015R²=0.127
40-Yard Dash0.0100.0220.0030.120
Broad Jump0.0440.0120.0000.103
Vertical Jump0.0020.0010.0010.070
3-Cone0.0260.0040.0000.041
Shuttle0.0020.0010.0020.009
Bench Pressn/a0.0020.0060.004

Position-specific findings:

  • TE is the only position where athleticism meaningfully predicts fantasy output. The 40-yard dash explains 12% of peak-season PPG variance (R²=0.120, p<0.001, N=198). Broad jump adds 10.3%, vertical 7.0%. Athletic TEs — the Kelce, Kittle, Andrews types — measurably outproduce slower, less explosive alternatives.
  • QB shows weak-but-real signals in broad jump (R²=0.044) and speed score (R²=0.070). Mobile QBs who test well in explosion drills have slightly higher fantasy ceilings. The agility drills (3-cone R²=0.026) hint at escapability value.
  • RB gets almost nothing from drills. The 40-yard dash is the "best" predictor at R²=0.022 — barely above noise. NFL RB success depends far more on opportunity and vision than raw speed.
  • WR is the biggest surprise — zero drills predict. Not even the 40-yard dash (R²=0.003). The fastest WR at the combine is no more likely to be a fantasy WR1 than a 4.50 runner. Route-running, hands, and opportunity dominate WR fantasy value.

Speed Score — the best single metric:

Speed Score (Bill Barnwell formula: weight x 200 / forty^4) adjusts raw 40 time for body mass. A 225-pound TE running 4.50 is more impressive than a 175-pound WR running 4.45.

Speed Score vs Best Season PPG by Position

Speed Score = weight-adjusted 40 time (Barnwell formula). Higher = faster for their size. Each dot is one player's peak season.

QB
RB
WR
TE

Speed Score is the single best combine-derived predictor across all positions:

  • TE: R²=0.127 — fast, big TEs produce measurably more fantasy points
  • QB: R²=0.070 — mobile QBs with size have a meaningful edge
  • RB: R²=0.045 — some signal, but 95.5% of variance is unexplained
  • WR: R²=0.015 — essentially noise

3.2 Elite Window Composite — Stacking Multiple Drills

Individual drills are noisy, but what if a player lands in the elite producer window on multiple drills? We scored every combine participant on how many of their tested drills (out of 7) fall within the 10th-90th percentile range of the top-20% PPG producers at their position.

Loading composite data...

TE is the only position where stacking drills creates meaningful separation:

BucketTE Avg Best PPGTE Elite %RB Avg Best PPGRB Elite %
0-1 hits3.8610.0%11.0622.2%
2-3 hits6.2312.3%10.5719.5%
4-5 hits7.3420.5%9.5012.2%
6+ hits7.2818.2%11.2723.5%
  • TE: monotonic improvement. Going from 0-1 hits to 4-5 hits nearly doubles the average best-season PPG (3.86 to 7.34) and doubles the elite rate (10% to 20.5%). Mark Andrews, T.J. Hockenson, and Tyler Eifert all hit 7/7 windows.
  • RB/WR: U-shaped, not monotonic. The 6+ hit group slightly outperforms the middle, but the 0-1 group matches or beats them. Chris Johnson (1/4 hits, 24.6 PPG) and Ja'Marr Chase (1/6 hits, 23.7 PPG) are elite producers who tested outside the "normal" window — they were outlier athletes, not typical-window athletes.
  • QB: 6+ hits show the highest elite rate (27.9%) but with only 8 players at 0-1 hits, the comparison is noisy. Mahomes, Allen, Herbert, and Wilson all hit 6/6 — but so did Carson Wentz. Athletic floors help QBs, but don't guarantee success.

Implication for scoring: The composite hit count should carry significant weight for TE prospects (where it roughly doubles elite probability) but minimal weight for RB/WR (where it adds no predictive value over random chance). For QB, it serves as a floor check — failing most windows correlates with limited ceiling.

3.3 Composite Athleticism Score vs Career Output

Our existing athleticism_score (0-100) blends speed, burst, agility, and strength percentiles with position-specific weights. Does the composite outperform individual drills?

Composite Athleticism Score vs Best Season PPG

Position-weighted blend of speed, burst, agility, and strength percentiles. Each dot is one player's peak season.

QB
RB
WR
TE
Positionvs Career PPGvs Best Seasonvs Early Career (Yr 1-2)
QBR²=0.030R²=0.021R²=0.061
RBR²=0.015R²=0.013R²=0.014
WRR²=0.009R²=0.008R²=0.012
TER²=0.095R²=0.090R²=0.067

Key insights:

  • TE composite (R²=0.090-0.095) is weaker than Speed Score alone (R²=0.127). The composite dilutes the TE signal by including strength (bench press), which adds nothing for TE fantasy production. For TEs, Speed Score should carry more weight than the generic composite.
  • QB composite predicts early career better (R²=0.061) than career average (R²=0.030). Athletic QBs get opportunities faster — their ceiling shows up in years 1-2 before scheme/coaching/reading-defenses becomes the dominant factor.
  • RB and WR composites add almost no predictive value (R²<0.015). For these positions, athleticism is a necessary-but-not-sufficient floor, not a differentiator.

3.4 Athletic Tiers and Career Outcomes

If raw R² values are weak, do tiers tell a different story? We grouped players by athleticism percentile and tracked career outcomes.

TierQB Best PPGQB Top-24%RB Best PPGRB Top-24%WR Best PPGWR Top-24%TE Best PPGTE Top-24%
Elite (90th+)16.91100%8.1850%10.4555%7.3438%
Above Avg (75-90)13.6977%11.0052%9.0539%10.7667%
Average (50-75)11.6867%11.3154%9.5043%6.7420%
Below Avg (25-50)10.9658%9.6945%8.6734%5.8418%
Poor (<25th)10.4957%9.4542%8.0635%4.9812%

The tier gradient reveals what R² obscures:

  • QB: Every elite athlete (90th+ percentile) hit top-24 at least once. The top-24 rate drops steadily: 100% -> 77% -> 67% -> 58% -> 57%. That's a 1.75x advantage for elite vs poor athletes. Best-season PPG shows a 6.4-point spread (16.91 vs 10.49).
  • TE: The clearest tier signal. Above-average athletes average 10.76 best-season PPG with 67% top-24 rate. Poor athletes: 4.98 PPG, 12% top-24. That's a 5.6x top-24 rate multiplier — the strongest of any position. Note: elite TEs (90th+, N=8) underperform above-average (N=33), likely due to small sample and the fact that the most athletic TEs sometimes play other positions.
  • RB: Surprisingly flat. Average-tier RBs (50-75th) actually have the highest best-season PPG (11.31) and top-24 rate (54%). Elite athletes are slightly worse (8.18, 50%). RB success is driven by opportunity, not athleticism.
  • WR: Mild gradient. Elite WRs have 55% top-24 rate vs 35% for poor athletes — a 1.6x multiplier. Less extreme than QB or TE.

3.5 Biometric Profile

Do height, weight, and BMI predict fantasy production independent of athletic testing?

MetricQBRBWRTE
HeightR²=0.010R²=0.021R²=0.001R²=0.001
WeightR²=0.022R²=0.024R²=0.004R²=0.004
BMIR²=0.011R²=0.002R²=0.001R²=0.011
Speed ScoreR²=0.070R²=0.045R²=0.015R²=0.127
HaSSR²=0.078R²=0.055R²=0.017R²=0.140

Biometrics alone predict almost nothing (all R²<0.025). Height, weight, and BMI in isolation are not useful for fantasy projection.

However, Height-adjusted Speed Score (HaSS) — which combines size with speed — is the single strongest predictor for TEs (R²=0.140) and adds meaningfully for QBs (R²=0.078) and RBs (R²=0.055). Being big AND fast matters; being just big does not.

3.6 Combine Participation Effect

Players who participate in the NFL Combine have better career outcomes than those who don't — but the averages mask a fascinating two-population story among non-attendees.

Loading distribution data...
PositionCombine (Mean Best PPG)No Combine (Mean Best PPG)No Combine >15 PPGNo Combine <5 PPG
QB14.312.833.3%7.7%
RB11.89.718.5%24.5%
WR10.59.719.3%19.6%
TE8.06.53.3%37.3%

The non-combine population is bimodal — not uniformly weak:

  • The bulk (uninvited): Most non-attendees are late-round or UDFA players who weren't invited. At RB, 24.5% of non-combine players never cracked 5 PPG. At TE, it's 37.3%. These are replacement-level players with limited NFL careers.
  • The tail (opted out): A meaningful minority of non-attendees are elite producers who chose to skip the combine because their draft stock was already locked. Marshall Faulk (32.4 PPG), Priest Holmes (31.5), Cooper Kupp (25.9), Tyreek Hill (23.5), Randy Moss (24.1), Antonio Gates (18.8), Peyton Manning (22.5). These aren't combine failures — they're combine skippers.
  • RB and WR show the clearest bimodality: Both positions have ~19-24% of non-attendees below 5 PPG AND ~18-19% above 15 PPG, with a relative valley in between. The combine attendee distribution is more normally distributed around a single peak.
  • TE non-attendees are heavily bottom-weighted: 37.3% below 5 PPG, only 3.3% above 15 PPG. Athletic TEs almost always attend the combine because their athleticism is their primary selling point. Non-combine TEs are overwhelmingly converted players or blocking specialists.

Implication for scoring: Missing combine data should not receive a blanket penalty. A first-round pick without combine numbers (likely opted out) is fundamentally different from a 7th-rounder without combine numbers (likely not invited). The SHAPE score should condition the combine participation signal on draft capital — early-round non-attendees get no penalty, while late-round non-attendees receive a mild negative adjustment.

3.7 Athletic Profile Shelf Life

The critical dynasty question: does combine data still matter 4+ years into a career, or does production history make it irrelevant?

PositionR² Years 1-2R² Years 4+Decay
QB0.0890.028-69%
RB0.0150.011-28%
WR0.0020.000-88%
TE0.0630.074+18%

Athleticism decays as a predictor — except for TEs:

  • QB: Athleticism explains 8.9% of early-career PPG but only 2.8% by year 4+ — a 69% decay. Athletic QBs get early opportunities, but by their mid-career, reading defenses and arm talent dominate. Combine data is mostly useful for projecting rookie QBs.
  • WR: Near-complete decay (88%). By year 4, athleticism explains essentially 0% of WR PPG. Route-running mastery, chemistry with QB, and target share have completely overtaken raw speed.
  • RB: Modest decay (28%). Athleticism was already a weak predictor, and it stays weak. RB success is about scheme fit and volume at every career stage.
  • TE: The outlier — athleticism actually gains predictive power over time (+18%). R² rises from 0.063 in years 1-2 to 0.074 in years 4+. This makes sense: athletic TEs need time to learn blocking assignments and route trees, but once they do, their athletic advantage becomes a sustained production edge. Kelce didn't break out until year 3. Kittle was a 5th-round pick who needed scheme fit. Athletic TEs are slow-burn dynasty assets.

3.8 Athleticism Summary

What We Tested

Six analyses across 1,339 combine-matched players (2000-2024), correlating athletic testing with career fantasy production (PPR scoring, minimum 8 career games).

Sub-ComponentBest MetricKey FindingStrength
Individual DrillsSpeed Score (wt-adj 40)TE R²=0.127; QB R²=0.070; RB/WR < 0.05Strong for TE only
Composite ScoreAthleticism (0-100)TE R²=0.090; QB R²=0.030; RB/WR < 0.015Moderate for TE
Athletic TiersPercentile bucketsQB elite: 100% top-24 rate; TE 5.6x multiplierGradient for QB/TE
BiometricsHaSSTE R²=0.140; QB R²=0.078; others weakStrong for TE
Shelf LifeEarly vs Late R²QB decays 69%; WR 88%; TE gains 18%TE is sustained
ParticipationCombine vs none0.6-2.1 PPG gap (confounded by draft capital)Context signal

Why Athleticism Weight Should Vary by Position AND Career Stage

The data makes a clear case for position-specific AND career-stage-dependent weighting:

  • For rookies/prospects (years 0-2): Athleticism is one of the few signals available. Weight it meaningfully for QB (R²=0.089 early) and TE (R²=0.063 early), minimally for RB/WR.
  • For veterans (years 4+): Athleticism is irrelevant for QB/WR (R²<0.03). For TE, it increases in value (R²=0.074). For RB, it was never useful.
  • For SHAPE as a universal score: The Athleticism component should decay over time for QB/WR as production data accumulates, but remain stable for TE.

Recommended A Score Approach

Unlike Health (which uses 5 sub-scores), Athleticism scoring is simpler:

Primary metric: Height-adjusted Speed Score (HaSS) — the best single predictor across positions (TE R²=0.140, QB R²=0.078, RB R²=0.055). Use position-relative percentile.

Secondary metric: Composite athleticism score — adds burst and agility dimensions beyond pure speed.

Career-stage decay factor: Multiply the Athleticism score by a decay function that reduces its influence as NFL seasons accumulate:

decay(years_exp) = max(0.3, 1.0 - (years_exp × decay_rate))
PositionDecay RateA at Yr 0A at Yr 3A at Yr 6Rationale
QB0.10/yr100%70%40%R² drops 69% by year 4
RB0.08/yr100%76%52%Already weak; modest decay
WR0.12/yr100%64%30% (floor)R² drops 88% — fastest decay
TE0.03/yr100%91%82%R² actually increases — minimal decay

A 6th-year WR keeps only 30% of their combine-era A score because production data has fully overtaken it. A 6th-year TE keeps 82% because their athletic profile remains predictive.

Effective Athleticism:

A_effective = A_raw × decay(years_exp, position)

Where A_raw is a 0-100 score derived from:

  • 60% HaSS percentile (or Speed Score if height unavailable)
  • 40% Composite athleticism score
  • Floor of 25 for players with no combine data (they're in the league — not zero)

Key Findings

  1. TE is the only position where athleticism meaningfully predicts fantasy success. Speed Score R²=0.127, HaSS R²=0.140. Above-average athletic TEs have a 5.6x top-24 rate vs poor athletes. This is the strongest position-specific athletic signal in the study.
  2. WR combine performance is essentially useless for fantasy projection. No individual drill exceeds R²=0.006. The composite adds R²=0.008. By year 4, athleticism explains 0% of WR PPG. Route-running, hands, and opportunity completely dominate.
  3. QB athleticism matters early, then decays. R²=0.089 in years 1-2 drops to 0.028 by year 4+ (69% decay). Every elite-athlete QB hit top-24 at least once, but sustained success requires non-athletic skills.
  4. RB athleticism is a necessary floor, not a differentiator. Average-tier athletes (50-75th percentile) actually produce the best fantasy outcomes. Speed doesn't separate RBs — scheme and volume do.
  5. Height-adjusted Speed Score (HaSS) outperforms every other combine metric. By accounting for both size and speed, it captures the "big and fast" archetype that succeeds at TE and QB. Raw drill results lose this context.
  6. Athleticism should decay with experience — except for TE. The A component in SHAPE should automatically reduce its influence as NFL production data accumulates, with position-specific decay rates. TEs are the exception: their athletic advantage is sustained and potentially increasing.

Future Data Priorities

  1. NGS in-game tracking validation — Our ngs_athleticism_score blends 30% combine with 70% in-game NGS data (separation, RYOE, arm distance). The R² of this blended score vs fantasy output should be compared to combine-only to validate the 30/70 split.
  2. Route-running proxy metrics — Since WR combine data is useless, investigate whether NGS separation and cushion metrics serve as route-running proxies that actually predict WR fantasy output.
  3. Combine drill interaction effects — Individual drills were tested independently. A player who is 90th percentile in BOTH speed and burst may have a nonlinear advantage not captured by linear R².

3.9 Athleticism V2 Implementation Record

What Changed from V1 to V2

The V1 Athleticism formula had two critical bugs and a design flaw:

Bug 1 — Combine data never matched. The player_combine_profile table uses BSA UUIDs (e.g., f5e0c5c7-828e-48f1-afc7-86c955ee284b) as player_id, while the main scoring loop uses GSIS IDs (e.g., 00-0039337). The lookup combine_map.get(pid) returned None for every player. Combine data was never used.

Bug 2 — NGS blended_score dominated. With combine data missing, ~100% of players fell through to ngs_by_player (NGS blended_score), which is a percentile-like metric centered at 50.5 with limited spread (18-88). This compressed all athleticism scores into a narrow band around 50.

Design flaw — No career-stage decay. The article shows athleticism predictive power decays 69% for QB and 88% for WR by year 4+, but actually gains 18% for TE. V1 applied the same formula regardless of experience.

V2 Implementation

Combine data matching (two-strategy approach):

  1. bsa_id → gsis_id via bsa_player_id table (557 skill-position matches)
  2. Name + position matching against players_master for profiles without bsa_id (fallback)

A_raw scoring (0-100):

A_raw = (speed_percentile x 0.60) + (athleticism_score x 0.40)

Where speed_percentile comes from the combine profile's pre-computed field. Falls back to speed_score → rough percentile if needed.

Fallback chain: Combine data → NGS blended_score → predraft athleticism → floor of 25.

Career-stage decay:

decay = max(0.30, 1.0 - years_exp x rate)
A_effective = 50 + (A_raw - 50) x decay
PositionDecay RateYr 0Yr 3Yr 6Rationale
QB0.10/yr100%70%40%R² drops 69% by year 4
RB0.08/yr100%76%52%Already weak signal; modest decay
WR0.12/yr100%64%30% (floor)R² drops 88% — fastest decay
TE0.03/yr100%91%82%R² actually increases — minimal decay

The decay blends toward 50 (neutral), not 0. A 6th-year WR with a 90 combine score retains 50 + (90-50) x 0.30 = 62 — still above average but the signal is heavily dampened.

Percentile normalization applied after raw scoring, identical to Situation and Health.

Resulting Distribution (688 Active Players, April 2026)

PositionNMeanMedianP25P75P90>90%80-90%70-80%<50%
QB9864.0715480885.1%21.4%24.5%20.4%
RB16364.0705380885.5%20.2%25.2%22.1%
WR27064.0705581875.9%20.0%24.4%20.4%
TE15764.0705480876.4%21.0%22.9%21.0%

Leaderboard Validation (Top 5 per Position)

Pos#1#2#3#4#5
QBAnthony Richardson (98)Brady Cook (96)Kedon Slovis (94)Joe Milton (93)Tyler Shough (91)
RBJaydon Blue (98)Isaac Guerendo (97)Bhayshul Tuten (96)Jaylen Wright (96)Keaton Mitchell (94)
WRMatthew Golden (99)Xavier Worthy (98)Tejhaun Palmer (97)Tai Felton (97)Chimere Dike (96)
TEDevin Culp (98)Davis Allen (97)Albert Okwuegbunam (96)Zack Kuntz (95)Pat Freiermuth (93)

Notable: Kyle Pitts (91) correctly ranks as an elite athletic TE. Anthony Richardson (98) and Justin Fields (89) are the premier athletic QBs. Xavier Worthy (98) with his 4.21 forty dominates WR athleticism. Shedeur Sanders (6) correctly scores as a non-athletic pocket passer.


Part 4: Production (P) — Deep Dive

The Production score captures gross output — total yards, touchdowns, receptions, and games played. The hypothesis: past production is the single best predictor of future production, but the signal decays sharply with age, and the metric mix that matters varies by position. This section does NOT cover efficiency metrics (yards per carry, catch rate, EPA) — those belong in the Efficiency (E) section.

Sub-Component Inputs

Sub-ComponentData Source
Season Fantasy Points (half-PPR)players_raw (computed from yards + TDs + receptions)
Position-Specific Yardageplayers_raw (pass/rush/rec yards)
Position-Specific Touchdownsplayers_raw (pass/rush/rec TDs)
Volume Metricsplayers_raw (carries, targets, receptions)
Games Playedplayers_raw (game count)
College Productioncollege_stats_season (pass/rush/rec stats)
Conference Pedigreepre_draft_profile.college_conference

4.1 NFL Production Metrics — Which Stats Predict Next-Season Output?

Dataset: 5,560 player-seasons (QB/RB/WR/TE, 2015-2024, regular season) from players_raw, aggregated to season level. R² computed as current-season metric predicting next-season fantasy PPG (half-PPR).

Individual Metric R² — Current Season vs. Next-Season Fantasy PPG

MetricQBRBWRTE
Fantasy Points0.4510.4400.5270.529
Pass Yards0.409
Pass TDs0.408
Interceptions0.222
Rush Yards0.2200.395
Rush TDs0.306
Carries0.366
Rec Yards0.2840.5250.533
Rec TDs0.1490.4030.358
Receptions0.2810.5010.489
Targets0.4970.489
Games Played0.3830.1860.2400.260
Loading production data...
AI Analysis

Fantasy points (half-PPR) is the strongest single predictor for QBs and RBs, while receiving yards slightly edges it for WRs and TEs. This confirms that total production matters more than any individual yardage type — the composite captures information across all stat categories. Games played is a weaker but still significant predictor (R² 0.19-0.38), reflecting that availability is a baseline signal baked into gross production.

4.2 Season Decay — How Quickly Does Production Signal Fade?

Not all production history is created equal. A monster 2024 season predicts 2025 far better than a monster 2021 season does. The question is: how fast does the signal decay?

Fantasy PPG R² by Season Lag

LagQBRBWRTE
N-1 (most recent)0.3890.4340.5140.507
N-20.3600.3140.4210.395
N-30.2690.2820.3640.321
N-40.2030.1920.3150.304

R² drops monotonically for every position — the most recent season always carries the strongest signal. The decay is steepest for RBs (R² drops 56% from N-1 to N-4), reflecting their volatile, scheme-dependent nature. WRs and TEs retain signal the longest, consistent with receivers having longer career arcs.

Proposed vs. Fitted Decay Weights

We propose decay weights of 1.0 / 0.6 / 0.3 / 0.1 for seasons N through N-3. How do these compare to the statistically optimal weights from multivariate regression?

PositionProposedFitted (Normalized)Proposed R²Fitted R²
QB1.0 / 0.6 / 0.3 / 0.11.0 / 0.81 / 0.23 / 0.000.4000.407
RB1.0 / 0.6 / 0.3 / 0.11.0 / 0.27 / 0.17 / -0.130.4810.527
WR1.0 / 0.6 / 0.3 / 0.11.0 / 0.50 / 0.05 / -0.110.5280.566
TE1.0 / 0.6 / 0.3 / 0.11.0 / 0.40 / -0.06 / 0.010.5110.558
AI Analysis

The fitted weights reveal that seasons N-3 and N-4 carry essentially zero or negative weight — old production is noise, not signal. The proposed weights overvalue old data slightly (0.3 and 0.1 for N-2 and N-3), but the R² cost is modest (1-5% gap vs. optimal). RBs show the sharpest drop: the fitted N-2 weight is just 0.27 vs. our proposed 0.6, confirming that RB production history beyond last season is largely disposable. For practical simplicity, we retain the proposed schedule — the R² penalty is small and the weights are easier to reason about.

0.527
WR Composite R² (Decay-Weighted)

4.3 College Production & Conference Pedigree

For rookies and second-year players, NFL production history is thin or absent. College production fills the gap — but 1,200 rushing yards at Alabama and 1,200 rushing yards at Ball State are not equivalent signals. We need a conference pedigree adjustment.

Methodology: For 328 drafted players (2016-2022) with both college season stats and at least 3 NFL games, we computed:

  • College PPG: Fantasy points from last 2 college seasons (most recent weighted 1.0, prior weighted 0.5)
  • NFL Career PPG: First 3 NFL seasons, half-PPR scoring
  • Translation Rate: How well college production converts to NFL output, grouped by conference

Conference Pedigree Table

ConferenceNMean Col PPGMean NFL PPGTranslationTierMultiplier
SEC113167.17.040.04221.11
Big Ten62143.56.080.04220.95
ACC73168.86.160.03720.97
Big 1229194.05.610.02930.88
AAC17202.16.260.03120.98
Sun Belt13207.56.100.02920.96
MAC9188.55.670.03030.89
C-USA6262.04.120.01630.65
Loading conference data...

The SEC leads with the highest mean NFL PPG (7.04) among conferences with significant sample sizes. The Big Ten shows the highest translation rate per college point despite lower raw college production, suggesting their players are more efficiently translated to the NFL.

Conference Adjustment Impact on Prediction

PositionRaw R²Adjusted R²Improvement
QB (N=39)0.1260.179+0.053
RB (N=94)0.2230.220-0.003
WR (N=135)0.0410.081+0.041
TE (N=58)0.1020.094-0.008

Conference adjustment meaningfully improves prediction for QBs (+5.3%) and WRs (+4.1%) but has negligible effect on RBs and TEs. This makes sense: QB and WR production is more conference-dependent (strength of opponent secondaries, pace of play), while RB production is more scheme/volume-dependent regardless of conference.

AI Analysis

College production overall is a weak predictor of NFL success compared to NFL production itself (R² 0.04-0.22 vs 0.43-0.53). This validates our decay schedule: college seasons get weights of 0.15 / 0.08 / 0.03 / 0.01 — small because the signal is real but modest. The conference adjustment adds marginal lift for QBs and WRs, justifying its inclusion as a multiplier rather than a standalone component.

4.4 Composite Production Score

The composite Production score combines decay-weighted NFL production with conference-adjusted college production for players with limited NFL history.

Formula:

P_NFL = weighted_avg(PPG_N * 1.0, PPG_N-1 * 0.6, PPG_N-2 * 0.3, PPG_N-3 * 0.1)
P_College = conf_multiplier * weighted_avg(college_season_pts * [0.15, 0.08, 0.03, 0.01])
  • 3+ NFL seasons: P = P_NFL (college production fully deprecated)
  • 1-2 NFL seasons: P = blend of P_NFL + small P_College component
  • Rookies (0 NFL seasons): P = P_College only

Final score normalized to 0-100 via position-specific percentile ranking.

Composite R² vs. Next-Season Fantasy PPG

PositionComposite R²NFL-Only R²N
QB0.3680.417572
RB0.4040.456992
WR0.4770.5311,525
TE0.4720.508833

R² by NFL Experience Level

ExperienceQBRBWRTE
0 (Rookie)0.0530.0940.1280.076
1 year0.2760.4090.4300.323
2 years0.4680.4710.5090.455
3 years0.5470.5250.6110.501
4+ years0.4600.5490.5430.575
AI Analysis

The composite R² is lower than NFL-only R² because the composite includes rookies where college production is a weak signal. This is by design — the composite provides coverage for all players, not just veterans with extensive NFL history. A rookie WR with no NFL data still gets a production score (R²=0.128 from college), which is better than no signal at all. The production score's predictive power grows rapidly with each additional NFL season, plateauing around 3 years of history (R² 0.50-0.61).

0.128
Rookie WR Production R² (College Only)
0.611
3-Year WR Production R² (Full History)

4.5 Production Summary

Key Findings:

  1. Fantasy points (half-PPR) is the best single production metric for predicting next-season output (R² 0.44-0.53), confirming that a composite measure outperforms any individual yardage type.
  2. Production signal decays sharply — season N-1 explains 2-3x more variance than season N-3. The proposed decay schedule (1.0 / 0.6 / 0.3 / 0.1) closely tracks the statistically optimal weights.
  3. RB production decays fastest (fitted N-2 weight = 0.27) while WR/TE production is the most stable across seasons.
  4. College production is a weak but real signal (R² 0.04-0.22 by position), most valuable for QBs and WRs where conference adjustment provides meaningful lift.
  5. Conference pedigree matters for QBs and WRs (+4-5% R² improvement) but not for RBs and TEs, likely because rushing production is more scheme-dependent than conference-dependent.
  6. The composite score covers all players from rookies (R² ~0.05-0.13) through veterans (R² ~0.50-0.61), scaling gracefully with available data.
  7. Games played is an underrated signal (R² 0.19-0.38) — availability compounds production, and players who played more games tend to sustain higher output.
  8. Receiving metrics dominate for WR/TE (receiving yards R² = 0.53 for TEs), while QBs are best predicted by total passing yards + TDs, and RBs by rushing yards + carries.

4.6 Production V2 Implementation Record

What changed from V1 to V2:

V1 used a 3-season weighted average with weights [0.50, 0.30, 0.20], computed a percentile rank against only the latest season's PPG values, added a production_trend_3yr * 3 bonus (clamped to ±10), and used prospect_score * 0.60 + college_production_score * 0.40 for rookies without conference adjustment. No pct_to_target normalization was applied — raw percentiles went directly to 0-100 scores. This produced a bimodal distribution: QB mean 53.5 with 36.7% below 50, TE mean 66.9 with 23.6% above 90.

V2 Implementation:

  1. Decay weights aligned to article methodology: Changed from [0.50, 0.30, 0.20] over 3 seasons to [1.0, 0.6, 0.3, 0.1] over 4 seasons (N through N-3), matching the empirically validated schedule from Section 4.2.

  2. Percentile base uses weighted PPG: V1 ranked players against only the latest season's raw PPG. V2 pre-computes each player's decay-weighted PPG (weighted_ppg_map) and builds the percentile distribution from these weighted values (all_weighted_ppg), ensuring the ranking reflects the same multi-season signal used in the score.

  3. Trend bonus removed: The production_trend_3yr * 3 bonus was not part of the documented methodology and added arbitrary ±10 point shifts based on a single advanced metric field. The decay-weighted PPG already captures trajectory — a player whose recent season is much better than older seasons will naturally score higher via the 1.0/0.6/0.3/0.1 weighting.

  4. Conference pedigree for rookies: Rookies now receive a conference multiplier from the validated pedigree table (Section 4.3): SEC 1.11, Big Ten 0.95, ACC 0.97, Big 12 0.88, AAC 0.98, etc. The rookie formula blends prospect_score * 0.50 + college_production_score * 0.50 then multiplies by the conference factor, giving SEC prospects a ~11% boost and small-conference players an appropriate discount.

  5. pct_to_target normalization added: Same percentile-to-target mapping applied to S, H, and A is now applied to Production, enforcing the target distribution shape (P20→50, P50→70, P75→80, P95→90).

  6. Fetch range expanded: Data fetch window changed from season - 3 to season - 4 to support the 4-season decay schedule.

Data Sources (unchanged from V1):

  • historic_player_season: player_id, position, team, season, games_played, fantasy_points_ppr
  • pre_draft_profile: overall_prospect_score, college_production_score, college_conference (new field)

Resulting Distribution (2025 active players):

PositionNMeanMedianP25P75P90>90%80-9070-80<50%
QB9864.9705080886.1%19.4%25.5%9.2%
RB16364.5705380876.1%20.2%24.5%12.3%
WR27064.7705480886.3%20.0%24.8%10.4%
TE15765.0705380885.7%20.4%25.5%8.9%

All positions hit target: ~5-6% above 90, ~20% in 80-90, ~25% in 70-80, median 70. The <50% rate is lower than other pillars (9-12% vs 18-22%) because most active roster players have some NFL production history, and rookies with college data receive reasonable scores via conference-adjusted prospect blending.


Part 5: Efficiency (E) — Deep Dive

The Efficiency score captures how well a player converts opportunities into production — yards per carry, yards per target, EPA, catch rate, and advanced tracking metrics. The hypothesis: efficiency metrics isolate repeatable skill from volume-dependent output, providing a complementary signal to the Production (P) score. This section does NOT cover situational factors (covered in S) or gross volume (covered in P).

Sub-Component Inputs

Sub-ComponentData Source
Basic Per-Touch Ratesplayers_raw (yards/carry, yards/target, catch rate)
EPA Percentileplayer_efficiency_metrics (expected points added)
Success Rateplayer_efficiency_metrics (% of plays with positive EPA)
YAC Above Expectedngs_receiving (Next Gen Stats tracking)
Rush Yards Over Expectedngs_rushing (RYOE per attempt)
aDOT / RZ Target Shareplayer_advanced_metrics (depth + red zone usage)

5.1 Why Efficiency Matters Beyond Volume

Production tells you how much a player produces; efficiency tells you how well. A running back with 1,200 rushing yards on 350 carries (3.4 YPC) is a fundamentally different asset than one with 1,200 yards on 250 carries (4.8 YPC). The efficient player is less dependent on volume — and volume depends on coaching decisions, not player skill.

The key question: does efficiency add predictive signal beyond what volume already captures?

Efficiency vs. Volume — Predictive Power Comparison

PositionVolume-Only R²Efficiency-Only R²Combined R²N
QB0.3150.1810.326355
RB0.4210.1670.421382
WR0.5380.3640.538540
TE0.5350.3630.536248
AI Analysis

Volume (total fantasy points) dominates efficiency for predicting next-season output — the combined R² barely improves over volume alone. This is expected: volume is correlated with opportunity, which is itself sticky (good players keep getting touches). But efficiency still matters for two reasons: (1) it identifies players outperforming their volume (breakout candidates), and (2) it's the better signal when volume changes dramatically (new team, injury return, rookie year). The E component's value is differential — it's most useful where P is uncertain.

5.2 Core Efficiency Metrics — Which Per-Touch Rates Predict Next-Season Output?

We start with the simplest efficiency metrics derivable from box scores — yards per attempt, yards per carry, catch rate, TD rates. For each metric, we compute R² against next-season fantasy PPG (half-PPR).

Dataset: 5,560 player-seasons (QB/RB/WR/TE, 2015-2024, regular season), minimum thresholds applied (QB ≥ 100 attempts, RB ≥ 40 carries, WR/TE ≥ 20 targets).

Basic Efficiency R² — Current Season vs. Next-Season Fantasy PPG

MetricQBRBWRTE
Yards/Attempt0.129
Completion %0.068
TD Rate0.181
INT Rate0.079
Yards/Carry0.053
Yards/Target0.0120.0730.082
Catch Rate0.0310.001
TD/Carry0.022
TD/Target0.0220.003
Loading efficiency data...
AI Analysis

Basic efficiency metrics are weak individual predictors compared to volume (R² 0.01-0.18 vs. 0.40-0.54 for fantasy points). QB TD rate is the strongest basic efficiency signal (R²=0.181) — QBs who throw TDs at a high rate tend to sustain elevated output. For RBs, yards per carry is modest (R²=0.053), confirming the "replaceable" nature of rushing efficiency. WR/TE yards per target (R²=0.07-0.08) captures some receiving skill but is noisy. Basic box-score efficiency is not enough — we need advanced metrics.

5.3 EPA & Success Rate — The Advanced Tier

Expected Points Added (EPA) measures the value a player adds per play relative to league average, accounting for down, distance, and field position. Success rate measures what percentage of a player's plays generate positive EPA — a consistency metric.

Advanced Efficiency R² — vs. Next-Season Fantasy PPG

MetricQBRBWRTE
Yards/Attempt Pct0.118
EPA Percentile0.0280.0870.0720.032
Success Rate Pct0.0360.0460.0770.035
Yards/Target Pct0.0930.092
Yards/Carry Pct0.069
EPA/Target0.0750.010
EPA/Carry0.052
Loading efficiency data...
0.118
QB Yards/Attempt Pct R² (Strongest QB Advanced Metric)
AI Analysis

Yards per attempt percentile is the strongest advanced predictor for QBs (R²=0.118), outperforming EPA percentile (R²=0.028) and success rate (R²=0.036) individually. For skill positions, yards per target percentile edges out raw EPA (R²=0.093 for WR, 0.092 for TE). EPA percentile alone is modest (R² 0.03-0.09) — it captures play quality but is noisy at the season level. The composite approach of blending these individual metrics outperforms any single advanced metric.

5.4 Position-Specific Advanced Metrics

Beyond EPA, position-specific tracking metrics capture different dimensions of efficiency.

WR/TE Advanced Metrics

MetricWR R²TE R²Description
RZ Target Share0.3640.363Share of team's red zone pass attempts
YAC Above Expected0.0330.082Yards after catch vs. model prediction (NGS)
aDOT0.0000.081Average depth of target

RB Advanced Metrics

MetricDescription
RZ Target Share0.167Share of team's red zone usage
RYOE/Attempt0.097Rush yards over expected per carry (NGS)
3rd Down Rate0.086Share of team's 3rd-down passes
AI Analysis

Red zone target share is by far the strongest efficiency-adjacent predictor (R²=0.36 for WR/TE, 0.17 for RB). This metric is part-efficiency, part-opportunity — players who earn red zone looks tend to be trusted in high-leverage situations, and that trust persists. For RBs, RYOE (R²=0.097) captures rushing skill independent of blocking quality — the closest we get to isolating RB talent. WR aDOT has essentially zero predictive power (R²=0.000) — deep vs. short routes don't predict future fantasy output because role determines depth, not skill.

Loading efficiency data...

5.5 Efficiency Decay — Does Skill Persist Better Than Volume?

Production decays sharply with age (N-3 and N-4 seasons carry near-zero weight). Does efficiency behave differently? We measure R² of the efficiency composite at lag 1-4 years vs. current-season fantasy PPG.

Efficiency Composite R² by Season Lag

LagQBRBWRTE
N-10.0860.0860.1100.064
N-20.1070.0440.1020.045
N-30.1000.0520.0980.075
N-40.1280.0440.1320.094
AI Analysis

Efficiency shows a remarkably flat decay curve — the R² at N-4 is similar to or even higher than N-1 for QBs (0.128 vs 0.086) and WRs (0.132 vs 0.110). This is the opposite of production, where N-4 is essentially noise. The interpretation: efficiency captures stable skill traits (arm talent, route running, vision) that persist across seasons, while production reflects opportunity that shifts year-to-year. This validates using flatter year weights for efficiency (0.40/0.25/0.20/0.10/0.05) compared to production's steep decay (1.0/0.6/0.3/0.1). RB efficiency decays fastest, consistent with the position's volatility and scheme-dependence.

Loading efficiency data...

5.6 Composite Efficiency Score

The composite Efficiency score uses position-specific weights validated by the R² analysis above.

WR/TE Efficiency Weights

ComponentWeightSource
EPA Percentile25%player_efficiency_metrics
YAC Above Expected20%ngs_receiving
Success Rate Pct15%player_efficiency_metrics
aDOT15%player_advanced_metrics
RZ Target Share15%player_advanced_metrics
Yards/Target Pct10%player_efficiency_metrics

RB Efficiency Weights

ComponentWeightSource
RYOE/Attempt25%ngs_rushing
EPA Percentile25%player_efficiency_metrics
Success Rate Pct15%player_efficiency_metrics
Yards/Carry Pct15%player_efficiency_metrics
RZ Usage10%player_advanced_metrics
3rd Down Rate10%player_advanced_metrics

QB Efficiency Weights

ComponentWeightSource
EPA Percentile40%player_efficiency_metrics
Yards/Attempt Pct30%player_efficiency_metrics
Success Rate Pct30%player_efficiency_metrics

Formula:

E = Σ(year_k) year_weight_k × Σ(component_m) weight_m × normalized_value_m
Year weights: [0.40, 0.25, 0.20, 0.10, 0.05] for seasons N through N-4

All component values normalized to 0-100 scale. Final score is 0-100 via position-specific percentile ranking.

Composite Efficiency R² vs. Next-Season Fantasy PPG

PositionComposite R²N
QB0.091320
RB0.156393
WR0.170853
TE0.175344
Loading efficiency data...
0.175
TE Composite Efficiency R²
AI Analysis

The composite efficiency score achieves R² of 0.09-0.18 across positions — substantially weaker than production's R² of 0.37-0.53 but providing complementary signal. TE and WR benefit most from the composite (R²=0.175 and 0.170), driven by the strong RZ target share component. QB efficiency composite is weakest (R²=0.091) despite using individualized components (40% EPA, 30% YPA, 30% Success Rate), reflecting that QB fantasy production is heavily driven by volume (pass attempts) rather than per-attempt efficiency. The E score's value is greatest for distinguishing between players with similar volume — two WRs with 150 targets but different efficiency profiles will have meaningfully different expected outcomes.

5.7 Scoring Composition — Where Do Fantasy Points Come From?

Not all fantasy points are created equal. A QB who scores through pass TDs vs. rushing yards, or a RB who earns points through receptions vs. rushing TDs, represents fundamentally different fantasy profiles. Understanding the composition of fantasy scoring reveals which types of production are most predictive — and whether college scoring patterns carry signal for rookies.

Average Fantasy Point Breakdown by Position (half-PPR)

CategoryQBRBWRTE
Pass Yards62.0%
Pass TDs36.1%
Rush Yards9.9%45.9%1.9%0.3%
Rush TDs6.1%18.0%0.7%0.4%
Receptions12.8%22.4%24.6%
Rec Yards19.4%55.9%51.8%
Rec TDs5.2%19.5%23.5%
Loading scoring data...

Scoring Category R² — Raw Points by Type vs. Next-Season PPG

CategoryQBRBWRTE
Pass Yards0.409
Pass TDs0.408
Rush Yards0.2200.395
Rush TDs0.1660.306
Receptions0.2810.5010.489
Rec Yards0.2840.5250.533
Rec TDs0.1490.4030.358
AI Analysis

Receiving production is the strongest predictor for non-QBs. RB receiving yards (R²=0.284) predict better than rushing TDs (R²=0.149) — backs who catch passes sustain value better than TD-dependent rushers. For WR/TE, receiving yards dominate (R²=0.53) followed closely by receptions (R²=0.49), while receiving TDs are less stable (R²=0.36-0.40). For QBs, passing yards and passing TDs predict equally well (~R²=0.41), but rushing production adds meaningful signal (R²=0.22) — dual-threat QBs have a more diversified and sustainable scoring profile.

Scoring Share R² — Does HOW You Score Matter?

Beyond raw category points, does the percentage of fantasy points from each category predict future output? For example, does a RB who gets 30% of his points from receiving vs. 10% project differently?

Share MetricQBRBWRTE
Pass Yard %0.090
Reception %0.0300.0090.016
Rec Yard %0.0170.0040.015
Rush Yard %0.0050.0040.013
Total TD %0.0160.0020.002
AI Analysis

Scoring shares are extremely weak predictors (R² < 0.03 across the board). The proportion of points from each category tells you about a player's role, not their talent. A RB with a high reception share is slightly more likely to sustain fantasy value (R²=0.030), consistent with the "receiving backs are more valuable" narrative — but the signal is marginal. What matters is how many points you score, not what type. The one exception: QBs who derive a higher share from passing yards (vs. TDs) tend to sustain output (R²=0.090), suggesting volume passers have more predictable baselines than TD-dependent QBs.

College Scoring Composition — Rookie Signal

For rookies with no NFL history, does college scoring composition predict NFL career PPG? We scored college stats using half-PPR weights and tested against career PPG in the first 3 NFL seasons.

CategoryQB (N=41)RB (N=105)WR (N=165)TE (N=66)
Rec Yards0.0830.0420.154
Rec TDs0.1290.0450.038
Receptions0.0590.0250.139
Rush Yards0.0890.032
Rush TDs0.0890.021
Pass TDs0.047
AI Analysis

College scoring composition provides meaningful rookie signal for TEs and receiving RBs. TE college receiving yards predicts NFL career PPG at R²=0.154 — the strongest college-to-NFL scoring composition link. RB college receiving TDs (R²=0.129) also stands out: backs who scored through the passing game in college translate to the NFL more reliably than pure rushers. For WRs, college scoring is weaker (R²=0.04) because virtually all college WR production comes from receiving — there's less composition variance to exploit. The takeaway: college receiving production is the best scoring composition signal for rookie projection, especially for positions where receiving ability is a differentiator (TE, RB).

5.8 Efficiency Summary

Key findings from the Efficiency analysis:

  1. Volume dominates efficiency for raw prediction — fantasy points R² (0.32-0.54) far exceeds any efficiency metric. The E component's value is differential and complementary to P.
  2. QB TD rate is the best basic efficiency metric (R²=0.181) — QBs who score TDs efficiently sustain output better than those who accumulate yards.
  3. Red zone target share is the strongest advanced signal (R²=0.36 for WR/TE) — trust in high-leverage situations is sticky and directly translates to fantasy scoring.
  4. RYOE captures RB skill (R²=0.097) independent of blocking quality — the best available metric for isolating individual rushing talent.
  5. aDOT has zero predictive power (R²=0.000 for WR) — route depth is role-determined, not a skill differentiator for fantasy purposes.
  6. Efficiency decays much more slowly than production — N-4 efficiency R² matches or exceeds N-1, validating the flatter year weights (0.40/0.25/0.20/0.10/0.05).
  7. The composite E score (R²=0.09-0.18) provides meaningful signal that complements the Production score, especially for WRs and TEs.
  8. EPA alone is not enough — the composite approach blending EPA, success rate, and position-specific tracking metrics outperforms any single efficiency measure.
  9. Receiving production is the most predictive scoring category — RB receiving yards (R²=0.284) outpredicts rushing TDs (R²=0.149); dual-threat backs sustain value better than TD-dependent rushers.
  10. Scoring shares are nearly useless (R² < 0.03) — what matters is how many points you score, not what percentage comes from each category.
  11. College receiving stats predict TE and RB NFL careers — TE college receiving yards (R²=0.154) and RB college receiving TDs (R²=0.129) are the strongest college-to-NFL scoring composition signals for rookie projection.

5.9 Efficiency V2 Implementation Record

What changed from V1 to V2:

V1 had the correct sub-component weights and year-decay schedule per the article methodology, but two structural problems produced a distribution centered at 50 with 0-3% above 90 and 25-47% below 50:

  1. No pct_to_target normalization — raw efficiency scores went directly to 0-100 without the percentile-to-target mapping applied to S, H, A, and P.
  2. 35-48% of players had no efficiency dataplayer_efficiency_metrics enforces minimum volume thresholds (QB 100 attempts, RB 40 carries, WR/TE 20 targets) that exclude low-volume players. Missing players all defaulted to exactly 50, creating massive tie clusters that normalization couldn't spread.

V2 Implementation:

  1. Fallback efficiency from box scores: For the ~127 active players who have NFL production history but don't meet player_efficiency_metrics thresholds, V2 computes basic efficiency from historic_player_season fields (yards_per_attempt, yards_per_carry, yards_per_target, epa_per_play, success_rate) with the same year-decay weighting (YEAR_WEIGHTS: [0.40, 0.25, 0.20, 0.10, 0.05]). Each metric is percentile-ranked against the full production pool, then averaged. This gives ~127 additional players real efficiency data instead of a fixed default.

  2. Production-derived proxy for remaining unknowns: The ~181 players with no NFL production at all (mostly rookies and deep bench) get a proxy: rookies use prospect_score * 0.35 + 10 (range 10-45), non-rookies use production * 0.40 + 10 (range 10-50). This creates natural spread based on draft capital and production history rather than a single fixed default.

  3. Production-based tiebreaker in normalization: The standard tie-aware percentile formula (rank + ties * 0.5) / n * 100 assigns all tied players the same percentile, which pct_to_target maps to a single score. For efficiency specifically, V2 uses a sorted-rank approach with production as a secondary sort key: players are sorted by (raw_efficiency, production), then each gets a unique rank (rank_idx + 0.5) / n * 100. This guarantees every player gets a distinct percentile, eliminating bucket clumping.

  4. pct_to_target normalization added: Same mapping as S, H, A, P now applied to Efficiency.

Sub-component weights (unchanged from V1 — match article Section 5.6):

  • QB: EPA 40% + Yards/Attempt 30% + Success Rate 30%
  • WR/TE: EPA 25% + YAC Above Expected 20% + Success Rate 15% + aDOT 15% + RZ Target Share 15% + Yards/Target 10%
  • RB: RYOE 25% + EPA 25% + Success Rate 15% + Yards/Carry 15% + RZ Usage 10% + 3rd Down Rate 10%

Data Sources:

  • player_efficiency_metrics: epa_per_play_pct, success_rate_pct, yards_per_target_pct, yards_per_carry_pct, yards_per_attempt_pct (primary)
  • player_advanced_metrics: avg_depth_of_target, red_zone_target_share, third_down_target_rate, epa_per_target, epa_per_carry
  • ngs_receiving: avg_yac_above_expectation
  • ngs_rushing: rush_yards_over_expected_per_att
  • historic_player_season: yards_per_attempt, yards_per_carry, yards_per_target, epa_per_play, success_rate (fallback)

Resulting Distribution (2025 active players):

PositionNMeanMedianP25P75P90>90%80-9070-80<50%
QB9864.0705380886.1%20.4%24.5%19.4%
RB16364.0705380876.1%20.2%24.5%19.6%
WR27064.0705380885.9%20.4%24.4%19.6%
TE15764.0705380885.7%20.4%24.8%19.7%

All positions hit target: ~6% above 90, ~20% in 80-90, ~24% in 70-80, median 70. The distribution is the most uniform of all five pillars due to the tiebreaker approach eliminating clustering artifacts.


Combining SHAPE to Its Strongest Predictive Form

The preceding five sections isolated each pillar's predictive power individually. Now we combine all five into a single composite and empirically optimize the top-level coefficients — the weights assigned to S, H, A, P, and E — to maximize prediction accuracy against historical outcomes.

6.1 Methodology

Pillar Score Computation: For each of 3,869 player-seasons (2016-2024), we computed a 0-100 percentile score for each pillar using the sub-component weights derived in sections 1-5. Pillar proxies are computed from players_raw, player_efficiency_metrics, player_advanced_metrics, NGS tracking data, player_snap_season, and pre_draft_profile.

Scoring: All fantasy PPG targets use half-PPR scoring, computed from raw stat lines (0.04 per pass yard, 4 per pass TD, -2 per INT, 0.1 per rush/rec yard, 6 per rush/rec TD, 0.5 per reception, -2 per fumble lost).

Minimum qualification: Players needed ≥4 games played to be included in a season's pillar computation.

Optimization Target: Two targets tested independently:

  • Redraft: Next-season fantasy PPG (half-PPR)
  • Dynasty: Average PPG over next 3 seasons (half-PPR)

Grid Search: Three resolution tiers to find the weight combination W_S + W_H + W_A + W_P + W_E = 1.0 that maximizes R²:

TierStep SizeScopeCombos per Position
Coarse10%Full space (0-100% per pillar)1,001
Fine2%±10% around coarse peak~2,200-4,800
Ultra-fine1%±4% around fine peak~700-3,200

6.2 Individual Pillar R² (Baseline)

Before combining, here is each pillar's standalone predictive power (percentile-normalized score vs. next-season half-PPR PPG, N=303-990 per position):

PillarQBRBWRTE
S (Situation)0.0250.3440.4260.354
H (Health)0.2050.0350.1560.151
A (Athleticism)0.0020.0090.0020.003
P (Production)0.2470.1440.2730.233
E (Efficiency)0.1050.1140.1720.088
AI Analysis

Situation dominates for RB, WR, and TE — opportunity share alone explains 34-43% of next-season variance. For QBs, Production (0.247) and Health (0.205) are the strongest individual pillars. Athleticism in isolation is nearly useless across all positions (R² < 0.01), but it gains significant value in combination with other pillars — earning 14-22% weight in the optimized composite. This interaction effect means athleticism amplifies the signal from Situation and Production.

6.3 Optimization Results — Redraft (Next-Season PPG)

The grid search converged to position-specific optimal weights:

Optimal Redraft Weights (Next-Season PPG)

ComponentQBRBWRTE
S (Situation)6%39%37%39%
H (Health)19%2%3%9%
A (Athleticism)19%20%21%14%
P (Production)38%19%24%21%
E (Efficiency)18%20%15%17%
Composite R²0.3370.4360.5100.421
N303623990537
Loading optimization data...
0.510
WR Optimized SHAPE R² (Half-PPR, Next-Season)
AI Analysis

With 3,869 player-seasons of training data (2016-2024, half-PPR scoring), the optimized composite outperforms every individual pillar. WR achieves the highest composite R² (0.510), driven by Situation (37%) and Production (24%). The most surprising finding: Athleticism earns 14-21% weight across all positions — far more than its near-zero individual R² would suggest. This interaction effect means athleticism amplifies the signal from Situation and Production — athletic players in good situations outperform projections, while unathletic players in the same situations underperform. Every pillar earns at least 2% weight (the optimization floor), confirming that all five pillars carry genuine predictive signal when combined. For QBs, Production (38%) and Athleticism (19%) dominate, with Health (19%) reflecting QB durability's outsized impact on season-long output.

6.4 Optimization Results — Dynasty (Multi-Season Avg PPG)

Optimal Dynasty Weights (Next-1-to-3-Season Average PPG)

ComponentQBRBWRTE
S (Situation)4%38%33%40%
H (Health)21%2%4%6%
A (Athleticism)20%22%25%14%
P (Production)39%19%23%21%
E (Efficiency)16%19%15%19%
Composite R²0.3810.4200.5180.421
N303623990537
Loading optimization data...
AI Analysis

Dynasty weights are remarkably similar to redraft weights — the optimal structure is stable across prediction horizons. Key differences: (1) Athleticism weight increases slightly for dynasty (20-25% vs 19-21%), consistent with athletic traits being stable career signals. (2) QB composite R² improves from 0.337 to 0.381 for dynasty, suggesting QB careers are more predictable over 3 seasons than single seasons. (3) RB composite R² drops from 0.436 to 0.420, reflecting RB volatility — single-season RB prediction is actually more reliable than multi-year projection. (4) WR achieves R²=0.518 for dynasty, the highest of any position-target combination, making SHAPE particularly reliable for WR dynasty valuation.

6.5 Blended Weights and Validation

The final recommended weights blend the redraft (70%) and dynasty (30%) optima, with a 2% minimum floor — every pillar must contribute. Dynasty and redraft weights are remarkably similar (within a few percentage points per pillar), so the blend loses almost nothing versus using either set independently. TE shows the most stable weights across horizons, while WR Athleticism shifts from 21% (redraft) to 25% (dynasty) — athletic WRs project better over multi-year windows.

6.6 Composite SHAPE Score vs. Actual PPG

Loading optimization data...

6.7 Final Recommended SHAPE V2 Weights

The recommended weights blend 70% redraft / 30% dynasty optima, normalized to sum to 1.0:

SHAPE V2 Production Weights (70% Redraft / 30% Dynasty Blend, 2% Floor)

ComponentQBRBWRTE
S (Situation)5%38%36%39%
H (Health)20%2%3%8%
A (Athleticism)19%21%22%14%
P (Production)39%19%24%21%
E (Efficiency)17%20%15%18%
Loading optimization data...
AI Analysis

The empirical optimization with 3,869 player-seasons (2016-2024, half-PPR) confirms the SHAPE framework's value: combining five pillars achieves R² of 0.34-0.51 — substantially better than any single pillar alone. The weight structure reveals position-specific archetypes:

QBs are a Production-first model: Production (39%) leads, with Health (20%), Athleticism (19%), and Efficiency (17%) all earning meaningful weight. Situation (5%) is lowest because QBs control their own opportunity — starter vs backup is captured better by Production and Health.

RBs balance Situation with physical traits: Situation (38%) dominates, with Athleticism (21%) and Efficiency (20%) both earning significant weight. This is the only position where Health hits the 2% floor — RB availability is already captured by Situation (backs who play more get more touches) and Production.

WRs are the best-predicted position: R²=0.510 for redraft and 0.518 for dynasty. Situation (36%) and Production (24%) dominate, with Athleticism (22%) earning more weight than for any other position — fast, athletic WRs in good situations consistently outperform.

TEs are the most balanced: All five pillars earn between 8% and 39%, with Situation (39%) and Production (21%) leading. Unlike the other positions, TE Health (8%) earns meaningful weight — TE durability matters because the replacement-level TE pool is thin.

6.8 Composite Score Distribution

With the V2 optimized weights applied and pct_to_target normalization on the composite, here is how SHAPE composite scores distribute across 688 active NFL skill players. The composite is normalized to the same target distribution as individual pillars: ~6% above 90, ~20% in 80-90, ~24% in 70-80, median at 70.

Loading SHAPE distributions...

SHAPE V2 Score Distributions

All five SHAPE pillars have been calibrated to the target distribution via position-specific pct_to_target normalization. The histograms below show the distribution of each pillar score (0-100) across 688 active NFL skill players, broken out by position.

Target distribution: ~5% above 90 (true elite), ~20% in 80-90 (high-quality starters), ~25% in 70-80 (solid contributors), median at 70, with a natural tail below 50 for replacement-level players. The green/red indicators below each chart show whether each bucket hits its target.

Loading SHAPE distributions...

Distribution Summary

Situation (S): V2 rewrote the formula using position-specific bucket classifications (snap share, target share, carry share, opportunity score) with team context adjustments. All positions hit target: ~6% above 90, ~20% in 80-90, ~24% in 70-80, median 70.

Health (H): V2 replaced the 4-input formula with 5 position-specific sub-components (tier-adjusted continuation, recency-weighted games missed, age curves, injury recurrence, injury timing). Data fallbacks to historic_player_season fill gaps in player_injury_history. All positions hit target.

Athleticism (A): V2 fixed the combine ID mismatch (BSA UUIDs vs GSIS IDs) with dual-strategy matching, prioritized combine speed_percentile (60%) + athleticism_score (40%) over NGS blended scores, and added position-specific career-stage decay. All positions hit target.

Production (P): V2 aligned decay weights to the article methodology (1.0/0.6/0.3/0.1 over 4 seasons), removed the trend bonus, added conference pedigree multipliers for rookies, and applied pct_to_target normalization. All positions hit target with slightly lower <50% rates (10-12%) due to strong production data coverage.

Efficiency (E): V2 removed volume thresholds from the upstream player_efficiency_metrics transform (previously QB 100 att, RB 40 car, WR/TE 20 tgt), expanding real data coverage from 55% to 75% of active players. A box-score fallback computes basic efficiency from historic_player_season for remaining players with NFL history. Production-based tiebreaking in normalization eliminates bucket clumping. All positions hit target.

Composite: With the V2 optimized weights (Production-led for QB; Situation-led with balanced physical traits for RB/WR/TE) and pct_to_target normalization applied to the composite, the distribution matches the same target as individual pillars: ~6% above 90, ~20% in 80-90, ~24% in 70-80, median at 70. The score differentiates starter-caliber talent from replacement-level players, providing the depth ranking signal needed for the projection engine.


Methodology Notes

This is a living methodology document. As correlations are computed and validated, the SHAPE V2 transform (layer3_player_shape_v2.py) will be updated to reflect the optimal weights. All changes are version-tracked and the impact on player rankings is measured before and after each weight adjustment.


Appendix A: Full Data Pipeline Reference

This appendix documents every data source, transform, script, and table involved in producing SHAPE scores — from raw external data through the final composite that appears on player profiles.

A.1 Pipeline Architecture

The system follows a 3-phase pipeline orchestrated by backend/automation/weekly_update.py:

Phase 1: LOADERS — Raw data ingestion from external APIs
Phase 2: TRANSFORMS — Layered analytics (Layers 0-4)
Phase 3: AUDIT — Data quality validation

Each phase is idempotent — re-running never creates duplicates. All loaders use upsert keys; all transforms use CONFLICT_COLUMNS for ON CONFLICT upsert behavior.

A.2 Phase 1: Data Ingestion (Loaders)

Loaders inherit from BaseNFLLoader (backend/base_loader.py) and run in this order:

#LoaderRaw TableSourcePurpose
1sleeper_loaderplayers_masterSleeper APIPlayer identity (name, position, team, IDs)
2id_resolverplayers_masternfl_data_pyBackfill nflfastr_id, espn_id, pfr_id
3teams_loaderteams_rawESPN / nfl_data_pyTeam metadata
4games_loadergames_rawnfl_data_pySchedule, scores, spread/total lines
5players_loaderplayers_rawnfl_data_pyWeekly player stats (REG + POST)
6rosters_weekly_loaderrosters_weekly_rawnfl_data_pyWeekly roster status
7coaches_loadercoach_assignmentsnfl_data_pyHC/OC/DC assignments
8snap_counts_loadersnap_counts_rawnfl_data_pyPer-player snap counts
9injuries_loaderinjuries_rawnfl_data_pyWeekly injury reports
10draft_picks_loaderdraft_picks_rawnfl_data_pyDraft pick history
11pbp_loaderpbp_rawnfl_data_pyPlay-by-play (500K+ rows, slowest)
12ngs_loaderngs_receiving, ngs_rushingnfl_data_pyNext Gen Stats tracking data

Additional raw tables loaded outside the weekly pipeline:

  • raw_combine_2000_2018, raw_combine_2019_current — Combine measurements (run via run_combine_refresh.py)
  • college_stats_season — College production stats
  • contracts_raw — Player contract data
  • depth_charts_raw — Depth chart positions

A.3 Phase 2: Transforms (Layers 0-4)

All transforms inherit from BaseTransform (backend/transformations/transform_runner.py). Each provides:

  • TABLE_NAME — output table
  • CONFLICT_COLUMNS — upsert key
  • transform() — core logic using fetch_all(), execute_sql(), upsert()

Layer 0: Identity Refresh

TransformOutput TableIntent
layer0_players_masterplayers_masterUpdate current_team, is_active, age from latest roster data

Layer 1: Raw Stats Aggregation (10 transforms)

TransformOutput TableDepends OnIntent
layer1_team_season_pointsteam_season_pointsgames_rawPoints scored/allowed per team per season
layer1_team_offensive_trendsteam_offensive_trendspbp_rawPass/rush splits, play volume, yards per play
layer1_historic_player_seasonhistoric_player_season (+_post)players_raw, pbp_rawSeason-level fantasy stats by player (REG + POST)
layer1_player_snap_seasonplayer_snap_seasonsnap_counts_raw, player_id_mapSnap share by player by season
layer1_player_injury_historyplayer_injury_historyplayers_raw, snap_counts_raw, injuries_raw, games_rawGames missed, injury type/timing per season
layer1_player_draft_profileplayer_draft_profiledraft_picks_rawDraft capital (round, pick, ADP)
layer1_player_combine_profileplayer_combine_profileraw_combine_*Combine athleticism with position percentiles
layer1_player_defensive_seasonplayer_defensive_seasonpbp_rawIDP stats (tackles, sacks, INT, FF)
layer1_team_defensive_seasonteam_defensive_seasonpbp_rawTeam defensive analytics

Layer 2: Advanced Analytics (16 transforms)

Player-level:

TransformOutput TableDepends OnIntent
layer2_player_efficiencyplayer_efficiency_metricshistoric_player_seasonYPC/YPT/EPA percentiles, efficiency composite
layer2_player_advanced_metricsplayer_advanced_metricspbp_rawaDOT, YAC, RZ share, 3rd-down rate, EPA/target, career arc
layer2_player_coverage_splitsplayer_coverage_splitspbp_rawPer-player splits vs man/zone/blitz/pressure
layer2_player_ngs_athleticismplayer_combine_profileplayer_combine_profile, ngs_*Blend combine + in-game NGS athleticism

Team-level:

TransformOutput TableDepends OnIntent
layer2_team_target_shareteam_target_shareplayers_raw, pbp_rawTarget distribution by position rank (WR1-5, TE1-2, RB1-3)
layer2_team_carry_shareteam_carry_shareplayers_raw, pbp_rawCarry distribution by position rank
layer2_team_personnel_usageteam_personnel_usagepbp_raw11/12/21/22/13 personnel rates
layer2_team_scheme_detailteam_scheme_detailpbp_rawRun gap/direction, pass depth, formation, tempo
layer2_team_defensive_schemeteam_scheme_detailpbp_rawMan/zone, coverage, front, blitz rates
layer2_team_season_overviewteam_season_overviewpbp_rawNet stats, penalties, composite team grade
layer2_team_schedule_contextteam_schedule_contextgames_raw, team_season_pointsSchedule strength metrics
layer2_team_season_contextteam_season_contextcoach_assignments, team_offensive_trendsCoaching context per team
layer2_team_season_flagsteam_season_flagscoach_assignments, team_offensive_trendsChange-event detection (HC/OC change, regression)

Coaching:

TransformOutput TableDepends OnIntent
layer2_coach_career_summarycoach_career_summarycoach_assignments, team_season_pointsCareer W-L, tenure
layer2_coach_scheme_profilecoach_scheme_profilecoach_assignments, team_scheme_detailPersistent scheme tendencies
layer2_coach_scheme_tendenciescoach_scheme_tendenciescoach_assignments, team_offensive_trendsPer-season scheme fingerprint
layer2_league_season_averagesleague_season_averagesteam_scheme_detailLeague-wide baselines

Layer 3: SHAPE & Projection Inputs (4 transforms)

TransformOutput TableDepends OnIntent
layer3_player_workloadplayer_workload_metricsplayer_snap_season, team_target_share, historic_player_seasonProjected snap/target/carry share, opportunity score
layer3_player_healthplayer_health_confidenceplayer_injury_history, players_masterDurability confidence multiplier
layer3_player_shape_v2player_shape_scoresSee A.4 belowSHAPE V2 composite scores
layer3_team_proj_factorsteam_projection_factorsteam_offensive_trends, team_season_context3-year weighted team projection inputs

Layer 4: Projections (3 transforms)

TransformOutput TableDepends OnIntent
layer4_team_projectionsteam_projections_2025team_projection_factorsTeam-level point projections
layer4_team_projections_2026team_projections_2026team_season_points, team_offensive_trends, team_season_flags2026 team projections
layer4_player_projections_v2player_projections_currentteam_projections_2026, player_shape_scores, historic_player_season, player_snap_season, team_target_share, draft_picks_rawPlayer-level fantasy projections

A.4 SHAPE V2 Transform — Data Dependencies

layer3_player_shape_v2.py is the largest transform (1,200+ lines). It reads from 15 tables across all prior layers to compute each pillar:

Situation (S):

  • player_workload_metrics — snap share, target share, carry share, opportunity score
  • team_season_overview — team composite grade
  • team_offensive_trends — total plays, pass%, plays/game
  • player_snap_season — snap share (current + prior season)
  • coach_assignments — HC change detection
  • games_raw — Vegas lines (spread, total)
  • player_contract_context — contract year flag, APY percentile

Health (H):

  • player_injury_history — games missed, games played per season (2022-2025)
  • injuries_raw — injury type, timing, report status
  • players_master — birth date for age curves
  • historic_player_season — production fallback for continuation rates

Athleticism (A):

  • player_combine_profile — speed score, athleticism score, speed/burst/agility/strength percentiles, 40-yd, height, weight
  • ngs_athleticism_scores — in-game blended score
  • ngs_receiving — separation, YAC above expectation
  • ngs_rushing — rush yards over expected
  • bsa_player_id — GSIS-to-BSA ID crosswalk for combine matching
  • pre_draft_profile — draft year, athleticism percentile (rookie fallback)

Production (P):

  • historic_player_season — fantasy_points_ppr, games_played (4-season recency-weighted: 1.0/0.6/0.3/0.1)
  • pre_draft_profile — college production score, conference, projected Y1 points
  • player_contract_context — APY percentile (market signal)

Efficiency (E):

  • player_efficiency_metrics — efficiency composite, EPA/play pctl, success rate pctl, YPC/YPT/YPA pctl
  • player_advanced_metrics — aDOT, YAC, RZ target share, EPA/target, EPA/carry, success rate
  • ngs_receiving — separation, intended air yards
  • ngs_rushing — RYOE, efficiency
  • historic_player_season — box-score fallback (YPC, YPT, catch rate)

Normalization: After computing raw 0-100 scores for each pillar, pct_to_target() maps percentile ranks to the target distribution (P50=70, P75=80, P95=90). Composite is computed from position-specific weights, then also normalized via pct_to_target().

A.5 player_shape_scores Table Schema

ColumnTypeDescription
player_idtextnflfastr player ID (PK with season)
seasonintSeason year (PK with player_id)
player_nametextDisplay name
positiontextQB / RB / WR / TE
teamtextCurrent team abbreviation
situationint0-100 normalized Situation score
healthint0-100 normalized Health score
athleticismint0-100 normalized Athleticism score
productionint0-100 normalized Production score
efficiencyint0-100 normalized Efficiency score
compositeint0-100 weighted + normalized composite
last_updatedtimestampLast upsert timestamp

Unique constraint: (player_id, season) — supports multi-season persistence for trend analysis.

A.6 SHAPE V2 Position Weights

Derived via 3-tier grid search (coarse 10% → fine 2% → ultra 1%) against 3,869 player-seasons (2016-2024) using half-PPR fantasy PPG. 70% redraft / 30% dynasty blend with 2% minimum floor.

PillarQBRBWRTE
Situation5%38%36%39%
Health20%2%3%8%
Athleticism19%21%22%14%
Production39%19%24%21%
Efficiency17%20%15%18%
R² (redraft)0.3370.4360.5100.421

A.7 Analysis Scripts (Article Visualizations)

These scripts in scripts/ fetch from Supabase tables and generate JSON files in public/data/ that chart components consume. They are run manually (not part of the weekly pipeline).

Section 1 — Situation:

ScriptOutput JSONChart ComponentIntent
situation_bucket_analysis.pysituation bucket dataSection 1 tablesSub-component R² by player bucket (returning/rookie/moving)
sos_vegas_analysis.pysos-ppg-scatter.json, vegas-implied-scatter.jsonScatterPlotEmbedSOS and Vegas correlation with PPG
contract_analysis.pyapy-ppg-scatter.json, contract-year-box.jsonBoxPlotEmbed, ScatterPlotEmbedAPY vs PPG, contract year effect
qb_coach_stability.pyqb-coach-stability.jsonBoxPlotEmbedQB/Coach stability vs fantasy output
voided_snap_share.pyvoided-snap-share.jsonVoidedSnapChartDeparted snap share opportunity

Section 2 — Health:

ScriptOutput JSONChart ComponentIntent
health_analysis_v2.pygames-missed-ppg-scatter.json, injury-timing-box.json, injury-type-box.json, age-ppg-scatter.json, career-continuation.jsonScatterPlotEmbed, BoxPlotEmbedInjury impact on fantasy production
continuation_by_tier.pycontinuation-by-tier.jsonTierContinuationEmbedCareer survival by fantasy rank tier

Section 3 — Athleticism:

ScriptOutput JSONChart ComponentIntent
athleticism_analysis.pyathleticism-ppg-scatter.json, athletic-tier-outcomes.json, drill-correlation-summary.jsonScatterPlotEmbedCombine vs career PPG correlation
athleticism_charts.pydrill-r2-heatmap.json, speed-score-ppg-scatter.json, athleticism-shelf-life.json, athletic-tier-bars.json, combine-participation.jsonHeatmapEmbedDrill R², speed score, shelf life
drill_scatter_data.pydrill-scatter-all.json, drill-elite-windows.jsonDrillScatterGridPer-drill scatter with elite windows
elite_window_composite.pyelite-window-composite.json, elite-window-tiers.jsonEliteCompositeChartMulti-drill elite hit count vs production
combine_participation_dist.pycombine-participation-dist.jsonCombineParticipationDistAttendee vs non-attendee PPG histograms
draft_pick_ppg.pydraft-pick-ppg-scatter.json, draft-pick-buckets.jsonDraftPickChartDraft capital vs career PPG
rookie_capital_x_void.pyrookie-capital-x-void.jsonRookieOpportunityChartDraft pick × voided snap interaction

Section 4 — Production:

ScriptOutput JSONChart ComponentIntent
production_nfl_analysis.pyproduction-nfl-analysis.jsonProductionAnalysisChartMetric R², decay weights, optimal sub-weights
production_composite.pyproduction-composite.jsonProductionAnalysisChartNFL + college blended production score
scoring_composition_analysis.pyscoring-composition.jsonScoringCompositionChartFantasy point category R² (pass/rush/rec TDs, yards)
conference_pedigree_analysis.pyconference-pedigree.jsonConferencePedigreeChartConference tier → NFL translation rates

Section 5 — Efficiency:

ScriptOutput JSONChart ComponentIntent
efficiency_analysis.pyefficiency-analysis.jsonEfficiencyAnalysisChartBasic + advanced efficiency R², decay, composite weights

Section 6 — Optimization & Distribution:

ScriptOutput JSONChart ComponentIntent
shape_optimization.pyshape-optimization.jsonShapeOptimizationChartGrid search iterations, sensitivity, scatter, coefficients
shape_distribution.pyshape-distributions.jsonShapeDistributionChartPer-pillar histograms, leaderboards, summary stats

A.8 Frontend Delivery

Player profiles and rankings read directly from Supabase via src/lib/database/players.ts:

  • PlayersDatabase.getPlayerShapeData()player_shape_scores table
  • PlayersDatabase.getRankingsData() → bulk SHAPE fetch for rankings page
  • Fallback: if pipeline scores are unavailable, rankingsEngine.ts computes a simplified composite client-side

Article chart components read from public/data/*.json static files at runtime via fetch(). Components are registered in src/components/articles/mdx/index.ts and rendered via MDX.

Key components displaying SHAPE:

  • PlayerProfileHeader.tsx — composite + 5 pillar bars
  • ShapeRadarMini.tsx — 5-point radar chart (used in tiles and detail views)
  • RankingsPlayerDetail.tsx — full SHAPE breakdown with radar + horizontal bars
  • RankingsColumnTile.tsx — compact radar in rankings list

A.9 Automation & Scheduling

Entry PointTriggerScope
backend/automation/weekly_update.pyGitHub Actions (weekly) or manual CLIFull pipeline: loaders → transforms → audit
backend/automation/article_updater.pyGitHub Actions or manualAI-driven article content refresh via Claude API
backend/automation/run_combine_refresh.pyManual (pre-draft)Recompute combine athleticism profiles
backend/automation/injury_update.pyManual (in-season)Refresh injury data independently

CLI flags for weekly_update.py:

  • --season 2025 --week 14 — target specific week
  • --loaders-only / --transforms-only — run partial pipeline
  • --dry-run — preview without writes

All runs log to backend/logs/pipeline_YYYYMMDD_HHMMSS.log.

A.10 Table Dependency Graph

RAW TABLES (Phase 1)
├── players_raw ─────────────────────┐
├── pbp_raw ─────────────────────────┤
├── games_raw ───────────────────────┤
├── snap_counts_raw ─────────────────┤
├── injuries_raw ────────────────────┤
├── draft_picks_raw ─────────────────┤
├── rosters_weekly_raw ──────────────┤
├── coach_assignments ───────────────┤
├── raw_combine_* ───────────────────┤
├── ngs_receiving / ngs_rushing ─────┤
├── college_stats_season ────────────┤
└── contracts_raw ───────────────────┤
                                     │
LAYER 1 (Raw Stats)                  │
├── historic_player_season ──────────┤
├── team_season_points ──────────────┤
├── team_offensive_trends ───────────┤
├── player_snap_season ──────────────┤
├── player_injury_history ───────────┤
├── player_combine_profile ──────────┤
└── player_draft_profile ────────────┤
                                     │
LAYER 2 (Advanced Analytics)         │
├── player_efficiency_metrics ───────┤
├── player_advanced_metrics ─────────┤
├── team_target_share ───────────────┤
├── team_carry_share ────────────────┤
├── team_season_overview ────────────┤
├── team_season_flags ───────────────┤
├── coach_scheme_profile ────────────┤
└── ngs_athleticism_scores ──────────┤
                                     │
LAYER 3 (SHAPE + Projection Inputs)  │
├── player_workload_metrics ─────────┤
├── player_health_confidence ────────┤
├── player_shape_scores ◄────────────┘ (reads 15 tables)
└── team_projection_factors

LAYER 4 (Projections)
├── team_projections_2026
└── player_projections_current ◄──── (reads player_shape_scores)