Projet de data science · juin–juillet 2026

MPP Predictor

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.

§1

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.

§2

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é.

λ = exp(αmaison + βvisiteur + γ) μ = exp(αvisiteur + βmaison) P(X=x, Y=y) = τ(x,y,λ,μ,ρ) · Poisson(x;λ) · Poisson(y;μ)

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.

§3

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.

Diagramme de fiabilité : les probabilités prédites correspondent presque parfaitement aux fréquences observées.
À retenir : presque toutes les bulles sont sur ou très près de la diagonale. Quand le modèle disait « 60% », il avait raison 63% du temps. Quand il disait « 85% », 100%. Les probabilités du modèle veulent bien dire ce qu'elles prétendent — c'est la propriété qui distingue un vrai modèle probabiliste d'un simple classifieur.
§4

Par phase du tournoi

Barres montrant précision et Brier par phase du tournoi.
Les phases avec un effectif suffisant (Poules n=38, 16èmes n=15, 8èmes n=8) donnent la vraie mesure : ~72% en poules et 16èmes, chute à 50% en huitièmes à cause d'upsets comme Brésil 1-2 Norvège. Les résultats des quarts, demies, 3ᵉ place et finale (n≤4) ne sont pas statistiquement significatifs — un 100% ou un 0% sur 1 à 4 matchs relève du bruit, pas du signal.
§5

Évolution au fil du tournoi

Courbes de la précision cumulée et du Brier moyen au fil des 69 matchs.
Convergence classique : bruit énorme sur les premiers matchs (variance des petits échantillons), stabilisation vers ~70% de signe correct et 0.47 de Brier après ~20 matchs, plateau ensuite. Le modèle atteint son niveau réel vite et n'y bouge plus — ni amélioration progressive, ni dégradation.
§6

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érenceBrierÉ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).

§7

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.

§8

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.