Model Documentation · Technical Specification
Model Documentation

How the model works

WAR is a single number that answers a deceptively hard question: how much does this player contribute beyond what's freely available? Technically it's discounted lifetime PAR (Points Above Replacement) — sabermetric WAR's points-to-wins translation isn't applied here, but the shape and intent are the same.

This page documents the mathematics behind the model — for active NFL players, for devy prospects, and for the user controls that make it yours. The math is real. The examples use actual 2025 player data.

01
NFL WAR (L-WAR)
02
C-WAR (Contender)
03
Devy WAR
04
Bayesian blending
05
Your controls
06
Data sources
01 — NFL Players

NFL WAR

For active NFL players, WAR measures how many projected wins above a freely-available replacement a player is expected to contribute, summed across a position-specific forward horizon and discounted for time, age, and cumulative survival.

CORE FORMULA
fantasy_points  =  Σ (stat × scoring_rate)
PAR               =  fantasy_points  −  replacement_level
WAR               =  Σt=1..Hpos PAR × decayt × cumSurvivalt × (1 / 1.08t−1)
POSITION-SPECIFIC HORIZON CAPS
QB  = 10 years  ·  WR  = 9 years  ·  TE  = 8 years  ·  RB  = 7 years
Empirical 10-yr retention is near-zero for non-QB positions; horizons capped where the data still has signal.

Replacement level is the production of the freely-available player at each position — defined by a position-specific formula based on your league's roster requirements (teams, starters, flex slots) and a small buffer for bench-injury insurance. The formulas are derived from where each position's production curve actually flattens, not from a fixed multiple. They recalibrate automatically when you switch leagues.

Age decay applies a small per-year multiplier as a player ages past their position's peak window. Cumulative survival is the running product of empirical year-over-year retention probabilities — the chance a player is still a productive starter at year t given they were one at year t−1. Retention is tier-stratified (an elite RB1 retains very differently from an RB45) and includes a floor past each position's cliff age that prevents survivor-selection bias from spuriously inflating older-cohort retention. A 24-year-old WR with a full curve ahead is valued differently than a 31-year-old entering decline — even at identical current production.

WORKED EXAMPLE
Drake London · WR · Age 24 · 2025 Actuals
1
Fantasy points from actual stats

Using Drake London's 2025 actuals (per-17 normalized) in a standard 1 PPR, 0.1 PPY scoring format:

receptions × 1.0    →   96.3 pts
rec_yards × 0.1      →   130.2 pts
rec_tds × 6.0       →   59.4 pts
fantasy_points          =   286
2
Replacement level for your league

Replacement is the freely-available player at each position — the production a team can plausibly add off waivers. The replacement rank scales with your league's nominal starters plus expected flex usage at that position, with a small buffer for bench-injury insurance. The exact formula varies by position, derived from where each position's production curve actually flattens.

REPLACEMENT RANK BY POSITION
QB  = ceil(teams × starter_qb × qb_mult × 1.5)
qb_mult: 1.0 (1QB) · 1.7 (superflex) · 2.0 (2QB)
RB  = ceil(teams × (starter_rb + starter_flex × 0.4) × 1.3)
WR  = ceil(teams × (starter_wr + starter_flex × 0.4) × 1.3)
TE  = min(
ceil(teams × (starter_te + starter_flex × 0.4) × 1.3),
cliffCap
)
cliffCap: 30 (standard) · 36 (mild TE-premium) · 42 (heavy TE-premium)
EXAMPLE — 12-team, 3WR + 1FLEX
WR rank = ceil(12 × (3 + 1 × 0.4) × 1.3)  =  54
WR54 production  ≈  148 FP  (2025 actuals, 1 PPR)
PAR  =  286 − 148  =  138

The multipliers are calibrated from empirical cliff analysis on multi-year actuals — each position's production curve has natural drop-off points, and replacement is anchored just past the last meaningful one. TE-specific addition: a hard cliff cap reflects that the talent pool is finite (the empirical TE production curve flattens around rank 30 in standard scoring, ~36 in mild TE-premium, ~42 in heavy TE-premium). Without the cap, large multi-TE leagues would push replacement past where real production exists.

