Pourquoi aller plus loin que les modèles de base

Si tu as construit ton premier modèle ELO et Poisson, tu as déjà un outil qui fonctionne. Mais tu remarques probablement ses limites : il se trompe sur certains types de matchs, il ne réagit pas assez vite aux changements de forme, il traite une équipe de D4 comme le Real Madrid.

Ce guide présente 10 améliorations concrètes, dans l'ordre de priorité recommandé. Implémente-les une par une. Backteste après chaque ajout. N'en combine jamais deux nouvelles simultanément.

Amélioration 1 — ELO par région

Le problème

Dans un modèle ELO basique, toutes les ligues partagent le même référentiel. Un score de 1600 en Premier League est traité comme un 1600 en D3 bulgare. C'est une absurdité — les niveaux sont incomparables.

La solution

Créer des pools ELO séparés par région, avec des facteurs de conversion inter-régions pour les matchs européens :

RégionLiguesOffset vs Europe Top 5
Europe Top 5PL, Liga, Bundesliga, Serie A, Ligue 1Référence (0)
Europe élargiEredivisie, Primeira Liga, Ekstraklasa...-150 points
Amérique du SudSerie A BR, Superliga AR...-100 points
AsieJ-League, K-League, A-League...-250 points

Prompt pour Claude :

"Modifie mon modèle ELO pour créer 5 pools régionaux séparés. Chaque région a son propre dictionnaire ELO. Pour les matchs inter-régions (coupes européennes), appliquer les offsets : europe_top5 = 0, europe_extended = -150, south_america = -100, asia = -250, rest = -300. Sauvegarder dans elo_scores_regional.json."

Amélioration 2 — ELO contextuel (domicile / extérieur)

Le problème

Certaines équipes sont radicalement différentes à domicile et en déplacement. L'Atletico Madrid à domicile (ELO 1900) est une forteresse. L'Atletico en déplacement (ELO 1760) est beaucoup plus vulnérable. Un ELO global à 1840 masque cette réalité.

La solution

Calculer trois scores ELO distincts par équipe : elo_home, elo_away, elo_global. Pour la prédiction, utiliser elo_home de l'équipe qui reçoit contre elo_away de l'équipe visiteuse.

Amélioration 3 — Facteur K dynamique

Le problème

Un K fixe à 30 traite un match de Ligue des Champions et un match de coupe nationale de D2 exactement de la même façon. Ça n'a pas de sens.

La solution

Type de matchK recommandé
Champions League, Coupe du Monde40
Europa League, Conference League35
Championnats Top 5 européens32
Autres championnats28
Coupes nationales majeures22
Matchs amicaux8

De plus, pour les équipes avec peu de matchs dans la base (< 30), multiplier K par 1.5 pour accélérer la calibration initiale.

Amélioration 4 — Dépréciation temporelle ELO

Le problème

Un résultat de 3 ans pèse autant qu'un résultat d'hier. Une équipe peut avoir complètement changé de visage en 3 ans — nouvelle direction, nouveaux joueurs, nouveau système.

La solution simple (recommandée pour débuter)

Amélioration 5 — Correction Dixon-Coles (Poisson)

Le problème

Le modèle Poisson standard sous-estime légèrement les scores faibles (0-0, 1-0, 0-1, 1-1). En réalité, ces scores sont plus fréquents que ce que Poisson prédit. Pour les marchés de scores exacts et certains marchés BTTS, cette erreur est significative.

La solution

Ajouter un paramètre rho (ρ) qui corrige les probabilités des 4 scores faibles :

ScoreCorrection
0-0Multiplié par (1 - λ_dom × λ_ext × ρ)
1-0Multiplié par (1 + λ_ext × ρ)
0-1Multiplié par (1 + λ_dom × ρ)
1-1Multiplié par (1 - ρ)
Tous les autresInchangés

Valeur typique de ρ en football : entre -0.10 et -0.15 (à estimer par maximum de vraisemblance sur tes données).

Amélioration 6 — Pondération temporelle Poisson

Le problème

Dans ton modèle Poisson, tous les matchs dans la fenêtre de 15 matchs ont le même poids. Un match d'il y a 3 mois pèse autant qu'un match d'hier. Pourtant, la forme récente est plus pertinente.

La solution

Appliquer une pondération exponentielle décroissante :

Poids du match i = λ^i (λ = 0.92, i = ancienneté en semaines)

Le match le plus récent a un poids de 1.0, celui d'il y a 1 semaine un poids de 0.92, etc. Après 6 mois, le poids est d'environ 0.08 — presque négligeable.

Amélioration 7 — Intégration H2H pondérée

Les confrontations directes récentes contiennent une information que les stats générales ne captent pas : comment ces deux équipes se comportent spécifiquement l'une contre l'autre.

Règle de pondération recommandée :

❌ Erreur classique Donner trop de poids au H2H. 5 matchs entre deux équipes, c'est statistiquement très peu. 20% maximum — au-delà, tu surpondères du bruit statistique.

Amélioration 8 — Fusion ELO + Poisson pondérée dynamiquement

Au lieu de prendre simplement la moyenne des deux modèles, pondère selon le marché et le contexte :

ContextePoids ELOPoids Poisson
Marché 1N2 / Handicap60%40%
Marché Over/Under / BTTS20%80%
Peu de données (< 8 matchs)+20%-20%
Beaucoup de données (> 20 matchs)-10%+10%

Amélioration 9 — Calibration avec le Brier Score

Le Brier Score mesure la précision de ton modèle. Plus il est bas, mieux ton modèle prédit :

Brier Score = (1/N) × Σ(probabilité_estimée - résultat_réel)²
Brier Score (football)Qualité
< 0.22Excellent
0.22 à 0.24Bon
0.24 à 0.26Acceptable
> 0.26Insuffisant

Calcule le Brier Score AVANT et APRÈS chaque amélioration. Si le score monte (empire), l'amélioration n'est pas adaptée à tes données.

Amélioration 10 — Courbe de calibration

La courbe de calibration vérifie que tes probabilités estimées correspondent à la réalité. Si ton modèle dit 70% et que l'événement se produit 50% du temps sur un grand nombre de cas → ton modèle surévalue systématiquement.

Méthode : groupe tes prédictions par tranches de 10% (0-10%, 10-20%...) et calcule la fréquence réelle dans chaque tranche. Un modèle parfait = fréquence réelle = probabilité estimée.

Ordre d'implémentation recommandé

PrioritéAméliorationImpactComplexité
1Pondération temporelle PoissonÉlevéFaible
2Dixon-ColesMoyen-élevéMoyen
3ELO contextuel dom/extMoyenMoyen
4Facteur K dynamiqueMoyenFaible
5H2H pondéré (20%)Faible-moyenFaible
6ELO par régionÉlevé sur matchs inter-régionsÉlevé
7Dépréciation temporelle ELOMoyenMoyen
8Fusion pondérée dynamiqueÉlevéMoyen
9Calibration Brier ScoreValidationFaible
10Courbe de calibrationDiagnosticFaible
📥 Données pour tes modèles avancés

OddsMapper · CSV téléchargeables · 108 ligues · 10+ ans d'historique

Accéder gratuitement →
Lien affilié · Jeu responsable · Réservé aux personnes majeures