Documentation technique
Méthodologie
Cette page décrit les principales méthodes publiques, leurs sources de données, leurs limites et mes choix statistiques. Les résultats restent des indicateurs à interpréter dans le contexte d'une partie.
Les données
Les données de jeu viennent de l<w>API officielle Riot Games</w>. Leur disponibilité et leur niveau de détail varient selon la partie et les services Riot :
- •
match-v5: Données complètes de chaque partie (timeline, gold, dégâts, objectifs, événements) - •
spectator-v5: Informations de lobby lorsqu'elles sont fournies par Riot - •
league-v4: Classements ranked, LP, rangs
10
serveurs Riot
173
analysés (173 curés)
Chaque
patch
100%
API Riot
Honnêteté sur l'échantillon : LegendsTracker est un projet indépendant. Ma base de données contient environ 800 à 1 200 parties par champion par patch, là où des sites comme LoLalytics ou U.GG en agrègent 500 000+. Je compense cette différence avec des méthodes statistiques adaptées (Bayesian smoothing), mais mes winrates sont naturellement plus volatils. Je préfère être transparent plutôt que de prétendre une précision que je n'ai pas.
Player DNA : 35 features × 13 archétypes
Le Player DNA est un profil exploratoire. Il résume jusqu'à 35 indicateurs issus d'une fenêtre récente de parties ranked, regroupés en 6 axes : Combat, Macro, Mécaniques, Mental, Team et Tempo. Il peut proposer une proximité avec des archétypes, mais décrit des tendances et non la personnalité, le niveau global ou la cause d'une action précise.
Les indicateurs sont normalisés pour faire ressortir des écarts relatifs et proposer des tendances à relire. Une signature, un block ou un archétype ne doit pas être lu comme un verdict : ils peuvent changer avec l'échantillon, le rôle joué et les données disponibles.
Transparence : limites actuelles du Player DNA
Le profil peut être affiché comme repère exploratoire, mais il n'oriente pas une analyse détaillée lorsque la confiance, l'historique ou la normalisation par rang × rôle ne sont pas suffisamment fiables. Cela évite de transformer un signal incomplet en conseil personnalisé trop affirmatif.
Comment une métrique devient un score
Chaque métrique brute (CS/min, vision, dégâts…) est convertie en score 0-100 par interpolation linéaire contre un benchmark calibré par rang, puis ajustée par un multiplicateur de rôle. C'est cette mécanique qui alimente la note de match détaillée (section suivante) et le z-scoring du Player DNA.
score = ((valeur - borne_basse) / (borne_haute - borne_basse)) × 100Le score est ensuite clampé entre 0 et 100.
Benchmarks par rang
Les bornes sont calibrées sur des données réelles extraites le 23/03/2026 depuis ma base de données (830k+ games ranked EUW1). Refresh manuel lors des gros patches : un scheduler hebdomadaire est en roadmap :
| Rang | CS/min | KDA | KP% | DPM | Gold/min | Deaths/game |
|---|---|---|---|---|---|---|
| Iron | 4.9 | 2.4 | 37% | 544 | 350 | 7.5 |
| Bronze | 5.8 | 3.4 | 45% | 698 | 401 | 6.5 |
| Silver | 6.6 | 3.5 | 46% | 809 | 434 | 6.4 |
| Gold | 6.8 | 3.5 | 46% | 739 | 428 | 6.4 |
| Platinum | 7.1 | 3.5 | 46% | 763 | 438 | 6.4 |
| Emerald | 7.6 | 3.6 | 47% | 774 | 454 | 6.2 |
| Diamond | 7.6 | 3.6 | 48% | 760 | 452 | 6.0 |
| Master | 7.7 | 3.6 | 48% | 731 | 448 | 5.8 |
| Grandmaster | 7.9 | 3.9 | 49% | 762 | 457 | 5.5 |
| Challenger | 8.1 | 4.2 | 50% | 798 | 466 | 5.3 |
Multiplicateurs par rôle
Les benchmarks sont ajustés par rôle pour comparer équitablement un support et un ADC :
| Rôle | CS | Vision | DPM | Objectifs | KP |
|---|---|---|---|---|---|
| Support | ×0.25 | ×2.0 | ×0.55 | ×0.4 | ×1.30 |
| Jungle | ×0.75 | ×1.3 | ×0.70 | ×1.5 | ×1.15 |
| Top | ×1.0 | ×0.8 | ×0.90 | ×0.8 | ×0.90 |
| Mid | ×1.0 | ×0.9 | ×1.0 | ×0.7 | ×1.05 |
| Bot (ADC) | ×1.1 | ×0.8 | ×1.1 | ×0.9 | ×1.10 |
Système de grades
Chaque match reçoit un grade global (S, A, B, C, D) basé sur 6 catégories pondérées. Le grade est calculé par rapport à ton rang, pas en absolu : un B en Diamond est bien meilleur qu'un A en Bronze. Depuis juillet 2026, les échelles sont calibrées par rôle sur des parties classées réelles : une performance médiane pour ton rôle vaut ~50, et le S correspond au top ~2 % des performances : atteignable dans les cinq rôles, support compris.
Les 6 catégories
| Catégorie | Poids | Métriques principales |
|---|---|---|
| Teamfight | 25% | DPM, kill participation, damage share* |
| Laning | 20% | CS@15, gold diff@15, XP diff |
| Survie | 18% | Deaths (inversé), KDA, bonus faibles morts |
| Income | 13% | Gold/min, CS/min |
| Vision | 12% | Vision score, wards détruites |
| Objectifs | 12% | Objective damage/min, tower kills |
* Le damage share est ajusté par rôle : la plage 8-35 % de référence est multipliée par le rôle joué (UTILITY × 0.45 → plage 3.6-15.75 %, BOTTOM × 1.15 → 9.2-40.25 %, etc.). Avant ce fix, un support tank à 10 % de damage share plafonnait ~20/100 sur cette composante (25 % du Teamfight) quoi qu'il fasse : maintenant un support à 12 % obtient un score équivalent à un ADC à 28 %.
⚠️ Ces plages sont des cibles atteignables par rôle, pas une décomposition additive : la somme des médianes par rôle ne fait pas 100 %. Le damage share d'une équipe somme à 100 % par construction (5 joueurs se partagent 100 % des dégâts), mais chaque rôle a une enveloppe différente pour ce qu'il est censé peser individuellement.
Poids des catégories par rôle
Les 6 poids ci-dessus sont ceux des laners (Top / Jungle / Mid / ADC). Un support n'a structurellement ni revenus (gold/CS) ni last-hit d'objectifs : le juger là-dessus le plombe quoi qu'il fasse. Le rôle UTILITY redistribue donc ces poids vers ce qu'un support contrôle réellement.
| Catégorie | Laners | Support |
|---|---|---|
| Teamfight | 25% | 30% |
| Laning | 20% | 15% |
| Survie | 18% | 22% |
| Income | 13% | 4% |
| Vision | 12% | 24% |
| Objectifs | 12% | 5% |
Objectifs des supports, révision 2026-07-15 (retours communauté) : juger un support aux dégâts d'objectifs le condamnait structurellement (médiane mesurée : 16/100). La catégorie note désormais sa participation : takedowns (kill ou assist) d'objectifs épiques : drakes, héraut, grubs, baron : pour 75 %, et de tours pour 25 %. Être présent au bon endroit compte, pas taper le drake. Laisser l'or des plaques à ton ADC reste le bon play. Les laners restent notés aux dégâts d'objectifs + tours (0.65/0.35).
Comment lire un grade (post-match)
Depuis le 2026-05-20, chaque sous-grade (Laning / Combat / Survie / Objectifs / Vision / Farm) du résumé de match est cliquable. En ouvrant le détail, tu vois :
- Chaque sous-métrique avec ta valeur vs le benchmark de ton rang + rôle et un statut ▲ / ─ / ▼.
- Le score normalisé 0-100 de la sous-métrique (mini-barre colorée) et son poids % dans la note de catégorie.
- Un repère ● sur les benchmarks ajustés à ton rôle (cf. table des multiplicateurs plus haut), avec un bandeau « Calibré pour <rôle> » en tête.
- Une bulle « X pèse le plus dans cette note » qui pointe la sous-métrique responsable quand le grade tire vers le bas : utile pour savoir ce qu'il faut bosser en priorité.
La règle générale : un score sous 50 / 100 sur une sous-métrique fortement pondérée explique presque toujours un grade C ou D. À l'inverse, un S / A sur la catégorie n'est jamais « chance » : il y a au moins deux sous-métriques au-dessus de 70.
Seuils de grade
Percentile par rang (interpolé)
Le score brut 0-100 est converti en percentile contre les joueurs du même rang via une interpolation linéaire par paliers. Ça évite les jumps discrets : un score 79 n'est plus brutalement à 78% et un 80 à 90%, la fonction lerp entre les ancres pour une progression continue.
ancres : 0→5, 20→12, 30→22, 40→35, 50→50, 60→65, 70→78, 80→90, 90→97, 100→99Impact map (impact dans la partie)
L<b>Impact map</b> (<code>impactScore</code>, 0-100) mesure ton poids réel <em>dans cette partie précise</em>, pas contre ton rang. Il est <b>role-aware</b> :
impactScore = KP_eff × 0.55 + participation_objectifs × 0.45Pour UTILITY, la participation aux objectifs (un share du dégât d'équipe : un support en fait 5-15 % quoi qu'il arrive) est remplacée par la vision et la présence, qui mesurent vraiment sa présence sur la map :
impactScore (UTILITY) = KP_eff × 0.40 + part_vision × 0.30 + densité_assists × 0.20 + participation_objectifs × 0.10KP effectif : pondéré par le volume de kills (retour Discord 2026-05-30). Le KP brut est un % du total de kills de l'équipe : 67 % sur 3 kills (= 2 participations) pesait autant que 67 % sur 26. Pour le scoring uniquement, on applique un facteur de volume KP_eff = KP × clamp(kills_équipe / 10 ; 0.3 ; 1). Concrètement 67 %×0.3 ≈ 20 passe enfin sous 31 %×1 = 31 : sur un stomp 3-26, le support adverse à 31 % / 26 kills domine. Le KP brut reste affiché tel quel (67 %) : seul son poids interne change.
MVP / LVP
Le badge MVP est attribué au joueur avec le meilleur globalScore (0-100) parmi les 10 joueurs. La formule est role-aware :
globalScore = impactScore×0.38 + min(KDA, 8)×7.5 + DPM/maxDPM×18 + Vision/maxVision×12 + CS/maxCS×10 + Gold/maxGold×10 - Deaths×1.5 + 4Pour UTILITY, la formule drop CS/Gold (non pertinents pour le rôle) et redistribue vers vision et impact :
globalScore (UTILITY) = impactScore×0.45 + min(KDA, 8)×7.5 + Vision/maxVision×18 + DPM/maxDPM×6 - Deaths×1.5 + 4La contribution KDA est cappée à 8 : sans ce cap, un Perfect KDA (ex : 6/0/28 → KDA 34) saturait le score à 100 et tuait la discrimination MVP entre joueurs Perfect-KDA. impactScore lui-même est role-aware (cf. Impact map ci-dessus, KP pondéré par le volume inclus).
Carry : chaque rôle à sa manière
- Carry Dégâts : laners qui portent par les kills. Kill share ≥ 50 % de l'équipe, ≥ 5 kills, en victoire.
- Carry Engage : supports qui portent par engage/peel/vision. UTILITY + victoire + KP ≥ 65 % + ≤ 3 morts + ≥ 1.5 vision/min. Avant 2026-05-09, le badge "Carry" générique excluait structurellement les supports.
Badges de partie « Dieu de X »
Chaque partie distribue aussi des badges « meilleur de la game » sur une métrique donnée. Depuis le 2026-05-30, les « Dieu de X » exigent des planchers absolus en plus d'être le meilleur : pour qu'un 1/3/1 sur un stomp ne décroche pas « Dieu du Support » juste parce qu'il est le seul support de son équipe :
- Dieu du Support : meilleur
supportScorede la partie, et ≥ 10 assists et ≥ 25 de vision. - Dieu de la Vision : meilleur score de vision, et ≥ 25 au total et ≥ 1.4/min (une longue game à vision médiocre ne suffit plus).
- Dieu du CS : meilleur CS/min des laners, ≥ 7 (hors support).
Choix assumé : on garde la reconnaissance en défaite. Une grosse game de support, ou une vision réellement élite (44 de vision en 18 min = 2.4/min), méritent leur badge même équipe perdante : la vision posée existe que tu gagnes ou non. Le supportScore qui classe le « Dieu du Support » intègre KP, vision, assists moins un malus par mort : un 0.6 KDA ne coiffe donc plus un support propre.
Role Signature : chaque rôle a ses propres KPIs
Les grades globaux donnent une moyenne, mais un Top splitpusher et un ADC carry n'ont pas les mêmes responsabilités. La Role Signature est un indicateur composite propre à chaque rôle, construit à partir de métriques disponibles. Il sert à relire une partie et ne couvre pas toutes les responsabilités du rôle.
Formule : score = Σ(grade_kpi × poids_kpi) avec S=95, A=82, B=68, C=52, D=30. Le résultat est un score /100 qui reflète ce que ton rôle est censé faire.
Les 5 signatures
Pression side + impact TF
Tempo · Ganks · Objectifs
Dégâts · Priorité · Roams
Dégâts · Farming · Survie
Vision · Peel · Présence
Support : pondération par sous-archétype : les 5 poids UTILITY affichés ci-dessus sont le set par défaut. Depuis le 12/05, le rôle UTILITY applique 5 jeux de poids distincts selon le sous-archétype du champion (enchanter, tank, catcher, mage, ou défaut) : une Leona catcher est jugée surtout sur sa KP et ses roams, une Soraka enchanter surtout sur sa vision et son peel.
Exemple concret : un ADC à 30% de dmg share obtient un A (seuil 28%+), et comme cela pèse 35% de son score, il impacte directement le grade global. Un support avec la même stat obtient aussi un A mais cela ne pèse que 0% dans son rôle (pas un KPI) : sa vision/min compte 30% à la place. Chaque rôle est jugé sur ce qui lui appartient vraiment.
Analyse des morts : contextuelle et role-aware
Des morts sont taguées et scorées à partir d'événements de timeline Riot (positions disponibles, proximité, wards, objectifs, HP, gold diff). Le score 0-100 et les catégories sont des heuristiques de relecture : ils ne prouvent pas l'intention, le call d'équipe ou la cause exacte d'une mort.
Les 13 tags détectés
teamfightMort en 3v3+, alliés proches
good_tradeTrade positif (kills ennemis > alliés ±10s)
objective_tradeMort pour un objectif sécurisé
gankedKiller/assist d'une autre lane (jungler, roam, TP)
solo_killedTué en 1v1 (0 assist, 1 ennemi proche)
caught_outSeul contre 2+ ennemis, hors teamfight
overextendTerritoire ennemi + 0 allié proche
no_vision0 ward alliée posée dans la fenêtre 90s
facecheckBush/river sans ward avec ennemis proches
pre_objectiveSeul, < 2 min avant un spawn majeur
dive_gone_wrongPrès d'une tour + territoire ennemi
repeated_deathMême killer 2+ fois
low_resource_deathHP < 30 % 30 s avant : aurait dû back
Score de qualité
Base à 50. Chaque tag applique un bonus/malus :
score = 50 + bonus(tags) - malus(tags) + phase_modifier(role, phase) + role_bonus| Tag | Points | Condition supplémentaire |
|---|---|---|
| objective_trade | +30 | |
| good_trade | +25 | |
| teamfight | +15 | |
| objectiveSecuredNearby | +20 | bonus de contexte |
| nearbyAllies ≥ 3 | +10 | bonus de contexte |
| caught_out | -25 | |
| pre_objective | -25 | |
| overextend | -20 | |
| facecheck | -20 | |
| dive_gone_wrong | -20 | |
| no_vision | -15 | |
| repeated_death | -15 | |
| low_resource_death | -15 |
Modificateurs contextuels
Phase de la partie
- Early (< 14 min) :
caught_out -5,solo_killed -3,objective_trade +5: les erreurs de lane impactent toute la game - Mid (14-24 min) : neutre
- Late (≥ 25 min) :
caught_out -8,teamfight +8,objective_trade +8: une erreur solo peut perdre la game
Bonus par rôle
- Support : si un allié low HP proche,
+10(peel attempt reconnu) : pas de tagcaught_out/solo_killed - Jungle : pas d'overextend en late game (invasion = job), early caught_out
+3 - ADC : pas d'overextend en late game side lane (splitpush = job), late
+3
Fix ward detection (avril 2026) : les événements WARD_PLACED de l'API Riot n'incluent pas toujours la position. On distingue maintenant wards confirmées proches (position connue + dans le rayon 3000) et effort de vision (total de wards alliées posées dans la fenêtre 90s, position ou non). Le tag no_vision ne se déclenche que si zéro ward n'a été posée : plus de faux positifs qui pénalisaient -15 pts injustement.
Fix vision pré-objectif lifetime-aware (mai 2026) : avant, la métrique Wards avant objectifs ne comptait que les wards posées dans la fenêtre [drake−2min ; drake]. Une Control Ward posée 5 minutes avant le drake (anticipation typique d'un jungler) n'était jamais comptée → l'IA de coaching accusait à tort le joueur de « ne pas warder le drake ». Maintenant, chaque ward a une fenêtre de vie calculée : Control Ward = ∞ (jusqu'à kill/remplacement), Yellow Trinket = 120s, Sight Ward = 150s, Blue Trinket = 60s. Les événements WARD_KILL sont matchés par (wardType, position ±150 unités) pour fermer la fenêtre plus tôt si la ward a été détruite. Le signal envoyé au coach IA passe d'un compteur brut à une couverture qualitative : « X/Y objectifs avec ≥1 ward active en river/enemy 60s avant le spawn ».
Plan de progression : déterministe et basé sur ton Player DNA
Le plan de progression de 14 jours est généré côté serveur à partir de ton Player DNA, sans appel IA génératif. Il s'appuie sur les signaux disponibles, ton rôle et des objectifs mesurables : il reste un repère de travail, pas un diagnostic complet.
Comment c'est généré
1. Le serveur utilise la fenêtre récente de parties classées disponible pour calculer le Player DNA.
2. Il priorise ton block (signal à travailler), les écarts avec le prototype de ton archétype et les signaux applicables à ton rôle.
3. Seules les faiblesses auxquelles correspond une métrique mesurable en partie deviennent des objectifs ; les signaux non mesurables sont ignorés plutôt qu'inventés.
4. Les cibles sont calibrées avec les références disponibles pour le rang et le rôle, puis adaptées au contexte quand il est connu.
5. Le nombre d'objectifs et de parties requises s'adapte au niveau de coaching afin de rester atteignable.
6. Le focus quotidien alterne entre les catégories des objectifs réellement sélectionnés.
Player DNA utilisé maintenant : le générateur part déjà du block, des gaps prototype et du rôle lorsque le signal est suffisant. Une faiblesse sans proxy fiable ne devient pas un objectif automatique.
Exemples d'objectifs mesurables
Chaque objectif utilise une métrique extractible depuis les données de match, une cible et des pistes d'action écrites à la main. Voici des exemples :
Améliore ton CS/min
cs_per_minAugmente vision score / min
vision_per_minRéduis tes morts / game
deaths_per_gameAméliore ton KDA
kdaSois présent aux team events
kill_participationPrésence sur les fights d'objectif
kp_objectivesAugmente ton DPM
damage_per_minPose plus de wards
wards_per_gameAchète plus de control wards
control_wardsAugmente ta part des dégâts
damage_shareContribue plus aux objectifs neutres
objective_damageOptimise ton gold/min
gold_per_minÉvaluation des objectifs
Lorsqu'une partie compatible et les données nécessaires sont disponibles, le système peut évaluer chaque objectif selon des règles explicites :
for (match of last20RankedMatches) {
if (extractMetric(match, obj.target.metric) >= obj.target.value) {
obj.qualifying_matches.push(match.id)
}
}
if (obj.qualifying_matches.length >= obj.target.games_required) {
obj.completed = true
}La validation apparaît après l'actualisation des données disponibles. Une valeur isolée ne remplace pas le contexte de la partie ni une progression durable.
Comment sont définis les objectifs ? Les seuils reposent sur des règles explicites et sur les données disponibles. Ils servent de repères de travail ; ils ne résument pas à eux seuls le niveau ou la qualité d'une partie.
Arbre de compétences
L'onglet Progression affiche aussi un arbre de micro-compétences (timing de recall, survie, focus objectifs, gestion des waves, vision…). Les notes utilisent les timelines et statistiques disponibles sur une fenêtre récente ; elles restent des indicateurs de lecture, pas une mesure exhaustive de chaque décision en game.
Règle de transparence : si une compétence n'est pas mesurable sur tes parties récentes (timeline absente, donnée manquante), elle est affichée « indisponible » : jamais remplie avec une note neutre qui ferait semblant. La note globale de l'arbre ne moyenne que les compétences réellement évaluées.
Tier List : Bayesian + Wilson score
Avec un échantillon de ~1 000 parties par champion, le winrate brut est trop volatil. Un champion à 60% de winrate sur 80 parties n'est pas forcément meilleur qu'un champion à 52% sur 3 000 parties.
Le problème du petit échantillon
Avec peu de données, les champions peu joués ont des winrates extrêmes (40% ou 60%) simplement par variance statistique. On combine deux estimateurs complémentaires : Bayesian smoothing pour estimer la vraie WR, et Wilson score interval (borne basse 95%) pour pénaliser l'incertitude des petits samples.
1. Formule du winrate bayésien
bayesianWR = (games × winrate + C × prior) / (games + C)C = 150 : Constante de lissage (plus C est grand, plus on tire vers la prior)
prior = 50% : Winrate a priori (moyenne attendue)
games : Nombre de parties du champion
winrate : Winrate brut observé
Exemple concret : Un champion à 60% de WR sur 50 parties : bayesianWR = (50 × 60 + 150 × 50) / (50 + 150) = 52.5%. Sur 500 parties : (500 × 60 + 150 × 50) / 650 = 57.7%. Plus l'échantillon est grand, moins le lissage a d'impact.
2. Wilson score interval (borne basse 95%)
Le Bayesian estime un point central, mais n'exprime pas l'incertitude. Deux champions peuvent avoir le même bayesianWR avec des intervalles de confiance radicalement différents. Le Wilson score donne la borne inférieure de l'IC 95% : un champion avec 50 games (σ ≈ 7%) finit mécaniquement sous un champion avec 1000 games (σ ≈ 1.6%).
wilsonLower = (p̂ + z²/2n − z·√(p̂(1−p̂)/n + z²/4n²)) / (1 + z²/n)avec z = 1.96 (95% CI), p̂ = winrate observé en fraction, n = games.
3. Score final
Mix 70% Bayesian (stabilité globale) + 30% Wilson (pénalise l'incertitude) + bonus popularité :
score = (bayesianWR × 0.7 + wilsonLower × 0.3) + max(log₂(games / avgGames) × 3, −3)Le bonus récompense les champions populaires (méta-validés par le volume) sans plafond positif. Le malus est borné à −3 points depuis le 2026-05-20 : la régression bayésienne gère déjà la fiabilité des petits samples : au-delà, on double-pénaliserait les pocket picks viables (un champion à 200 games sur un pool moyen à 800 prenait −6, soit ~1 tier entier en plus de la régression).
Le mix Bayesian/Wilson stabilise le tier d'une patch à l'autre : les champions « outlier chanceux » remontent moins.
Attribution des tiers
Les champions sont triés par score décroissant, puis répartis par percentile :
Petits pools. « Top 5 % / 15 % » n'a aucun sens sur un pool minuscule : un pool de 5 champions classés ou moins (typiquement 24-48 h après un patch) ne se voit attribuer ni S+ ni S : le meilleur plafonne à A tant que le pool n'atteint pas 6 champions. On ne fabrique pas un tier élite à partir du seul fait d'être 1er d'une poignée de champions.
Seuil minimum adaptatif : entre 10 et 50 parties pour être inclus, selon le volume moyen du pool. Sur un patch fraîchement sorti (peu de données) le seuil descend vers 10 pour ne pas vider la liste, puis remonte vers 50 dès que la collecte rattrape : le Bayesian/Wilson ramène de toute façon les petits samples vers le prior 50 %.
Estimation du rang théorique
Le rang théorique est une estimation expérimentale fondée sur des indicateurs de performance disponibles. Il ne dit pas le rang auquel tu devrais être et peut être indisponible lorsque l'échantillon ou la calibration ne permettent pas une lecture suffisamment fiable.
Algorithme
Les indicateurs applicables sont normalisés par rapport au corpus disponible. Une valeur relative ne constitue pas à elle seule une mesure complète de niveau.
L'estimation n'agrège qu'un sous-ensemble de métriques observables et pertinentes pour le rôle ; les signaux sans source suffisamment fiable et les traits de style sont exclus.
Les métriques retenues sont pondérées pour produire une tendance relative. Cette pondération est une heuristique de produit, pas une preuve de niveau ou de potentiel.
Décalage de tier = round(z agrégé ÷ 0.55), clampé à ±3 tiers. 0.55σ ≈ un cran (calibré sur l'écart empirique entre moyennes de tiers sur les features mécaniques).
Rang théorique = rang courant + décalage, clampé entre Iron et Challenger.
Pondération (somme = 1.0)
cs_efficiencyMécaniques15%vision_per_minMacro10%objective_priorityMacro10%damage_per_goldMécaniques10%multi_kill_rateMécaniques8%tower_pressureMacro6%anti_gank_awarenessMacro6%kp_dmg_balanceTeam6%snowball_conversionOutcomes5%tilt_resistanceMental4%post_death_recoveryMental4%comeback_rateMental4%hourly_consistencyMental3%comeback_contributionOutcomes3%role_expectation_matchTeam2%death_evennessTeam2%wave_managementMacro (laners)2%Score de confiance
confiance = min(100, 35 + sampleFactor × 50 + min(1, |z agrégé| ÷ 1.5) × 15)L'estimation est masquée lorsque l'historique ou le signal est insuffisant. Ce score de confiance décrit la solidité du signal disponible ; il ne garantit pas que l'estimation reflète un rang réel.
Indicateurs de session : 7 signaux
Cet outil relit ta session récente (parties consécutives à moins de 90 min d'écart) au moyen de sept règles heuristiques. Il ne détecte ni ne diagnostique le tilt ou l'état mental.
Lose streak
Nombre de défaites consécutives
Seuils : 2 = low, 3 = medium, 4 = high, 5+ = critical
CS decline
Baisse du CS/min entre 1ère et 2ème moitié de session
Seuils : 10-15% = low, 15-20% = medium, 20-30% = high, 30%+ = critical
Deaths rising
Augmentation des morts moyennes
Seuils : 1.5-2 = low, 2-3 = medium, 3-4 = high, 4+ = critical
Champion switching
Ratio champions uniques / parties jouées
Seuils : 80-90% = medium, 90%+ (5+ games) = high
Queue rage
Relance rapide après défaite (< 2 min)
Seuils : 1 = medium, 2+ = high, 3+ = critical
Session winrate
Winrate global de la session
Seuils : 15-35% = medium, ≤15% = high, 0% = critical
Shorter games
Baisse de durée de game (FF plus tôt)
Seuils : > 3 min de baisse = medium, > 6 min = high
Calcul du score
tiltScore = Σ(poids_sévérité) + bonus_session_longuePoids : low = 8, medium = 15, high = 22, critical = 30
Bonus de session : ajustement linéaire à partir de 4 games. Il décrit une durée et une séquence de jeu, pas une fatigue mentale mesurée.
Système de badges
31 badges répartis en 6 catégories actives, chacun avec 4 niveaux de rareté progressifs. Les seuils sont fixes et absolus (pas relatifs au rang), mais certains badges sont ajustés par rôle principal pour éviter de comparer des responsabilités différentes.
Combat
KDA, participation, dégâts et multi-kills
Farm
CS/min, gold/min et régularité de farm
Vision
Vision score, wards posées et détruites
Survie
Survie et retours dans la partie
Objectifs
Tours et objectifs neutres
Progression
Séries, winrate et champion principal
Chaque badge a 4 tiers : Bronze → Argent → Or → Légendaire. La progression vers le tier suivant est affichée en pourcentage.
Contexte d'équipe
Le système met en évidence des performances ou des situations inhabituelles à partir des statistiques disponibles. Ce sont des signaux heuristiques : ils ne permettent pas d'affirmer une intention, un AFK ou le statut smurf d'un joueur.
Activité inhabituellement faible
- •Temps joué inférieur à 60 % de la durée de la partie
- •Partie de plus de 15 min avec très peu de gold/min et de dégâts
- •Partie de plus de 15 min avec peu de ressources, peu de dégâts et peu de morts ; les seuils tiennent compte du rôle support
Performance très faible
- •Au moins 10 morts, une faible part des dégâts d'équipe et un KDA très bas
- •Beaucoup de morts par minute avec un impact et un KDA faibles
Performance adverse dominante
- •KDA, dégâts/minute et participations très au-dessus du lobby ; ce signal décrit une performance, pas le niveau réel du compte
- •KDA, kills et dégâts/minute exceptionnellement élevés par rapport à la partie
Perf individuelle vs équipe
Ces indicateurs mettent en contexte des contributions individuelles par rapport au résultat d'équipe. Ils aident à comparer des métriques, mais ne permettent pas d'attribuer avec certitude une victoire, une défaite ou un carry à une seule personne.
Pourquoi 500 000 dégâts ne veut rien dire
Les chiffres bruts (dégâts totaux, gold total, CS total) sont dépendants de la durée de partie et du tempo de l'équipe. Un ADC à 500k dégâts en 40 min est pire qu'un ADC à 300k en 22 min. Et un carry à 35% damage share dans une défaite a souvent mieux joué qu'un teammate à 40% dans une victoire 25-3.
Règle : une métrique n'est comparable que si elle est rapportée au contexte. Soit normalisée par minute (DPM, GPM, CSPM), soit par part de l'équipe (damage share, kill participation), soit par rapport à un benchmark ajusté (rôle + rang).
Damage share > Damage total
Le damage share est ta part des dégâts de l'équipe. Il élimine l'effet « longue partie = plus de dégâts » et fait ressortir ta contribution relative.
damage_share = tes_dégâts / Σ(dégâts_équipe) × 100| Joueur | Dégâts bruts | Durée | DPM | Damage share | Verdict |
|---|---|---|---|---|---|
| ADC A (défaite) | 120 000 | 25 min | 4 800 | 38% | Carry ✓ |
| ADC B (victoire) | 180 000 | 45 min | 4 000 | 22% | Mid |
Le joueur B a plus de dégâts bruts ; cette comparaison illustre un indicateur relatif, pas un jugement complet sur la qualité de jeu.
Normalisation par rôle
Chaque métrique est scalée par les attentes du rôle. Un support à 800 DPM c'est excellent ; un ADC à 800 DPM c'est une alerte rouge. On utilise des multiplicateurs benchmark pour comparer équitablement des rôles qui ne jouent pas le même jeu.
| Rôle | DPM attendu | Damage share cible | Vision/min | CS/min |
|---|---|---|---|---|
| TOP | ~600 | 22-26% | 1.2 | 7.5 |
| JUNGLE | ~550 | 20-25% | 1.4 | 5.5 |
| MID | ~750 | 25-30% | 1.2 | 7.8 |
| ADC | ~800 | 28-34% | 1.1 | 8.5 |
| SUPPORT | ~350 | 10-15% | 3.5 | 0.8 |
Ton score ajusté = métrique_brute / benchmark_rôle × 100. Un support à 3.8 vision/min obtient 109% sur cet axe : même s'il a 0 CS.
Normalisation par rang
À l'intérieur d'un même rôle, les attentes varient énormément entre Bronze et Master. On applique des benchmarks par rang pour ne pas comparer un Fer à un Diamant. Le même 7.5 CS/min vaut un A+ en Bronze et un C en Master.
score_ajusté = métrique_brute × (benchmark_Platine / benchmark_ton_rang)Platine sert de rang de référence (milieu de la distribution). Les benchmarks combinent une base stable et, lorsqu'elles sont disponibles, des données plus récentes ; le patch et le corpus affichés restent le contexte de lecture.
Contexte de partie (stomp vs close)
Un KDA 10/2/5 dans un stomp 30-5 n'est pas aussi impressionnant qu'un 6/3/12 dans un close game 40-35. On calcule un facteur closeness pour pondérer les perfs :
closeness = 1 - |kills_bleu - kills_rouge| / max(kills_bleu, kills_rouge)Stomp 30-5
closeness ≈ 0.17
Perfs atténuées (carry facile)
Close 42-38
closeness ≈ 0.90
Perfs valorisées (clutch)
Ce facteur n'est appliqué qu'au grade final (S/A/B/C/D), pas au scoring axes lui-même : pour éviter de punir quelqu'un qui performe dans un stomp.
Qui a carry ? L'algo d'attribution
Le badge Carry et le rang individuel MVP sont calculés par un score composite : pas par le KDA seul :
carry_score = damage_share × 0.40 + KP × 0.25 + gold_share × 0.15 + obj_damage_share × 0.20- •Damage share (40%) : ce que tu as fait aux ennemis
- •Kill Participation (25%) : ta présence en teamfight
- •Gold share (15%) : tu étais « celui qui déroule » économiquement
- •Objective damage share (20%) : tu as fait tomber les tourelles/drakes/baron
Le KDA n'entre pas directement dans carry_score. Un carry à 15/0/8 avec 20% damage share et 40% KP n'a pas carry : il a juste farmé sans pression. Le vrai carry est celui qui absorbe les ressources ET les convertit en pression objectifs.
Ce qu'on ne peut PAS fixer
- △Les décisions macro (rotations, call, shot-calling vocal) : invisibles dans l'API Riot
- △Le positionnement en teamfight (front vs back) : on n'a pas les coordonnées XY par frame
- △Les focus targets (qui a focus qui) : agrégé seulement, pas par cible
- △Le facteur champion (un Yuumi fera toujours moins de damage share) : compensé par Role Signature
Pour ces angles morts, on se repose sur le coaching IA qui lit la timeline complète et contextualise : là où les formules déterministes s'arrêtent.
Theorycraft Engine
Le Theorycraft est un simulateur (pas un optimiseur) interactif de build qui calcule, à partir d'un combo que tu définis, l'estimation des dégâts en respectant les passifs des champions curés, les scalings AP/AD/HP, et les principaux effets d'items (spellblade, on-hit, proc, burn). Il ne reproduit pas une base de données meta comme Mobalytics : il re-calcule depuis les formules Riot officielles sur le périmètre couvert.
Important : c'est un labo, pas une vérité absolue. Le moteur ne cherche pas le build optimal : il chiffre la séquence que tu lui donnes. Les recommandations d'items sont des presets curés à la main et un scoring heuristique de fallback : utiles pour comparer des options, mais pas une optimisation globale. League est trop complexe (interactions runes ↔ items, passifs uniques, seuils de spike, matchups, courbes de power) pour qu'un seul score capture « le » build idéal.
Données curées à la main
- ✓173 champions curés dans
champion-spells.ts: chaque sort (Q/W/E/R) + passif avec ses ratios AD/AP/HP, ses triggers (on_hit, on_3_hit, after_ability), et ses notes particulières - ✓84 items dans
item-effects.tsavec leurs effets passifs (spellblade Sheen, on-hit Nashor/Titanic/BotRK, %HP Kraken, burn Liandry, etc.) - ✓173 builds curés meta dans
champion-builds.ts: 173/173 du roster, Yunara et Zaahen inclus, avec raisons par item et résumé du kit - ✓17 keystones avec calcul de dégâts (Conqueror stacks, Electrocute, Dark Harvest, etc.) et 45 runes mineures avec descriptions FR inline
Suggestions de build (4 niveaux de priorité)
Ce sont des suggestions de point de départ, pas une optimisation prouvée. L'objectif est de te donner un build cohérent à charger en un clic, que tu peux ensuite tweaker à la main.
Combo calculator step-by-step
Le moteur de combo calculateCombo (moteur unifié, partagé entre la page et les recommandations) simule une séquence d'actions (Q W E R A C : ou un preset comme Burst / All-in / Execute) et estime step-by-step :
- →HP ennemi recalculé après chaque step (permet aux items %HP de scale dynamiquement : BotRK 8% current HP, burn Liandry 2% PV max/s rafraîchi entre les sorts : pas de stack)
- →Mitigation par armure ou magic resist effective (après pénétration flat + pourcentage)
- →Procs on-hit tracké par auto : Nashor's, Titanic, BotRK, Wit's End, Terminus, Muramana
- →Sheen cooldown 1.5s : Trinity/Lich Bane/Iceborn ne proc pas deux fois à la suite
- →Elder Dragon execute true damage si HP ennemi < 20%
- →Empowers spécifiques (Karma Mantra) : le Q post-R (Soulflare) détone un bonus scalé au rang de R (W/E Mantra = utilitaire, pas de dégâts)
Limites assumées : tous les passifs uniques ne sont pas modélisés à l'identique du jeu (certains effets conditionnels, soins, shields, CC, et interactions runes ↔ items sont simplifiés ou ignorés). Le moteur donne un ordre de grandeur fidèle pour comparer des options, pas une reproduction frame-perfect du client League.
Formule quadratique Riot officielle
Toutes les stats par niveau utilisent la formule Riot officielle :
Stat(n) = Base + Growth × (n - 1) × (0.7025 + 0.0175 × (n - 1))Le coefficient quadratique est ce qui fait qu'un champion a une courbe de croissance non linéaire entre niveau 1 et 18. On utilise exactement cette formule pour HP/Mana/AD/Armor/MR, ce qui garantit que les stats calculées matchent le client LoL à la décimale près.
Cible ennemie : champion ou monstre jungle
Pour tester ton build contre une vraie cible, tu peux choisir :
- 🎯N'importe quel champion : via le picker partagé avec le pick principal, avec son niveau et ses items ennemi configurables
- 🐲12 monstres jungle modélisés : Drake / Elder / Baron / Herald / Void Grub / Raptor / Krug / Wolves / Gromp / Blue / Red / Scuttle : leurs stats HP/Armor/MR utilisent les données de patch disponibles pour simuler un combo sur objectif
- 🛡️4 presets de classe (Tank / Bruiser / Squishy / Dummy) pour config rapide
Le slider HP% permet de simuler un enemy low HP pour tester les exécutes (ex Collector < 5%, Darius R < 20% + 5 stacks bleed, Garen R true damage villain marked).
Buffs contextuels
- 🐉6 types de dragons (Infernal, Mountain, Ocean, Cloud, Chemtech, Hextech) avec stacks 0-4 + SOUL à 4
- 👑Baron Nashor : +AD, +AP, +empower siege sur minions
- 🐲Elder Dragon : execute burn true damage sur ennemis < 20% HP
- ⏱Temps de game : active les scalings time-based (Gathering Storm, Overgrowth, Kindred marks, Smolder Q stacks)
Précision actuelle : modélisé vs approximé
On préfère être transparent plutôt que prétendre à une précision frame-perfect. La fidélité varie selon le champion, le patch, le combo et les mécaniques impliquées ; voici ce que le moteur calcule, approxime ou ignore.
Modélisé exactement
- ✓Stats agrégées (AD/AP/HP/mana/armor/MR/AS/crit/AH/lethality/MS) depuis items + runes + objective buffs + level scaling quadratique Riot
- ✓Mitigation ordre officiel : flat reduction → % reduction → bonus pen → total pen → lethality (appliquée 1:1, sans scaling par level)
- ✓Crit : base 200% crit damage, Infinity Edge +30% (flat). L'action Auto applique le crit moyen du build (1 + crit% × bonus), l'action Crit force le critique
- ✓Sustain : lifesteal AA-only, omnivamp tous dégâts (ranged abilities ×0.33), Conqueror heal fully-stacked (melee 9% / ranged 8%)
- ✓Conqueror / Lethal Tempo stacks dynamiques par step
- ✓Item synergies : Muramana (bonus mana → AD), Bloodmail (max HP → AD), Rabadon (×1.35 AP total), Seraph (mana → AP), Warmog (+10% bonus HP), IE crit, Sheen famille (CD 1.5s)
- ✓On-hit per auto : Nashor's, Titanic, BotRK, Wit's End, Terminus, Muramana, Kraken (3e hit : 140→310 selon niveau, jusqu'à +50% selon PV manquants)
- ✓Black Cleaver shred dynamique : stacks trackés par hit (auto/spell phys + procs phys), refresh d'armor effective entre actions. Cap 6 stacks (30% reduction) (round 2)
- ✓Grievous Wounds : 7 items détectés. Mortal Reminder, Morellonomicon, Executioner's Calling, Bramble Vest, Chempunk Chainsword, Thornmail, Oblivion Orb. −40% sustain quand l'ennemi build l'un d'eux (round 2)
- ✓Magic damage amplification : Liandry's Torment (+6% max stacks) + Abyssal Mask (+12% aura) appliqués au post-mitigation magic damage, multiplicatifs entre items (round 2)
- ✓Shields lifeline intégrés à l'EHP : Sterak's Gage (100 + 80% bonus AD, phys + magic), Maw of Malmortius (200 + 150% bonus AD, magic), Kaenic Rookern (18% max HP, magic). Assume actifs (scenario défensif) (round 3)
Approximé (impact limité)
- ≈Liandry's amp : assume max stacks atteints (ramp réel 6s, applicable à la majorité des combos)
- ≈Abyssal Mask : assume aura active (ennemi à <700u). Pas de check de range
- ≈Black Cleaver : stack ajouté en POST-hit, donc le tout premier hit ne bénéficie pas du shred. Légèrement sous-évalué pour combos très courts (1-2 hits)
- ≈Grievous Wounds : assume contact réciproque (l'ennemi te touche au moins une fois pour appliquer le debuff). Pas de tracking temporel
- ≈DoT (Liandry burn 3s, Sunfire 1s, Blackfire stacking) : valeur totale calculée mais sans timeline tick par tick
- ≈Champion-spells : 173/173 couverts dans le périmètre curé. Les données de kit et les interactions sont révisées avec les patchs disponibles ; certains effets conditionnels peuvent rester approximés entre deux révisions.
Non-modélisé (à venir)
- ✗Animation / cast time / windup : combos supposés instant cast. Surestime le DPS soutenu pour champions avec long animation (Veigar W, Brand R, etc.)
- ✗Tenacity / slow resist reconnus en buffs mais pas appliqués au CC duration ou MS
- ✗Projectile travel time : ranged autos supposés instantanés
- ✗Simulation combat over time / DPS timeline 3s/6s/18s : calcul instantané uniquement pour l'instant
- ✗Counter-build auto vs archétype ennemi (full AP → suggère Maw automatiquement, etc.)
Le theorycraft n'est pas un outil de coaching direct : c'est un laboratoire. Il te donne un ordre de grandeur réaliste derrière tes idées de build (« et si je full crit Yasuo ? », « combien je tape un Drake avec ce stuff ? », « Mejai's Veigar à 25 stacks, ça représente quoi comme dégâts ? »). Il ne remplace pas l'expérience de jeu : un build « qui chiffre bien » contre un dummy peut être faible en game à cause du tempo, du matchup ou des spikes. Combine-le avec le coaching IA et le Plan de progression pour boucler l'analyse complète : data → théorie → pratique.
Probabilité de victoire estimée
La probabilité de victoire est une estimation post-match produite à partir de snapshots de parties réelles. Lorsqu'une timeline exploitable est disponible, elle montre l'état estimé aux minutes clés ; elle ne prédit pas une partie en direct et ne prouve pas la cause d'un basculement.
Ce que regarde le modèle
- •Écarts d'économie et d'état :
gold_diff,level_diff,kill_diff,tower_diff - •Contrôle des objectifs : dragons, hérauts, barons, elders, void grubs
- •Momentum récent : features
*_per_minet*_delta_5mpour savoir si la partie s'accélère ou se retourne
Minutes servies dans le produit
Le pipeline supporte les minutes 5, 10, 15, 20 et 25. Côté produit, je sers aujourd'hui les snapshots 10 / 15 / 20 / 25 quand ils existent dans la timeline du match.
10 min
snapshot produit
15 min
snapshot produit
20 min
snapshot produit
25 min
snapshot produit
Qualité probabiliste
Je sépare la probabilité brute du modèle de la probabilité servie au joueur. La seconde est calibrée via isotonic regression pour mieux refléter la réalité observée.
proba_servie = calibrateur_isotonic(proba_brute_xgboost)Concrètement, ça évite qu'un modèle trop confiant affiche 95% là où l'historique montre plutôt 82%. On privilégie une probabilité utile et honnête plutôt qu'un score spectaculaire.
Explainability
Pour expliquer le score, j'utilise les contributions XGBoost (pred_contribs=True) :
- ✓Top contributors locaux : pourquoi ce match précis bascule vers le bleu ou le rouge
- ✓Global feature effects : quelles features pèsent le plus en moyenne à une minute donnée
- ✓Lecture IA : une couche LLM traduit ensuite ces signaux en français naturel sans remplacer le score ML
Robustesse du pipeline
- •Split par
match_idpour éviter la fuite de données entre snapshots d'une même partie - •Évaluation par patch et sur fenêtre récente pour vérifier que le modèle tient dans le temps
- •Drift monitoring sur les distributions de features et de probabilités
- •Tuning borné des hyperparamètres pour éviter un sur-ajustement opportuniste
Transparence et limites
Ce que je fais bien
- ✓Les principales méthodes et limites sont documentées publiquement sur cette page
- ✓Le Bayesian smoothing compense mon petit échantillon de manière mathématiquement prouvée
- ✓Les comparaisons sont masquées ou rendues plus prudentes lorsque le contexte ou l'échantillon sont insuffisants
- ✓Le Player DNA (35 indicateurs × 13 archétypes) reste un profil exploratoire, jamais une vérité sur un joueur
- ✓Le patch, le corpus et le volume affichés servent de contexte de lecture
Ce que je pourrais améliorer
- △L'échantillon a grossi (médiane ~15 000 parties par champion sur le patch courant) mais il reste concentré sur EUW et sur les paliers que je collecte : les champions rares, les rôles secondaires et les tout premiers jours d'un patch restent moins fiables
- △Les benchmarks combinent une base stable et des données récentes lorsqu'elles sont disponibles ; une calibration plus fine par patch, rôle et volume améliorerait encore la précision
- △Le Player DNA et les comparaisons rang/rôle ne sont pas assez fiables dans tous les contextes ; le coaching les ignore alors
- △Le Theorycraft est un simulateur, pas un optimiseur : il chiffre les combos que tu lui donnes, mais ne « trouve » pas le build optimal (trop de facteurs à modéliser dans League). Certains passifs uniques et interactions runes/items sont simplifiés ou absents
- △Le Tilt Detector repose sur des heuristiques (règles définies) et non sur du machine learning
- △Certaines métriques API Riot ne sont pas disponibles (position XY précise, clics, caméra)
Ma philosophie
LegendsTracker préfère être honnête et utile plutôt que de prétendre une précision artificielle. Les outils cherchent à fournir des tendances à relire et des pistes actionnables, tout en signalant les données manquantes et les zones d'incertitude.
Dernière mise à jour : 25 juillet 2026 · Méthodes et pages publiques synchronisées avec les fonctionnalités disponibles, leurs limites et les données prises en compte · Grades recalibrés par rôle sur données réelles (révision du 15 juillet) · Repères mesurés du coach : matchup 1v1 et 2v2, runes, ordres d'objets et de sorts · Tier list avec seuil d'échantillon · Probabilité de victoire post-match aux snapshots disponibles · Theorycraft comme simulateur · Données API Riot Games
LegendsTracker n'est pas approuvé par Riot Games et ne reflète pas les opinions de Riot Games.