Salut, c'est Nemzy, le dev d'AoE Buddy. Une question m'obsédait : peut-on deviner ton Elo juste en regardant comment tu joues ?
J'ai analysé 12 800 replays de 1v1 classé, de 600 à 2 800 Elo, et entraîné un modèle qui ne regarde que toi : ni ton adversaire, ni le résultat. Verdict : il tombe à 100 Elo près sur 5 parties.
Voici ce que les données disent de notre jeu, et ce qui n'a pas marché.
1. Les données en bref
- 12 800 replays de 1v1 classé, autant de parties à 700 qu'à 2 500, téléchargés du point de vue du joueur pour avoir sa caméra (10 positions par seconde). Plus 19 944 replays de juillet pour l'entraînement.
- 335 indicateurs par joueur et par partie : ordres, caméra, villageois, âges, combats, scouting, murs…
- 439 joueurs mis de côté (15 parties chacun) : le modèle ne les voit jamais, c'est sur eux qu'on mesure son erreur.
Toutes les minutes de l'article sont des minutes de jeu (l'horloge en jeu, qui tourne à ×1,7).
2. Ce qui sépare les niveaux
Avant de construire une IA, on a posé la question la plus directe : quels indicateurs montent (ou descendent) avec l'Elo ? Pour chacun des 334 indicateurs, on a calculé une corrélation de rang (dite « de Spearman ») sur 21 081 joueurs-parties.
Comment la lire : on classe les joueurs selon l'indicateur, puis selon leur Elo, et on regarde si les deux classements se ressemblent. 0 veut dire aucun lien, +1 veut dire que l'indicateur range les joueurs exactement comme l'Elo, −1 qu'il les range à l'envers (c'est le cas des temps de réaction ou des pauses : plus c'est bas, meilleur on est). Au-delà de 0,5, c'est un lien très fort pour un jeu aussi varié qu'AoE2.
Parmi les 334 indicateurs, on en a retenu 30 « grands indicateurs » compréhensibles par un joueur, un seul par famille (pas trois variantes des sauts de caméra), dans les sept domaines du jeu. Le voici en version console :

