Cadre
Cet article décrit une amélioration majeure de Foresportia côté “couche statistique” : pas une invention sortie de nulle part, mais un renforcement d’un socle déjà en place (grille de scores, Dixon–Coles, calibration, paramètres par ligue).
En parallèle, Foresportia conserve et fait évoluer son système IA / Machine Learning en surcouche : un challenger calibré (déjà présent depuis un moment) qui peut corriger des biais résiduels et aider au monitoring.
Objectif : des probabilités plus justes, plus stables, et plus auditables. Pas de promesse marketing : une probabilité n’est jamais une certitude.
Pourquoi faire évoluer la couche statistique (plutôt que tout “réinventer”) ?
Foresportia a toujours reposé sur une idée simple : le football est incertain, mais pas aléatoire. Le cœur du moteur probabiliste, c’est une grille de scores P(i, j) (score domicile = i, score extérieur = j) qui sert ensuite à dériver des probabilités cohérentes : 1X2, Over/Under, BTTS, clean sheets, etc.
Cette grille P(i, j) existe depuis longtemps dans le projet, mais sa qualité dépend fortement de l’hypothèse faite sur la distribution des buts et sur les paramètres structurels (par ligue, par période, par contexte). Historiquement, la base “standard” est Poisson, couplée à des correctifs reconnus comme Dixon–Coles. C’est robuste, interprétable… mais il y a un point qui revient régulièrement quand on observe des historiques réels : la variance n’est pas toujours compatible avec Poisson.
Le point clé (et le vrai “bug” de Poisson)
Poisson impose une contrainte forte : variance = moyenne. Or, certaines ligues (ou certaines périodes de saison) ont des matchs plus “chaotiques” : styles de jeu plus ouverts, écarts de niveau, instabilités de forme, dynamiques de calendrier… Résultat : des scores extrêmes un peu plus fréquents que prévu, et une distribution réelle plus “étalée”.
L’idée de cet upgrade n’est donc pas de dire “avant c’était nul, maintenant c’est bien”. L’idée, c’est : la base était solide, et on a identifié où elle pouvait être trop restrictive. Donc on ajoute de la flexibilité, mais de façon contrôlée (et testée).
Amélioration #1 — Surdispersion : Poisson reste la base, Negative Binomial s’active quand c’est justifié
Pour mieux gérer ces cas “variance > moyenne”, Foresportia introduit une option surdispersée : Poisson-Gamma, qui revient à une Negative Binomial sur le nombre de buts. Concrètement : on ne “remplace” pas Poisson partout. On garde Poisson comme modèle minimal et stable, et on ajoute un degré de liberté uniquement là où les données indiquent que c’est utile.
Le paramètre clé : α (alpha)
Dans une Negative Binomial paramétrée par la moyenne λ et un paramètre de forme α, la variance devient : Var = λ + λ²/α. Plus α est grand, plus on revient vers Poisson. Plus α est petit, plus on autorise de variabilité.
Comment Foresportia décide ? (et pourquoi c’est important)
Ici, la nuance est essentielle : ce n’est pas “on choisit Negative Binomial parce que c’est plus sophistiqué”. Ce qui compte, c’est la preuve empirique que la ligue présente une surdispersion crédible. L’approche est donc : comparer l’ajustement Poisson vs Negative Binomial sur historique (log-vraisemblance / comparaison de modèles), avec des garde-fous si les données sont trop faibles.
- Poisson = baseline par défaut (stable, interprétable)
- Negative Binomial = activée seulement si le signal de surdispersion est solide
- α par ligue = valeur estimée si fiable, sinon fallback prudent (neutre)
Gain attendu
Une meilleure répartition de la masse de probabilité sur les scores plausibles, surtout dans les ligues “ouvertes” ou instables. Et surtout : une réduction des excès de confiance involontaires, car la variance est mieux représentée.
Amélioration #2 — Paramètres par ligue : consolidation, garde-fous, et approche bayésienne
Deux vérités coexistent en modélisation football : (1) certains paramètres sont structurellement différents selon les ligues, (2) estimer trop agressivement sur peu de data peut dégrader la qualité (sur-ajustement). Foresportia utilisait déjà des paramètres par ligue, mais cette itération vise une chose : les rendre plus robustes et plus auditables.
Ce qui est désormais mieux géré (sans “réinventer” le moteur)
- α (surdispersion) : activable par ligue, avec fallback neutre
- ρ (Dixon–Coles) : borné, avec atténuation / prudence en début de saison
- HFA (home field advantage) : shrink + progression
- Calibration du nul : facteur par ligue + mode contrôlé
- Température : possible par ligue
Pourquoi “bayésien” est un mot important ici
Foresportia ne fait pas “que Poisson”. Une grosse partie de la stabilité vient d’une logique bayésienne : priors, shrinkage, et hyperparamètres qui évitent les estimateurs extrêmes quand l’information est insuffisante. Concrètement, c’est ce qui permet de gérer proprement des ligues moins fournies, ou des débuts de saison où tout bouge vite.
La philosophie (anti “sur-interprétation”)
Quand la data est faible, Foresportia préfère une sortie plus neutre plutôt qu’un paramètre agressif. C’est contre-intuitif si on cherche des “gros %”, mais c’est exactement ce qu’on veut pour une IA fiable : ne pas confondre signal et bruit.
Et c’est précisément dans cet espace (hyperparamètres, shrink, calibration, robustesse) que le mélange statistiques + ML est le plus intéressant : on conserve un socle interprétable, tout en améliorant la qualité probabiliste globale.
Amélioration #3 — La grille de scores comme “source de vérité” (et pourquoi c’est systémique)
Un point central de Foresportia (et qui ne date pas d’hier) : une fois la grille P(i, j) estimée, une grande partie des marchés est dérivée directement de cette grille. C’est une décision d’architecture importante, parce qu’elle garantit la cohérence interne.
Résultat : si on améliore la couche statistique (surdispersion, paramètres ligue, garde-fous), alors ce n’est pas un “patch local”. C’est un gain systémique : toute la chaîne en bénéficie.
Marchés dérivés depuis P(i, j)
- BTTS (les deux équipes marquent)
- Over/Under 1.5 / 2.5 / 3.5
- Clean sheets (domicile / extérieur) + “win to nil”
- Victoire par au moins 2 buts
- Double chance (1X / 12 / X2) + DNB
- Entropie (lisibilité) + xG estimés depuis la grille
Pourquoi c’est important
On évite d’avoir un modèle “1X2”, un modèle “BTTS” et un modèle “Over 2.5” qui ne se parlent pas. Une seule distribution des scores pilote tout, ce qui rend l’ensemble plus cohérent… et plus auditables.
Est-ce que ça va changer les probabilités affichées ?
Potentiellement, oui — et c’est attendu. Quand on améliore la distribution des scores (variance mieux modélisée, paramètres ligue stabilisés), on peut redistribuer légèrement la masse de probabilité entre issues. Le but n’est pas de “gonfler” des pourcentages : c’est d’aligner ce qu’on annonce avec ce qui se passe réellement (calibration).
La règle d’or
Une probabilité “plus haute” n’est pas automatiquement une meilleure prédiction. Une probabilité utile est une probabilité calibrée. Si Foresportia annonce 60 %, l’objectif est que ce type de match gagne ~60 % du temps (sur un grand volume).
En pratique, ces upgrades visent surtout à : (1) réduire les excès de confiance, (2) mieux représenter les queues de distribution, (3) stabiliser les paramètres par ligue, (4) renforcer l’auditabilité et le monitoring.
Le challenger IA/ML : une surcouche qui existe déjà, et qui continue de progresser
Il y a parfois un malentendu sur “l’IA” : ce n’est pas forcément un monolithe qui remplace tout. Dans Foresportia, le modèle statistique reste le cœur interprétable et robuste. Et autour, un challenger IA / Machine Learning (déjà en place depuis un moment) joue un rôle précis : corriger des biais résiduels et aider à détecter / limiter certaines sous-performances.
C’est du ML au sens strict (apprentissage sur historique, métriques, validation temporelle), mais on parle d’IA dans l’article pour les mots-clés et parce que c’est le terme courant. L’important : on reste dans une logique auditables et calibrée.
Principe : champion / challenger (industrialisation, pas “magie IA”)
Philosophie “ingénierie” : le baseline statistique est le champion (stable, interprétable), et le ML est le challenger (plus flexible). On peut utiliser le challenger de trois manières :
- Blend : combiner baseline + IA avec un poids (choisi sur validation temporelle)
- Correction ciblée : renforcer le challenger sur certains contextes s’il améliore objectivement
- Prise de poids contrôlée : si une sous-performance est détectée, ajuster le poids (sans casser la calibration)
Pourquoi la calibration est non négociable
Un modèle ML peut être “bon” en classement… tout en étant mauvais en probabilités (surconfiant). Foresportia impose donc une calibration (type “sigmoid/Platt”) afin que les sorties soient interprétables comme de vraies probabilités. Sans calibration, “70 %” peut être juste un score interne mal étalonné.
Comment on évite de tricher avec le passé
Le challenger est évalué en split temporel strict : entraînement sur le passé, choix des réglages sur validation, puis test final sur un bloc futur jamais vu. Les métriques suivies privilégient la qualité probabiliste : LogLoss (pénalise la surconfiance) et Brier score.
Le point important
Le challenger n’est pas là pour “faire monter p_max”. Il est là pour réduire des erreurs probabilistes mesurables (logloss/brier), et corriger le baseline quand l’historique montre qu’il y a mieux à faire.
Monitoring : piloter les upgrades avec des métriques, pas avec des “% qui font plaisir”
Toute la logique est orientée “calibration dans le bon sens” : si une amélioration augmente les probabilités sans améliorer la LogLoss/Brier sur des tests temporels, elle est rejetée (ou bridée). C’est exactement ce qui distingue une itération sérieuse d’un simple “boost de confiance”.
Métriques et signaux surveillés
- LogLoss : métrique reine pour les probabilités (la surconfiance coûte cher)
- Brier score : erreur quadratique des probabilités
- Calibration par bins (p_max) : est-ce que 0.60 gagne ~60 % ?
- Suivi par ligue : les ligues n’ont pas le même bruit ni les mêmes styles
- Fenêtres temporelles : détecter drift et périodes anormales
Et c’est là que le champion/challenger devient vraiment utile : le challenger peut être plus ou moins pondéré selon les résultats observés, mais toujours sur des critères objectifs, et toujours avec une calibration surveillée.
Résumé : ce qui a été amélioré (et pourquoi ça compte)
- Surdispersion par ligue : Poisson reste la base ; Negative Binomial s’active seulement quand les données la justifient.
- Paramètres ligue renforcés : α/ρ/HFA/draw/temp consolidés + garde-fous (fallback neutre si data faible).
- Approche bayésienne : hyperparamètres et shrinkage pour éviter les estimateurs extrêmes (et stabiliser Dixon–Coles).
- Grille P(i,j) = source de vérité : marchés dérivés cohérents (BTTS, O/U, clean sheets, etc.).
- Challenger IA/ML déjà en surcouche : correcteur probabiliste calibré, évalué en split temporel, utilisable en blend/pondération contrôlée.
- Pilotage par métriques : décisions guidées par LogLoss/Brier/calibration, pas par des % plus “marketing”.
Résultat attendu : un système plus stable et plus honnête sur le long terme — avec un socle statistique renforcé, et une surcouche ML capable d’aider à corriger des biais sans sacrifier la transparence.