Prédire chaque match de la Coupe du Monde,
tous les matins à 8h.
Un modèle statistique Dixon-Coles réentraîné chaque nuit sur trois ans de football international, confronté à 69 matchs réels de la Coupe du Monde 2026 et au jeu de pronostics familial sur l'application Mon Petit Prono.
Le problème
Chaque grande compétition, ma famille joue au jeu de pronostics Mon Petit Prono : pour chaque match, tu donnes un score. Le bon signe (victoire/nul/défaite) rapporte des points de cote ; le bon score exact ajoute un bonus qui dépend de la rareté de ta prédiction — jusqu'à +100 points pour un score qu'aucun autre joueur n'aurait osé.
Après avoir prédit les 45 premiers matchs à l'instinct, une question m'a taraudé : est-ce qu'un modèle statistique honnête, entraîné uniquement sur les résultats historiques, ferait mieux que mon intuition ? Le projet est né d'une envie de tester ça pour de vrai — publiquement, avec métriques mesurables, sans triche.
Le modèle
Dixon-Coles, une adaptation bivariée du modèle de Poisson publiée en 1997 et toujours utilisée comme référence par les bookmakers. Pour chaque équipe, on estime deux nombres : une force d'attaque et une force de défense. Pour un match, on combine l'attaque de l'un avec la défense de l'autre pour obtenir λ et μ, les buts attendus de chaque côté.
On en tire une distribution de probabilité complète pour tous les scores possibles du match, dont on déduit ensuite le pari qui maximise l'espérance de points selon les règles MPP.
Le modèle est réentraîné intégralement chaque matin à 8h sur tous les matchs internationaux depuis 2023, avec trois pondérations : décroissance exponentielle (demi-vie 9 mois), ×8 sur les matchs déjà joués dans la Coupe du Monde en cours (pour capter la forme réelle des équipes qui émerge en direct), et ×0.5 sur les amicaux. Une notification Discord m'envoyait chaque matin les paris optimisés, plus un bilan calibration de la veille.
Calibration
Le graphique le plus important du projet. Chaque bulle regroupe les matchs où le modèle avait donné une certaine confiance (axe X) ; l'axe Y montre à quelle fréquence le modèle a effectivement eu raison. La diagonale = calibration parfaite. La taille de la bulle indique combien de matchs sont dans le groupe.
Par phase du tournoi
Évolution au fil du tournoi
Où on se situe
Le score de Brier mesure la calibration des probabilités : plus bas = mieux calibré. Trois repères pour lire notre 0.47 :
| Référence | Brier | Écart vs nous |
|---|---|---|
| Modèle uniformément aléatoire | 0.67 | +0.20 |
| Ce projet (4 variables, Dixon-Coles) | 0.47 | — |
| Bookmaker professionnel (estimation) | ≈ 0.20 | −0.27 |
On bat clairement le hasard, mais on reste plus proche du plancher aléatoire que du plafond professionnel. C'est cohérent avec les moyens du modèle : les bookmakers intègrent xG, blessures, compos, cotes de marché — quatre à dix fois plus d'information que nos quatre variables (date, équipes, buts, type de tournoi).
Ce que le projet m'a appris
Résister à la tentation de sur-ajuster. Après trois matchs de knockout catastrophiques (Brier 0.96), j'ai voulu changer les hyperparamètres. On a fait un backtest rigoureux, gardé le boost à ×8 malgré un signal ambigu, et le cumul global est resté stable jusqu'à la fin. Sur des petits échantillons, l'intuition trompe toujours ; les chiffres tranchent.
Mesurer honnêtement, y compris quand ça déplait. Le pire raté du modèle — France 4-6 Angleterre, log-loss 10.7 — illustre exactement sa limite structurelle : un match sans enjeu tactique où les défenses s'écroulent est statistiquement imprévisible. Pas de shame à admettre qu'un modèle a un plafond.
Un système opérationnel a autant de valeur que le modèle lui-même. Cron GitHub Actions, base SQLite avec migrations, tests, gestion des matchs à élimination directe (score à la 120ᵉ minute), diagnostic silencieux des matchs disparus de l'API — tout ce qui rend le projet fiable pendant 4 semaines sans intervention manuelle.
Les limites, honnêtement
Le modèle ne regarde que : la date, les équipes qui jouent, les buts marqués, le type de tournoi. Il ignore tout ce qui, en football, décide vraiment d'un match serré : blessures, suspensions, repos entre matchs, forme individuelle, xG, enjeu tactique. Sur les matchs entre équipes de niveau proche, il fait essentiellement un lancer de pièce pondéré.
Pour une v2, les leviers seraient — par ordre d'impact estimé — l'intégration des xG, l'ajout des features contextuelles (repos, blessures clés), puis potentiellement un modèle bayésien hiérarchique pour mieux quantifier l'incertitude sur les équipes peu jouées.