Aller au contenu

Tableau récapitulatif

Tous les chiffres du cours sur une page. Sauf mention contraire, tout est mesuré sur le même jeu de test : 1 146 matchs, les 42 derniers jours, jamais utilisés pour entraîner ni pour choisir.

Le classement final

Rang Approche Brier Log-loss Exactitude Modèle Features
1 segmodel 0.2041 0.5916 67,9 % 2 logistiques L2 mélangées 75/25 54
2 lastmile 0.2044 0.5931 67,5 % logistique L2 54
3 assault 0.2054 0.5954 66,8 % logistique L2 46
4 squeeze 0.2154 0.6192 64,6 % logistique L2 42
5 push 0.2172 0.6210 64,0 % logistique L2 40
6 final 0.2180 0.6221 64,2 % logistique L2 32
7 bayes 0.2256 0.6410 63,8 % XGBoost + TrueSkill 12
8 stats 0.2289 0.6469 62,0 % XGBoost 17
9 maps 0.2293 0.6474 59,8 % XGBoost 19
10 stack 0.2306 0.6515 60,1 % moyenne de logits XGB + logistique 10
11 logreg 0.2315 0.6538 60,4 % logistique L2 codée à la main 22

Quatre approches ne figurent pas au classement, faute d'avoir battu le leader du moment :

Approche Brier Exactitude Validation Statut
gbdt (CatBoost réglé, 50 essais × 3 bibliothèques) 0.2331 59,7 % 0.22262 pas de gain sur le champion non réglé (0.2330)
hardcore (branche simple sur le segment dur) 0.2042 68,0 % 0.2135 contre 0.2147 gain de validation non transféré
ultimate (économie recalculée sur 12 mois) 0.2041 67,9 % 0.2157 contre 0.2147 dégrade en validation ; candidat = leader, holdout = contrôle exact
lastcard (wtsm, TrueSkill par carte réchauffé) 0.2044 66,8 % 0.2135 contre 0.2147 gain de validation non transféré — « la validation mentait »

Erreur fréquente — comparer des lignes à n différent

Trois approches du concours ont mesuré sur un échantillon légèrement réduit, faute de couverture complète de leurs sources : stats sur 1 119 matchs, maps sur 1 141. Toutes les autres lignes portent sur 1 146. Les écarts sont faibles mais réels ; c'est une des raisons pour lesquelles la fusion final a reconstruit une timeline commune à toutes les familles.

Les repères

Repère Brier Log-loss Exactitude Nature
Pièce lancée 0.250 0.693 50 % arithmétique
Glicko de Valve (baseline) 0.2422 0.6772 56,0 % mesuré chez nous
Champion v2 (XGBoost, 10 features) 0.2330 0.6568 60,4 % mesuré chez nous
Leader final (segmodel) 0.2041 0.5916 67,9 % mesuré chez nous
Bookmaker réel, 160 matchs cotés du holdout 0.2094 0.6067 65,6 % mesuré chez nous, cotes appariées
Bookmakers, tier 1 0.198 — 68,7 % littérature, autre pool
Mémoire universitaire CS2 (logistique) — 0.62 65 % littérature, autre pool

La ligne « bookmaker réel » est le vrai palier de notre échantillon. Elle ne remplace pas la ligne de littérature — elle la situe : sur nos matchs, un opérateur réel fait 3,1 points d'exactitude de moins que le repère publié, parce que le pool n'est pas le même.

Le duel contre le marché

Toutes les cotes proviennent d'un seul opérateur, marché d'avant-match uniquement, dévigorisées. Le détail est dans la partie Contre le marché.

La couverture en cotes

Ensemble Matchs Avec cote d'avant-match Part
Holdout 1 146 160 14 %
Train 10 287 1 268 12 %
Total exploitable — 1 428 de 2025-10 à 2026-08
~~Segment en direct, en quarantaine~~ — 4 975 + 67 fuite du futur

L'appariement initial n'en trouvait que 903 : le fichier d'historique long n'avait jamais été confronté au dataset, laissant 5 377 lignes non appariées et 525 matchs cotés invisibles.

Les mesures successives, et leurs retournements

Chantier Pool n Nous Marché \(P\)(nous meilleurs)
odds holdout coté 160 0.2138 0.2094 28,5 %
vsmarket + train out-of-fold 903 0.2112 0.2131 73,8 %
oddsmax appariement élargi 1 159 0.2123 0.2097 20,6 %
oddsmax les 256 matchs ajoutés 256 0.2162 0.1974 0,3 %
fairfight armes égales, couverture totale 1 428 0.2239 0.2076 0,0 %
fairfight armes égales, force maximale 804 0.2130 0.2127 47,1 %

Aucune configuration ne porte \(P(\text{nous meilleurs})\) au-dessus de 95 %.

Le biais de taille d'entraînement, chiffré