Et le détail, avec ce que ça veut dire concrètement. Dans tout le tableau, « à 1 000 » désigne les joueurs entre 1 000 et 1 199 Elo et « à 2 000 » ceux entre 2 000 et 2 199 (médianes, c'est-à-dire le joueur du milieu de chaque tranche).
| # | Indicateur | Domaine | rho | Ce que ça veut dire |
|---|---|---|---|---|
| 1 | Actions utiles par minute | Vitesse et automatismes | +0,86 | Un joueur à 2 000 donne 36 actions utiles par minute, un joueur à 1 000 en donne 18 : le double. |
| 2 | Sauts de caméra par minute (0 à 10 min) | Multitâche | +0,77 | Avant 10 minutes, 1,1 saut de caméra par minute à 1 000, 8,5 à 2 000 : environ huit fois plus. |
| 3 | Ordres donnés au contact de l'ennemi / min | Micro et combat | +0,76 | 1,9 ordre de combat par minute à 1 000, 5,8 à 2 000 : on ne laisse plus les unités se battre seules. |
| 4 | Allers-retours base / front par minute | Multitâche | +0,74 | 2,5 allers-retours par minute entre sa base et l'extérieur à 2 000, 0,9 à 1 000. |
| 5 | Groupes de contrôle rappelés / min | Vitesse et automatismes | +0,74 | 2,7 rappels de groupe par minute à 2 000 contre 0,9 à 1 000 : les groupes de contrôle deviennent un réflexe. |
| 6 | Zones gérées en même temps | Multitâche | +0,73 | Par tranche de 30 secondes, un joueur à 2 000 agit dans 2,3 zones distinctes de la carte, un joueur à 1 000 dans 1,7. |
| 7 | Zones scoutées avant 6 min | Carte et vision | +0,69 | 6 zones de la carte visées par l'éclaireur avant 6 minutes à 1 000, 18 à 2 000 : trois fois plus de carte lue. |
| 8 | Changements de formation | Micro et combat | +0,67 | Utilisés dans 19 % des parties à 1 000 et 79 % à 2 000. |
| 9 | Points de ralliement placés / min | Macro et production | +0,67 | 1,8 point de ralliement par minute à 1 000, 3,8 à 2 000 : le double. |
| 10 | Plus longue pause sans ordre | Vitesse et automatismes | −0,66 | La plus longue pause sans aucun ordre passe de 34 s à 1 000 à 19 s à 2 000. |
| 11 | Temps de caméra sur sa base (0 à 10 min) | Carte et vision | −0,56 | Avant 10 minutes, la caméra reste sur sa base 89 % du temps à 1 000, 77 % à 2 000. |
| 12 | Patrouilles | Micro et combat | +0,56 | La patrouille apparaît dans 41 % des parties à 1 000 et 80 % à 2 000. |
| 13 | Zones de la carte où l'on donne des ordres | Carte et vision | +0,55 | 46 zones différentes de la carte reçoivent au moins un ordre à 1 000, 68 à 2 000. |
| 14 | Ressources qui dorment en réserve (12 à 20 min) | Éco | −0,55 | Entre 12 et 20 minutes, 894 ressources dorment en général dans la banque à 1 000, 672 à 2 000. |
| 15 | Première unité militaire | Macro et production | −0,51 | La première unité militaire sort à 11,4 min à 1 000, à 9,3 min à 2 000. |
| 16 | Unités militaires produites avant 20 min | Macro et production | +0,50 | 7 unités militaires avant 20 minutes à 1 000, 15 à 2 000. |
| 17 | Arrivée à l'Âge féodal | Macro et production | −0,48 | Arrivée en Féodal à 10,1 min à 1 000, 9,0 min à 2 000 : une minute de jeu d'écart, pas plus. |
| 18 | Temps de caméra chez l'adversaire (0 à 10 min) | Carte et vision | +0,46 | Avant 10 minutes, la caméra passe 0,7 % du temps chez l'adversaire à 1 000, 6,6 % à 2 000. |
| 19 | Cases de murs posées | Militaire et adaptation | +0,45 | 4 cases de murs sur la partie à 1 000, 12 à 2 000. |
| 20 | Part des ordres de combat sur une cible précise | Micro et combat | −0,44 | Le clic sur une cible pèse 41 % des ordres de combat à 1 000 et 28 % à 2 000 : les bons joueurs déplacent, replient et regroupent davantage. |
| 21 | Production pendant les combats | Multitâche | +0,43 | Production pendant les combats comparée au reste de la partie : −3 % à 1 000 (elle ralentit), +27 % à 2 000 (elle continue, et même plus fort). |
| 22 | Premier cerf poussé | Éco | −0,43 | Quand il y a des cerfs, le premier est touché à 4,5 min à 1 000 et à 2,3 min à 2 000. |
| 23 | TC inactif (part de la partie) | Éco | −0,39 | Le TC ne produit rien 9,3 % du temps à 1 000, 4,0 % à 2 000 : deux fois moins de temps perdu. |
| 24 | Hache à double tranchant | Éco | −0,37 | Lancée à 12,0 min à 1 000, à 9,8 min à 2 000. |
| 25 | Empennage (Fletching) | Militaire et adaptation | −0,36 | Lancé à 20,5 min à 1 000, à 16,2 min à 2 000 (parties où il est recherché). |
| 26 | Réaction à une attaque | Militaire et adaptation | −0,29 | Délai médian de réaction à une incursion : 11 s à 1 000, 7 s à 2 000. |
| 27 | Villageois à 15 min | Éco | +0,20 | 30 villageois à 15 minutes à 1 000, 31 à 2 000 : presque rien ne sépare les niveaux. |
| 28 | Fermes construites avant 15 min | Éco | +0,20 | 7 fermes avant 15 minutes à 1 000, 9 à 2 000. |
| 29 | Nouvelles unités adverses contrées en moins de 3 min | Militaire et adaptation | +0,19 | 25 % des nouvelles unités adverses reçoivent un contre en moins de 3 minutes à 1 000, 33 % à 2 000 : un écart modeste. |
| 30 | Arrivée à l'Âge des châteaux | Macro et production | +0,01 | Arrivée en Châteaux à 20,6 min à 1 000 et 20,9 min à 2 000 : aucune différence (parties où l'on y arrive). |
Ce que ce classement raconte
1. La vitesse écrase tout. Les actions utiles par minute (sans le spam de clics) arrivent en tête avec +0,86 : à elles seules, elles rangent les joueurs presque comme l'Elo. Et ce n'est pas qu'une question de doigts : la plus longue pause sans aucun ordre (−0,66) dit la même chose. Un joueur à 1 000 « décroche » 34 secondes d'affilée au moins une fois par partie ; à 2 000, jamais plus de 19.
2. Le multitâche est la vraie signature du niveau. Allers-retours entre la base et le front (+0,74), zones gérées en même temps (+0,73), sauts de caméra (+0,77) : les bons joueurs ne sont pas seulement plus rapides, ils sont partout à la fois. Un 2 000 donne des ordres dans 2,3 zones différentes toutes les 30 secondes ; un 1 000 dans 1,7, souvent sa base et un seul autre endroit. C'est pour cela qu'on a sorti le multitâche de « Carte et vision » pour en faire un domaine à part entière, « Multitâche » : zones gérées en même temps, allers-retours base / front (+0,74), production pendant les combats (+0,43). Un bon scouting masquait jusque-là un multitâche faible.
3. La carte se lit tôt. Avant 6 minutes, l'éclaireur d'un joueur à 2 000 a visité 18 zones, contre 6 à 1 000. Et pendant les 10 premières minutes, sa caméra passe neuf fois plus de temps chez l'adversaire.
4. L'éco compte, mais moins qu'on ne le croit. Le TC inactif est divisé par deux entre 1 000 et 2 000 (9,3 % contre 4,0 %), mais sa corrélation reste modeste (−0,39) : à niveau égal, les écarts entre joueurs sont énormes, certains 1 000 tournent très bien et certains 2 000 laissent leur TC dormir. Les ressources qui dorment en banque séparent mieux les niveaux (−0,55).
5. Les grandes surprises.
- Villageois à 15 minutes : +0,20 seulement. 30 villageois à 1 000, 31 à 2 000. L'explication est mécanique : un TC produit au mieux un villageois toutes les 25 secondes et le passage en Féodal le bloque plus de deux minutes. À 15 minutes, presque tout le monde est donc collé au même plafond, autour de 31 à 33. Ce chiffre est par ailleurs reconstitué à partir des ordres (le replay ne contient pas l'état du jeu), il faut donc le lire comme une estimation.
- L'arrivée en Châteaux ne dit rien (+0,01). 20,6 minutes à 1 000, 20,9 à 2 000. Le timing d'âge que tout le monde surveille est l'un des pires indicateurs de niveau. Attention à une limite : on ne compte que les parties où le joueur y arrive.
- Le clic sur une cible baisse avec le niveau (−0,44). À première vue contre-intuitif : on s'attendrait à ce que les bons joueurs ciblent mieux. En réalité, ils font autre chose en plus : replis, regroupements, déplacements. Le clic sur cible devient minoritaire.
Sur tous ces graphiques, chaque point est un joueur dans une partie (60 tirés au hasard par tranche de 200 Elo), la ligne suit le joueur médian de chaque tranche et la zone claire contient la moitié centrale des joueurs. Survole-les pour lire les valeurs.
Corrélation ne veut pas dire recette. Spammer la patrouille ne te fera pas gagner 500 Elo. Ces indicateurs sont des traces du niveau : ils montrent ce que font les bons joueurs, pas forcément pourquoi ils gagnent.
L'histoire de la caméra
Au tout début du projet, sur un premier petit lot de 591 joueurs dont on avait la caméra (presque tous entre 1 000 et 2 000), les sauts de caméra par minute en début de partie sortaient avec +0,40. C'était le premier signal fort, et le point de départ de toute une famille d'indicateurs de multitâche : zones gérées en même temps, allers-retours base / front, production pendant les combats, zones scoutées.
Aujourd'hui, sur 11 735 joueurs-parties de 600 à 2 800 Elo, ce même indicateur monte à +0,77, et ses petits frères suivent : allers-retours base / front +0,74, zones gérées en même temps +0,73, zones scoutées avant 6 min +0,69, production pendant les combats +0,43.
Honnêtement, une bonne partie de ce bond vient de l'échelle : une corrélation grimpe mécaniquement quand on compare des joueurs de 600 à 2 800 plutôt que de 1 000 à 2 000. Ce que la caméra a vraiment apporté, c'est une idée : mesurer non pas combien on clique, mais où.
À toi de fouiller
Les 333 indicateurs sont là. Choisis-en un : la courbe suit le joueur médian de chaque tranche de 200 Elo, de 600 à 2 800.
3. L'IA qui devine ton Elo
Une corrélation regarde un indicateur à la fois. Pour estimer un Elo, il faut les combiner tous. On a utilisé LightGBM, un modèle d'arbres de décision très utilisé pour ce genre de tableau de chiffres : il apprend des règles du type « si les actions utiles dépassent 30 et que la caméra quitte souvent la base, alors plutôt 1 800 ».
Deux choix importants :
- Joueur isolé. Le modèle ne voit rien de l'adversaire : ni son Elo, ni son jeu, ni le résultat de la partie. Uniquement ce que toi tu as fait. C'est indispensable pour repérer un smurf : il joue contre des adversaires de son faux niveau et gagne, et on ne veut surtout pas que le modèle en tire son estimation.
- Validation par joueur. Toutes les parties d'un même joueur restent du même côté (entraînement ou test). Sinon le modèle reconnaîtrait le joueur au lieu d'estimer son niveau.


