Model Transparency
How my DMX and DPX models work, what they predict, where they fall down, and what I keep to myself. A straight accounting of a 25-year dataset, not a sales pitch.
DMX is one composite z-score that grades a prospect at the moment he's drafted. I blend three independent slices of pre-draft information into a single number per player. D1 (top decile) is the elite tier, D10 the bottom. I compute the composite per position, with weights that differ by position. New to it? Start with the complete DMX guide.
The position weights are not published. They're 25 years of refitting, and they're the whole reason DMX beats just averaging three combine numbers together. The Methodology tab covers what that means in practice.
DPX tracks a player's dynasty value during his NFL career, where DMX stops at the draft. I build it from three things I can actually watch, and I update them every season (the DPX guide has the full explainer):
For every player-season I publish two numbers: DPX-Next (next-season projection decile) and DPX-Long (3-year forward projection decile). Both get nudged by contract status and draft-capital decay.
| Position | Target Metric | Intercept | Slope | R² | N | Cohort | Notes |
|---|---|---|---|---|---|---|---|
| Loading regressions… | |||||||
Why does tier R² run about 2× higher than VBD R²? Careers fall into clean buckets (Star / Starter / Contributor / Bust) a lot more neatly than they spread out along a continuous fantasy-point total. Guessing which bucket a guy lands in is just a more learnable problem than nailing his exact career point total. Both regressions are honest. The tier version is the one I'd actually reach for on a roster call.
Every dot is one prospect with a finished career. The diagonal is perfect calibration. Dots above the line beat their prediction, dots below fell short of it. Want the deeper residual work, with ranked over- and under-performer leaderboards by position? That lives on the Analytics > Residual Analysis tab.
- Athleticism (ATH). The combine and pro-day numbers: 40-yard dash, vertical jump, broad jump, 3-cone, shuttle, bench press, height-adjusted weight. I z-score each one within the position cohort, then weight them into four sub-components (Speed, Agility, Lower Power, Strength).
- Draft Position (DPOS). I turn a player's pick number into a z-score within his position cohort; undrafted guys get pick 300. This one dimension is the strongest predictor at every position, which tells you the NFL is collectively pretty good at evaluating prospects.
- Age-Weighted Production (AWP). His final college season, per game, adjusted for age. Strength of schedule rides along in draft capital (DPOS), not inside AWP. For IDP I swap in havoc share, which handles the scheme-to-scheme noise.
- Composite assembly. Position-specific weights blend the three pieces together. I fit those weights by maximum-likelihood against career outcomes on a 25-year training set, and refit them roughly every 3 years. The actual weight values I keep to myself.
Raw DMX is a continuous z-score. On offense I turn it into a decile (D1–D10) with fixed per-position cutoffs, fit once against the full historical cohort for that position and then held constant class to class. The bands are absolute: a D1 is the same standard in 2019 as in 2026, so offense deciles compare directly across classes. Class strength shows up in how many players clear each bar instead — a deep receiver class can put a third of its wideouts in D1, a thin one none at all. IDP works the other way. Defensive deciles are ranked inside each (position, draft-year) cohort with NTILE(10) OVER (PARTITION BY position, draft_year ORDER BY dmx DESC), so on that side a D1 is graded against that year's class, and the raw score is the better cross-class tool.
- Landing spot. I compute DMX the instant a guy is drafted, so his team, coaching staff, depth chart, and offensive scheme aren't in there.
- Injury history. Pre-draft injuries are already baked into where the NFL drafts a guy, so they show up through DPOS. I don't model them as their own signal.
- Character / interview signals. Off-field info is mostly noise, so I leave that read to the NFL and let it come through in DPOS.
- Position-versatility flags. I score a WR/RB hybrid at his primary position, and yeah, some signal gets lost doing it.
Combine testing, college passing rates, and draft strategy have all shifted a lot since 1996. Z-scoring the components within each draft year soaks up some of that, but the position weights are fit over long historical windows. So an elite 1998 WR profile and an elite 2024 WR profile can look a little different under the hood.
There's no free, terms-clean source for full defensive college stats before 2004. So for the 2004 class (n=117 prospects) and earlier, I set AWP to NULL — I won't zero it out or make up a number to fill the hole. Those guys still get an ATH+DPOS-only DMX, just at lower confidence, and the Draft Board says so right on the page.
I credit production without a school-strength knob — level of competition rides in draft capital (DPOS), not inside AWP — and FCS or Division II guys who skip most of the combine can end up with noisy ATH. The dominant small-school profiles still come through fine (Adrian Peterson at Georgia Southern, the Walter Payton Award winners), but I'd do extra homework by hand on the smaller-school prospects.
My "5-year VBD" adds up points-above-replacement across years 1–5 after the draft, on a hard window. That treats a guy with a couple of monster peak years differently from one with a long run of solid-but-mid seasons. The peak_3yr_vbd_avg regression (also in the table above) is the other way to cut it, rewarding peak over total accumulation.
The career tiers (Star / Starter / Contributor / Bust) come from VBD percentiles within the position cohort. The cutoffs are fixed, but they're a bit arbitrary — a guy who lands 2% under the Starter line gets stamped Contributor even when his career really felt "Starter-adjacent". So read the continuous residual right next to the tier label, not instead of it.
Trade-Secret Disclosure
Three buckets of model internals stay private: (1) the DMX position-component weights, (2) the IDP DMX position-component weights, and (3) the DPX layer weights and dynasty-modifier coefficients. All three came out of 25 years of grinding on a dataset I built by hand, and they're the reason this platform is worth anything. My rule is simple: I'll show you every output — the scores, the deciles, the rankings, the regression coefficients on those outputs — and keep the machinery that produces them to myself. Everything you can see in the table above is publicly readable through Supabase. Everything you can't is locked behind row-level security with anon access revoked.
If you're an analyst who wants to check my work, go for it — the regressions above reproduce. Pull DMX scores for the completed-career cohorts, compute career VBD or tier yourself, run OLS, and you should land within rounding of the coefficients I've published here. If you don't, that's a bug, and I want to hear about it.