Aller au contenu principal
Image IA Foot

#Python #Data Capture #Deep Learning #Machine Learning

Le meilleur joueur du monde d’après l’Intelligence Artificielle

Premiers éléments de réponses avec une analyse sur les Expected goals

L’emploi de l’intelligence artificielle fait petit à petit sa révolution dans le milieu du football. Nous avons pu établir ses principaux impacts sur les acteurs de ce sport, toujours plus populaire, dans un précédent article [1].  Les techniques permettant la collecte automatique de données étant de plus en plus efficace, cela laisse place à l’imagination et à l’innovation pour créer des indicateurs nouveaux et plus pertinents. Ceux-ci pourront influencer la stratégie, le scouting (recherche de talents) et plus généralement l’analyse des performances individuelles et collectives. Les Expected Goals, que nous appellerons aussi par la suite “xG”, font partie de cette nouvelle ère de statistiques apparues avec l’essor de l’intelligence artificielle. Cependant le modèle xG n’est pas n’importe quel indicateur, il est surement le plus connu et le plus utilisé dans le Football Analytics.

Que sont les Expected Goal ?

C’est un modèle qui renvoie la « chance » qu’un tir soit converti en but. Un modèle xG calcule pour chaque tir la probabilité de marquer en fonction de ce que nous savons : la position de l’attaquant, la distance au but ... Plus le xG est élevé, 1 étant le maximum,  plus la probabilité de marquer est élevée. 
Les xG répondent à la problématique suivante : il n’est pas suffisant de dire qu’un tel a marqué 35 buts cette saison, et qu’un autre a marqué 27 buts, pour en déduire que le premier est meilleur que le second. Il reste en effet la question du contexte, est-ce que le premier avait plus de tirs tentés ? De meilleures dispositions ?  Le second a-t-il eu moins de chance ? 
Pour comprendre ce qu’est un modèle xG le plus simple est de prendre un exemple, les penalties. En règle générale, les penalties sont autour de 0,75 xG, sur la base du taux de conversion historique. Un penalty est la tentative la plus facile à classer, car il s'agit d'une situation isolée du jeu. Dans la pratique un penalty est donc converti en but 75% du temps. 
Ainsi, l’objectif est de créer un modèle prédictif qui pour n’importe quel tir, dans n’importe quelle situation, nous donne la probabilité que cet événement amène un but. 
Nous illustrons le pourcentage de conversion selon les zones du terrain avec le schéma ci-dessous :

Répartition des tentatives

Comment évaluer un tir et lui affecter une probabilité d'être converti en but ?

Nous voulons un indicateur qui, pour un tir donné, nous renvoie la probabilité qu’un joueur marque un but. La première chose à préciser est que nous ne prendrons donc pas en compte les performances individuelles dans le modèle. Il est évident que si Messi se retrouve face à face avec le gardien de but, les chances de but seront plus élevées qu'avec un moins bon joueur. A contrario, si Alisson - considéré comme le meilleur gardien du monde - garde les buts, alors les probabilités de but pourraient baisser. Mais ce n'est pas l’objectif de la métrique. Nous essayons de normaliser à travers nos données la probabilité qu'un joueur marque à partir d'une certaine position, dans une certaine situation.
Premièrement il est important de diviser notre modèle suivant les situations dans laquelle se trouve le joueur au moment de prendre sa chance. En effet, nous n’allons pas utiliser les mêmes variables pour évaluer un tir dans le jeu et un tir sur coup de pied arrêté. Un modèle doit donc être développé pour chacune des situations différentes dans un match, par exemple : 

  • Pendant le jeu;
  • Pour un penalty;
  • Pour un coup-franc direct;
  • Pour un coup-franc indirect;
  • Pour un corner.

 
Ensuite pour chacune de ces situations le modèle associé va évaluer différentes variables. Ces dernières années l’intelligence artificielle a permis de collecter de grande quantité de données automatiquement et de labelliser des milliers d'événements comme un tir.  Je vous renvoie vers notre précédent article pour plus de détails [1]. Dans notre cas les facteurs qui ont de l’influence sur le modèle xG sont : 

  • La localisation (distance, angle ou zone);
  • L’utilisation pied fort ou faible;
  • La dernière passe avant le tir (passe, centre etc);
  • La possession avant la tentative;
  • Les dribbles effectués (vient de dribbler un joueur, vient de dribbler le gardien);
  • L’équipe joue à l’extérieur ou à domicile;
  • L’équipe mène ou perd;
  • La vitesse de l’attaque;
  • Le nombre de défenseurs;
  • La pression des défenseurs (à proximité du tireur, entre le ballon et le but).

