Aller au contenu

Le verdict

Cent soixante matchs, ce n'est pas assez. L'intervalle de confiance du chapitre précédent — [−0.009 ; +0.017] sur le Brier — contient confortablement le zéro, une nette victoire et une nette défaite. Il fallait plus de matchs.

Trois chantiers successifs en ont trouvé. Chacun a rendu un verdict. Les trois verdicts ne sont pas les mêmes, et l'histoire de leur désaccord est plus instructive que la réponse finale.

Première mesure : 903 matchs, et nous sommes devant

La première idée est simple. Les 160 matchs cotés du holdout ne sont pas les seuls du dataset à porter une cote : 743 matchs du jeu d'entraînement en portent aussi. Or on sait produire des prédictions honnêtes sur le jeu d'entraînement — ce sont les prédictions out-of-fold, où chaque bloc chronologique est prédit par un modèle ajusté uniquement sur les blocs précédents.

Total : 903 matchs cotés, contre 160.

L'intégrité a été traitée par construction. Seul le marché d'avant-match entre dans le pipeline, sous assertion, et un contrôle de vraisemblance est exécuté période par période :

Période Segment avant-match Segment en direct
fit Brier 0.2114, marge 7,0 %, favori 1,47 Brier 0.0880, favori 1,02
validation Brier 0.2224, marge 6,3 %, favori 1,55 Brier 0.0588, favori 1,03
holdout Brier 0.2094, marge 7,3 %, favori 1,445 Brier 0.0555, favori 1,03

Le segment en direct s'effondre à 0.05-0.09 dans les trois périodes, avec 1 692 cotes sous 1,05 : la signature de fuite décrite au chapitre précédent est stable, et aucune de ces lignes ne touche ni une feature ni une référence.

Le résultat sur les 903 matchs :

Pool de 903 matchs cotés Brier Exactitude
nous 0.2112 65,8 %
marché 0.2131 64,7 %

\(P(\text{nous meilleurs}) = 73{,}8\,\%\), intervalle [−0.0084 ; +0.0049]. Le signe s'est inversé en notre faveur dès qu'on est sorti de \(n = 160\).

La lecture d'alors, prudente mais optimiste : « le marché nous bat » du premier chantier était du bruit d'échantillonnage, et sur ~900 matchs nous sommes plutôt devant — d'autant que ce pool nous handicape, puisque nos prédictions out-of-fold viennent de modèles entraînés sur moins de données.

Cette phrase contenait déjà la faille. On y reviendra.

Interlude : et si l'on utilisait la cote au lieu de la combattre ?

Avant de poursuivre le duel, le même chantier a posé la question opposée : le marché sait-il quelque chose que nous ne savons pas, et peut-on le lui prendre ?

Première tentative — la cote comme feature. On ajoute la probabilité dévigorisée, transformée en logit, comme 55ᵉ colonne du modèle, plus un drapeau indiquant sa présence.

Variante Brier out-of-fold Brier holdout complet
base (leader) 0.2072 0.2041
+ cote en feature 0.2073 0.2041
+ cote et interactions avec 7 features fortes 0.2081 0.2046

Rien, puis pire. L'explication est mécanique et vaut pour toute feature à couverture partielle : 7 % seulement des lignes d'entraînement portent une cote ; la régularisation L2 d'un modèle à 54 features noie un coefficient estimé sur 743 lignes ; et sur les 93 % restants, la colonne est constante, donc inutilisable.

Seconde tentative — deux régimes. Plutôt que de mélanger les colonnes, on mélange les sorties : notre modèle partout, et sur les seuls matchs cotés un mélange de logits entre notre probabilité et celle du marché.

\[ \ell_{\text{final}} = w \cdot \ell_{\text{marché}} + (1-w) \cdot \ell_{\text{modèle}} \]

où \(\ell\) désigne un logit — le logarithme de la cote de probabilité — et \(w\) le poids accordé au marché, réglé à 0,38 sur les seules prédictions out-of-fold.

Sur le holdout complet, cela donne 0.2036 / 67,7 % contre 0.2041 / 67,9 % pour le leader : un gain de 0.0005 avec \(P = 93{,}6\,\%\), et une exactitude en baisse de 0,2 point. C'est un départage nominal, pas une victoire — et il ne peut venir que des 14 % de matchs cotés.

Sur ces 160 matchs, le mélange fait 0.2099 contre 0.2094 pour le marché seul et 0.2138 pour nous seuls. Il nous améliore nettement (\(P = 94{,}0\,\%\)) et reste à égalité stricte avec le marché (\(P = 47{,}2\,\%\)).

Intuition — la courbe plate de \(w\)