3
Age decay + cumulative survival

London is 24 — solidly in his prime window. Each future year applies an empirically-derived decay multiplier (small production loss as the player ages) and a cumulative survival probability (the running product of year-over-year retention up to that year). Retention is tier-stratified — London ranks as an elite WR in this league, so he's drawn from the elite-tier retention curve. Tier boundaries are smoothed across a 5-rank band so a one-rank flip at the boundary doesn't produce a mechanical retention cliff; players sitting comfortably inside a tier are unaffected. WR horizon is capped at 9 years where the data still has signal.

year
age
decay
cumSurv
adj. PAR
yr 1
24
1.00
0.880
121
yr 2
25
1.00
0.774
99
yr 3
26
1.00
0.682
81
yr 4
27
1.00
0.600
66
yr 5
28
1.00
0.528
53
yr 6
29
1.00
0.464
44
yr 7
30
1.00
0.232
20
yr 8
31
0.97
0.116
9
yr 9
32
0.97
0.058
4
cumSurv at year t = retention(age) × retention(age+1) × … × retention(age+t−1). Sharp drop at year 7 reflects the empirical WR cliff past age 30.
4
Time discount + WAR sum

Future production is discounted at the league's configured rate (default 8%) per year. WAR is the sum across the position's horizon (WR = 9 years). Both inputs are read directly from your league profile and the position-specific horizon table.

WAR = Σt=19  PARt × decayt × cumSurvt × (1 / 1.08t−1)
Drake London  ·  WR  ·  age 24
WAR  ≈  496   (standard 1PPR 12-team, 2025 actuals)
Bestball adjustment
For leagues marked bestball, fantasy points are scaled by a per-player volatility multiplier before PAR is computed. The multiplier rewards players whose week-to-week production is high-variance — boom weeks count more than bust weeks when the lineup auto-fills. Each player's multiplier is derived from their actual coefficient of variation across the most recent season; players without enough games fall back to a position-level default. This is why a high-ceiling WR4 can earn meaningful WAR in bestball even when their season-long average looks modest.
02 — Contender Mode

C-WAR · Contender WAR

L-WAR (the standard model) values players over a position-specific horizon (QB 10y · WR 9y · TE 8y · RB 7y) with age decay and cumulative survival applied each year. This is the right framework for long-term dynasty evaluation — but it systematically undervalues veterans who are still producing at an elite level and will simply retire in 2–3 years.

C-WAR answers a different question: how much does this player contribute over the next two seasons, right now? It uses the same PAR formula but removes age decay and survival probability entirely, and collapses the horizon to 2 years.

L-WAR vs C-WAR FORMULA COMPARISON
L-WAR (lifetime)
L-WAR = Σt=1..10 PAR × decayt × survivalt × (1 / 1.08t−1)
C-WAR (contender)
C-WAR = Σt=1..2 PAR × (1 / 1.08t−1)
decay = 1.0, survival = 1.0, horizon = 2 years only
Bestball volatility multiplier still applies in bestball leagues
Davante Adams · WR · Age 32
L-WAR
~45
C-WAR
~160
L-WAR penalized by age decay + survival. C-WAR reflects two more elite seasons.
Matthew Golden · WR · Age 22
L-WAR
~210
C-WAR
~85
L-WAR captures full career upside. C-WAR reflects limited near-term production.

When to use each: L-WAR for overall dynasty rankings, rebuilding decisions, and long-term trade evaluation. C-WAR for contending teams evaluating win-now trades. Drafted rookies appear in C-WAR with values computed over the same 2-year horizon as established players (using probability-weighted PAR from their pick slot). Pre-NFL prospects (1+ years from the NFL draft) are hidden in C-WAR mode: they can't contribute to a contender's near-term window.

03 — Devy Prospects

Devy WAR