Échantillon fixe de 804 matchs ; seule la fenêtre de fit change. Le marché est invariant par construction.

Fenêtre \(N\) Notre Brier Brier du marché \(P\)(nous meilleurs)
1 209 0.2234 0.2127 1,1 %
2 000 0.2210 0.2127 1,9 %
3 000 0.2179 0.2127 9,1 %
4 000 0.2158 0.2127 20,7 %
6 000 0.2130 0.2127 47,1 %

Quintupler la fenêtre nous rend 0.0104 de Brier, monotonement.

La cote comme information supplémentaire

Variante Brier out-of-fold Brier holdout complet
leader segmodel (base) 0.2072 0.2041
+ cote en feature 0.2073 0.2041
+ cote et interactions 0.2081 0.2046
deux régimes, mélange de logits \(w = 0{,}38\) — 0.2036

Le mélange à deux régimes gagne 0.0005 (\(P = 93{,}6\,\%\)) et perd 0,2 point d'exactitude : départage nominal. En réglant \(w\) a posteriori sur le holdout, le mieux atteignable est 0.2087 contre 0.2094 pour le marché seul — le supplément d'information du modèle vaut 0.0007 de Brier.

Le pool comparable défini a priori (bookpool)

Définitions figées et horodatées à 11:51:56 UTC ; première métrique à 11:51:57. Le modèle n'est pas ré-entraîné : seule l'évaluation est restreinte.

Pool n Exactitude Brier Log-loss Ancre Glicko Apport
D0 global 1 146 67,9 % 0.2041 0.5916 59,1 % +8,8 pts
D1 enjeu ≥ 50 k$ 398 70,9 % 0.1933 0.5674 61,6 % +9,3 pts
D2 notoriété top-100 278 66,2 % 0.2202 0.6337 55,0 % +11,2 pts
D3 LAN 380 74,7 % 0.1722 0.5156 61,8 % +12,9 pts
D4 enjeu ∧ notoriété 226 66,8 % 0.2178 0.6294 55,3 % +11,5 pts
D5 top-30 strict 48 58,3 % 0.2380 0.6739 54,2 % +4,2 pts

L'exactitude de l'ancre donnée ici (59,1 % sur D0) n'est pas produite par la même mesure que la baseline Glicko de 56,0 % du tableau des repères ; seuls ses écarts entre pools sont utilisés.

Un spécialiste entraîné sur le seul pool comparable ne sauve rien : 0.2195 contre 0.2178 sur D4, 0.2269 contre 0.2202 sur D2.

L'angle mort de l'exactitude (maxacc)

Mesure Valeur
Seuil optimal en validation \(t^\star = 0{,}530\)
Effet de ce seuil en holdout −1,83 point (67,89 % → 66,06 %)
Optimum a posteriori du holdout \(t = 0{,}485\), 68,59 % (inutilisable)
IC 95 % de l'exactitude du leader [65,27 ; 70,59], demi-largeur ±2,66 pt
Meilleur objectif orienté exactitude (SVM hinge) 67,28 % pour un Brier de 0.2180

Déplacer le seuil ne change ni le Brier ni la log-loss : les deux lignes concernées affichent 0.2041 / 0.5916 à l'identique.

Les horloges de force en prédicteurs purs

Sans aucun modèle par-dessus : la probabilité vient directement de l'horloge.

Horloge Brier Commentaire
Glicko de Valve (RD figé à 75) 0.2422 la baseline officielle
Elo à marge 0.2398 meilleure horloge simple mesurée
Glicko-2 complet (\(\tau = 0{,}3\), période 7 j) 0.2365 l'incertitude rendue vivante
TrueSkill par joueur (\(\beta = 25/4\)) 0.2354 les ratings suivent les transferts

Le chiffre de l'Elo à marge vient du commentaire de vrs/predict.py, qui situe le Glicko de Valve à 0.2423 sur la même mesure ; les autres lignes viennent des rapports d'approche, où Valve est à 0.2422. L'écart d'un dix-millième est un arrondi, pas un désaccord.

Injectées dans le modèle du champion, les mêmes horloges donnent : Glicko-2 → 0.2310, TrueSkill → 0.2256. Les deux ensemble ne font pas mieux que TrueSkill seul (0.2258).

La décomposition des gains

Les 0.0381 point de Brier gagnés entre la baseline Glicko et le leader final.

Contribution Gain Part
Features d'équipe de base + Elo à marge −0.0092 24 %
Les trois familles du concours + passage au linéaire −0.0150 39 %
Horloges de la littérature (pi, TrueSkill par carte, momentum) −0.0008 2 %
Rang mondial daté (horloge externe longue durée) −0.0018 5 %
Réchauffage des horloges + économie par manche + préchauffage externe −0.0100 26 %
Interactions « équipes bien connues » −0.0010 3 %
Mélange par segment −0.0003 1 %
Total −0.0381 100 %