Ainsi nous remarquons que nous pouvons obtenir de nombreuses informations sur un événement comme un tir, même si ce n’est pas toujours évident d'obtenir ces informations. C’est d’ailleurs une problématique centrale dans le Football Analytics, et dans la Data Science en générale. Plus nous possédons de données, meilleure en sera notre prédiction. Les fournisseurs comme Opta utilisent les toutes dernières avancées en intelligence artificielle pour obtenir cet or numérique et intéresser les clubs.

Un premier modèle xG 

Dans cette partie nous allons développer un premier modèle, nous disposons d’une partie des variables et des situations exposées précédemment. Les données proviennent de l’ancienne plateforme de Football Analytics : Stratabet. Plus précisément nous possédons 26 variables pour un peu moins de 30. 000 situations de tirs dans trois grands championnats d’Europe (Espagne, Angleterre et Allemagne) lors de la saison 2017-2018. Soit 1252 matchs, 1350 joueurs et 785 buteurs différents.
 

Liste des variables explicatives

Nettoyage et visualisation des données (pre-processing, data engineering)

Nous commençons par chercher d’éventuels doublons. Notre jeu de données n’en possède pas mais il n’y a aucune colonne qui fait office d'identifiant unique : nous en créons un. 
Ensuite pour chaque variable nous recherchons si il y a des valeurs nulles, auxquels cas,  si possible nous procédons à de l’imputation, sinon nous supprimons la ligne. Toujours pour chaque paramètre nous utilisons des statistiques et des visualisations adéquates pour détecter des valeurs aberrantes aussi appelé “outliers”. 
Pour illustration, la variable “type” nous indique si un tir a été effectué dans le jeu ou sur coup franc direct. Observons alors ces derniers :

Tentatives

Nous remarquons deux choses, d’abord certains tirs sont dans la surface. Hors ce sont des coups francs direct, ce qui est impossible dans cette position, nous les retirons donc. 
Deuxièmement certains ont été tirés de beaucoup trop loin pour être considérés comme une tentative de marquer un but. C’est peut être également le cas pour des tirs dans le jeu. Observons la Heatmap de toutes les tentatives :

tentatives

Et de celles qui ont amené un but :

Tentatives fructueuses

Nous retirons alors les tirs tentés avant la ligne médiane, considérant les autres comme des Outliers.
Prenons un dernier exemple avec la variable “BodyPart”. Comme son nom l’indique elle nous permet de connaître avec quelle partie du corps le joueur a tiré. Nous obtenons :

Répartition

Rien d’étonnant, il y a plus de joueurs droitiers donc plus de tir du pied droit. Le problème est que notre jeu de données ne nous indique pas quel est le pied fort/faible du joueur. Savoir qu’il a pris sa chance du pied droit ou gauche ne nous donne donc pas plus d'information que de juste savoir qu’il a tiré du pied tout court. Nous modifions alors la variable et nous obtenons :

Répartition après fusion

Observons le lien entre la partie du corps utilisé et notre cible :

Répartition
Répartition

Si on prend uniquement en compte la partie du corps lorsque l’on tire, on a 13% de chance de marquer si on utilise le pied, 15% si on utilise la tête et 81% si on utilise une autre partie ! Certes cela se produit rarement, mais observons la Heatmap de ces tirs ainsi que les passes avant ceux-ci :

Tentatives
Tentatives

On remarque que cela se produit presque uniquement dans la surface, très près du but adverse et souvent sur un centre. On peut facilement imaginer une action avec des centres repris comme il se peut qui ont de grande chance d'être convertis en but au vu de la distance.  
Ainsi, avec une analyse exploratoire nous pouvons évidemment « nettoyer » nos données mais également apprendre et observer certaines tendances.

Création de variables 

