How we rank players — projected, tested, and never a gut call
Our rankings come from a projection engine we built and backtested on decades of NBA data — with a clear view of our own on every sleeper, breakout, and fade.

Most fantasy basketball rankings are a list. You scroll, you nod, you draft — and you never find out why a name sits where it does. That's the part we care about most. Every number on this site comes out of a projection engine we built and tested ourselves, and every ranking carries a view we can stand behind.
We project first, then rank
A ranking is just an opinion until there's a projection underneath it. So that's where we start: a model that forecasts each player's full per-category line for the season ahead — points, rebounds, assists, steals, blocks, threes, the shooting percentages, and turnovers.
It isn't one number pulled from the air, and it isn't one method either — it's a blend of established forecasting techniques. The backbone is a Marcel-style projection: a recency-weighted average of a player's last few seasons with regression to the mean built in. On top of that we apply Bayesian shrinkage to pull noisy, small-sample stats back toward a sustainable baseline, layer in an explicit age-curve adjustment, and combine several models into an ensemble we trust more than any single one.
Then we adjust for the things that genuinely move fantasy value:
- Role. Usage, touches, and where a player sits in the pecking order — especially after a trade, a signing, or a shake-up on the depth chart.
- Minutes and availability. A great per-minute player who only suits up 55 games is a different asset than one who plays 78. We project how much a player produces and how often he's on the floor — both matter.
- Age curves. A 23-year-old and a 33-year-old coming off the same line are not the same bet. Young players climb, veterans fade, and the curve looks different at each stage of a career.
- Efficiency that won't hold. A career 33% three-point shooter who spiked to 41% is due to come back to earth — classic mean reversion. We separate the real signal from a hot streak so a fluke season doesn't inflate a ranking.
And then — of course — we don't just take the model's word for it. On top of all that math we apply a final layer of our own judgment: the analyst's read on what the numbers can't fully see yet. More on that below.
If an assumption can't be tested, it doesn't ship
Here's the discipline behind all of it: every method, and every assumption inside it, has to beat an honest out-of-sample backtest before it earns a place on the board. We use walk-forward validation — forecasting a past season using only what we'd have known at the time, no peeking at the answer — and check whether the idea actually made the ranking more right across many seasons, not one lucky year.
Plenty of clever-sounding ideas didn't survive that, so we cut them. Being ruthless about what doesn't work is exactly why we trust what's left. We hold ourselves to the outside world, too: measured against the boards of top public fantasy analysts, our season values track at a 0.999 rank correlation across five seasons of history — the math agrees with the best of the field. And where we differ on a player, the difference is deliberate: it's a games-played call or a role call, and the reasoning is written on that player's page.
Why 9-category value isn't just "add up the stats"
In category leagues, a stat line isn't worth its raw total — it's worth how far from the pack it is. Twelve points a night is replaceable; two-and-a-half steals is not. So we measure every category in standard deviations above replacement (a z-score) and weight it by how scarce and separating it actually is, rather than counting.
We also weigh something most lists ignore: consistency. A player who posts the same line every week is worth more in head-to-head than one who alternates booms and busts to the same average. Folding that week-to-week volatility into the number — a variance-adjusted value we call a G-score — is the difference between a list and a board you can actually draft from.
Where our view comes in
A projection gets you a fair board. The edge is what we do with it. The model hands us the numbers; then we pressure-test every name against what we actually expect — and we tell you where we land:
- Sleepers the market hasn't woken up to yet.
- Breakouts — young players with the role and the runway to make a leap.
- Regression candidates — names being drafted on last year's outlier, due to give some of it back.
These are calls we'll put our name on. You won't agree with all of them, and that's the point — we'd rather hand you a clear, defensible take you can act on than a hedge you can't.
It's never "set and forget"
A projection made in October is wrong by November if you don't keep it honest. So we don't. The board is under constant review — every time the news moves (an injury, a trade, a starter going down, a bench role quietly expanding) and as the season's developments reshape what we expect, the projections and our views move with it. What you see is always our current best read, not a preseason guess gathering dust.
What's here now, and what's coming
Right now you can dig into our player projections — every name with a view of its own, updated as the news comes in. Before the season we're rolling out the tools that sit on top of them — trade analysis, waiver and streaming, matchups, and a draft assistant — all powered by the same engine.
If that sounds like your kind of fantasy basketball, join the list. We'll be specific, we'll back every call with the work, and when we're wrong, we'll own it.
Let's go win your league.
New analysis, every week.
Our sharpest reads and the views we'd act on, plus early access to the tools.
Join us