Le détail du saut d'assault

Mesuré en une seule passe de holdout, tableau pré-enregistré.

Étape Brier Exactitude Gain marginal
Reproduction de squeeze (états froids, train 6 mois) 0.2153 64,6 % —
États natifs réchauffés (fenêtre 12 mois) 0.2081 66,2 % −0.0072
+ entraînement étendu à 12 mois 0.2078 66,3 % −0.0003
+ économie par manche seule 0.2064 66,7 % −0.0017
+ préchauffage externe seul 0.2063 66,4 % −0.0018
Combiné, retenu en validation 0.2054 66,8 % —

La carte des segments

Découpage a posteriori de la passe unique de holdout du leader. Aucun réentraînement.

Segment n Brier Exactitude
Horloges froides (inf = 0) 244 0.1591 75,0 %
LAN 380 0.1722 74,7 %
Bo1 60 0.1729 76,7 %
Ensemble du holdout 1 146 0.2041 67,9 %
Bo3 et plus 1 086 0.2058 67,4 %
Horloges informées (inf = 1) 902 0.2163 66,0 %
En ligne 766 0.2199 64,5 %
Noyau dur : en ligne et Bo3+ 758 0.2205 64,3 %
Complémentaire du noyau dur 388 0.1720 75,0 %

Deux découpages, deux sources

Les huit premières lignes viennent du rapport officiel du leader (scratch/ml/segmodel/report.json, section segments_holdout). Les deux dernières — le noyau dur « en ligne et Bo3+ » et son complémentaire — viennent du rapport hardcore (segments_holdout_dur, entrée leader), qui est le seul à avoir mesuré ce croisement, sur le leader re-mesuré à 0.2041 exact.

Le segment « en ligne » (766) et le noyau dur (758) diffèrent de 8 matchs : les Bo1 joués en ligne.

Composition croisée du holdout

LAN En ligne Total
Bo1 52 8 60
Bo3 et plus 328 758 1 086
Total 380 766 1 146

Les 52 et 328 sont obtenus par soustraction ; les autres cases sont mesurées. C'est ce tableau qui montre que le segment Bo1 est composé à 87 % de LAN, et qu'il remesure donc l'effet LAN au lieu d'un effet de format.

La calibration du leader

Six tranches, holdout complet.

Tranche annoncée n Probabilité moyenne Taux observé Écart
0 – 20 % 60 12,7 % 11,7 % −1,0 pt
20 – 35 % 154 28,2 % 29,9 % +1,7 pt
35 – 50 % 249 43,1 % 43,4 % +0,3 pt
50 – 65 % 329 57,7 % 59,9 % +2,2 pt
65 – 80 % 242 72,1 % 73,1 % +1,1 pt
80 – 100 % 112 87,3 % 91,1 % +3,8 pt

Les hyperparamètres du leader

Modèle sauvegardé : scratch/ml/segmodel/model_segmodel.pkl.

Paramètre Valeur
Famille de modèle régression logistique, pénalité L2
Régularisation \(C\) 0,3
Demi-vie de récence aucune (pondération uniforme)
Nombre de features 54
Standardisation moyenne et écart-type appris sur le train, stockés avec le modèle
Variable de segmentation ts_sigma_sum (somme des incertitudes TrueSkill)
Seuil de segment médiane du jeu FIT : 17,4102
Poids du modèle de segment \(w = 0{,}75\)
Poids du modèle global \(1 - w = 0{,}25\)
Espace du mélange logits
Entraînement final tous les matchs antérieurs à la coupure du holdout

La règle de prédiction

Trois régressions logistiques sont ajustées : une globale sur toutes les lignes, et deux par segment (seg0 pour les matchs peu informés, seg1 pour les matchs informés). Pour un match donné, on calcule le segment, puis :

\[ \ell_{\text{final}} = 0{,}75 \cdot \ell_{\text{segment}} + 0{,}25 \cdot \ell_{\text{global}}, \qquad p = \frac{1}{1 + e^{-\ell_{\text{final}}}} \]

où \(\ell_{\text{segment}}\) est le logit produit par le modèle du segment auquel appartient le match, \(\ell_{\text{global}}\) celui du modèle global, et \(p\) la probabilité finale que l'équipe 1 gagne.

Les seuils de segmentation candidats

Calculés sur le jeu FIT, pour les deux définitions de segment explorées.

Variable Quantile 0,35 Quantile 0,50 Quantile 0,65
ts_sigma_sum (retenue) 15,4029 17,4102 19,4989
wn_min (écartée) 3,2189 3,9890 4,6052

Les 54 features

Par famille d'origine.

Features d'équipe de base (10) — glicko_diff, melo_diff, form5_diff, form10_diff, h2h_balance, experience_diff, rest_diff, stability_diff, lan, stakes.