Devy players cannot be evaluated on production — they haven't played yet. Instead the model uses expected value: the probability-weighted outcome of a player at a given NFL draft slot, anchored to empirical hit rates from 12 years of actual draft class outcomes.

The key insight is that a devy player's value is not their ceiling. It is the probability-adjusted blend of their ceiling and their floor, penalized for the time until they arrive. A TE prospect going at pick 24 with a 65% hit rate is worth materially less than the raw "hits" WAR would suggest — because 35% of the time, he contributes almost nothing.

WORKED EXAMPLE
WR Prospect · Projected Pick 20 · 1 year to NFL
1
Draft capital → hit probability

Empirical hit rates re-derived from 2010–2022 NFL draft classes. A "hit" = at least one season above the position-specific production threshold in the player's first 5 NFL years. Bayesian shrinkage (K=10) toward a monotonic positional prior smooths small-sample noise, then strict monotonicity is enforced — a later pick never has a higher hit rate than an earlier one at the same position. Hit probability is the headline diagnostic for a prospect's capital and drives the archetype-signal multipliers below — but it no longer multiplies WAR directly: the outcome curves in step 2 embed hit rate, bust timing, and miss-case production in one empirical object.

pick range
WR
RB
TE
QB
picks 1–5
0.83
picks 6–10
0.58
picks 11–16
0.82
0.89
0.89
0.38
picks 17–32
0.63
0.69
0.87
0.35
picks 33–48
0.50
0.55
0.75
0.35
picks 49–64
0.50
0.55
0.65
0.35
picks 65–80
0.43
0.55
0.53
0.24
picks 81–96
0.43
0.55
0.48
0.24
picks 97–160
0.24
0.34
0.48
0.11
picks 161+
0.12
0.16
0.15
0.07
All curves enforce strict monotonicity. WR/RB use a single top bucket across picks 1–16. TE has finer intermediate buckets in the 33–96 range to smooth its empirical sub-bucket variance. QB has the steepest top-pick drop-off — finer buckets at picks 1–5 and 6–10 reflect the meaningful gap between top-tier and second-tier QB outcomes.
2
Expected PAR from realized outcome curves

The model doesn't assume a prospect either "hits" (and produces a flat median forever) or "busts" (and produces nothing). Instead, for every pick bucket it stores the full realized outcome distribution of the 2010–2022 NFL draft classes, year by NFL year: five representative real seasons (10th / 30th / 50th / 70th / 90th percentile stat lines) — busts included, out-of-league seasons included as zeros, each weighted by the games actually played. Value for each future year is the average of what those five outcomes clear above your league's replacement bar, scored with your league's rates.

PAR(year) = mean over outcomes q of  max(0, points(q) − replacement) × availability(q)
Example — QB drafted picks 1–5, NFL years 2–3, superflex replacement ≈ 237:
outcomes  ≈  [182, 294, 304, 316, 363] pts  ×  availability [0.59, 0.77, 0.88, 0.94, 0.94]
PAR  =  mean(0, 44, 59, 74, 118)  =  ≈ 59 / year
Because the replacement bar sits inside the expectation, the same curve self-calibrates to your format: in 1QB the bar truncates more of the distribution, in superflex less — no per-format tuning. Hit rate, bust timing, and the front-loaded career arc (busts wash out by years 4–6; survivors stay elite into years 8+) are read directly off the data rather than approximated. Curves are monotonic in pick by enforcement.
3
Arrival penalty + carrying cost + data confidence

Three multiplicative adjustments scale a devy prospect's WAR for the time they're not yet in the NFL. Each captures a distinct concept; together they replace what a single, blunt "discount per year out" would do.

Arrival penalty — ~7% per year discount for non-capital pre-NFL risk: injury, off-field events, landing-spot variance. Draft capital uncertainty is not bundled into this penalty: the model treats your capital input (override or default baseline) as the conviction. If you believe a prospect projects top-5, the model honors that view and tells you what their WAR is if you're right, modulo the small non-capital risks that exist regardless of who's correct about the draft.

