L'histoire du modèle ELO

Le système ELO a été inventé par Arpad Elo, un physicien et joueur d'échecs américain d'origine hongroise, dans les années 1960. Son objectif initial était de créer un système de classement des joueurs d'échecs plus précis que ce qui existait à l'époque.

Le principe est élégant : plutôt que de classer les joueurs sur leurs seuls résultats bruts (victoires, défaites), le système ELO prend en compte la force relative de l'adversaire. Battre un adversaire très fort rapporte beaucoup de points. Battre un adversaire très faible rapporte peu. Perdre contre un adversaire très fort fait peu perdre. Perdre contre un adversaire très faible fait beaucoup perdre.

Ce principe s'est révélé universellement applicable à de nombreux sports, dont le football.

Comment le modèle ELO fonctionne en football

Chaque équipe se voit attribuer un score numérique — son "rating ELO". Ce score monte quand l'équipe gagne et descend quand elle perd. L'amplitude du changement dépend de deux choses : le résultat (victoire, nul, défaite) et l'écart de niveau entre les deux équipes.

Exemples concrets :

SituationRésultatImpact sur le score ELO
Manchester City (rating 1850) bat une équipe de D2 (rating 1300)Victoire attendueCity gagne peu (+3 à +8 points), l'adversaire perd peu
Manchester City (rating 1850) perd contre cette même équipeChoc surpriseCity perd beaucoup (-25 à -35 points), l'adversaire gagne beaucoup
Deux équipes égales (rating 1500 chacune)L'une gagneGain standard (~15 points) pour le vainqueur

Les paramètres à définir

Le score de départ

Toutes les équipes commencent avec le même score de départ. La convention universelle est 1500 points. Ce chiffre n'a pas de signification absolue — c'est simplement le point de référence à partir duquel tous les ratings évoluent. Ce qui compte, c'est la différence entre les ratings de deux équipes, pas la valeur absolue.

Le facteur K

Le facteur K détermine la vitesse à laquelle le système réagit aux résultats. Un K élevé = le système réagit vite mais est instable (une bonne ou mauvaise série peut fortement modifier le rating). Un K faible = le système est stable mais lent à détecter les changements.

Valeur de KRéactivitéStabilitéRecommandation
10-15Très lenteTrès hauteTrop lent pour le football
20LenteHauteLigues très stables
30ÉquilibréeBonne✅ Recommandé pour débuter
40RapideMoyenneLigues avec beaucoup de transferts
50+Très rapideFaibleDéconseillé — trop instable

Le bonus domicile

Jouer à domicile donne un avantage mesurable et statistiquement prouvé. Si tu n'intègres pas ce bonus, ton modèle surpénalisera systématiquement les équipes visitantes.

Le bonus domicile s'ajoute au rating de l'équipe qui reçoit uniquement pour le calcul de probabilité — il ne modifie pas les ratings ELO eux-mêmes. La valeur recommandée : +65 points.

Exemple : Liverpool (rating 1820) joue à domicile contre Arsenal (rating 1800). Pour le calcul de probabilité, on utilise Liverpool 1885 (1820 + 65) contre Arsenal 1800. Le favori devient Liverpool malgré un rating brut inférieur.

Initialiser le modèle sur données historiques

Un modèle ELO avec seulement quelques matchs n'est pas fiable — les ratings n'ont pas eu le temps de converger vers la réalité. Il faut au minimum 2 saisons complètes pour que les ratings soient représentatifs.

Le processus :

  1. Rassemble tous tes matchs historiques (ordonnés chronologiquement)
  2. Toutes les équipes commencent à 1500
  3. Pour chaque match, dans l'ordre chronologique : calcule les ratings attendus, détermine le résultat, mets à jour les ratings
  4. Après avoir traité tous les matchs historiques, chaque équipe a son rating "calibré"

Calculer les probabilités depuis les ratings ELO

Une fois les ratings calibrés, tu peux calculer la probabilité de victoire de chaque équipe. La formule :

P(victoire dom) = 1 / (1 + 10^(-(ELO_dom + bonus_dom - ELO_ext) / 400))

Exemples concrets :

ELO dom (+ bonus)ELO extDifférenceP(victoire dom)
15651565050%
16651565+10064%
17651565+20076%
19651565+40091%

Pour le nul, le modèle ELO de base ne le prédit pas directement. Une approche simple : attribuer une probabilité de nul proportionnelle à la proximité des ratings, puis redistribuer le reste entre victoire dom et victoire ext.

Trouver la value avec le modèle ELO

Tu as maintenant une probabilité estimée pour chaque issue. Tu la compares avec la probabilité implicite de la cote :

EV = (probabilité_ELO × cote_bookmaker) - 1

Exemple : ton modèle donne 70% de chances de victoire à domicile. Pinnacle propose une cote de 1.68 (probabilité implicite : 59.5%).

EV = (0.70 × 1.68) - 1 = 1.176 - 1 = +17.6%

Excellent EV. Tu as identifié une inefficience entre ton modèle et le marché.

Le prompt à donner à Claude

"Je veux créer un modèle ELO football en Python. Paramètres : - Score de départ : 1500 pour toutes les équipes - Facteur K : 30 (fixe pour commencer) - Bonus domicile : +65 points (utilisé uniquement pour le calcul de probabilité) - Données : fichiers CSV dans /root/data/ (colonnes: date, home_team, away_team, home_goals, away_goals, league) Le script doit : 1. Charger tous les matchs historiques et les trier par date 2. Initialiser tous les ratings à 1500 3. Parcourir les matchs chronologiquement et mettre à jour les ratings 4. Sauvegarder les ratings finaux dans elo_scores.json 5. Afficher le top 30 des équipes mieux classées Ensuite créer une fonction get_probabilities(home_team, away_team) qui : - Récupère les ratings actuels des deux équipes - Applique le bonus domicile - Calcule P(victoire dom), P(nul), P(victoire ext) - Compare avec les cotes Pinnacle et calcule l'EV - Retourne le résultat avec l'EV"
📥 Données historiques pour initialiser ton modèle ELO

OddsMapper · 108 ligues · 10+ ans de matchs · CSV gratuits

Télécharger les données →
Lien affilié · Jeu responsable · Réservé aux personnes majeures