Horloges bayésiennes (6) — ts_diff, ts_sigma_sum, g2_diff, g2_phi_sum, ts_valve_disagree, ts_g2_disagree.

Statistiques joueurs (6) — prat_mean_diff, prat_star_diff, prat_std_diff, padr_diff, pkast_diff, pcov_diff.

Cartes et manches (10) — rshare_diff, exp_mapwr_diff, best_map_edge, pool_depth_diff, round_share_diff, ct_share_diff, t_share_diff, h2h_maps_diff, h2h_maps_n, veto_n.

Apports de push (8) — pi_diff_a, ts_diff*ts_sigma_sum, melo_diff*form5_diff, tsm_diff, tsm_sigma_sum, n7_diff, n21_diff, streak_diff.

Rang mondial (2) — hr_rank_diff, hr_trend_diff.

Préchauffage et économie (4) — wmelo_diff, eco_clutch_diff, eco_adv_diff, eco_eff_diff.

Interactions « informé » (8) — inf, inf*melo_diff, inf*ts_diff, inf*glicko_diff, inf*hr_rank_diff, inf*round_share_diff, inf*wmelo_diff, inf*pi_diff_a.

Les découpages temporels

Jeu Effectif Rôle
FIT 9 479 ajuster les coefficients pendant l'exploration
VAL 808 choisir hyperparamètres et candidats
TRAIN (FIT + VAL) 10 287 réentraîner le candidat retenu
HOLD 1 146 mesurer, une seule fois

Pour mémoire, avant l'extension de la fenêtre native à douze mois : FIT 4 108, TRAIN 4 916, holdout inchangé à 1 146.

Les volumes de données

Gisement Volume Couverture
Cache HTML local ~16 000 pages socle de tout le projet
Pages de match avec statistiques joueurs 9 112 analysées, 8 376 exploitables —
Pages de match avec veto 6 631 —
Pages de match avec scores par carte et mi-temps 6 523 —
Manches détaillées (source externe) 209 482 manches sur 10 180 cartes 4 304 / 6 056 matchs (71 %)
Historique de matchs 2024 → 2026 (source externe) 40 023 matchs, 77 890 cartes 39 375 avec cartes
Historique de classement mondial daté (extraction harvest) 66 860 points 494 équipes
Historique de classement mondial daté (extraction squeeze, celle qui alimente hr_rank_diff) 42 302 points 439 équipes, 84 % des matchs
Clichés de statistiques de carrière archivés 966 clichés datés 19 % du holdout

Le budget de mesure, chantier par chantier

Chantier Passes de holdout Contrôle de reproduction du leader précédent
Concours (6 approches) 1 chacune —
final 1 —
push 2 (déclaré dans le rapport) leader re-mesuré à 0.2180
squeeze 1 leader re-mesuré à 0.2172
assault 1 squeeze reproduit à 0.2153 (publié : 0.2154)
lastmile 1 assault reproduit à 0.2054 exact
segmodel 1 lastmile reproduit à 0.2044 exact
hardcore 1 segmodel reproduit à 0.2041 exact
ultimate 1 segmodel reproduit à 0.2041 exact
lastcard 1 segmodel reproduit à 0.2041 exact

Le taux de survie des gains de validation

Le critère d'arrêt de la campagne, sous forme de tableau. Un gain « survit » quand il se retrouve en holdout.

Chantier Gain en validation Résultat en holdout Survie
final oui 0.2180, leader battu ✔
push oui 0.2172, leader battu ✔
squeeze oui 0.2154, leader battu ✔
assault oui 0.2054, leader battu ✔
lastmile oui 0.2044, leader battu ✔
segmodel oui 0.2041, leader battu ✔
hardcore −0.0012 +0.0001 ✘
ultimate dégradation en validation contrôle exact ✘
lastcard −0.0012 +0.0003 ✘

Six survies consécutives, puis trois échecs consécutifs. C'est cette séquence, et non le dernier résultat pris isolément, qui a clos la campagne.

Les gisements de la fin de campagne

Gisement Avant unification Après unification
Manches détaillées 209 482 manches / 4 304 matchs 299 961 manches / 6 220 matchs
Cartes couvertes 10 180 15 156
Appariement, fenêtre 2026-02 → 2026-08 85,0 % 85,0 %
Appariement, fenêtre 2025-08 → 2026-02 — 89,6 %
Accord sur le vainqueur — 6 207 / 6 220 (13 écarts exclus)
Couverture d'économie, jeu FIT 3 041 / 9 479 6 211 / 9 479
Couverture d'économie, holdout 964 / 1 146 969 / 1 146

Les deux dernières lignes expliquent à elles seules pourquoi le doublement de couverture n'a rien rapporté : il s'est produit sur l'entraînement ancien, pas sur la période évaluée.


Retour aux annexes · Glossaire · Sources