La science des données appliquée au soccer : le challenge xPSG

Jérémi DeBlois-Beaucage
8 min readJul 31, 2020

Cet article traite du concours xPSG 2019 et d’opinions quant au futur de l’analytique sportive. Le code Python utilisé est disponible sur GitHub, et cet article est également disponible en anglais (this article is also available in English).

Les grandes équipes de soccer (ou de football, chers lecteurs non Nord-Américains) sont reconnues pour être à la fine pointe des techniques d’entraînement, souvent aidées par les plus récentes percées technologiques. L’an passé, une équipe phare du soccer européen, le Paris Saint-Germain (PSG), a rendu public son intérêt pour une de ces nouveautés technologiques: l’analytique sportive, ou l’application de la science des données et de l’apprentissage automatique au monde du sport.

En mars 2019, le PSG s’associe à École Polytechnique et lance le concours xPSG, avec comme grand prix une bourse doctorale de 100 000€ pour des recherches à Polytechnique sur le sujet. L’objectif :

« Révolutionne la pratique du football grâce à tes compétences scientifiques : analyse un jeu de données basé sur les matchs du championnat de France et prouve que la science peut contribuer à améliorer les performances sportives. »

Moi-même passionné de sports depuis tout jeune et d’apprentissage automatique depuis quelques années, je me lance dans ce défi.

Cette expérience m’aura exposé à certaines possibilités du monde du big data, de l’intelligence artificielle, de la science des données et d’autres buzzwords, appliqué au sport.

Je vous présente ici les grandes lignes du défi et certaines réflexions sur l’avenir de l’analytique sportive.

Table des matières

  1. Le concours
    - Tâches
    - Nettoyage et présentation des données
    - Résolution du problème : réseaux de neurones récurrents
    - Résultats
  2. L’analytique sportive : une foule de possibilités
    - Recommandations en temps réel
    - Comparaisons entre joueurs

Le concours

Tâches

Dans le cadre du concours, le PSG donne accès à des statistiques détaillées, moment par moment, des matchs de la première moitié de saison 2016–2017 de la Ligue 1.

Exemple du type de données disponibles : actions détaillées, avec temps, position sur le terrain, résultat, et équipe et joueurs concernés

Puis, avec 15 minutes de statistiques détaillées d’un match au hasard de la deuxième moitié de la saison, il faut prédire:

  1. Quel joueur est identifié dans les données?
    Dans l’exemple ci-haut, le joueur en question a réussi une passe longue et un tir du gauche, tous les deux dans la zone adverse du côté droit, on pourrait donc prédire qu’il s’agit d’un ailier. Ángel Di María?
  2. Quelle sera la position de la prochaine action, après les 15 minutes?
    Le jeu se termine en position (85,35), on pourrait donc prédire que la prochaine action aura lieu près de cette zone.
  3. Quelle équipe sera au coeur de cette prochaine action?
    L’équipe à domicile a réussi sa dernière passe; on pourrait donc prédire que la prochaine action sera réalisée par l’équipe à domicile.

Plusieurs techniques différentes sont envisageables pour réaliser ces tâches. Par exemple, certains ont tenté de prédire directement le joueur parmi tous les joueurs de la Ligue 1, alors que d’autres ont préféré d’abord prédire l’équipe et la position du joueur.

Dans le cadre du concours, j’ai tenté ma chance sur les trois tâches. Cet article, se concentre cependant sur la 3e : prédire l’équipe qui fera la première action après les 15 minutes de données. Une méthodologie similaire a été utilisée pour les deux premières tâches.

D’abord, observons les données fournies.

Nettoyage et présentation des données

Les données brutes sont sous format XML, à raison d’un fichier par partie. Ces fichiers proviennent du fournisseur Opta Sports, leader mondial en données sportives.

Extrait de données brutes pour un classique Lyon-Nantes

La première étape a donc été de transformer ces données brutes en fichiers .csv, plus faciles à traiter en Python.

Données nettoyées en format .csv, plus facilement utilisables

