Méthode
comment le modèle fonctionne, et ce qu'il ne sait pas faire
En trois phrases
On modélise chaque match comme deux lois de Poisson : chaque équipe a une force d'attaque et une faiblesse défensive, plus un avantage à domicile commun à toutes.
Ces paramètres sont estimés sur l'historique de la Ligue 1 — 6 saisons, ~2000 matchs — via un modèle Dixon-Coles (1997), qui corrige légèrement les scores faibles pour mieux coller aux vrais résultats de football.
À chaque nouvelle journée, on ré-entraîne le modèle sur tout ce qui précède, on prédit les matchs à venir, puis on stocke le résultat pour l'évaluer plus tard. Aucune information post-match ne remonte dans la prédiction.
Pourquoi Dixon-Coles et pas un gros ML ?
Un modèle comme XGBoost ferait sans doute un peu mieux sur le RPS. Mais un modèle Dixon-Coles est interprétable : on peut regarder les forces d'attaque/défense, expliquer pourquoi une prédiction penche d'un côté, et documenter chaque décision.
Pour un projet dont l'objectif est de comprendre les rapports de force et de comparer au marché, l'interprétabilité vaut mieux qu'un demi-point de RPS. La comparaison au marché confirme d'ailleurs que le modèle est solide.
Comment on compare au marché ?
Les cotes des bookmakers sont converties en probabilités dévigées, c'est-à-dire dont on a retiré la marge du book (~6 %). Une cote de 2,00 donne une probabilité "brute" de 50 %, mais la vraie probabilité annoncée par le book est plutôt 47 %.
Ces probabilités dévigées deviennent un "modèle" comme un autre, avec lequel on compare le nôtre sur les mêmes métriques (RPS, log-loss, calibration). Battre le marché sur le 1N2 est très difficile — le marché agrège l'information de tous les parieurs.
Ce que le modèle ne sait PAS
Il ne connaît pas les blessures, les compositions, la fatigue post-Europe, ni les changements d'entraîneur. Il ne connaît pas non plus la motivation (fin de saison, relégation, etc.).
C'est une des raisons pour lesquelles le marché conserve une petite longueur d'avance : il intègre ce que la seule statistique des scores passés ne peut pas voir.
Les équipes promues (Troyes et Le Mans cette saison) posent un problème particulier : sans historique de L1 récent, le modèle leur donne des paramètres proches de la moyenne, et il faudra 6 à 8 journées avant que leurs vraies forces émergent des résultats.
Stack technique
Données : football-data.co.uk pour les résultats et les cotes historiques d'un panel de bookmakers, scraper Winamax maison pour les cotes françaises pré-match.
Modèle : Dixon-Coles Poisson-based avec pondération temporelle (ξ=0,002) et shrinkage (0,9) pour corriger la surconfiance.
Infrastructure : Python + SQLite + Playwright/Chromium, hébergement sur un VPS OVH via Coolify, site statique généré et servi par nginx:alpine.