← All findingssource · memory/project_scout_model_under_bias.md
Diagnosed 2026-06-03. The pre-computed scout picks looked "empty/broken." Reality is two layers:
NBA MODEL = genuinely broken output. /predictions/props?league=nba returns 114/116 UNDER, ~106 "HIGH". Root cause (verified by reading src/batch/plugins/nba/services/prop_prediction_generator.py:513 + the model artifact):
- Weak model — deployed v44 logistic, train acc 0.565. The auto-gating works (today's v46 retrain hit 0.558 holdout, improvement −0.118 → correctly
deployed:false). - Missing/neutral features default to raw
0(b2b/vs_opp→ 0; efficient line →_vs_line≈0), but the model StandardScaler subtracts POSITIVE training means → a raw 0 becomes a NEGATIVE z-score (e.g. season_vs_line (0−0.133)/0.326 = −0.41). With positive weights + negative bias (−0.126), output sinks below 0.5 → UNDER. On sharp markets (Finals) most players sit near the line → mass UNDER collapse. SAME bug class the combo-stat fixf57bac9described ("constant feature vector → deterministic UNDER"); that patched 6 helpers for pr/pa/ra only. Fix direction: impute missing/neutral features to the TRAINING MEAN (z=0), not raw 0; then the model needs real signal (56% acc has ~no edge). projectedValue= recentAvg andpredictedHitRate= historical hit rate — DISPLAY fields, not model inputs; don't read "projects 12.8 but picks UNDER 7.5" as the bug, it's #2.
WNBA model output is balanced (49/50) and internally consistent but confidence values are junk (≈0.002–0.47, all LOW/MEDIUM, no hit-rate history — small-sample).