Les deux seuls langages de programmation acceptés dans le cadre du concours étaient R et Python. J’utilise ici Python, avec la librairie d’apprentissage profond Keras.

xPSG n’acceptait pas les solutions sur Excel. La raison? Excel ne serait utile que pour des textos passifs-agressifs, à la Kelly Rowland en 2002.

Au final, 190 matchs sont disponibles, avec une moyenne de 1800 événements par match. Ces événements peuvent être de 50 types différents (passe, tir, faute, hors-jeu, etc.). Il y a également une liste de plus de 200 qualificatifs pour ces événements : une passe peut par exemple être qualifiée de “passe lobée” ou de “passe avec la tête”.

Voici une séquence de 10 secondes d’un match entre l’AS Monaco et le Paris Saint-Germain, avec les données correspondantes.

On observe, dans l’ordre : dégagement de la tête d’un joueur de Monaco, puis passe centrale entre joueurs du PSG, passe lobée, passe avec la tête et but avec la tête, dans la partie basse-droite du filet.

Résolution du problème : réseaux de neurones récurrents

Note: Je n’ai pas accès aux mêmes ressources computationnelles que lors du concours; je propose donc ici une version lite de la solution, entrainable en quelques minutes, qui ne requiert pas plus qu’un ordinateur personnel de base.

L’architecture est la suivante : d’abord, seuls les 10 derniers événements sont conservés, soit les 10 qui précédent l’événement à prédire. Chaque événement comporte une cinquantaine d’attributs numériques (latitude, longitude) ou binaire (l’action est-elle réussie? est-ce une passe? est-ce avec la tête? etc.).

Cette séquence d’événements avec leurs attributs est entrée dans un réseau de neurones récurrents de type Long Short-Term Memory (LSTM). La sortie de cette composante récurrente est connectée à un réseau avec plusieurs couches cachées. La sortie du réseau est une prédiction entre 0 et 1: une prédiction de plus de 0.5 indique l’équipe à domicile pour le prochain événement, et une prédiction de moins de 0.5 indique l’équipe visiteuse.

Il s’agit ici d’une architecture de base d’apprentissage profond pour des séries temporelles.

190 matchs étaient mis à notre disposition. Les matchs ont été divisés en échantillons d’entraînement de l’algorithme (70% des matchs), de validation (10%) et de test (20%).

Résultats et conclusion du défi

Malheureusement, je n’ai pas réussi à me qualifier parmi les 20 finalistes, et il est impossible de savoir quels ont été les scores des meilleurs performeurs.

Images de moi, n’apercevant pas mon nom parmi les 20 finalistes.

Pour cette tâche, il n’y a que deux prédictions possibles: l’équipe à domicile ou visiteuse. Si le modèle prédisait purement au hasard (Random), on peut s’attendre à une précision de 50%.

Une autre technique serait de regarder quelle équipe a effectué la dernière action, et de prédire que cette équipe effectuera la prochaine action. Cette technique (Last Team Next) donne une précision de 63%.

Pour rendre la tâche plus complexe, le PSG a censuré quelques attributs habituellement présents dans les données : l’indicateur succès de l’événement, et les qualificatifs des événements.

Avec le modèle de réseaux de neurones récurrents, entraîné avec l’information censurée par le PSG, on arrive à une précision de près de 77% (Censured Info). Cette précision grimpe à plus de 89% lorsqu’on retire la censure, i.e. lorsqu’on donne au modèle l’indicateur de succès et les qualificatifs des événements (Full Info).

Les résultats finaux.

Il s’agit donc d’une performance plutôt intéressante : en ayant accès à toute l’information, un algorithme peut prédire correctement 9 fois sur 10 la prochaine équipe à effectuer une action. Mais à quoi cela pourrait-il servir, concrètement?

xPSG visait surtout à « repérer des talents en analytique sportive », et je doute que les algorithmes gagnants soient réellement utiles, tels quels. Ces algorithmes représentent un point de départ vers des applications bien plus intéressantes.

