- TransferCausalModel(BaseModel): estimates causal effect of roster changes
on team performance using a causal forest (Athey et al., 2019)
- Dual backend: econml.grf.CausalForest (preferred) or pure sklearn fallback
with honest estimation (split on half, estimate on other half)
- predict_effect(): ATE, CATE, and 95% confidence intervals
- predict_individual_effect(): net effect of adding a player to roster
- rank_transfers(): rank candidate pool by predicted causal effect
- analyze_confounders(): identify features that confound transfer effect
- subgroup_effects(): estimate treatment effect by subgroup
- _build_roster_features(): compute roster-level features (role counts,
points, minutes, age, formation entropy, interaction level)
- _build_player_features(): treatment features (projected points, role,
scarcity, value over replacement)
- AuctionEffectAnalyzer: adjusts auction bids based on causal effects
- Updated 26_27_teams.yaml with confirmed teams from live Fantacalcio.it (Venezia,
Frosinone, Sassuolo, Parma, Como — all 20 teams confirmed)
- Fixed FantacalcioScraper HTML roster parser to match live quotazioni page structure
(data-filter-role-classic, player-row tr elements)
- Added 26/27 Quotazioni_Fantacalcio: 505 players with FVM values, QI/QA prices
- Scraped real 25/26 season stats from statistiche-serie-a (663 players)
- Built expert model using real 25/26 FV baselines + home/away adj + opponent strength
- Generated Matchday 1 predictions for 388 matched players
- MCTS lineup optimization: Captain Malen (Roma, 9.67 FV), 98.1 expected pts
- All 31 tests passing