How every number on this site is computed — and what it can't tell you
Each section opens with a plain-English summary (the green block), then the full technical detail for stats-minded readers — read as much or as little as you like.
A single 20–99 rating of how good a player is right now, built mostly from her box-score stats this season. We adjust it so it’s fair and hard to fool: we account for how fast her team plays, lean on last season too (more so for veterans, whose level is steadier), don’t let a handful of great or terrible games swing it too far, and give rookies credit for draft pedigree until they’ve played enough. Rule of thumb: 66+ is a star, 40–65 a rotation player, under 40 fringe.
Every player's talent score starts from her per-game box-score production this season:
production = PTS + 1.1·REB* + 1.5·AST + 2.5·STL + 1.5·BLK − 1.0·TOV (+ a small shooting-efficiency bonus)
*rebounds earn full weight up to 9 per game (minutes-adjusted) and half weight beyond — high totals are partly zero-sum with a player's own teammates, so volume rebounding alone can't stack into a star-tier score
Production is pace-normalized (scaled by league-average possessions over the player's team's possessions — the same skill produces ~4% more raw production on the league's fastest team than its slowest), and every counting stat ispadded toward the league-average rate by an empirically fit amount of league-average minutes — stable stats like rebounds keep almost all of a real sample, noisy ones like steals and turnovers regress hard (padding constants fit on the committed 1997–2026 panel; the padding method of Medvedovsky/Tango). Low-minute players get a damped per-36 correction (scaled toward a 27-minute rotation role, at 35% strength, capped — full per-36 extrapolation flatters bench small samples too much). Production is clamped to a [10, 50] band, normalized, decompressed with a gamma of 0.85 so mid-tier players don't pile up at the bottom of the scale, and mapped onto 20–99.
Three honesty mechanisms sit on top. Last season is weighted by its share of the evidence, and by why the seasons differ: prior-season games count against current-season games at an age-dependent discount (a 30+ veteran's established level is sticky — her prior carries up to 55%; a young player's level genuinely moves year to year, so hers fades fast), and a season-over-season minutes change cuts the prior's weight further — a breakout that arrives with a real role expansion is trusted more than a same-minutes hot streak. Net effect: an established veteran's collapse or career year is priced against her track record rather than taken at face value, while a player who barely played last year gets almost no prior-season anchor. Small samples are shrunk toward replacement level (score 30) until a player has ~12 games of evidence across this season and last. Rookies and low-sample sophomores blend in a draft-pedigree prior (from actual draft slot) that fades as real minutes accumulate and vanishes entirely by a player's third year. And five small bounded nudges — offensive impact and defensive impact (wRAPM — lineup-adjusted plus-minus that controls for the other nine players on the floor, from Help the Helper — blended against each player's own multi-season prior on thin samples), true-shooting efficiency vs. usage (faded for tiny shot samples — a great percentage on a handful of attempts is noise, not a shooting profile), a usage-fair turnover-rate correction (TOV%), and a youth future-value nudge (at most +4, fading to zero by age 25) — refine the production score without overriding it.
Scale legend everywhere on the site: 66+ star · 40–65 rotation · <40 fringe.
To project future seasons we use one league-wide pattern of how players tend to improve or decline with age — measured from every WNBA season since 1997, not guessed. Young players usually rise, most peak in their mid-to-late 20s, and minutes and scoring fade in the mid-30s. Because it’s an average, any one player can beat it or miss it, so we show a range around each projection rather than a single certain number.
Every future-year number on this site — the contract-outlook rows on player pages, the 2028 projection column, projected stat lines — walks one curve, fitted from the league's full history rather than hand-tuned. The panel: official stats.wnba.com league data, 1997–2025, 4,692 player-seasons from 1,144 players, yielding 2,373 consecutive qualified season-pairs(≥10 GP and ≥10 MPG in both years).
The fit uses the classic delta method: for each player with back-to-back qualified seasons, take the year-over-year change in per-36 production rate (the same production formula above, so deltas translate directly onto the talent scale), bucket by age, and weight by the harmonic mean of minutes. Within-player differencing removes player-quality confounds. The observed deltas:
| Age | Season pairs | Weighted mean Δ | Median Δ |
|---|---|---|---|
| 23 | 76 | +0.24 | +0.42 |
| 24 | 224 | +0.71 | +0.80 |
| 25 | 245 | +0.56 | +0.28 |
| 26 | 250 | +0.31 | +0.30 |
| 27 | 252 | −0.01 | −0.25 |
| 28 | 230 | +0.08 | +0.11 |
| 29 | 207 | −0.78 | −0.62 |
| 30 | 181 | −0.19 | −0.34 |
| 31 | 159 | −0.44 | −0.40 |
| 32 | 145 | −0.52 | −0.12 |
| 33 | 117 | −0.43 | −0.84 |
| 34 | 93 | −1.16 | −0.89 |
| 35 | 71 | −0.44 | −0.66 |
| 36 | 52 | −0.57 | −0.88 |
| 37 | 39 | −1.85 | −2.49 |
| 38 | 22 | −1.55 | −2.16 |
Per-36 production points per year of aging. Growth through 26, plateau 27–28, decline from 29, steepening from 34, cliff at 37+.
Two corrections before shipping. Survivorship: the delta method only sees players who survive into a second qualified season, so the worst decliners vanish from late-age buckets and raw late-age deltas read too shallow. Exit rates double from the early 20s (~11%) to the mid-30s (~25%), and exiting players run 2–4 rate points below age-peers in their final season — so late-age deltas are shifted down by roughly −0.2 (29–31), −0.3 (32–34), and −0.45 (35+). Young-side censoring: requiring a qualified firstseason drops every bench-to-breakout leap, and weighted means get dragged by low-minute noise — so the young bands use bucket medians, with ≤23 floored at the age-24 value.
Conversion to the talent scale: per-36 rate Δ × 0.75 (a 27-minute rotation role) × ≈2.0 (the local slope of the production→talent normalization) — net, talent Δ/yr ≈ 1.5 × rate Δ/yr. The shipped curve, smoothed over 3-year windows:
| Age band | Talent Δ / yr | Note |
|---|---|---|
| ≤23 | +1.2 | bucket median, floored at the age-24 value |
| 24–25 | +1.1 | bucket median (means are biased low here — see below) |
| 26 | +0.5 | |
| 27–28 | 0.0 | peak plateau |
| 29–31 | −0.9 | |
| 32–34 | −1.4 | |
| 35+ | −2.2 | the real cliff |
The headline from the fit: the real curve is roughly half as steep as intuition suggests. Players improve modestly in their early 20s (+~1/yr, not +2), hold their peak through 28, and decline gently until the mid-30s. Guards and bigs age nearly identically in this data (bucket differences of ±0.3 are inside sampling noise), so one league-wide curve serves everyone — a position split would be false precision. Advanced-stat aging corroborates rather than adds signal: decline shows up in usage before efficiency, the age-24 true-shooting leap is real, and net-rating aging is too noisy to model.
Per-stat aging (July 2026 overhaul): projections no longer walk one composite curve — each per-36 stat walks its own fitted curve, and minutes walk theirs. The panel says skills age differently: scoring has the classic arc, rebounding is nearly flat at every age, assists improve into the early 30s, and the dominant late-career effect is minutes (−2+ mpg per year past 34, survivorship- corrected) — aging in this league is mostly a role story, not a rates story. Projected stat lines and projected talent both read from this per-stat walk. Every projection carries a 10th–90th percentile range from held-out backtest error, conditioned on age tier and track record, and player pages listaging comps — the nearest historical player-seasons by age, profile, and role — with a durability figure (the share of comps with no qualified season two years on). Comps are context only: used as a projection input they LOST to the per-stat pipeline out of sample, so they don't feed the numbers.
Out-of-sample validation (July 2026): the full projection pipeline — two-season blended base plus the banded curve — was backtested walk-forward on the same official panel: parameters fit on seasons through 2017, error measured only on held-out 2018–2025 (678 one-year and 591 two-year pairs). Typical miss: ≈4 talent points at one year, ≈5 at two. The blended base beat a single-season base by ~5% at two years (and the train-optimal blend weight independently matched the shipped evidence-share weights); adding regression-to-the-mean on top did not beat the shipped model out of sample, and a smooth per-age curve tied the published bands — so neither was adopted. Full tables:analysis/projection-backtest.md.
Projections are labeled and visually faded wherever they appear because they are estimates of average aging, not measurements. Full study, tables, and reproduction steps: analysis/aging-curve.md.
Contract surplus asks whether a player is worth more or less than she’s paid: a star on a cheap deal has big positive surplus; an average player on a max contract has negative surplus. Trade value then combines how good she is, that contract surplus, and her age — a young, cheap, productive player is the most valuable thing you can trade for. This trade-value number is what the trade grades actually weigh.
A salary maps to the talent you'd expect it to buy, linear in cap share under the 2026 CBA's $7M team cap:
expected talent = 25 + (salary / $7M) × 250 — a $1.4M supermax expects ~75; a ~$270K rookie minimum expects ~35
downside is bounded by replaceability: per-year surplus floors at −(salary − rookie minimum) on the same slope, so a minimum contract can never grade as an overpay (replacement production is freely available at the minimum) while a $1.19M albatross still bottoms out near −33
Surplus is talent minus that expectation, computed per remaining contract year from sourced season-by-season salaries: each future year uses the aging curve's projected talent against that year's actual salary, discounted 15% per year out (projection uncertainty compounds), then averaged. This is how a 23-year-old and a 31-year-old on identical contracts finally read differently — one projects to outgrow her deal, the other to decline underneath it. Draft picks carry no salary, so a pick's whole value above the salary floor counts as surplus.
Draft picks are priced off the prospect-pedigree scale for their projected slot (a rebuilding team's first projects earlier — and richer — than a contender's), then discounted for uncertainty: the value above the scale floor is haircut 15% (the slot is a projection, the class is unknown, and even a hit rarely produces like an established player as a rookie), minus a further 4 points per year until the pick conveys. Net effect: one future first sits clearly below a cost-controlled young star — a deliberate calibration choice, since no public WNBA pick-trade market exists to fit against.
Trade value (the number on player pages and the league table) is availability-adjusted talent plus 0.375 × surplus, clamped to 20–99 — the same talent-to-surplus ratio (40:15) the trade grade uses, collapsed into one per-asset number.
Trade grades weigh four factors per team: talent delta 40%, front-office priorities (timeline fit) 30%, positional fit 15%, and surplus delta 15% — behind a hard cap-legality gate under the 2026 CBA rules. Players and picks enter every value comparison at trade value (talent + surplus + availability), so a cheap young star is never undercounted next to a pick, and all three value deltas — talent, surplus, and priorities — blend each side's best asset with a diminishing-returns sum of the rest, so one genuine star outweighs a pile of role players while receiving an extra asset can only ever help a side, never hurt it. The priorities factor scales each asset's trade value by how well its age and contract profile match the team's timeline: a rebuild pays up for youth and cost control, a win-now team mostly just wants the best player — and trading away a young, cost-controlled cornerstone reads as anti-timeline for anyone not rebuilding.
Stats come from ESPN’s public WNBA data; salaries come from public cap sheets. Everything is refreshed automatically every day, and the “Data as of” date at the top of every page tells you the last update.
Salaries and contract years come from Her Hoop Stats cap sheets, grounded in the 2026 CBA structure ($7M cap, $1.4M supermax, ~$270K–$300K rookie-tier minimums); figures that can't be publicly confirmed are flagged as unverified in the data rather than guessed. 2026 per-game and advanced stats (TS% / usage), standings (and each team's derived win-now / retool / rebuild direction), and injury flags all come from ESPN's public site API, refreshed automatically every day in season; the prior-season (2025) stabilizer stats come from RealGM. The aging-curve panel comes from the official stats.wnba.com league API.
Lineup-adjusted player impact (wRAPM), turnover rates, and measured team-strength splits come from Help the Helper, an independent women's-basketball analytics site — used with attribution and our thanks. Their wRAPM methodology is described on their glossary page; how (and how much) this site leans on it is documented in the talent-score section above.
The "Data as of" badge on every page shows the newest date in the underlying dataset — currently 2026-07-28.
These are estimates, not gospel. The model can’t see locker-room fit, coaching, unlogged injuries, or a player suddenly figuring something out. Treat the grades as a smart, transparent starting point for an argument — not the final word.
Box-score production misses most of defense beyond steals and blocks — that blind spot is inherited by everything downstream, including the aging fit. The curve prices average aging including typical injury risk; it cannot see an individual ACL tear coming, and rehab risk is not modeled. Young-age growth is understated by construction (the qualification requirement censors breakout leaps), which is partly why the prospect-pedigree blend exists. The survivorship correction's unobserved-decline gap is a bounded assumption, not an estimate. League ages are season-level integers, not birthdates. And a trade grade is a model's opinion about value, fit, and timeline — not a prediction of what a real front office would do.