En trichant délibérément, c'est-à-dire en cherchant le meilleur \(w\) sur le holdout lui-même, on obtient 0.2087 à \(w = 0{,}8\). Contre 0.2094 pour le marché pur (\(w = 1\)).

Autrement dit : même en s'autorisant le réglage optimal a posteriori, tout ce que notre modèle apporte au marché vaut 0.0007 de Brier. C'est le diagnostic le plus net de toute cette partie — nous n'avons quasiment aucune information que la cote ne contienne déjà.

Deuxième mesure : 1 159 matchs, et le verdict s'inverse

Le chantier suivant est parti d'une question d'intendance : pourquoi seulement 903 matchs cotés, quand la moisson en compte des milliers ?

La réponse était un oubli d'appariement. Le fichier de correspondance entre nos matchs et ceux de la source externe n'avait été construit que contre le fichier de la fenêtre récente. Le second fichier — l'historique long, qui remonte à 2024 et porte les mêmes cotes — n'avait jamais été apparié. 5 377 lignes du dataset n'avaient donc jamais été confrontées à une cote.

Aucune requête réseau n'a été nécessaire là non plus : le diagnostic a confirmé qu'il n'existe aucun point d'accès dédié aux cotes chez la source, que le détail d'un match ne porte pas d'autre information que le listing, et que rien ne change en réinterrogeant trente matchs. Le gain venait de l'appariement, pas de la collecte.

Couverture en matchs cotés d'avant-match Avant Après
jeu d'entraînement 743 1 268
holdout 160 160
total 903 1 428

Deux contrôles avant de mesurer quoi que ce soit. Les 903 cotes déjà connues sont identiques, zéro divergence, zéro perte. Et les nouvelles cotes sont bien un vrai marché d'avant-match : overround médian de 7,4 % à 8,2 %, cote du favori médiane de 1,42 à 1,57 — indiscernables des mois déjà validés.

Puis la mesure, sur le même schéma out-of-fold que précédemment, avec 1 159 matchs au lieu de 903 :

Pool n Nous Marché \(P\)(nous meilleurs)
pool initial 903 0.2112 0.2131 73,8 %
pool élargi, même schéma 1 159 0.2123 0.2097 20,6 %
les 256 matchs nouvellement versés 256 0.2162 0.1974 0,3 %
couverture maximale 1 411 0.2155 0.2076 0,2 %

La probabilité que nous soyons meilleurs ne monte pas : elle s'effondre, de 73,8 % à 20,6 %. Sur les 256 matchs qui viennent d'entrer dans le pool, le marché fait 0.1974 contre 0.2162 pour nous, avec un intervalle de confiance à 95 % entièrement du mauvais côté de zéro : [+0.0044 ; +0.0326].

Erreur fréquente — conclure sur le premier échantillon disponible

Le pool de 903 matchs n'était pas faux. Il était petit et arbitraire : sa taille était fixée par un oubli d'appariement, pas par une propriété du problème. Ajouter 256 matchs, tirés du même flux et validés par les mêmes contrôles, a suffi à retourner la conclusion.

Le signal d'alarme, rétrospectivement, était le \(P = 73{,}8\,\%\) lui-même : une probabilité qui n'atteint pas le seuil de décision n'est pas un « petit résultat positif », c'est une absence de résultat.

Une vérification s'imposait : notre modèle s'était-il effondré sur la période nouvellement couverte ? Non. Notre Brier out-of-fold global y vaut 0.2029 à 0.2128, comparable voire meilleur qu'ailleurs. L'écart vient de la performance du marché sur ces mois, pas d'un trou du modèle.

Mais le rapport a lui-même signalé qu'il ne fallait pas conclure non plus.

Le biais, et pourquoi il fallait le chiffrer

Toutes les mesures précédentes reposent sur des prédictions out-of-fold à blocs expansifs : le premier bloc est prédit par un modèle entraîné sur ~1 700 lignes, le dernier par un modèle entraîné sur ~8 600.

Or les matchs cotés les plus anciens tombent dans les premiers blocs. Ils sont donc prédits par un modèle sous-entraîné — alors que le bookmaker, lui, était pleinement informé à chaque date. Il n'a jamais eu de « jeunesse ».

La comparaison biaisée (blocs expansifs)

  temps  ──────────────────────────────────────────────>
  nous   [fit 1 714]  [fit 3 400]  [fit 5 800]  [fit 8 572]
           faible        moyen        bon          fort
  marché  [informé]    [informé]    [informé]    [informé]
           fort          fort         fort         fort
           ▲
           └── les matchs cotés anciens sont ici :
               notre version la plus faible contre sa version normale