Une autre tâche qui peut apporter beaucoup d’informations à notre modèle est de lui rajouter des variables. Par exemple, nous pouvons enrichir notre modèle avec des données d’autres sources comme le pied faible ou fort de chaque joueur. Nous n’avons pas effectué ce travail étant donné que nous désirons créer un premier modèle à partir de ce que l’on possède et qui pourra être complexifié par la suite. Nous calculons cependant la distance et l’angle du tir à partir des coordonnées de localisation x et y. Aussi nous introduisons un aspect psychologique avec une variable qui indique si le joueur qui tire est à domicile ou à l'extérieur et si son équipe mène, est à égalité, ou perd à l’instant où le joueur prend sa chance. 

La sélection des variables 

Une fois notre jeu de données mis au propre, il faut sélectionner les variables à utiliser dans notre modèle. Cette étape peut être périlleuse lorsque que l’on en possède bon nombre. En effet il peut être difficile d’appréhender les effets sur la cible et les corrélations entre elles. Dans notre cas il n’est pas compliqué d'émettre une hypothèse quant à l’importance des quelques variables intéressantes. De plus lors de notre phase de visualisation des données nous avons pu nous rendre compte du lien entre nos variables et la cible. Par exemple avec la variable “numDefPlayers”, qui correspond au nombre de défenseur entre le ballon et le but :

Ratio de tirs fructueux

On remarque facilement que moins il y a de défenseur plus il y a des tirs convertis en but. Par cette méthode nous sélectionnons alors les variables corrélées avec notre cible : 

  • chanceRating : on évalue de 0 à 5 la facilité du tir 
  • Foot : 1 si le tir a été effectué avec le pied, 0 sinon
  • Head : 1 si le tir a été effectué avec la tête, 0 sinon
  • Other : 1 si le tir a été effectué avec une autre partie du corps, 0 sinon
  • defPressure : on évalue de 0 à 5 la pression exercé par la défense 
  • numDefPlayers : on somme le nombre de défenseur 
  • home : 1 si le tir a été effectué à domicile, 0 sinon
  • away : 1 si le tir a été effectué à l’extérieur, 0 sinon
  • dist : la distance au but normalisé 
  • angle : l’angle du tir au but, 0 si on est devant, 1 si on est perpendiculaire 

Les modèles

Par la suite nous allons développer deux modèles. Un pour les tirs ayant eu lieu dans le jeu et un pour ceux sur coup franc direct. Sachant que nous avons vu que pour les penalties on peut uniquement se baser sur la réussite historique ce qui nous donne 0.75 xG pour chacun. Nous disposerons ainsi de trois modèles.  

Dans le jeu

La régression logistique est un bon algorithme pour notre premier modèle. En effet elle est communément utilisée pour estimer la probabilité qu’une instance appartienne à une classe particulière.  Elle convient donc parfaitement pour la classification de variable binaire, ce qui est notre cas. De plus, c’est un modèle qui nous retourne une probabilité. Car n’oublions pas que notre objectif n’est pas de classifier chaque tir mais de lui associer une probabilité de réussite, et c’est exactement ce que va nous permettre d’obtenir la régression logistique. Enfin, c’est un modèle interprétable, ce qui nous permet de comprendre comment le modèle choisit de classer les instances. 
Nous sommes également dans le cas d’un jeu de données dit “déséquilibré”. C’est à dire que notre variable à classer n’est pas répartie de façon équilibrée dans nos deux classes.

Répartition

Dans ce cas, développer un modèle qui prédit tout le temps que le tir ne fera pas but aura une précision de 88%. Premièrement il faut donc faire attention aux métriques que nous mettons en place pour évaluer la performance du modèle. Observer uniquement la précision ne suffit pas surtout dans le cas d’un jeu de données déséquilibré. Nous mettons en place plusieurs métriques : precision, recall, F-score, AUC (area under curve). De plus nous effectuons une validation croisée pour fiabiliser l’estimation de la performance. 
Deuxièmement, notre algorithme aura du mal à prédire correctement la classe sous représentée de par le déséquilibre de l’échantillon. On peut alors effectuer un ré-échantillonnage pour contrer cette problématique. Plus précisément nous appliquons les méthodes les plus utilisées pour l’oversampling : Adjust class weight RL, Random over sample, SMOTE, ADASYN [2]. Mais également pour l’undersampling :  Adjust class weight RL, Random under sample Near miss 1 et 2, TomeksLinks, Edited nearest neighbours [3].
Nous obtenons :

Recall
Recall 2

