Prédire le vainqueur de la coupe du monde avec la Data Science
Sélectionnez un chapitre
Du moment qu’il y a des données, les Data Sciences peuvent être utilisées. Si certains d’entre vous ont l’âme d’un parieur et souhaitent éclairer leurs décisions par des statistiques, nous avons créé un algorithme qui permet de prédire l’équipe gagnante d’un match de la coupe du monde.Cet algorithme vient, en partie de Dr James Bond et de son projet sur Kaggle : Soccer World Cup 2018 Winner. Celui-ci se basait cependant exclusivement sur les classements Fifa de chaque équipe.Nous y avons ajouté les statistiques moyennes de chaque joueur et de chaque équipe dans l’équation. En plus de cela, nous avons opté pour un modèle de Deep Learning de Réseau de Neurones pour gagner en précision.Voici donc une explication du projet, étape par étape. Pour ceux qui souhaitent simplement avoir les résultats prévisionnels, vous pouvez scroller directement à la fin de cet article.
[Projet réalisé à la suite de notre formation Essentials en Data : 75 heures de formation pour devenir comprendre les problématiques, apprendre Python et la gestion de bases de données avec SQL et réaliser son premier projet Data]
Collection des données
En ce qui concerne les données que nous avons récoltées, celles-ci viennent principalement de bases Kaggle :
- Nous avons les rangs FIFA de 1993 à 2018 donnés par Tadhg Fitzgerald
- L’historique des matches de football depuis 1872 donné par Mart Jürisoo
- Les statistiques de chaque équipe depuis 2018 tirées de Wikipédia
- Les statistiques des joueurs tirées de Kaggle
- Les futurs matches de la coupe de 2018 donnés par Nuggs
C’est avec ceci que nous allons entamé notre analyse. Importons donc les différents Datasets
Nous n’avons pas besoin de toutes les données dans chaque fichier. Certains noms de pays diffèrent en fonction des années (l’Allemagne comptait comme deux pays avant la chute du mur de Berlin en 1989). Nous allons donc commencer une première phase de nettoyage.
Vu la quantité de données que l’on possède ainsi que le peu de données manquantes, nous décidons de simplement effacer les lignes où il y a des données manquantes. Finissons d’importer les statistiques des joueurs.
La fin de la partie du code sert à calculer la moyenne des statistiques des joueurs dans chaque équipe pour que l’on puisse ensuite les intégrer dans le comparatif entre chaque pays.
Préparation des données
Nos données sont maintenant importées mais nous devrons les fusionner pour que notre algorithme puisse apprendre des différentes statistiques. Il faudra le faire en plusieurs étapes.
D’abord, les rangs et les dates des matches ne correspondent pas exactement. En effet, nous avons les rangs au mois-le-mois alors que nous avons une date au jours près pour les matches. Il faudra donc créer un classement au jour-le-jour pour que l’on puisse fusionner nos colonnes.
Une fois que ceci est fait, nous faisons un premier merge (fusion).
En ce qui concerne les statistiques des joueurs et des équipes au général, nous n’avons pas besoin de toucher aux dates. On passera donc directement à l’étape merge.
Comment allons nous évaluer les différentes équipes qui s’affrontent ? Un moyen simple est de prendre la différence de chaque statistiques entre les Comment allons nous évaluer les différentes équipes qui s’affrontent ? Un moyen simple est de prendre la différence de chaque statistiques entre les équipes. Par exemple, nous allons prendre la différence de position dans les classements FIFA, la différence d’âge entre les joueurs etc. Ce processus est un peu fastidieux car il faudra tout faire à la main mais en voici un extrait :
La gestion de chacune de nos variables qui va s’en suivre va de même être quelque peu longue et il existe très certainement des moyens de gérer cela d’une meilleure façon mais, par contrainte de temps, nous avons préféré procéder ainsi.
Préparation des données
Commençons par séparer nos variables dépendantes de notre variable dépendante (ce que l’on veut prédire).
Notre variable dépendante y est pour l’instant de type boolean mais pour que notre modèle puisse apprendre, il nous faut des chiffres. On utilisera donc la fonction get_dummies.
Nous pouvons maintenant séparer notre dataset en un training set et un test set. Rien de bien compliqué, nous utiliserons simplement scikitlearn.
Nous pouvons maintenant entrainer notre modèle de Machine Learning. Alors que Dr James Bond utilise une régression logistique (qui fonctionne très bien), nous avons tenté d’utiliser un modèle de Réseau de Neurones qui s’avère être un poil plus précis. C’est donc pour cela que nous avons opté pour ceci.
Nous n’avons pas créé trop d’epochs pour ne pas créer un phénomène d’overfitting (modèle trop entraîné sur le training set). Nous obtenons pour l’instant un score de précision aux alentours de 65%. Ce qui n’est pas trop mal étant donné que le niveau des équipes est difficile à déterminer.
Nous donnerons à la fin de l’article les probabilités exactes, celles-ci sont plutôt proches des 50% c’est pour cela que la modèle a aussi du mal à prédire avec plus de précision qui va gagner chaque match.
Application du modèle
Maintenant que notre modèle est prêt, utilisons le sur les équipes qui vont jouer dans cette coupe du monde.
Pour ce faire, nous devrons reprendre les étapes de notre partie préparation de données et les intégrer dans notre Dataset.
Nous devrons ensuite intégrer les différentes combinaisons possibles de matches en considérant les poules qui ont été faites. C’est une grosse loupe avec beaucoup de code assez long à entrer à la main mais voici nos résultats pour les matches de poules ! L’algorithme ne prédit pas encore les matches nuls donc il se peut qu’il y a des erreurs à cause de cela mais nous sommes pour l’instant à 60% de prédictions justes !
Si vous souhaitez acquérir les compétences en Data recherchées des recruteurs, n'hésitez pas à regarder nos formations Data que Jedha Bootcamp propose.