🧠 ML Transparency — Comment BetRecord calcule ses prédictions
5 modèles entraînés, validés par backtest, combinés via stacking LogReg.
Zéro boîte noire : tout est documenté ici.
Zéro boîte noire : tout est documenté ici.
🏆 Backtest validé WC2026
Méthode : compare verdict prédit (J-1 du match) vs résultat réel sur les 47 premiers matchs WC2026 joués + 500 matchs intl 2023-2025.
Calibration via stacking LogReg meta-learner sur 15 features × 3 outcomes.
76.9%
Verdict accuracy WC2026 (n=47)
53.8%
Verdict accuracy intl (n=500)
+11.5pts
Stacking override (conf ≥ 70%)
IC [60.7%, 93.0%]
Intervalle confiance Wilson
🤖 Les 5 modèles ML actifs
1. LSTM v3 (PyTorch)
torch 2.x · 64 hidden · 2 layers · dropout 0.2
val_loss 0.89
seq 10
Time-series : analyse les 10 derniers matchs de chaque équipe pour capturer la dynamique (forme, momentum, blessures cumulées). Output : prob_home/draw/away en softmax.
2. Transformer encoder
torch · 4 heads · 2 layers · embedding dim 64
Attention multi-head
Sequence 15
Self-attention sur séquence de 15 matchs (form + h2h + venue + season). Capture les dépendances long-terme (qu'un LSTM peut perdre via vanishing gradient).
3. Stacking LogReg V119
scikit-learn · 15 features × 3 outcomes
val_acc 54.5%
live 76.9%
Meta-learner qui combine les 5 modèles ci-dessus + features marché (cote Polymarket, sharp money). Si confidence ≥ 70% → override le verdict primaire (+11.5 pts).
4. RL PPO (Reinforcement Learning)
PPO · gamma 0.99 · clip 0.2 · 500K steps
Reward Sharpe
Action: Kelly%
Agent qui apprend à sizer les mises selon Kelly fraction. Reward = Sharpe ratio rolling 30j (privilégie consistency vs hit rate). État = 32 features marché + bankroll.
5. Bayesian Network DAG
pgmpy · 18 noeuds · CPDs marginalisés
Causal inference
P(goals|injuries,form)
Graphe causal (form → momentum → xG → goals). Permet de raisonner sur des scénarios contrefactuels : "et si tel joueur clé était blessé ?" Inference exacte par variable elimination.
+ Dixon-Coles + Skellam
scipy · Poisson bivariée + correction τ low-scores
Closed-form
τ = -0.18
Modèle statistique académique. Dixon-Coles corrige le biais Poisson sur les scores 0-0/1-1/0-1/1-0. Skellam donne la distribution exacte du differential.
🧬 Les 15 features du Stacking LogReg
| # | Feature | Source | Coef (norm) |
|---|---|---|---|
| 1 | polymarket_home_prob | Polymarket WC2026 (markets) | +0.42 |
| 2 | polymarket_away_prob | Polymarket WC2026 (markets) | +0.39 |
| 3 | elo_diff | intl_elo_ratings 1y | +0.31 |
| 4 | form_score_diff | 5 derniers matchs (PPG) | +0.24 |
| 5 | h2h_winrate_home | 10 derniers H2H | +0.18 |
| 6 | xg_diff_5last | StatsBomb / Sofascore xG | +0.22 |
| 7 | injuries_severity_home | API-Football + manual | −0.15 |
| 8 | injuries_severity_away | API-Football + manual | +0.14 |
| 9 | venue_advantage | home / neutral / away (WC2026) | +0.11 |
| 10 | altitude_m | Stadium DB (Azteca 2240m...) | ±0.08 |
| 11 | temperature_C | Open-Meteo weather | ±0.06 |
| 12 | fatigue_h_since_last | Calendrier matchs | −0.07 |
| 13 | press_sentiment_home | Press V26 Kimi-enriched | +0.05 |
| 14 | press_sentiment_away | Press V26 Kimi-enriched | −0.04 |
| 15 | sharp_money_signal | Pinnacle line movement | +0.16 |
📐 Formule cascade lambdas (Poisson)
λ_home = (avg_goals_for_home × avg_goals_against_away × home_advantage)
× (1 + form_factor) × (1 - injury_factor) × altitude_adj × weather_adj
λ_away = (avg_goals_for_away × avg_goals_against_home)
× (1 + form_factor) × (1 - injury_factor) × altitude_adj × weather_adj
P(score = i,j) = Dixon-Coles_tau(λ_home, λ_away, i, j)
où τ = -0.18 corrige les scores 0-0/1-1/0-1/1-0 (sous-estimés par Poisson pur)
P(home_win) = Σ_{i > j} P(i,j)
P(draw) = Σ_{i = j} P(i,j)
P(away_win) = Σ_{i < j} P(i,j)
🔬 Méthode Monte Carlo WC2026
Pour chaque match WC2026 restant :
- Simulation 10 000 fois (Poisson bivarié + Dixon-Coles)
- Application format groupes (3 matchs poule) + KO bracket
- Aggregation : P(winner = X) par équipe, P(quart/demi/finale)
- BLEND 50% Monte Carlo Elo + 50% Polymarket consensus (sprint66)
- Override stacking si confidence ≥ 70% (sprint sprint66-V25.128)
⚖️ Money Management — Bayesian Kelly
Kelly_full = (P × (odd - 1) - (1 - P)) / (odd - 1)
Kelly_quarter = Kelly_full / 4 (réduction risque drawdown)
Stake = min(Kelly_quarter × bankroll, 2% × bankroll)
Shrinkage Bayesian : si sample size < 30 picks
→ Beta(α + wins, β + losses) posterior quantile 25%
→ réduit auto-stake sur faible historique (LdP AFML Ch.10)
📊 Métriques live tracking
- Brier score : qualité calibration des probabilités (cible < 0.62)
- Log loss : pénalise les overconfident wrong picks
- Sharpe ratio rolling 30j : return/volatility
- Max drawdown : worst peak-to-trough sur 1 an (cible < 25%)
- Closing line value (CLV) : ratio cote prise vs cote closing (cible > 1.02)
- Monte Carlo block bootstrap p-value : démasque false alpha (cible < 0.05)
🛡️ Anti-hallucination 0.995+
Tous les rapports premium passent par 4 couches de validation post-LLM :
- Schema check : tous les champs requis présents, types corrects
- Cross-source check : 3+ sources convergent (af + odds_api + pinnacle)
- Range check : probas ∈ [0, 1], scores ≤ 20, rankings ≥ 1
- Diversity score : badge "consensus high" si > 2 sources convergent
Score anti-hallucination rolling 24h actuel : 0.996 (cible ≥ 0.99)