Carrying cost — each NFL year of contribution is calendar-discounted at the league's discount rate (typically 8%). This represents the roster-spot opportunity cost: every season you hold a non-producing prospect, you forgo what else that slot could have held. Distinct from arrival penalty, which captures value-disappearance risk. Both apply.

Data confidence taper — the "if you're right" framing assumes a meaningful capital projection exists. That holds for a college senior with three years of film and combine data. It holds less well for a HS recruit who hasn't played a college snap. Top-100 HS recruits get drafted into the NFL at ~35-45% over the next 4-5 years vs ~70% for declared seniors with top-50 projections (Bud Elliott / 247Composite research); mock-to-actual-pick correlation is r≈0.80 in the draft year, r≈0.55 one year out, r≈0.35 two years out. So a 2029 freshman's "projects R1" claim carries roughly half the predictive confidence of the same claim on a 2026 senior. The taper applies a flat multiplier to total devy WAR based on years until NFL entry.

arrivalPenalty = 0.93 ^ years_to_nfl
1 year: 0.93  ·  2 years: 0.86  ·  3 years: 0.80
carryingCost (year y) = 1 / (1 + r) ^ (y − 1)
at r=8% — y=1: 1.00  ·  y=4: 0.79  ·  y=7: 0.63
dataConfidence = f(years_to_nfl)
2026 senior: 1.00  ·  2027 junior: 0.90  ·  2028 sophomore: 0.75  ·  2029 freshman: 0.55
L-WAR = dataConfidence × Σy=1H  PARy × arrivalPenalty × carryingCosty
PARy is the per-year expected PAR from the outcome curves (step 2) — hit probability and career attrition are embedded in the curve, so no separate hitProb or survival multiplier appears in the sum.
4
College breakout age multiplier (WR + TE only)

For WRs and TEs with matched college stats, WAR is adjusted by a regression-derived multiplier based on how early the player broke out relative to their draft year (OLS regression across 254 matched WR/TE historical players, 2009–2021 NFL draft classes).

breakout timing
WR multiplier
TE multiplier
2+ years early
1.12×
1.08×
1 year early
1.06×
1.00×
final year only
1.00×
1.00×
no data matched
1.00×
1.00×
WR: β +22 yds/yr early (n=141, R²=0.17) · TE early_2+: β +47 yds/yr early (n=51, R²=0.37) · TE early_1: signal too weak — zeroed
Multiplier not applied when user has a manual draft capital override.
5
Athletic profile + college production multiplier (all positions)

NFL Combine 40-yard time and peak college receiving production are statistically significant predictors of TE fantasy success even after controlling for pick capital. The model applies a credibility multiplier — the empirical "blocker archetype" cell (slow 40 + low college production) historically hits at 5.6% (1 of 18 from 2010–2020) versus 58.3% for the receiving-archetype cell (fast 40 + high college production), a 10× spread the pick-only model misses.

For WRs, the empirical signal is narrower — combine metrics did not discriminate hits from misses (the NFL has already pre-filtered for speed in who gets drafted at all). But for R2–R3 picks specifically, college receiving production matters: WRs with peak ≥1200 single-season college rec yards historically hit at 42% versus 25% for mid-production peers. The model applies a 1.10× lift to that empirical cell — a conservative, lift-only adjustment with no penalty for unknowns.

For RBs, the surprising empirical finding is that combine metrics don't discriminate (40-yard time, weight, vertical, broad — all n.s.) AND college rushing production doesn't discriminate either. What does is college receiving production — the 3-down archetype signal. R2-R3 RBs with peak ≥400 single-season college rec yards historically hit at 71% (n=7) versus 24% for low-rec peers (n=29). Modern fantasy RBs need pass-catching ability — pure rushers (Mark Ingram, Latavius Murray archetype) don't translate even with big college rushing numbers. The model applies a 1.15× lift to the R2-R3 high-rec cell. Small historical sample (n=7) so the lift is conservative versus the empirical ratio (~1.56×).

