|
Calculer la probabilité de gain d'un Match par équipes par Abrobecker le
[Aller à la fin] |
| Informatique | |
Je viens de terminer un petit javascript qui permet de calculer les probabilités de gain d'un match en fonction des classements Elos. Il y a 3 versions:
4 joueurs
6 joueurs
8 joueurs
Si vous trouvez un bug, merci de le signaler sur ce fil.
|
|
Si tu peux modéliser la meme chose avec la compo d'une équipe de foot, tu peux créer ton site de pari sportif....
|
|
c'est ce que j'ai pensé égalemùent trolldetroy :)
|
|
Peut-on utiliser cette application pendant un match?
|
|
il manque des événements possibles, par exemple 4,5 à 3,5 ... (tous ceux avec des demi points dans les scores des équipes)
|
|
ah je viens de voir que les nulles sont ignorées ... Bah à mon avis, il faut fournir aussi le nombre moyen de points attendus par équipe, en plus c'est le plus facile à calculer, il suffit de faire la somme de toutes les lignes.
|
|
Pas bien compris l'intérêt.... Il s'agit d'un calcul purement mathématique
Mon rendement avec les Noirs n'est pas le même qu'avec les Blancs, je préfère jouer un 2200 vétéran qu'un 2200 minime ...
|
|
il peut y avoir (pour 4 joueurs)... des résultats comme : 0-0 , 1-0 , 2-0 , 3-0 ...etc.
|
|
Bien et je ne vois pas en quoi un calcul mathématique serait dépourvu d'intérêt.
Vous pourrez constater, par exemple, que l'ordre des joueurs modifie les chances de gains. Avec deux équipes présentant les mêmes élos, l'équipe qui peut choisir l'ordre de ses joueurs a un (petit) avantage.
Mais évidemment, négliger les nulles est une grosse approximation (mais ce serait un paramètre supplémentaire qui mettrait le brun dans les calculs...)
|
|
En fait, ça permet effectivement de par exemple, maximiser la proba de gain en fonction de l'ordre choisi. Ex:
mon équipe A peut (selon la règle des 103 points) mettre ses joueurs dans 14 ordre différents, l'équipe B en face dans 8 ordres différents. Si on estime que le capitaine d'en face peut mettre son équipe dans n'importe quel ordre (c'est-à-dire qu'il y a une chance sur 8 qu'il mette son équipe dans l'ordre 1, 1 chance sur 8 qu'il la mette dans l'ordre 2,...) , alors il peut être intelligent de réaliser un petit algorithme du style:
-Je regarde ce que donne la proba de gain de l'ordre 1 de l'équipe A contre chaque ordre de l'équipe B, puis je fais la moyenne de ces probas.
-Je fais pareil pour tous les ordres jusqu'au 14e.
-Je mets mon équipe dans l'ordre qui a la plus grande moyenne de probas de gain!
|
|
ça permet effectivement de par exemple, maximiser la proba de gain en fonction de l'ordre choisi. Ex: mon équipe A peut (selon la règle des 103 points) mettre ses joueurs dans 14 ordre différents, l'équipe B en face dans 8 ordres différents.
Si on estime que le capitaine d'en face peut mettre son équipe dans n'importe quel ordre (c'est-à-dire qu'il y a une chance sur 8 qu'il mette son équipe dans l'ordre 1, 1 chance sur 8 qu'il la mette dans l'ordre 2,...) , alors il peut être intelligent de réaliser un petit algorithme du style:
-Je regarde ce que donne la proba de gain de l'ordre 1 de l'équipe A contre chaque ordre de l'équipe B, puis je fais la moyenne de ces probas.
-Je fais pareil pour tous les ordres jusqu'au 14e.
-Je mets mon équipe dans l'ordre qui a la plus grande moyenne de probas de gain!
|
|
Sans intérêt dans l'état. je pense que ignorer la possibilité de nulle conduit à des résultats qui n'ont pas grand chose à voir avec la réalité.
Il est d'ailleurs amusant de constater que les résultats ainsi obtenus relèvent dans le meilleur des cas de la grossière approximation (comme le dit Pessoa) mais qu'il sont donnés avec 2 chiffres après la virgule... mais ceci est un grand classique.
En quoi est-ce que ça gêne ?
Prenons le cas d'un match sur 4 échiquiers où les résultats sont quasiment acquis avant le match sur les échiquiers 1, 2 et 4 avec un résultat de 2-1 pour l'équipe A. Le résultat du match dépendra donc essentiellement du résultat de l'échiquier 3 qui voit s'affronter 2 joueurs de même classement Elo.
Concrètement : voici les matchs
2500 - 2000
2500 - 2000
2000 - 2000
2000 - 1500
On peut considérer que l'équipe A gagnera le match si le joueur 3 gagne ou fait nulle alors que l'équipe B fera nulle si son 3ème échiquier gagne.
Le programme nous dit que l'équipe A a 47,6% de chances de gain. C'est très clairement sous estimé.
Il nous dit aussi que l'équipe B a 47,6% de chances de faire nulle (!!!) ce qui ne peut même pas être pris pour une grossière approximation.
Donc oui, la page est agréable et l'idée est très sympathique, mais les résultats sont complètement bogués pour cause d'algorithme insuffisant.
Encore un effort. Bon courage. Cordialement.
|
|
oui mais il y a unn problème inhérent au classement elo : il te donne le nombre de points espéré (ou moyen) dans une confrontation, par exemple 0.6 points si on a 70 points de plus que son adversaire. Mais il ne décompose pas ces 0.6 points en probabilité de gain, nulle ou victoire. Cela pourrait donner : - 60 % de chance de gain et 40% de perte, - 40% de chances de gain, 40% de nulle, 20% de perte, - 20% de chances de gain, 80% de nulle, avec bien sûr un continuum de cas. De plus cette décomposition dépend du style des joueurs.
Pour réaliser un algorithme prenant en compte les nulles, et cela est nécessaire ainsi que Matou l'a dit, il faudrait déjà réaliser une fonction qui a une espérance de gain (par exemple 0.6) donné associe une répartition gain/nulle/perte.
|
|
orthographe il faudrait déjà réaliser une fonction qui à une nombre de points espéré (par exemple 0.6) donnée associe une répartition gain/nulle/perte.
En fait il faut associer à un nombre de points moyens attendu une probabilité de gagner (celle de faire nulle ou perdre s'en déduisent immédiatement).
Proposition d'une telle fonction : on pense tout de suite à une fonction du type x puissance n, avec n à déterminer. En effet, cela assure que si votre espérance de gain vaut 0 ou 1, alors votre probabilité de gain vaut la même chose.
Dans son algorithme, Abrobecker a pris n=1 c'est-à-dire que la probabilité de faire nulle vaut 0. Essayons n = 2. Une nombre de points moyen de 0.5 (cad deux joueurs de même classement) donnera alors une probabilité de gain de 0.5 puissance 2 soit 0.25, une probabilité de perte de 0.25 et une probabilité de nulle de 0.5. Ceci semble correct à haut niveau mais pas du tout à faible niveau. Une espérance de points de 0.75 (193 points d'écart), donnera au mieux classé une probabilité de gain de 0.56, une probabilité de nulle de 0.38 et une probabilité de perte de 0.06.
Comme mentionné plus haut, si on veut être plus précis, il faut que la valeur de n dépende du elo des adversaires, ce qui peut se faire par une étude statistique de résultats dans une base de donnée. En première approximation, pour des joueurs < 1600 où il y a peu de nulles, il faut prendre un n assez proche de 1 (1 virgule quelque chose), pour des joueurs >2200 certainement n = 2 est intéressant.
|
|
Heureusement ça marche pas ... Pour m'y être essayé au lotofoot, je peux témoigner que les pronostics "mathématiques" ça ne marche pas. => et j'en veux pour preuve notre résultat en NIV lors du dernier week-end, nous avons gagné 4-1 contre équipe qui possedait une moyenne elo > de 120pts (perfs 2095/2290 1-0; 1739/2258 1-0!! ; 1804-1902 1-0...)
|
|
Modéliser plus finement... ou pas! Comme mentionné par de nombreuses personnes, une partie ou un match d'échecs ne se laisse pas si facilement mettre en équations, et c'est heureux! Ce n'est pas la prétention de mon petit programme, j'avais cherché l'algo après un match qui nous avait été particulièrement favorable en NIV il y a 4 ans, et cette semaine je voulais m'essayer au javascript.
Je ne pensais pas "améliorer" (=modifier) la modélisation, juste proposer ce programme au cas ou il intéresserait quelqu'un, mais vos arguments sur les nulles semblent justifiés, j'espère y réfléchir ce WE lors d'un stage AF3. Idéalement il faudrait avoir des archives pour chaque joueur, afin de déterminer des grandes tendances statistiques. Faut-il alors ajouter un coefficient différent pour chaque joueur?
Quelqu'un voit-il une autre modélisation possible que celle proposée par dan31? Cette dernière me semble pas mal, et surtout je pourrais mettre le n en paramètre global ou individuel.
@Matoù: Pour ma part je vois trois décimales (si on parle de probabilités dans [0;1]) ou une seule (si on parle de %), mais les deux décimales dont vous parlez est une aussi "bonne" approximation de ce que je fais, que mon programme l'est d'un match d'échecs. ;p (J'ai par ailleurs beaucoup apprécié votre commentaire, qui est très convaincant, merci)
|
|
oui attention cependant, dans ma modélisation, le n peut être variable, mais pas par joueur, plutôt par partie. Si le joueur A a 40% de chances de gain, 40% de chances de nulle,et 20% de perte dans une partie, il est évident que son adversaire le joueur B a 20% de chances de gain et 40% de nulle.
Trouver un n différent pour chaque partie en fonction des caractéristiques des joueurs est un peu illusoire et surtout demande un travail complémentaire, alors que faire dépendre n du classement elo des deux adversaires est très simple et automatisable.
|
|
comme souligné c'est plus un amusement qu'un outil prédictif. En fait, la prédiction est précise, mais sous forme de probabilités, donc tout résultat reste possible !
|
|
pour choisir le n il faut se demander quel est la probabilité de nulle de 2 joueurs de elo égal. Bien sûr, avec des bases de données c'est accessible facilement, mais je dirai que ça passe de 10% à 1000 elo à 60% à 2800 elo. Pour construire une belle interpolation, on pourrait se demander quelle est cette proba quand les 2 joueurs sont respectivement 1400, 1700, 2000, 2300 et 2600 elo.
|
|
Je pensais à mettre une case "n" à côté de chaque partie en fait. Si on avait des statistiques pour chaque joueur il faudrait trouver une manière de faire la moyenne de leurs "n" respectifs.
Si c'est systématisé comme vous le proposez, le "n" va dépendre du Elo le plus fort mais aussi de la différence de Elo. Quelle formule? Peut-être du bilinéaire? J'aimerais que l'utilisateur puisse un peu la contrôler sans mettre les mains dans le javascript.
|
|
autant faire simple dans un premier temps On peut mettre de façon automatique un n qui dépend de la moyenne elo des deux adversaires. Avec éventuellement une option pour régler le n à la main ...
|
|
après moulte réflexion je propose, ..., roulement de tambour,...,
n = 1 + [( elo moyen des adversaires - 800 ) / 1600 ],
ce qui assure que pour deux 2800 jouant l'un contre l'autre, la probabilité de nulle sera de 0.79; pour deux joueurs classés 2000 elle sera de 0.40; pour deux joueurs classés 1000 elle sera de 0.26; pour deux joueurs classés 1000 elle sera de 0.08.
On peut bien sûr améliorer cette formule qui est faite au pifomètre absolu/
|
|
il fallait lire à l'avant dernier exemple :
pour deux joueurs classés 1500 elle sera de 0.26;
|
|
Problème... Si un 2000 joue contre un 1000, on aura la même proba que si deux 1500 jouent ensembles...
|
|
non tu te trompes en fait et ça répond aussi à ta question précédente. La formule est du type x puissance n, où x est l'espérance de point attendue.
x dépend donc de la différence de points elo : c'est la fameuse table de conversion elo qui permet de connaître x à partir de la différence de points elo.
En revanche, n dépend du elo moyen des deux adversaires donc de la somme des elos.
Donc pour passer du elo des deux adversaires à x et n, on a juste un changement de variable, aucune information n'est perdue ... Dans tes exemples, le n est certes le même dans les deux cas mais pas le x !
Dans l'exemple 1 (un 2000 contre un 1000) que tu évoques, il y a 1000 points de différence donc x = 1 (nombre de points attendus pour le plus fort elo) et n =1,44 donc x puissance n vaut 1. La probabilité de gain du plus fort est 1.
Dans l'exemple 2 (un 1500 contre un 1500) que tu évoques, il y a 0 points de différence donc x = 0,5 (nombre de points attendus pour le plus fort elo) et n =1,44 (comme dans l'exemple 1). Ainsi, donc x puissance n vaut 0,37. La probabilité de gain du plus fort joueur est 0,37. Celle de l'autre est aussi 0,37 (ils ont le même elo). Et la probabilité complémentaire est celle de faire nulle 1-0,37-0,37=0,26.
|
|
Bien vu, désolé...
|
|
ainsi pour un 2500 contre un 2300, x vaut 0,76 et n = 2. on obtient Gain du plus fort 58%, N 36%, Perte du plus fort 6%.
Pour un 1700 contre un 1500, x vaut 0,76 et n = 1,5. on obtient Gain du plus fort 66%, N 20%, Perte du plus fort 14%.
Bien sûr le mieux serait encore d'optimiser la fonction donnant le pourcentage de nulle en fonction du elo des deux adversaires mais il faudrait manipuler des bases de données.
|
|
Ok Je pars sur ta formule, mais pas avant quelques jours (stage AF3 ce WE).
|
|
Je n'ai pas su résister... ... et j'ai quand même programmé la version avec les nulles comme proposé par dan31 (qui peut me donner son nom s'il accepte d'accéder à la célébrité ;).
http://abrobecker.free.fr/java/probamatch4bis.htm
|
|
ah ah joli travail et rapide en plus !
Il faudrait trouver un plus perfectionniste pour améliorer le modèle mais ça devient pas mal.
Sinon tu peux me citer comme dan31 ca me va très bien !
|
|
sinon pour la formule, il y a peut-être une imprécision : - probabilité Gain A : x puissance n. -probabilité Nulle : 2*(x-x puissance n) afin que proba(Gain A) + 0,5 * proba(nulle) = x, c'est - à-dire le nombre de points yen. probabilité Gain B : 1 - p(Gain A) - p (Nulle)
|
|
lire -probabilité Nulle : 2*(x-x puissance n) afin que proba(Gain A) + 0,5 * proba(nulle) = x, c'est - à-dire le nombre de points moyen espéré.
|
|
bon je viens d'écrire quelques équations sur papier et il apparaît que n doit obligatoirement être compris entre 1 et 2 pour ne pas générer d'absurdité ...
En effet, si on note A le mieux classé des deux joueurs, pA la probabilité que A gagne, pB celle que B gagne, pN la probabilité de nulle et x le nombre de points moyens espéré donnés par la table de conversion elo en fonction de la différence de classement des deux adversaires, on a : pA + pN + pB = 1. pA + 0,5 pN = x. x >= 0,5 et pA >= pB (car A est le mieux classé).
On peut donc exprimer pB = pA + 1 - 2x et pN = 2(x-pA), ce qui signifie que 2x - 1
|
|
... On peut donc exprimer pB = pA + 1 - 2x et pN = 2(x-pA), ce qui signifie que pA est compris entre 2x - 1 et x (pour x allant de 0,5 à 1).
Ainsi, si comme proposé, on écrit pA = x puissance n, la seule façon de garantir que pA reste compris entre 2x - 1 et x est que n soit lui-même entre 1 et 2.
Il faut donc modifier un peu la formule, par exemple n = 1 + [( elo moyen des adversaires - 800 ) / 2000 ], afin qu'elle soit applicable jusqu'à 2800 points.
|
|
information intéressante glanée sur le net Au-dessus de 2500, 55% de nulles. Entre 2300 et 2500, 45% de nulles; entre 2100 et 2300 34% de nulles. De quoi améliorer sensiblement la formule que nous avons utilisée. Il faudrait juste avoir des stats pour des classements moins élevés.
|
|
Bravo !
|
|
Brovo ! bravo messieurs, beau travail et qu'elle évolution depuis la première version.
La remarque suivante n'est pas une critique mais juste une remarque pour améliorer les prédictions :
à partir d'un certain niveau, les couleurs ont un impact important (d'ailleurs ne considère-t-on pas comme équilibré lors des départages que les B disposent d'une minute de plus mais soient dans l'obligation de gagner ?)
Je propose donc de conserver votre estimation de la probabilité de faire nulle, mais je propose d'augmenter la probabilité de gain B (au détriment évidemment de celle de gain N). L'observation des bases de données devrait fournir une bonne estimation de la correction à apporter.
Une information en passant : un ami grand maître me disait qu'on pourrait imaginer pour chaque joueur (au moins à partir de MI) un Elo B et un Elo N. L'idée est séduisante.
|
|
lire "quelle évolution"
|
|
oui Radjabov disait d'ailleurs récemment qu'il plafonnait en elo car il jouait toujours avec les noirs en interclubs !
|
|
Merci à dan31 pour son travail Je regarderais/modifierais après le WE qui s'annonce studieux pour cause de stage AF3. Mais la formule est modifiable dans le source de la page web au besoin... A bientôt!
|
|
Version Finale J'ai modifié les trois pages de calcul de probabilités, on peut maintenant choisir de compter les nulles ou pas, et j'ai modifié la formule du n comme indiqué par dan31 (encore merci pour ton travail!). Je ne retoucherais plus ces progs, notamment l' "optimisation" proposée par Maelbreizh serait intéressante si on faisait jouer des robots ensembles, mais avec des humains...
4joueurs
6joueurs
8joueurs
|
|
ref Abrobecker bravo pour le travail.
Cependant, comme souligné dans un de mes (trop) nombreux posts ci-dessus, il y a un biais actuellement car la moyenne (au sens probabiliste cad l'espérance) du nombre de points doit être x, cad que p(gainA) + 0,5 p(Nulle) = x.
Pour au mois éviter ce biais il faut utiliser la formule que je donne le 27-01-2011 à 22:08:49.
|
|
il faut comprendre ci dessus Cependant, comme souligné dans un de mes (trop) nombreux posts ci-dessus, il y a un biais actuellement car la moyenne (au sens probabiliste cad l'espérance) du nombre de points doit être égale x, cad il faut que p(gainA) + 0,5 p(Nulle) = x. Or ce n'est pas le cas actuellement avec la formule que tu as implémentée.
|
|
Pourtant... je l'avais notée et vérifiée et c'était le but de la réécriture partielle du programme... Bon, bin faut que je retourne mettre les mains dans le cambouis! ;(
|
|
le plus dur est fait une formule empirique correcte est donnée dans mon post du 27-01-2011 à 22:08:49, A étant le mieux classé des deux joueurs.
Sinon, si tu me laisses un peu de temps, je réfléchis à quelque chose de plus satisfaisant qui prend en compte la probabilité de nulle en fonction du elo des adversaires...
|
|
je veux dire qui prend en compte la VRAIE probabilité de nulle (observée statistiquement sue un grand nombre de parties) en fonction du elo des adversaires...
|
|
Ok, bosses bien... Est-ce que tu fais une recherche dans une grosse base de partie? Ca doit être possible...
Moi je dois réviser pour la compétition de ce dimanche! ;)
Pour revenir sur tes formules, je pense qu'il serait plus clair de chercher en premier la probabilité de nulles pN(EloA;EloB), puis pA = x - 0,5 pN et pB = 1 - x - 0,5 pN.
|
|
Enfin les bonnes formules... ... enfin je crois! :)
|
|
tu as raison pour ta dernière remarque du 05-02-2011 à 20:36:08 : ce serait plus rigoureux de faire ainsi, mais un peu plus difficile que ce que j'ai fait au doigt mouillé, où j'ai pris la première modélisation qui fonctionnait à peu près qui me venait à l'esprit.
Entre temps, j'ai trouvé une formulation intermédiaire qui n'est pas trop mal, mais je ne veux pas que tu t'arraches les cheveux donc je la garde pour moi.
Sinon, bien pour la mise à jour, il reste un petit point qui cloche. Dans les formules que je donnais ci-dessus, pour moi A est le mieux classé des deux joueurs et non pas celui de la première équipe nommée. Ca a son importance car la formule n'est pas symétrique (essaie par exemple de mettre A = 2000 B = 2100 et le contraire tu n'auras pas le même résultat).
|
|
Vi, c'est pour ça... ... que je pensais que calculer pN en premier est mieux, on peut avoir une formule symétrique. "2500, 55% de nulles. Entre 2300 et 2500, 45% de nulles; entre 2100 et 2300 34% de nulle" et si tu as des stats pour les classements moins élevés on peut faire facilement une interpolation genre spline.
Ou peut-on trouver une grosse base de partie avec des joueurs plus modestes? (moi j'évolue en régionale 1, on oscille entre 2000 et 1600 Elo).
|
|
Modifié... ... pour que A soit le mieux classé des joueurs.
|
|
|