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