For QBs, the empirical signal is the inverse of what most people expect. College passing yards do NOT discriminate hits from misses (t=0.82, n.s.), but career college rushing yards strongly do (t=+3.05, p<0.01) — fantasy QB hits averaged 1,077 career college rush yards versus 442 for misses. This is the Konami-code archetype: mobile QBs (Lamar, Allen, Hurts, Daniels) dominate fantasy because rushing stacks on top of passing for 50-100+ extra points per season. Pocket passers need elite efficiency to crack QB1 territory. The model applies a 1.15× lift to picks 33+ with career college rushing ≥1,500 yards. Pick gate skips top-10 (where pure capital dominates — top-10 QBs hit at 60-100% regardless of rushing). Lift-only design — pocket passers are not penalized.

40-yard time
multiplier
≤ 4.65 (elite athlete)
1.10×
4.66–4.70 (fast)
1.00×
4.71–4.80 (mid)
0.55×
> 4.80 (slow / blocker)
0.25×
peak college rec yards (single season)
multiplier
≥ 800 (elite producer)
1.10×
600–799 (high)
1.00×
300–599 (mid)
0.65×
< 300 (low / non-receiver)
0.40×
Welch's t-test on n=140 historical TEs (picks 1–100, 2010–2020): pick number t=−6.03 (p<0.01), 40-yard time t=−3.22 (p<0.01), peak college rec yards t=+2.86 (p<0.01). Both signals are independent of each other and of pick capital. Tier boundaries are smoothed via piecewise linear interpolation so a 545-yard player isn't penalized as a blocker just for being below the 600-yard cutoff. Multipliers default to 1.00 when data is missing — no penalty for unknowns. Applied post-hoc to the position-specific WAR; the breakout age multiplier is independent and stacks. The TE multiplier is gated on draft status (only applied to drafted prospects with full combine + final-college-season data) — pre-NFL devy underclassmen stay at 1.00 to avoid extrapolating outside the empirical training set. The WR / RB / QB multipliers are lift-only and apply at all draft phases.
6
Empirical cohort cap (all positions)

The multipliers above scale hit probability based on signal strength — but pick capital still drives the floor. A pure pick-capital model can still over-project a R2 prospect with confirmed-bad signals (the "Boerkircher case") because R2 capital alone implies ~50% historical hit rate. The cohort cap addresses this by checking the actual empirical hit rate in the player's specific archetype cell.

For every drafted devy prospect, the model looks up their (pick bucket × archetype signal) cell in a pre-computed cohort hit-rate table. If that cell's smoothed historical hit rate is below 10%, AND the model's current effective hit prob exceeds the cell rate, the cap reduces effective hit prob to match the empirical floor. The cap can only decrease — never inflate — and never fires when the cohort has zero observations of that archetype.

Cohort dimensions are position-specific, mirroring each position's empirical battery:

position
cohort cell
hit threshold
TE
pick × forty × peak college rec
≥150 PPR best season
WR
pick × peak college rec
≥150 PPR best season
RB
pick × peak college rec
≥150 PPR best season
QB
pick × career college rush yards
≥250 PPR best season
Smoothed via Bayesian shrinkage (K=5) toward each pick bucket's marginal hit rate. Cohort window: 2010–2020 NFL drafts (refreshed annually after combine + pro-day data lands). Cap fires only when the smoothed cell rate is below 10% — a "rare and historically empty" archetype. Cells with zero observations don't fire the cap; we don't fabricate evidence about archetypes the data hasn't seen.

The strongest empirical signal sits at QB: the cohort of R6–R7 pocket-passer QBs (career college rushing < 500 yards) hit at 0 of 16 historically — a smoothed cell rate of ~1%. Those prospects get their effective hit prob capped to match. Other cap-firing cells: R6–R7 high-production WRs (8.9%), R6–R7 mid-production TEs (~2.8%), and R4–R5 pocket QBs (8.5%). All low-magnitude in absolute WAR terms — these are late-round prospects whose pick-capital floor was previously generating "small but non-zero" WAR the empirical record doesn't support.

