SIGN IN SIGN UP

Fix stale/retired players ranking as top recommendations

Found by testing draft_backtest on 2022 data: Todd Gurley, retired since
2020, came back as the algorithm's top recommendation for 11 straight
rounds. Two compounding bugs, both fixed:

1. synthetic_adp derived its fallback purely from the model's own positional
   rank, with no regard for whether the player is still in the league. A
   player missing from real ADP because he's retired got the same treatment
   as one missing because of a scraping gap -- if the model liked his stale
   numbers, it handed him an elite fake ADP (Gurley: adp=1.0), which then
   made recommend() treat him as impossible to wait on. Now scales with how
   many seasons stale a player's last active season is relative to the
   board's freshest players: +200 ADP per season stale, enough to bury
   anyone who missed the most recent bounded season.

2. Even with a buried ADP, his projection itself was still computed from
   that same stale-but-strong season, so the model reasonably (if wrongly)
   read him as a great value nobody was drafting. baseline_ppg now also
   discounts 60% per season stale (compounding), so a year-plus absence
   actually suppresses the projection instead of just the perceived cost.
   Rookies are unaffected (last_season is NaN pre-debut, and they're
   already capital-scaled, not derived from fp_mean.

Verified: 2022 backtest algo picks went from Todd Gurley dominating 11 of
13 rounds (algo_points totaling 290.5, an obvious tell) to a full slate of
real, active 2022 players (algo_points 1897.4, in line with every other
season tested). Spot-checked the live board: top active players are
unaffected (stale=0), and real injury-affected veterans (Joe Mixon, Tank
Dell) still carry their genuine consensus ADP independently -- the two
mechanisms do different jobs, and this fix only removes the case where
neither had a real signal behind it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
EOF
)
Z
zacharytran26 committed
4a20af84769c386a815ca819653685b5104518d7
Parent: 4cfb8af