En bref
Les marchés de buts (BTTS, Over/Under) sont de retour sur Foresportia. Pas parce qu'on les a simplement "rallumés", mais parce qu'on a reconstruit un moteur dédié, séparé du moteur 1X2. Cet article explique pourquoi c'était nécessaire, comment ça fonctionne, et ce que les premiers résultats montrent — avec transparence.
Pourquoi les marchés de buts avaient été retirés
Historiquement, les probabilités BTTS et Over/Under étaient calculées à partir du même moteur que le 1X2 (victoire domicile / nul / victoire extérieur).
Le problème : plus on améliorait le moteur pour prédire l'issue du match, plus on injectait des signaux spécifiques au résultat (force relative des équipes, calibration du nul, ajustements dynamiques...). Ces améliorations rendaient le 1X2 plus fiable, mais déformaient la distribution des buts sans qu'on s'en rende compte.
Résultat : les marchés de buts affichaient des probabilités, mais ces probabilités ne correspondaient plus à la réalité observée. Plutôt que de publier des chiffres trompeurs, on a préféré les retirer le temps de corriger le problème à la racine.
Comment sont calculés les marchés de buts
Le principe est simple : on construit une grille de scores possibles. Chaque case de cette grille contient la probabilité d'un score précis — par exemple 1-0, 2-1, 0-0, etc.
On note $P(i,j)$ la probabilité que l'équipe à domicile marque $i$ buts et l'équipe à l'extérieur en marque $j$. Les marchés classiques se déduisent ensuite par de simples additions sur cette grille :
$$P(\text{BTTS}) = \sum_{i \ge 1}\;\sum_{j \ge 1} P(i,j)$$
Autrement dit : on additionne toutes les cases où les deux équipes marquent au moins un but.
$$P(\text{Over 2.5}) = \sum_{i+j \;\ge\; 3} P(i,j)$$
Ici, on additionne toutes les cases où le total de buts est de 3 ou plus. Et inversement pour Under 2.5 : toutes les cases où le total reste à 2 ou moins.
Le même raisonnement s'applique à Over/Under 1.5, 3.5, aux clean sheets (une équipe ne prend aucun but), etc. Les marchés sont tous dérivés de la même grille, par des sommes différentes.
Le problème de l'ancien système
Dans l'ancien système, la grille de scores était construite par le moteur 1X2, puis repondérée pour coller aux probabilités de résultat publiées.
Cette approche garantissait une cohérence interne : si on affichait "60 % de victoire domicile", la grille de scores était compatible avec ce chiffre.
Mais cette cohérence était en réalité trompeuse pour les buts. Dès qu'on améliorait le 1X2 avec des ajustements orientés résultat (classement Elo, calibration spécifique du nul, ajusteurs dynamiques...), on déformait la distribution sous-jacente des scores sans aucune garantie que cette déformation soit pertinente pour prédire si les deux équipes allaient marquer ou non.
C'est exactement le type de mécanisme qui peut améliorer le 1X2 tout en détériorant les marchés de buts.
La solution : un moteur dédié aux buts
La correction n'a pas consisté à "mieux calibrer" l'ancien système. On a fait le choix de séparer les deux moteurs :
- Un moteur résultat, optimisé pour prédire l'issue du match (1X2)
- Un moteur buts, avec sa propre grille de scores, optimisé pour prédire la distribution des buts
Le moteur buts réutilise certains signaux pertinents (forme récente avancée, rythme offensif et défensif de la ligue, avantage domicile atténué), mais il n'hérite pas automatiquement des ajustements spécifiques au résultat : pas de recalibration du nul, pas d'ajusteurs dynamiques orientés 1X2, pas de sur-pondération Elo.
L'idée est simple : ce qui sert à prédire qui gagne ne sert pas forcément à prédire combien de buts seront marqués. Le découplage permet à chaque moteur de faire son travail sans contaminer l'autre.
Aller plus loin : le filtre sélectif
Avoir un moteur dédié aux buts est une condition nécessaire, mais pas suffisante. Une probabilité brute, même bien construite, n'est pas toujours exploitable.
C'est pourquoi on a ajouté une couche de filtrage sélectif par-dessus le moteur buts. Son rôle : identifier les matchs où la probabilité calculée est suffisamment fiable et informative pour être publiée.
Concrètement, ce filtre croise plusieurs signaux pour évaluer si le modèle "sait vraiment quelque chose" sur un match donné, ou s'il produit une probabilité par défaut, peu discriminante. Il ne publie que lorsqu'il détecte un signal suffisamment clair.
Le résultat : moins de matchs couverts, mais des probabilités nettement plus fiables quand elles sont affichées.
Comment on mesure la qualité : les métriques expliquées
Avant de montrer les résultats, voici un rapide guide de lecture des métriques utilisées. Pas besoin d'être data scientist pour les comprendre.
Brier Score (erreur moyenne)
Le Brier Score mesure l'écart moyen entre la probabilité annoncée et ce qui s'est réellement passé. Sa formule :
$$\text{Brier} = \frac{1}{N}\sum_{n=1}^{N} (p_n - y_n)^2$$
Où $p_n$ est la probabilité annoncée et $y_n$ vaut 1 si l'événement s'est produit, 0 sinon.
- Plus c'est bas, mieux c'est.
- Un Brier de 0 serait parfait (on a tout prédit juste).
- Un Brier de 0.25 correspond à prédire 50/50 à chaque fois — aucune information.
LogLoss (pénalisation des erreurs confiantes)
La LogLoss pénalise beaucoup plus sévèrement les erreurs quand le modèle était très confiant. Annoncer 90 % et se tromper coûte bien plus cher qu'annoncer 55 % et se tromper.
- Plus c'est bas, mieux c'est.
- Elle complète le Brier en mettant l'accent sur les grosses erreurs de confiance.
ECE (Expected Calibration Error)
L'ECE vérifie si les probabilités correspondent à la réalité. On regroupe les prédictions par tranches (par exemple : toutes celles entre 55 % et 65 %), puis on regarde si le taux de réussite observé est bien autour de 60 %.
- Plus c'est bas, mieux c'est.
- Un ECE élevé signifie que les probabilités affichées mentent : 60 % affiché ne correspond pas à 60 % de réussite réelle.
BSS (Brier Skill Score)
Le BSS compare le modèle à une référence naïve (par exemple, toujours prédire la fréquence moyenne du marché).
- BSS positif = le modèle fait mieux que la référence naïve.
- BSS négatif = le modèle fait moins bien que de simplement prédire la moyenne.
- C'est la métrique la plus exigeante : obtenir un BSS positif signifie que le modèle apporte vraiment de l'information.
Les résultats : trois approches comparées
On a comparé trois approches sur un même échantillon de matchs récents :
- Ancien système : marchés de buts dérivés du moteur 1X2 (grille repondérée)
- Moteur dédié seul : nouvelle grille de buts, sans filtre sélectif
- Moteur dédié + filtre sélectif : le système complet tel qu'il est publié
| Marché | Méthode | Brier | LogLoss | ECE | BSS |
|---|---|---|---|---|---|
| BTTS | Ancien système | 0.268 | 0.731 | 0.105 | -0.073 |
| Moteur dédié seul | 0.282 | 0.768 | 0.131 | -0.129 | |
| Moteur + filtre sélectif | 0.248 | 0.689 | 0.039 | +0.008 | |
| Over 2.5 | Ancien système | 0.267 | 0.732 | 0.100 | -0.071 |
| Moteur dédié seul | 0.288 | 0.788 | 0.152 | -0.156 | |
| Moteur + filtre sélectif | 0.236 | 0.666 | 0.065 | +0.052 | |
| Under 2.5 | Ancien système | 0.267 | 0.732 | 0.100 | -0.071 |
| Moteur dédié seul | 0.288 | 0.788 | 0.152 | -0.156 | |
| Moteur + filtre sélectif | 0.236 | 0.666 | 0.065 | +0.052 |
Ce qu'il faut retenir
- Le moteur dédié + filtre sélectif domine les deux autres approches sur les trois marchés.
- C'est la seule approche avec un BSS positif — c'est-à-dire qui fait mieux que la référence naïve.
- L'ancien système et le moteur dédié seul ont des BSS négatifs : sur cet échantillon, ils faisaient moins bien que de simplement prédire la moyenne.
- L'ECE du système complet (0.039 pour BTTS) est excellent : quand il affiche 60 %, le taux observé est très proche de 60 %.
Le test décisif : quand le modèle est confiant, a-t-il raison ?
Les métriques globales, c'est bien. Mais la vraie question est : quand le modèle affiche une probabilité élevée, est-ce que le taux de réussite suit ?
C'est ici que la différence devient frappante.
BTTS
- Ancien système → quasi aucune prédiction forte. Au-dessus de 60 %, seulement 2 matchs.
- Moteur dédié seul → seuil 65 % : 48 % de réussite. Pas exploitable.
- Moteur + filtre → seuil 60 % : 65 % de réussite sur 20 matchs.
Over 2.5
- Moteur dédié seul → seuil 65 % : 39 % de réussite. Calibration cassée.
- Moteur + filtre → seuil 60 % : 69 % de réussite. Seuil 65 % : 80 %.
Under 2.5
- Ancien système → seuil 60 % : 51 %. Sur-confiant.
- Moteur + filtre → seuil 55 % : 78 %. Seuil 60 % : 82 %.
Ce que cela signifie
L'ancien système était incapable de faire monter la réussite quand la probabilité affichée montait. Autrement dit : afficher 70 % ne valait pas mieux qu'afficher 50 %. Le nouveau système recommence à produire des probabilités qui discriminent réellement — quand il est plus confiant, il a effectivement plus souvent raison.
Rester prudent : ce que le modèle ne fait pas encore
Les résultats sont encourageants, mais il faut être honnête sur les limites.
- L'échantillon est encore court. Les chiffres présentés portent sur quelques centaines de matchs. C'est suffisant pour valider une direction, pas pour affirmer que tout est résolu.
- Les marchés les plus solides sont BTTS, Over 2.5 et Under 2.5. Pour d'autres marchés (Over 1.5, Over 3.5, clean sheets...), les preuves sont moins fortes à ce stade.
- La couverture est volontairement réduite. Le filtre sélectif ne publie pas sur tous les matchs. C'est un choix : mieux vaut moins de prédictions mais plus fiables.
- Le modèle n'est pas parfait. Il constitue une base suffisamment solide pour être utilisée, mais il continuera d'évoluer.
Les pistes d'amélioration
Le nouveau moteur ouvre des possibilités concrètes pour continuer à progresser :
Calibration par marché
Apprendre une calibration spécifique à chaque marché (BTTS, Over 2.5, Under 2.5...) pour garantir qu'un "70 % affiché" corresponde toujours à un "70 % observé".
Ajustements par ligue
Certaines ligues sont naturellement plus offensives (Eredivisie) ou plus tactiques (Serie A). Adapter les paramètres du moteur buts à chaque contexte est une piste naturelle.
Suivi automatique de la qualité
Intégrer un monitoring continu (Brier, ECE, taux par seuil) directement dans le pipeline pour détecter immédiatement si la qualité se dégrade sur un marché ou une ligue.
Extension à d'autres marchés
Les prochains candidats : Over/Under 1.5, Over/Under 3.5, clean sheets (une équipe ne prend pas de but), et victoire sans encaisser.
Conclusion
Les marchés de buts sont de retour sur Foresportia. Pas parce que le moteur 1X2 est devenu meilleur, mais parce qu'on a cessé de faire dépendre les buts du moteur résultat.
La recette :
- Un moteur dédié aux buts, avec ses propres signaux
- Un filtre sélectif qui ne publie que quand le signal est clair
- Une évaluation transparente avec des métriques que vous pouvez vérifier
Le modèle n'est pas parfait. L'échantillon est encore jeune. Mais pour la première fois, quand le système affiche une probabilité élevée sur BTTS ou Over/Under 2.5, le taux de réussite suit. C'est la base sur laquelle on peut construire.
FAQ rapide
Pourquoi les marchés de buts avaient-ils été retirés ?
Parce qu'ils étaient dérivés du moteur 1X2. En améliorant le 1X2, on déformait involontairement les estimations de buts. Les probabilités affichées ne correspondaient plus à la réalité.
C'est quoi un bon Brier Score ?
Plus il est bas, mieux c'est. En dessous de 0.25 (la référence "pile ou face"), le modèle apporte de l'information. Le système actuel est à 0.236 sur Over 2.5 et 0.248 sur BTTS.
Pourquoi le filtre ne couvre-t-il pas tous les matchs ?
Parce que le modèle n'a pas un signal fiable sur chaque match. Plutôt que de publier des probabilités "par défaut" peu informatives, on préfère ne rien afficher quand le signal est trop faible.
Les marchés de buts vont-ils encore évoluer ?
Oui. Le système actuel est une base solide mais perfectible. On travaille sur la calibration par ligue, l'extension à d'autres marchés et le monitoring automatique de la qualité.
Top lectures du jour
Passe des concepts aux pages pratiques pour lire les matchs du jour.
Voir la lecture des matchs du jour