The cap complements the v3 multipliers rather than replacing them. The multipliers handle continuous signals (a 4.69 forty is meaningfully different from a 4.73 forty). The cap handles discrete cohort empties — cases where the archetype is so empirically rare that even the floor of the multiplicative model overshoots reality. Together they encode the full structure of the empirical record: where signals discriminate, scale; where cohorts confirm low, cap.

All four positions use pick number for both production lookup and hit probability. Empirical analysis showed pick number has stronger correlation with career production than class rank for both QB (−0.575 vs −0.483) and TE (−0.488 vs −0.388). Hit probability for all positions enforces strict monotonicity.
04 — Early-Career NFL Players

Bayesian blending

A player in their first three NFL seasons presents a challenge: their actual production may not reflect their true talent. A receiver who played 6 games due to injury or a rookie behind a bad offensive line shouldn't be permanently penalized by their numbers.

The model handles this with Bayesian blending — combining the player's actual stats with a historical prior derived from players at the same position and draft round in career years 1–3. The prior's influence decreases each season as actual evidence accumulates, fading to zero by year 4.

BLENDING FORMULA
blended = actual × actualPct + prior × priorPct
if actual >= prior: no blend (player outperformed median — trust actuals)
position
year 1
year 2
year 3
year 4+
QB
40/60
65/35
85/15
100% actual
RB
50/50
70/30
90/10
100% actual
WR
35/65
65/35
85/15
100% actual
TE
30/70
60/40
85/15
100% actual

The prior is not hand-tuned — it is derived from empirical medians across 16 years of NFL career data (2010–2025), grouped by position, draft round, and career year. The current live curves replaced the original hand-estimated values with empirically-computed medians across 7,118 historical player-season rows.

The blend is skipped entirely when you've selected a forward projection set (analyst projections rather than actuals). Forward projections already incorporate the same signals the prior captures — opportunity, situation, draft capital, expected role — so blending them toward a generic positional median would degrade them rather than improve them. The blend's purpose is calibrating actuals against generic priors, not regressing already-tuned forecasts. When you're viewing actuals (single-season or multi-year), the blend fires normally for career years 1–3.

One additional safeguard: when multi-year weighted actuals are selected, early-career players (career years 1–3) are evaluated against a stable 2025 replacement level rather than the mode-specific replacement level. Their blended fantasy points are anchored to 2025-era production medians, so comparing them against an inflated multi-source replacement would be inconsistent. This anchoring is itself skipped in projections mode (where the points basis is the analyst forecast, not 2025-blended) so PAR comparisons stay apples-to-apples.

05 — Your Inputs

The controls you have

DEVY WAR is designed to be your model, not a model you passively consume. Two major input surfaces let you shape the output.

📊
Projection set: what data drives NFL WAR

New projection sets appear in the picker on the rankings, trade, and strategy pages as they're added. Each one represents a different lens for valuing players:

Multi-year weighted actuals: Blends multiple seasons of real production, weighted toward recency. Most stable estimate — good for overall rankings and reducing single-season noise.

Single-season actuals: One year of real production, normalized to a 17-game pace. Reactive to what actually happened — reveals breakouts and declines that multi-year blends may mask.

Forward projections: Forecasts from analysts or projection systems. Asks "if these projections are correct, what is each player's WAR?" Useful for finding analyst-driven mispricings vs. the dynasty market.

Switching projection sets recalculates all rankings, trade valuations, and draft pick values instantly. The set name and date range is shown in the picker so you always know what's driving the math.

Coverage honesty: no projection set covers every rostered player. Depth pieces, injured or inactive veterans, and third-stringers often have no projection row — those players don't appear in the rankings at all rather than being shown with a made-up value. The rankings footer reports exactly how many of your league's rostered players the active set projects, and the unprojected names are listed in the Depth section of the Rosters page. Switching sets changes coverage.