L’analytique sportive: une foule de possibilités

Ce concours présente une difficulté considérable d’un point de vue technique. Cependant, l’utilisation de mégadonnées dans le monde du sport présente des possibilités bien réelles.

En effet, plusieurs autres initiatives semblables ont déjà été proposées. Au baseball, l’exemple phare est la saison 2002 d’Oakland et de son directeur général Billy Beane, mise de l’avant dans le film Moneyball.

Au basketball, la “bible” de l’analytique sportive a été publiée en 2004 (Basketball on Paper, de Dean Oliver), et l’analytique est désormais omniprésente dans la NBA.

« The easy gains from using analytics in the N.B.A. have already been won. Each team now has an analytics staff, and coaching staffs are infused with analytics-speak.» — The New York Times, 2019

L’analytique sportive gagne également en popularité au soccer, et le PSG fait partie de ces équipes qui explorent le domaine.

Voici deux grandes possibilités que l’analytique sportive pourrait amener au soccer, dans un avenir plus ou moins rapproché.

Recommandations en temps réel

Dans ce cas-ci, nous voulions prédire l’équipe au coeur du prochain événement. Supposons qu’au lieu de prédire l’équipe au coeur du prochain événement, nous voulions prédire qui aura la possession du ballon au prochain événement.

Après une séquence d’événements, le joueur serait confronté à plusieurs options : passe, dribble, centre, tir. Laquelle de ces options optimise les chances de conserver la possession du ballon au prochain événement? La prédiction de la machine pourrait être calculée en temps réel. Ou, plus réalistement, on pourrait comparer après le match les décisions prises par le joueur et celles recommandées par l’algorithme.

Et si au lieu d’observer la possession de ballon, on observait plutôt quelle action optimise les chances de tirer au but dans les prochains 10 événements?

Évidemment, ces prédictions ne seraient basées que sur des données observables, et ne seraient peut-être pas toutes bonnes. Mais l’action qui, aux yeux de l’algorithme, optimise les chances de marquer un but pourrait être pertinente; peut-être exposerait-elle de nouvelles façons de concevoir des attaques ou des set pieces, un peu à la manière d’Alpha Go en 2016.

« The Google machine made a move that no human ever would. And it was beautiful. » — Wired, 2016

Si les algorithmes sont toujours loin d’avoir la vista de KDB, ils peuvent déjà être utiles et le seront de plus en plus.

Comparaisons entre joueurs

Les joueurs sont souvent comparés sur des attributs mesurables: nombre de buts, passes réussies, vitesse, etc.

En utilisant les mégadonnées, il serait possible de créer un vecteur latent qui représente les contributions d’un joueur durant un match. Toutes les passes, dribbles, tirs, centres, réussis ou échoués, pourraient être les données d’entrée dans un réseaux de neurones qui créerait un vecteur, par exemple de 300 dimensions.

En traitement du language naturel, on parle de word embeddings: chaque mot est associé à un vecteur de valeurs réelles, et deux mots au sens similaire auront des vecteurs similaires. Ce concept pourrait-il être appliqué pour chaque joueur? Les données présentées dans cet article ne concernaient que des “événements” catégorisés par Opta Sports, mais d’autres données pourraient être ajoutées, comme les mouvements sans ballon.

Ce vecteur pourrait alors être utilisé pour comparer les joueurs entre eux. Si Di María se blessait, par qui devrait-il être remplacé? On pourrait regarder quel joueur est le plus “similaire” à Di María, avec des mesures de similarité entre leurs vecteurs, par exemple.

Conclusion

D’un sport à l’autre, d’un continent à l’autre, les équipes professionnelles investissent dans l’analytique sportive. Cet article détaille un seul exemple d’application de la science des données au soccer, mais nous risquons d’en voir de plus en plus dans les années à venir. Et félicitations aux gagnants du concours!

Question, commentaires, ou idées? N’hésitez pas à me contacter via LinkedIn!

--

--