How the math works
The league had two methodologies: the original Google Sheet model (we’ll call it v1) and a new z-score model (v2). Both are computed from every season’s real data; you can toggle between them anywhere on the site.
The v2 z-score model in plain English
- Magnitude preservation. A z-score says how many standard deviations above or below the league mean a manager landed that season. +1σ on win % means exactly the same thing as +1σ on points, regardless of how spread out the league was.
- Comparability across metrics.Final standing, win %, share of points, and all-play win % have wildly different scales. Z-scoring puts them on the same axis so the weighted average is meaningful.
- Era-comparability. Yahoo era (2019–2022) had no weekly score data, so it uses 3 components renormalized to 1/3 each. The Sleeper era (2023+) adds the all-play component and uses 4 × 0.25. Both produce comparable career numbers because z-scoring strips out scale differences.
- Win % excludes the median game.2024 added the median bonus; counting it would silently inflate Sleeper-era win % relative to Yahoo. The v2 model uses head-to-head wins only, so the same season has the same meaning across eras.
- Display scale. The raw career number is roughly in [-1.0, +1.0]. We rescale to 1250 + 100·raw (Elo-anchored): 1250 ≈ a perfectly average career, +1σ ≈ 1350.
- Low-confidence flag.A manager with fewer than 3 seasons has a career mean that’s very sensitive to a single outlier season. We visually flag those rows so a 2-season manager isn’t mistaken for a steady performer.
v1 ↔ v2 side-by-side
Same managers, same seven seasons, two different formulas. Δ is how far a manager moves when you switch from v1 to v2 (positive = climbs in v2).
| v2 rank | Manager | v2 score | v1 rank | Δ |
|---|---|---|---|---|
| 1 | Kevin Hulsebosch | 1317 | 1 | 0 |
| 2 | Ravi Mody | 1300 | 3 | +1 |
| 3 | Matt Vitale | 1293 | 4 | +1 |
| 4 | Patrick Hulsebosch | 1291 | 2 | -2 |
| 5 | Mike Krawzak | 1259 | 5 | 0 |
| 6 | Dave Steele | 1243 | 6 | 0 |
| 7 | Kevin Brandenberg | 1228 | 7 | 0 |
| 8 | Ben Winski | 1216 | 8 | 0 |
| 9 | Sean Haney | 1214 | 10 | +1 |
| 10 | Jeff Steele | 1211 | 9 | -1 |
| 11 | Eric Thomas | 1193 | 11 | 0 |
| 12 | Pat Sturm | 1158 | 12 | 0 |
| 13 | Ken Goebel | 1151 | 13 | 0 |
Worked example: Kevin Hulsebosch (v2 rank 1)
Each row is one season. The weighted column is that season’s contribution to the career mean. The σ columns are the per-component z-scores (higher = better).
| Year | Era | Final z | Win% z | Share z | All-play z | Weighted |
|---|---|---|---|---|---|---|
| 2019 | yahoo | 0.87 | 1.86 | 1.44 | — | 1.39 |
| 2020 | yahoo | -0.17 | 0.35 | 1.81 | — | 0.66 |
| 2021 | yahoo | 1.22 | 0.42 | 0.34 | — | 0.66 |
| 2022 | yahoo | -0.53 | -0.37 | -0.62 | — | -0.51 |
| 2023 | sleeper | 1.57 | 1.57 | -0.41 | -2.89 | -0.04 |
| 2024 | sleeper | 1.22 | 1.43 | 0.95 | 1.42 | 1.26 |
| 2025 | sleeper | 1.22 | 1.05 | 1.31 | 1.54 | 1.28 |
Hover any σ cell for the percentile-rank intuition.
Both models reconcile to the original spreadsheet within ±0.01 for v1. v2 snapshots are recomputed whenever new Sleeper data lands.