Le sens du biais était connu — il joue contre nous. Son ampleur ne l'était pas. Un adversaire pouvait donc légitimement dire « vous perdez parce que votre protocole vous handicape », et un défenseur du modèle pouvait dire « nous perdrions moins avec un fit complet ». Aucun des deux n'avait de chiffre.

Troisième mesure : à armes égales

Le dernier chantier remplace la fenêtre expansive par une fenêtre de fit constante. Chaque bloc de 100 lignes est prédit par un modèle entraîné sur exactement les \(N\) lignes qui le précèdent. Toutes nos prédictions ont désormais la même force.

L'architecture est importée telle quelle du chantier précédent — mêmes 54 features, même régularisation, même mélange par segment, médiane de segmentation recalculée sur la seule fenêtre de fit — et le chemin de calcul est vérifié par assertion contre deux contrôles gelés, le leader à 0.2041 / 67,9 % et le marché à 0.2094 sur les 160 matchs cotés du holdout. Les deux sont reproduits exactement.

Une contrainte de calendrier limite \(N\). Le dataset commence le 25 août 2025 et le plus ancien match coté est la 1 210ᵉ ligne : la plus grande fenêtre qui couvre tous les 1 428 matchs cotés est donc \(N = 1\,209\). Au-delà, on gagne en force ce qu'on perd en couverture.

D'où deux lectures, toutes deux à armes égales — plus un balayage qui chiffre enfin le biais.

Le biais, chiffré

Le balayage se fait à échantillon fixe : les mêmes 804 matchs dans toutes les lignes, seule la taille de la fenêtre d'entraînement change.

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 %

Le marché est invariant par construction — sa cote ne dépend pas de la quantité de données dont nous disposons. Nous, non : quintupler la fenêtre nous rend 0.0104 de Brier, monotonement.

C'est le chiffre que personne n'avait. La réserve du chantier précédent était fondée : son verdict très défavorable mélangeait un vrai déficit et un artefact de sous-entraînement. Mais corriger l'artefact mène à l'égalité, pas à la victoire.

À retenir — la leçon générale sur les comparaisons hors-échantillon

Une prédiction out-of-fold n'est pas « la prédiction de votre modèle ». C'est la prédiction d'une version affaiblie de votre modèle, entraînée sur une fraction de vos données.

Tant que vous comparez vos modèles entre eux, l'affaiblissement est symétrique et s'annule. Dès que l'adversaire est extérieur — un bookmaker, un expert humain, un système de production tiers — il ne subit pas cet affaiblissement, et la comparaison devient injuste sans qu'aucune ligne de code soit fausse.

Le remède tient en deux gestes : égaliser le budget d'information en fixant la fenêtre de fit, et balayer cette fenêtre pour publier la sensibilité du verdict plutôt que de l'affirmer.

Les deux verdicts

Couverture totale — \(N = 1\,209\), tous les 1 428 matchs cotés :

Brier Log-loss Exactitude
nous 0.2239 0.6415 64,0 %
marché 0.2076 0.6001 66,5 %

Écart de +0.0163 de Brier, intervalle de confiance à 95 % [+0.0091 ; +0.0231] ; sur la log-loss, [+0.0246 ; +0.0581]. \(P(\text{nous meilleurs}) = 0{,}0\,\%\) sur les deux métriques. Le marché nous bat. L'écart n'est pas concentré sur une poche : nous ne devançons le marché que sur 1 période sur 11 (juin 2026, \(P = 57\,\%\)), et sur aucune de façon significative.

Force maximale — \(N = 6\,000\), sur les 804 matchs que cette fenêtre couvre :

Brier Log-loss
nous 0.2130 0.6132
marché 0.2127 0.6125

Écart de +0.0003, intervalle [−0.0071 ; +0.0072] — symétrique autour de zéro. \(P(\text{nous meilleurs}) = 47{,}1\,\%\) sur le Brier, 46,6 % sur la log-loss. Statistiquement indiscernables.

Clôture

Aucune configuration à armes égales ne porte \(P(\text{nous meilleurs})\) au-dessus de 95 %. Elle va de 0,0 % à 47,1 %.

Le verdict, sans enrobage

Nous ne battons pas le bookmaker. À force réduite, nous perdons nettement. À pleine force et sur les matchs que cette pleine force permet de couvrir, nous l'égalons.

La conclusion tient sur les deux métriques propres, elle est stable dans le temps sur onze mois, et elle survit à la correction du seul biais méthodologique identifié. La question « bat-on le bookmaker ? » est close : non.

Reste une chose que ce chapitre n'a pas dite, et qui est au moins aussi importante : ce que cette mesure ne couvre pas. C'est l'objet du dernier chapitre.


Chapitre précédent : Les cotes étaient là · Chapitre suivant : Ce que la mesure ne dit pas · Glossaire