La difficulté pour ce type de problème est d’obtenir un bon trade-off entre le recall et la précision [4]. C’est à dire réussir à détecter les tirs qui vont donner un but (précision) et en détecter suffisamment (recall), sachant que lorsque l’on améliore l’un, l’autre diminue. Ainsi si on veut en détecter beaucoup (recall) on va également se tromper plus souvent (précision), il faut alors trouver le juste milieu. Nous choisissons pour notre premier modèle une régression logistique avec un ré-échantillonnage utilisant la méthode NearMiss1. L'idée générale étant de ne prélever que les points de la classe majoritaire nécessaires pour distinguer la classe minoritaire. 

Sur coup franc direct :

On applique la même méthode que précédemment. Cependant nous utilisons uniquement les variables “dist”, “angle”, “home” et “away”, les autres n’ayant logiquement aucune importance.
Nous possédons alors trois modèles : pour les tirs dans le jeu, sur coup franc direct et sur penalties. Evidemment de nombreuses améliorations sont possibles pour notre modèle xG et les performances associées. Collecter plus de données et d'attributs sur les tirs étant la principale. On a vu précédemment les différents facteurs qui peuvent être inclus dans un modèle. Ensuite on peut essayer différents algorithmes, jouer avec les hyperparamètres etc. 

Quel est le meilleur joueur ? 

Maintenant que l’on a compris ce qu’étaient les Expected Goal et comment développer un premier modèle, comment pouvons-nous en tirer parti ? 
Les Expected Goals nous donnent de nombreuses informations sur les performances individuelles des joueurs, et plus particulièrement des attaquants. En regardant la différences entre les xG et le nombre de buts mis par un joueur, nous pouvons en déduire qui est le meilleur finisseur. Sur les données de la saison 2017-2018, nous obtenons :

Meilleurs joueurs

En triant par ordre décroissant les xG on peut savoir qui se crée le plus de situations susceptibles d'être transformées en but :

Transformation

On peut aussi trouver le meilleur joueur suivant la partie du corps (tête/droitier/gaucher) ou le meilleur tireur de loin. Observons les meilleurs de la tête :

Meilleurs joueurs de la tête

Pour aller plus loin on peut aussi s'intéresser aux passeurs qui ont créé le plus d’occasions (et donc d’Expected Goals) :

Le plus d'occasions

Les résultats sont sensés et nous retrouvons bien d’excellents joueurs dans le top de nos classements. Il est possible de dégager des tendances et d’analyser les performances des joueurs. Cependant, le modèle xG pour les performances individuelles possède ses limites, notamment pour l’aspect « prédictif » où il est difficile d’établir une constance.
Pourtant une des utilisations la plus courante d’un tel modèle est bel et bien la prédiction. Car à l’échelle d’une équipe cet indicateur peut aussi se révéler précieux. En effet nous pouvons calculer les xG « pour », soit le nombre de buts que l’équipe aurait dû marquer, et les xG « contre », soit le nombre de buts que l’équipe aurait dû concéder. A partir de cela il est possible de modéliser la forme d’une équipe, sa chance ou sa malchance. Evidemment si nous effectuons ce travail à l’échelle d’un ou plusieurs championnats, et que nous modélisons la performance offensive et défensive de chaque équipe, on peut ensuite prédire le résultat des matchs à venir et même celui d’une compétition. Cela peut laisser un peu perplexe mais cette métrique, encore jeune et imparfaite, peut se révéler puissante.
 

Sources

[1] https://datascience.sia-partners.com/fr/blog/lintelligence-artificielle-au-service-des-acteurs-du-football
[2] https://imbalanced-learn.readthedocs.io/en/stable/over_sampling.html
[3] https://imbalanced-learn.readthedocs.io/en/stable/under_sampling.html
[4] https://medium.com/opex-analytics/why-you-need-to-understand-the-trade-off-between-precision-and-recall-525a33919942

Si vous souhaitez en savoir plus sur nos solutions d'IA, rendez-vous sur notre site web Heka : https://heka.sia-partners.com/

#Python #Data Capture #Deep Learning #Machine Learning

Examen approfondi La contribution de l'IA en tant que source de retour clients
#Marketing & Customer experience #Machine Learning

IA et Ecoute clients : le NPS est-il dépassé ?

A Twitter vision on the campaign for the mayor of Paris
#Government #Data Capture #Deep Learning #Machine Learning

La course pour la mairie de Paris vue depuis Twitter

Foot_img

Dénicher les stars du football de demain via l'intelligence artificielle