🎯
Draft capital overrides: what drives devy WAR

Every devy prospect has a consensus baseline pick projection seeded from dynasty community mock drafts. But you don't have to agree with the consensus.

You can override any prospect's projected NFL draft slot — and WAR recalculates in real time across rankings, the draft board, and the trade calculator. Your overrides apply globally across all your leagues.

This is where the model becomes genuinely yours. If you believe a QB prospect projects QB1 at pick 5 rather than pick 20, that difference changes his WAR meaningfully — because the realized outcome distribution at picks 1–5 is dramatically richer than the one at pick 20.

🏆
WAR mode: L-WAR vs C-WAR

Toggle between Lifetime WAR (L-WAR) and Contender WAR (C-WAR) on both the rankings page and the trade calculator. L-WAR is the default — per-position horizon (QB 10y · WR 9y · TE 8y · RB 7y) with full age decay and cumulative survival. C-WAR collapses to a 2-year horizon with no age penalty.

This affects ranking order and trade verdicts. In C-WAR mode, veterans producing at a high level rank significantly higher than in L-WAR — their current production matters, and the model no longer penalizes them for being on the back end of their careers.

Drafted rookies are included in C-WAR rankings, with values computed over the same 2-year horizon using their pick-slot expected PAR. Pre-NFL prospects (1+ years from the NFL draft) are hidden in C-WAR mode — they can't help a contender's near-term window.

Important: The model is only as useful as the assumptions feeding it. Keeping your overrides current — especially as real NFL draft results come in and replace projections with actuals — is how you get accurate pick valuations before the broader market catches up.

06 — Data Sources

What powers the model

📈
NFL actuals (2010–2025)
Per-17 normalized fantasy production from 7,118 historical player-season rows. Used for current player WAR (when actuals modes are selected) and to calibrate the Bayesian blending priors.
📅
Weekly player stats (2015–2025)
56,642 rows of week-by-week NFL production used to compute per-player coefficient of variation, which drives the bestball volatility multiplier. Each player gets their own data-driven multiplier when they have enough games.
🏈
NFL draft records (2009–2025)
Draft round, draft pick, and career year data for all historical NFL players — used to compute empirical hit rates by position and pick slot.
🎓
College Football Data API (CFBD)
College production stats for FBS players 2006–2025. 40,500+ player-season rows. Used to compute breakout age multipliers and peak college receiving signals for WR and TE devy prospects.
⏱️
NFL Combine (nflverse, 2000–2026)
Combine measurables — 40-yard time, vertical, broad jump, agility drills, weight, height — for all skill-position invitees. 3,000+ rows ingested. Used in the TE athletic-profile multiplier alongside college production to discriminate receiving prospects from blocking archetypes.
📝
NFL contracts (nflverse, sourced from OverTheCap)
Current active deals for QB/RB/WR/TE — team, total value, AAV, guaranteed money, years remaining, % of salary cap. ~750 active contracts. Surfaced on the rankings expanded card and as a compact chip on the trade calculator. Used for display only, not as a model input.
🏟️
Dynasty community mock drafts
Consensus baseline pick projections seeded into the devy model. Overrideable per-user, per-league.
💰
KTC (KeepTradeCut)
Market values shown alongside WAR on every player and trade. Used for comparison only — not as an input to WAR calculations.
🔗
MyFantasyLeague (MFL) + Sleeper
League import sources. Scoring format, roster requirements, team count, and bestball flag are read directly from your league and feed the league-specific calibration.

Tier-stratified retention with monotonicity floor · Position-specific horizons (QB 10 / WR 9 / TE 8 / RB 7) · Cumulative survival via running-product · Empirical PAR curves · Devy outcome curves (realized pick-slot distributions, availability-weighted) · College breakout signal · TE athletic + production multiplier · Empirical cohort cap (all positions) · L-WAR/C-WAR modes · Bestball volatility model · Data through 2025 NFL season