En pondérant comme la vraie échelle du 1v1 classé (où il y a bien plus de joueurs à 1 200 qu'à 2 600), l'erreur moyenne est de :
- 121 Elo sur une seule partie (environ 12 %) ;
- 102 Elo sur 5 parties (environ 10 %).
Ces deux moyennes viennent du même modèle, mesuré sur une moitié des joueurs suivis jamais utilisée pour régler le modèle. Sur les 439 joueurs suivis, le même calcul donne 117 et 101 : la différence tient à l'échantillon, pas au modèle.
Le tableau par niveau dit l'essentiel, y compris ce qui fâche. Le biais, c'est l'estimation moins l'Elo réel sur une partie : négatif, le modèle sous-estime.
| Elo réel | Joueurs | Erreur, 1 partie | Erreur, 5 parties | Biais |
|---|---|---|---|---|
| 600 à 799 | 34 | 95 | 84 | +68 |
| 800 à 999 | 46 | 116 | 106 | +16 |
| 1 000 à 1 199 | 39 | 111 | 91 | +11 |
| 1 200 à 1 399 | 47 | 110 | 91 | −1 |
| 1 400 à 1 599 | 31 | 159 | 135 | +17 |
| 1 600 à 1 799 | 46 | 172 | 139 | +16 |
| 1 800 à 1 999 | 38 | 153 | 133 | +47 |
| 2 000 à 2 199 | 37 | 168 | 147 | −36 |
| 2 200 à 2 399 | 43 | 180 | 138 | −127 |
| 2 400 à 2 599 | 40 | 267 | 231 | −245 |
| 2 600 à 2 799 | 35 | 329 | 325 | −326 |
| Tous niveaux (échelle réelle) | 121 (12 %) | 102 (10 %) |
Deux choses sautent aux yeux. En bas de l'échelle, le modèle surestime un peu les 600 à 799 (+68) : comme tout modèle de ce type, il tire les extrêmes vers le milieu de l'échelle. Et au-dessus de 2 000, la tendance s'inverse franchement.
Le sommet reste un mur. Dès 2 200, le modèle sous-estime (−127), puis de 245 Elo entre 2 400 et 2 599 et de 326 Elo au-delà. Et regarder 5 parties au lieu d'une n'y change presque rien (329 contre 325 en haut de l'échelle) : ce n'est pas du bruit, c'est un plafond. Nos indicateurs ne séparent tout simplement plus l'élite. Un 2 400 et un 2 700 ont tous les deux 40 actions utiles par minute, scoutent autant et agissent dans deux à trois zones à la fois. Ce qui les sépare (lecture du jeu adverse, décisions au bon moment, exécution des combats décisifs) ne se voit pas encore dans nos chiffres.
4. Et en équipe ?
Le même travail a été refait sur 7 381 replays de parties classées en équipe (2v2, 3v3 et 4v4), soit 44 113 joueurs-parties. Toujours le même principe du joueur isolé : le modèle ne regarde que ce que fait le joueur, ni ses alliés, ni ses adversaires, ni le résultat.
- 118 Elo d'erreur sur une partie (10,1 %) : 114 en 2v2, 112 en 3v3, 124 en 4v4.
- 100 Elo à partir de 3 parties.
- Le modèle 1v1 appliqué tel quel aux parties d'équipe fait bien pire : 192 Elo, en sous-estimant les joueurs. Le jeu en équipe a ses propres repères, il fallait un modèle à part.
- Contrôle anti-fuite : en séparant les données par partie (pour que deux coéquipiers d'une même partie ne se retrouvent jamais l'un à l'entraînement, l'autre au test), l'erreur reste à 116. Le modèle ne triche donc pas en reconnaissant la partie.
- Et l'indicateur n°1 en équipe est le même qu'en 1v1 : les actions utiles par minute.
5. Tout ce qui n'a servi à rien
C'est la partie qu'on ne raconte jamais, et pourtant elle a pris autant de temps que le reste. Chacune de ces idées semblait excellente. Aucune n'a bougé l'erreur de plus de 4 Elo, ce qui est du bruit :
- le type de carte (ouverte, fermée, eau) : 174 → 173 ;
- l'Elo « stabilisé » (corriger l'Elo des comptes récents) ;
- la valeur investie et récoltée, 46 indicateurs de plus : 117 → 117 ;
- les paquets Sync bruts du replay ;
- un réseau de neurones qui lit la séquence complète des ordres : 192, contre 188 pour LightGBM ;
- retirer les réémissions du moteur (des ordres que le jeu renvoie tout seul).
Et ajouter des parties ? La courbe d'apprentissage répond : chaque fois qu'on double les données, l'erreur baisse de 5 à 7 Elo. Mais au-dessus de 2 400, elle ne bouge plus du tout. Plus de replays ne réglera pas le problème du sommet.

6. Qui va gagner ? La partie minute par minute
En bonus, on a entraîné un second modèle sur 12 793 parties, qui regarde l'état des deux joueurs à chaque minute de jeu (armée, éco, technologies, âge…) et en déduit une probabilité de victoire. De quoi repérer les retournements, les avances perdues et le moment où la partie bascule.
Quelques chiffres sortis de ce modèle (état de la partie seul, sans l'Elo) :
- un joueur qui passe sous 25 % de chances pendant deux minutes de suite finit quand même par gagner une fois sur six (17,6 %) ;
- environ 11 % des parties connaissent un vrai retournement de ce genre ;
- dans ces parties, le creux arrive le plus souvent autour de la 29e minute (médiane), et elles durent nettement plus longtemps (49 minutes en médiane, contre 38).
7. Le test « stratégie » : existe-t-il un talent invisible ?
C'est la question qui a fait débat sur le Discord. L'hypothèse : certains joueurs ont un Elo bien plus haut que ce que leur jeu mesuré laisse prévoir. Ils auraient un talent que nos indicateurs ne voient pas, appelons-le « stratégie », qui leur ferait gagner des parties que leur jeu ne laissait pas prévoir. L'hypothèse opposée : cet écart, c'est surtout du bruit.
Pour trancher sans tricher, les critères de réussite ont été écrits avant de lancer le moindre calcul. Puis on a coupé les parties de chaque joueur en deux moitiés au hasard (200 fois) pour voir si ce qu'on mesure sur une moitié se retrouve sur l'autre.

Les résultats sont nets :
- L'écart « Elo réel moins Elo estimé » est un trait très stable du joueur : 0,87 de corrélation entre ses deux moitiés de parties. Si le modèle te sous-estime sur tes parties du lundi, il te sous-estime aussi sur celles du jeudi.
- Mais « gagner au-delà de l'état mesuré de la partie » n'est pas un trait (0,08), « perdre alors qu'on menait » non plus (0,03).
- Et l'écart ne prédit pas la surperformance (−0,007). Les joueurs sous-estimés ne gagnent pas plus de parties « perdues d'avance » que les autres.
- La composition d'armée et les technologies forment bien un style stable (0,35), mais elles n'améliorent ni la prédiction du vainqueur (+0,1 %), ni l'estimation de l'Elo.
Et la contre-épreuve la plus parlante : les 20 % de joueurs les plus surestimés, ceux dont le jeu mesuré est au-dessus de leur Elo, gagnent 59 % de leurs parties et mènent aux trois cinquièmes de la partie (0,55 de probabilité de victoire d'après l'état mesuré). Ils ne sont pas « surestimés » : ils sont en train de monter, et leur Elo n'a pas encore rattrapé leur jeu.
Verdict : l'écart entre ton jeu et ton Elo est bien réel et bien à toi, mais ce n'est pas un pouvoir mystérieux de retourner les parties. C'est plus probablement un mélange de ce qu'on ne mesure pas encore (la qualité des combats décisifs, par exemple) et d'un Elo en retard ou en avance sur le niveau.
8. Ton empreinte de jeu
Dernière expérience, presque inquiétante : on montre au modèle 6 parties, dont une n'appartient pas au joueur. Il trouve l'intruse 99 % du temps (le hasard ferait 17 %). Ce qui trahit le plus un joueur, ce sont ses habitudes d'interface : ses raccourcis, sa façon de sélectionner, de rappeler ses groupes. Sans elles, le modèle reconnaît encore l'intruse 78 % du temps.
Ton style de jeu est une signature. Pour repérer un smurf ou un compte partagé, c'est une très bonne nouvelle.
9. Ce qu'on retient
- Ton replay dit ton niveau à environ 100 Elo près sur 5 parties, sans rien savoir de ton adversaire ni du résultat. En équipe aussi : 100 Elo à partir de 3 parties.
- Ce qui fait le niveau, c'est la vitesse utile et le multitâche, bien plus que le timing des âges ou le nombre de villageois à 15 minutes.
- L'élite reste un mystère pour les chiffres : au-dessus de 2 400, ce qui fait la différence ne se lit pas encore dans les commandes.
- Le « talent invisible » n'a pas passé le test : l'écart entre ton jeu et ton Elo est stable, mais il ne te fait pas gagner les parties perdues.
Et maintenant ? La prochaine étape : comprendre ce qui se passe au sommet, là où nos 335 indicateurs ne suffisent plus.
Méthode, pour les curieux
- Corrélations : Spearman entre chaque indicateur et l'Elo du joueur avant la partie, une ligne par joueur et par partie de 1v1 classé, parties de moins de 8 minutes exclues, sur le jeu complet (21 081 joueurs-parties, 12 670 parties, 8 589 joueurs). Contrôles : même calcul avec une seule ligne par joueur, et sur des tirages où chaque tranche de 200 Elo pèse autant ; le classement change peu (la plus grosse différence concerne les changements de formation : +0,67, et +0,48 avec une seule ligne par joueur). Les indicateurs de caméra ne portent que sur le joueur qui a enregistré le replay (11 735 joueurs-parties).
- Médianes : par tranche de 200 Elo, de 600 à 2 800.
- Modèle : LightGBM, joueur isolé, validation par joueur (GroupKFold), test sur 439 joueurs jamais vus. Erreurs par tranche :
runs/v4b-eval.log; moyenne pondérée comme l'échelle réelle :runs/calib-multi.log(même modèle, jeu v4, moitié des joueurs suivis non utilisée pour le réglage). - Scripts :
article/stats.py(corrélations),article/export_page_data.py(données des graphiques).