Test empirique de l'adage le plus célèbre du football, à travers 70 000 tirs et 10 compétitions, de 1958 à 2024. Spoiler : c'est un mythe.
L'adage « si tu ne marques pas, tu encaisses » vit partout dans le football. On l'entend sur les plateaux TV, dans les vestiaires, dans les commentaires de matchs et dans les discussions entre supporters. C'est une phrase qui semble vraie parce qu'elle colle parfaitement au récit émotionnel du sport.
Le scénario est connu : une équipe domine, se crée deux ou trois énormes occasions, ne marque pas, puis concède sur la première transition adverse. Le commentateur n'a même pas besoin de réfléchir : la phrase est déjà prête. Le problème, c'est qu'un récit marquant n'est pas une preuve.
En réalité, notre cerveau retient surtout les séquences douloureuses, spectaculaires, presque morales. Le football adore ces histoires de punition immédiate : tu gâches devant, tu paies derrière. Elles sont simples, mémorables, et elles donnent l'impression d'expliquer le match.
J'ai voulu traiter cette phrase comme une vraie hypothèse de recherche. Pas comme une intuition, pas comme une opinion de consultant, mais comme une question mesurable : rater une grosse occasion augmente-t-il réellement le risque de concéder dans les minutes qui suivent ?
Pour y répondre, j'ai construit un pipeline complet à partir des données ouvertes de StatsBomb, couvrant 70 399 tirs, 2 796 matchs et 10 compétitions. L'idée n'était pas seulement de regarder si l'adage semble faux ou vrai à première vue, mais de le tester contre plusieurs explications alternatives : score du match, dynamique, variance, régression vers la moyenne, et simple hasard.
Ce projet n'est pas seulement une analyse football. C'est aussi une démonstration de méthode : comment passer d'un cliché largement accepté à une conclusion défendable, reproductible et statistiquement robuste.
Quand tu ne marques pas ces occasions-là, tu sais ce qui se passe derrière…
Pour tester l'adage sérieusement, il fallait d'abord définir ce qu'est une grosse occasion. C'est là qu'intervient le xG, pour expected goals, l'une des métriques les plus utiles — et aussi les plus mal comprises — de l'analytics football.
Le xG attribue à chaque tir une probabilité de finir en but. Un tir à 0.40 xG signifie qu'un tir de ce type est converti environ 40 % du temps dans une grande base historique de tirs comparables.
Dit autrement : le xG ne prédit pas si ce tir précis va rentrer. Il mesure la qualité moyenne de la situation.
Les modèles de xG utilisent des milliers de tirs historiques pour estimer la probabilité de marquer selon plusieurs variables observables :
Parce que toutes les occasions ratées ne se valent pas. Rater une frappe de 30 mètres n'a pas le même sens que rater un face-à-face à six mètres. Le xG permet de distinguer les occasions banales des vraies opportunités qui, dans le langage courant, alimentent le récit de la « punition ».
Dans ce projet, je traite comme grosses occasions les tirs avec xG ≥ 0.4.
Le xG n'est pas une vérité parfaite. Il simplifie le réel. Deux tirs avec le même xG peuvent ne pas se ressembler totalement à l'œil nu. Il capture très bien la structure moyenne d'une occasion, mais moins bien certains détails fins : qualité exacte du contrôle, vitesse d'exécution, talent exceptionnel du finisseur, placement du gardien au centimètre près.
C'est précisément pour cela qu'il faut rester prudent : le xG est un excellent outil d'analyse agrégée, pas un juge absolu sur une action isolée.
En résumé : le xG ne dit pas qu'un joueur devait marquer. Il dit qu'une équipe s'est créée une occasion qui, historiquement, se transforme souvent en but. C'est exactement le bon langage pour passer du commentaire subjectif à l'évaluation probabiliste.
Une approche multi-couches pour garantir la robustesse de la conclusion. Chaque méthode contrôle un type de biais différent — du plus simple test descriptif au null model Bernoulli, qui est la pièce maîtresse du projet.
Comparaison traité (équipes qui gaspillent) vs contrôle, sur des fenêtres futures de 5, 10 et 15 minutes.
Test refait séparément selon le score (mène, égalité, perd) pour éliminer le confounding du contexte.
10 000 itérations non-paramétriques pour valider sans hypothèse distributionnelle.
Correction Benjamini-Hochberg pour éviter les faux positifs sur les seuils testés.
Avec clustered standard errors par match pour contrôler l'autocorrélation au sein d'un même jeu.
GroupKFold par match pour mesurer le vrai pouvoir prédictif (AUC, Brier score) sans data leakage.
500 simulations d'un univers où chaque tir se convertit au pur hasard. Permet de séparer un vrai effet de la régression vers la moyenne.
Après une grosse occasion ratée (xG ≥ 0.4), l'équipe ne devient pas plus vulnérable. La différence avec une occasion marquée est statistiquement nulle.
La stat la plus contre-intuitive du projet. Sur 658 penalties analysés, l'équipe qui rate concède presque deux fois moins que celle qui marque. La raison : marquer force l'adversaire à pousser et à se découvrir.
Que l'équipe ait tiré 0 ou 10+ fois sans marquer d'affilée, son risque de concéder reste plat autour de la moyenne (~14 %). Le récit du « siège qui finit en contre fatal » ne tient pas face aux données.
Forest plot sur 10 compétitions, de 1958 à 2024 : 7 montrent un effet négatif (gaspiller protège même légèrement), aucune ne montre d'effet positif significatif. La Liga, Premier League, Serie A, Bundesliga, Ligue 1, Coupe du Monde — l'adage est faux partout.
Au niveau équipe, on observe une corrélation positive (r = 0.31) entre gaspillage et concession. Mais elle disparaît dès qu'on analyse minute par minute au sein d'un même match. La corrélation au niveau global reflète la force globale de l'équipe — pas un mécanisme causal.
Le piège statistique le plus élégant du foot, et la raison principale pour laquelle l'adage semble vrai à l'œil nu.
Pour un scan rapide : voici les compétences mises en évidence et où les retrouver dans le repo GitHub.
De la collecte d'API à la figure publication-ready, en passant par le nettoyage, le feature engineering et la modélisation.
Correction pour tests multiples, clustered standard errors, GroupKFold cross-validation, tests non-paramétriques.
Stratification, conscience du paradoxe de Simpson, null models, distinction entre corrélation et causalité.
Code modulaire orienté objet, type hints, logging structuré, tests unitaires, configuration centralisée via YAML.
Visualisations publication-ready, narration data-driven, capacité à transformer une analyse complexe en histoire claire.
Sémantique du xG, compréhension des confounders propres au football, raisonnement tactique.
7 notebooks Jupyter, 15 figures, et tout le code source en open source.