Up: 2026-27 Fantasy Basketball Encyclopedia
Related: 2026-27 volume-corrected nine-category board Β· 2026-27 fantasy basketball projection methodology Β· 2026-27 points-league rankings Β· 2026-27 fantasy basketball rankings Β· Points leagues versus category leagues Β· Category correlations and roster construction Β· 2026-27 fantasy basketball evidence and confidence policy
Defect 1 β fabricated shot volume
Data/build_encyclopedia.py computes the two ratio-category impacts like this:
python
fga = row.get("fga") or max(1.0, pts / 2.15)
fta = row.get("fta") or max(0.5, pts / 4.8)
row["fg_impact"] = (float(fg) - 0.472) * float(fga) if fg is not None else 0.0
row["ft_impact"] = (float(ft) - 0.780) * float(fta) if ft is not None else 0.0
The or clause fires whenever a dossier failed to state attempts, which is 429 of 549 players β 78 per cent of the encyclopedia, and 160 of the top 200. For those players the FG% and FT% impact terms were computed against a number derived from points scored rather than from any observed shooting.
This is not a rounding problem. In nine-category leagues the percentage categories are ratio categories, and a player's contribution is
\[\text{impact} = \text{attempts} \times (\text{pct} - \text{league pct})\]
so the attempts term carries half the information. Fabricating it corrupts two of the nine categories for four fifths of the player pool.
The failure is also biased rather than noisy. Free-throw volume is a function of how a player draws fouls, not of how many points he scores, so pts / 4.8 systematically understates rim-pressure players and overstates jump shooters:
| Player | Proxy FTA | Real 2025-26 FTA | Error |
|---|---|---|---|
| Giannis Antetokounmpo | 5.8 | 11.6 | proxy priced his .665 FT% at half its true cost |
| Trae Young | ~4.6 | 8.1 | proxy underpriced his .875 benefit |
| Payton Pritchard | ~6.5 | 1.6 | proxy paid for four times the volume he actually shoots |
| Dyson Daniels | ~4.0 | 1.5 | proxy over-penalised a bad percentage on trivial volume |
Repair
Real 2025-26 per-game attempts were recovered for 262 players and projected forward by scaling free-throw rate with minutes, then solving field-goal attempts from the scoring identity so the shot profile reproduces projected points exactly. The method, the validation, and the resulting board are in 2026-27 volume-corrected nine-category board; the script is Data/recompute_corrected.py.
Result: 132 of 262 players move five or more slots, 53 move ten or more, 9 move twenty or more.
Defect 2 β the points model does not match its own documented formula
The same script computes:
python
row["points_score"] = (
pts + 1.2 * reb + 1.5 * ast + 3.0 * stl + 3.0 * blk
+ 0.5 * three_pm - tov
)
2026-27 points-league rankings documents its formula as
\[\mathrm{FP/G} = \mathrm{PTS} + 1.2\,\mathrm{REB} + 1.5\,\mathrm{AST} + 3\,\mathrm{STL} + 3\,\mathrm{BLK} - \mathrm{TO}\]
and attributes it to Yahoo's default points settings. There is no 3PM term in the documented formula, and Yahoo's own settings documentation confirms that three-pointers are not scored separately in default points leagues β they are already inside the points total. The published board therefore ranks players by a formula its own note does not describe.
The + 0.5 * three_pm term double-counts three-point shooting and, like defect 1, biases in a predictable direction:
| Effect | Players | Example moves |
|---|---|---|
| Inflated | volume three-point shooters | Tim Hardaway Jr 188 β 202, Miles McBride 187 β 199, Isaiah Joe 183 β 193 |
| Deflated | non-shooting bigs | Isaiah Hartenstein 119 β 107, Mark Williams 120 β 108, Ivica Zubac 71 β 63, Rudy Gobert 103 β 95 |
51 players move five or more slots and 6 move ten or more when the term is removed. Ranks shown are as-built β as-documented.
Repair
Data/recompute_corrected.py drops the term, so corrected_points_rank reflects the documented Yahoo formula. Anyone in an ESPN points league should not use either version without reading Points leagues versus category leagues first β ESPN's default scores FGM, FGA, FTM and FTA, which changes player values far more than this correction does.
What is not fixed
Both repairs touch scoring only. Everything upstream is inherited unchanged:
- Games played. Every projection's GP forecast is unaudited here. Projecting games played and availability argues this is the single largest remaining error source.
- Minutes. Team minute allocations sum to 240 by construction, which enforces internal consistency but does not make any individual allocation correct.
- The totals proxy.
nine_cat_total_zremains \(z \times \sqrt{GP/82}\), which is not a totals computation. A true totals rank multiplies every counting category by games played and recomputes the league distribution. - Rate projections. The per-game rates themselves come from the July 18 team desks and carry their own uncertainty.
Why this pattern matters beyond these two bugs
Both defects share a shape worth naming, because it will recur in any LLM-built statistical artifact: the code silently substituted a plausible value for a missing one, and the prose downstream described the output as though the value had been observed. The proxy was mentioned in a caveat, but a caveat that says "proxy volume in those cases" reads very differently from "78 per cent of the board's ratio categories are computed from a number we made up."
The lesson for 2026-27 fantasy basketball evidence and confidence policy is that a missing input should propagate as a missing output, not as a default. A player with no recoverable attempts data should be flagged as unrankable in the ratio categories rather than silently assigned a rank.
Open questions
- How many other silent defaults exist in the build and audit scripts? The two found here were both discovered by reading the source rather than by the automated audit, which reported no issues.
- The automated audit in
_Audit.mdchecks structure β frontmatter, links, parse success β but nothing semantic. What would a semantic audit look like, and can it be scripted? - Should the encyclopedia keep a single canonical board, or publish the model board and the editorial board side by side and force every disagreement to be reconciled explicitly?
- The reference rates .472 and .780 are hardcoded. Are they the actual 2025-26 league averages, and does the board state which season's baseline it is measuring impact against?