Bradley-Terry Model
iaDéfinition
Le modele de Bradley-Terry est un modele probabiliste de classement base sur des comparaisons par paires, utilise comme fondement mathematique des systemes de classement ELO appliques aux LLMs dans les 'chatbot arenas'. Pour deux modeles A et B, Bradley-Terry stipule que la probabilite que A batte B est P(A>B) = p_A / (p_A + p_B), ou p_A et p_B sont les 'forces' (parametres) de chaque modele. L'estimation des parametres : en observant les resultats de N comparaisons par paires, les parametres de force de chaque modele sont estimes par maximum de vraisemblance. L'algorithme iteratif de calcul est conceptuellement similar a l'algorithme PageRank de Google. Le lien avec ELO : le systeme ELO est une implementation particuliere du modele Bradley-Terry avec une update en ligne (online learning) utilisant la formule de Glicko. Le modele Bradley-Terry complet (estimation batch sur tous les matchs) est plus precis statistiquement mais moins reactif aux changements de performance recents. Dans LMSYS Chatbot Arena, le classement ELO est calcule en fittant un modele Bradley-Terry sur les millions de votes humains collectes. Les intervalles de confiance (IC 95%) sont calcules par bootstrap : les modeles proches statistiquement ne peuvent pas etre considers comme significativement differents. L'importance statistique est souvent negligee dans la communication des benchmarks : deux modeles avec des scores ELO de 1350 et 1345 ne sont pas statistiquement differents avec seulement 10000 comparaisons, mais deviennent distinguables avec 100000+ comparaisons. Les laboratoires d'IA qui publient des classements devraient systematiquement reporter les intervalles de confiance.
Estimation Bradley-Terry en Python
import numpy as np
from scipy.optimize import minimize
def bradley_terry_mle(wins_matrix):
n = len(wins_matrix)
def neg_log_likelihood(params):
p = np.exp(params) # Forces positives
ll = 0
for i in range(n):
for j in range(n):
if wins_matrix[i,j] > 0:
ll += wins_matrix[i,j] * np.log(p[i] / (p[i] + p[j]))
return -ll
result = minimize(neg_log_likelihood, x0=np.zeros(n))
strengths = np.exp(result.x)
# Normaliser pour que la force mediane = 1000 (echelle ELO)
return 400 * np.log10(strengths / strengths.median()) + 1000
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h