Vous êtes sur la page 1sur 11

Projet fil rouge

Prédire le vainqueur de la prochaine


Coupe du monde au Qatar

Présenté et réalisé par : Mohammed BENNI


Manuel Coquerelle
Christophe VACQUIE
Table des matières
I. Introduction..................................................................................................................................... 2
II. Architecture ..................................................................................................................................... 2
1 Serveur Linux CentOS .................................................................................................................. 2
a Installation ................................................................................................................................... 2
b Accès au serveur .......................................................................................................................... 2
2 Data Lake ..................................................................................................................................... 3
3 Data Warehouse .......................................................................................................................... 3
III. Web scrapping ............................................................................................................................. 4
IV. ETL Talend.................................................................................................................................... 4
1 Envoi sur le Data Lake.................................................................................................................. 4
2 Uniformisation des données ....................................................................................................... 5
3 Transformation des données ...................................................................................................... 5
4 Regroupement des données ....................................................................................................... 6
5 Envoi de la donnée dans le Data Warehouse.............................................................................. 6
V. Data Viz............................................................................................................................................ 7
1 Matplotlib Seaborn...................................................................................................................... 7
2 PowerBI ....................................................................................................................................... 7
VI. Traitement des données ............................................................................................................. 7
1 Machine Learning ........................................................................................................................ 8
2 Deep Learning.............................................................................................................................. 8
VII. PowerBI ....................................................................................................................................... 9
VIII. Industrialisation ........................................................................................................................... 9
IX. Conclusion ................................................................................................................................. 10

1
I. Introduction
Le but de notre projet est de déterminer qui va gagner la prochaine coupe du monde de foot qui
commence le 20 novembre 2022.

Pour réaliser cela, nous allons récupérer les données des précédentes coupes du monde, les analyser
et essayer de prédire le vainqueur de chacun des matchs pour obtenir le prochain champion du monde.

II. Architecture
La première étape du projet est de déterminer l’architecture que nous allons utiliser.

Ce dont nous avons besoin c’est d’un Data Lake pour le stockage de nos données avant traitement et
d’un Data Warehouse pour le stockage de notre data après traitement.

D’après nos premières recherches notre data sera constitué principalement de fichiers plats, c’est pour
cela que nous décidons de prendre MongoDB pour notre Data Lake et MySql pour notre Data
Warehouse.

Pour des questions de coût notre Data Lake et notre Data Warehouse seront stocké sur le même
serveur.

Pour le serveur nous Installons Linux CentOS 7 sur une machine Virtuelle via le logiciel VirtualBox pour
une mise en service rapide.

1 Serveur Linux CentOS


a Installation
Avant d’installer Linux, je paramètre la connexion de VirtualBox en bridge pour avoir accès à internet
sur la machine Virtuelle et pour que la machine virtuelle soit sur la même plage IP.

Installation de CentOS en version ligne de commande pour réduire la consommation car nous sommes
sur une machine virtuelle, il faut faire attention à bien activer la carte réseau lors de l’installation de
CentOS, je fixe l’adresse IP du serveur en fixe sur l’adresse 192.168.1.36.

Installation des logiciels et des mises à jour de base :

• yum update
• yum install net-tools
• yum install -y openssh-server
• yum install -y nano

b Accès au serveur
Le serveur est lancé et opérationnel, mais l’accès est limité à mon réseau local, mes collègues ne
peuvent pas accéder au serveur.

Dans le but de rendre accessible l’accès à tous les membres de l’équipe. Je fais une redirection de port
sur ma box.

2
Le besoin : c’est un accès au serveur qui à l’adresse 192.168.1.36 en SSH port 22

Un accès sur au serveur Data Lake MongoDB 192.168.1.36 avec le port 27017

Un accès sur au serveur Data Warehouse MySql 192.168.1.36 avec le port 3306

Service IP public Port extérieur Redirigé vers IP Redirigé vers


port
Serveur CentOS 89.88.189.91 5222 192.168.1.36 22
MongoDB 89.88.189.91 5017 192.168.1.36 27017
MySql 89.88.189.91 5306 192.168.1.36 3306

2 Data Lake
Installation de MongoDB pour cela je dois configurer le repository en créant un fichier

• Nano /etc/yum.repos.d/mongodb-org-6.0.repo

Et insérer les informations sur la version que je souhait télécharger et l’emplacement

Ensuite lancer la commande d’installation

• sudo yum install -y mongodb-org-6.0.2

MongoDB est maintenant installé mais il n’est accessible que depuis le serveur (127.0.0.1 c’est une
protection). Pour un accès extérieur il faut modifier le fichier de configuration de MongoDB et donner
un accès aux machines souhaité (pour nous accès pour tout le monde 0.0.0.0 sur le fichier
/etc/mongod.conf). Attention sur notre VM avec un espace de mémoire très limité et beaucoup de
petits fichiers il faut mettre l’option smallfiles =true sinon problème de place.

3 Data Warehouse
Pour le serveur MySql on utilise mariaDB qui est la version opensource disponible sur Centos.

Les commandes de base sont l’installation, le démarrage du serveur, l’activation qui permet un
lancement automatique au démarrage et statuts qui permet de connaitre l’état du serveur

• sudo yum install mariadb-server


• sudo systemctl start mariadb
• sudo systemctl enable mariadb
• sudo systemctl status mariadb

Attention faut créer un autre utilisateur que root pour avoir un accès distant au serveur MariaDB.

3
Les commandes permettant cela :

• Créer l’utilisateur avec accès externe, (le « % » indique à MariaDB que l’utilisateur peut le
joindre depuis n’importe quel ordinateur)
CREATE USER 'extuser'@'%' IDENTIFIED BY 'Passw@rd';

• Accorder des privilèges à l’utilisateur, (ici on accorde tout les privilèges sur toutes les tables
mais on aurait pu faire « datatbase.* » afin qu’il n’ait accès qu’à celle-ci)
GRANT ALL PRIVILEGES ON *.* TO 'extuser'@'%';

III. Web scrapping


Nous avons fini de mettre en place notre architecture maintenant on va récupérer de la data.

Notre objectif est de prédire le vainqueur de la prochaine coupe du monde de foot au Qatar.

Pour cela on va faire du web scraping (récupérer les informations sur un site web)

Nous allons récupérer les participants à la prochaine coupe du monde et le classement des différentes
équipes sur le site officiel de la FIFA

Les sites que nous souhaitons scraper ont un contenu statique. Donc nous préférons utiliser la
bibliothèque BeautifulSoup plutôt que Selenium.

Le principe de BeautifulSoup est de faire une requête sur le site.

Ensuite je parse le résultat. Pour récupérer seulement les informations dont j’ai besoin.

Grâce au websraping j’ai récupéré :

• La liste des participants à chacune des coupes du monde depuis 1930 jusqu’à 2022
• Le vainqueur de chaque coupe du monde
• Le pays hôte
• Le classement Fifa depuis 1992 donc à partir de la coupe du monde de 1994.

Grâce au site Kaggle j’ai récupéré :

• Le résultat de tous les matchs officiels depuis 1880


• Dont l’historique de tous les matchs de coupe du monde

IV. ETL Talend


1 Envoi sur le Data Lake
Maintenant que j’ai récupérer ma donnée. Je vais envoyer cette donnée brute sur le Data Lake pour le
stockage (MongoDB).

Pour l’envoi de la donnée sur le serveur Data Lake j’utilise le logiciel Talend qui est un ETL (Extraction,
Transformation, Chargement).

Attention à choisir la bonne version de Talend, la version de base n’a pas de connecteur NoSql. Comme
notre Data Lake est un serveur MongoDB NoSQL il nous faut la version de Talend Big Data.

4
Quand la bonne version est téléchargée la mise en place est facile, il suffit de renseigner dans les
Métadonnées les paramètres de notre serveur MongoDB (attention à l’adresse du serveur et au
numéro de port car nous avons fait une redirection), la base de données que l’on souhaite utiliser et
de renseigner le nom de la collection (table) dans lequel je veux enregistrer mon document.

Talend s’occupe tout seul de faire la transformation du fichier plat en JSON pour que le fichier soit
enregistré au bon format.

Du fait que l’architecture est légère pas de réplication de du serveur est toutes les données sont
stockées sur le même serveur. Je mets en place une sauvegarde de secoure des documents sur Google
Drive.

Quand le logiciel Talend réussi à enregistrer le document sur la base de données MongoDB un Trigger
se déclenche et enregistre le document sur Google Drive pour plus de sécurité.

2 Uniformisation des données


Maintenant que les données sont sur le Data Lake. Je vais pouvoir travailler ces données pour les
assembler.

L’une des premières étapes va consister à uniformiser le nom des pays. Suivant la source sur lequel j’ai
récupéré les données le nom des pays est en anglais ou en français.

Je créais un fichier qui va me servir de table de conversion. Anglais – Français ou Français – Anglais.

Ma deuxième problématique vient du fait que certains pays ont changé de nom depuis 1930 (URSS
transformé en Russie).

Pour unifier tout cela je vais utiliser le Trigramme un code à trois chiffres qui me permettra d’identifier
un pays même s’il a changé de nom.

Pour faires ces étapes de conversions du nom du pays et l’ajout de Trigramme j’utilise la fonction map
du logiciel Talend (composant Tmap).

3 Transformation des données


Maintenant que j’ai normalisé mes données ma problématique est que mes informations sont sur
plusieurs fichiers :

J’ai les participants à la coupe du monde d’un côté avec le vainqueur d’un côté.

5
Et le classement Fifa sur un autre fichier.

Toujours via le logiciel Talend je vais regrouper toutes ces informations au sein d’un même fichier je
vais utiliser de nouveau le composant Tmap avec une jointure (Left Outer Join). Ce qui va me permettre
de récupérer les participants à la coupe du monde et de leur ajouter leur classement Fifa juste avant
la coupe du monde.

4 Regroupement des données


Problématique : j’ai un fichier par années, j’utilise le composant Tunit pour regrouper toutes les années
dans un unique fichier.

Problème : mes fichiers ne sont pas formatés pareil car j’ai le classement Fifa qu’à partir de la coupe
du monde 1994. Pour pallier cela j’ajoute une colonne classement pour tous les fichiers de 1930 à
1990.

5 Envoi de la donnée dans le Data Warehouse


Une fois ma data regroupée dans un fichier unique je l’envoi sur mon serveur Data Warehouse MySql
(MariaDB).

6
Pour cela toujours dans Métadonnées je renseigne les paramètres du serveur. Attention à bien
renseigner un nom d’utilisateur dans MariaDB sinon il est inaccessible depuis l’extérieur.

V. Data Viz
1 Matplotlib Seaborn
Grâce aux bibliothèques Matplotlib et Seaborn de Python je vais pouvoir analyser la donnée et mettre
en avant les caractéristiques de notre dataset.

Je peux voir que les vainqueurs


des coupes du mondes sont
toujours dans le Top 20 du
classement Fifa.

Et si on affiche le pourcentage de
victoire ils ont au minimum 40%
de victoire avant la coupe du
monde
Vainqueur selon le classement FIFA Vainqueur selon le pourcentage de Victoire
Et via la bibliotheque Seaborn on
peut voir que les pays qui ont gagné la coupe Seaborn
du monde avec un classement et un
pourcentage de victoire faible avec la
particularité d’héberger la coupe du monde.
Donc il faudra faire un traitement particulier
pour le pays Hôte. Apres cette annalyse
j’ajouterai une colone Hôte dans notre
donnée.

2 PowerBI
Le deuxième outil pour analyser la donnée est
PowerBI, il a l’avantage d’avoir une interface
graphique.

On peut voir qu’il y a eu 21 coupes du monde et que


seul le Brésil a participé à toutes les coupes du monde.
Seulement 6 pays ont remporté la coupe et tous les
pays sauf le Brésil ont remporté la coupe à domicile
(impact important d’accueillir la coupe).

On voit aussi que seuls les pays d’Europe et


d’Amérique du Sud ont gagné la coupe du monde.

Nous avons dans ces 6 pays les grands prétandant au


titre de champion du monde

VI. Traitement des données


Pour le traitement des données je mets en place deux méthodes :

7
Une première méthode en Machine Learning, je l’alimente avec l’historique des participants leur
classement et leurs performances.

Une deuxième méthode en Deep Learning dans lequel j’alimente le modèle avec tous les matchs
historiques (versus) et j’essaye de prédire le vainqueur de chacun des matchs jusqu’à la final.

1 Machine Learning
Données d’entré : Pays hôte, les performances, le classement Fifa

Attention : le classement Fifa commence qu’à partir de la coupe du


monde 1994 donc faire 2 versions avec classement et sans.

Données de sortie : j’attribue une note à chaque pays, je créer 6


catégories :

• 0 : le pays n’a pas dépassé les poules


• 1 : le pays est allé en 8eme
• 2 : le pays est allé en quart
• 3 : le pays est allé en demi
• 4 : le pays est allé en finale
• 5 : le pays a gagné la coupe du monde

J’applique plusieurs modèles de Machine Learning


pour voir le plus performant. J’essaye en cascade
mais j’ai seulement 50% de précision.

De plus si j’évalue le modèle je me rends compte


qu’il se débrouille bien pour déterminer qui ne sort
pas des poules mais pour le reste les resultats sont
catastrophique. Il détermine aucun finaliste et
aucun vainqueur.

Les résultats sont insastisfesants je réduits les


catégories de sorties pour me limiter à déterminer
si le pays passe la phase de poule donc deux
sorties :

• 0 : si ne passe pas les poules


• 1 : si passe les poules

Grâce à cette méthode j’arrive à trouver un modèle qui monte à 60% de précision mais ne permet pas
de déterminer le vainqueur de la coupe du monde.

2 Deep Learning
Le Machine Learning n’a pas permis de déterminer le vainqueur donc je mets en place un modèle de
Machine Learning. Mais cette fois je l’alimente avec une base de données de 16 000 lignes qui est un
historique de tous les matchs officiels des équipes nationales sur lequel j’ai ajouté le classement Fifa,
la variable host si le pays héberge le match, la variable tournoi pour mettre en avant les matchs de
coupe du monde et une variable phase final car en phase finale la sortie ne peut que la victoire pour
une des deux équipes, il n’est pas possible d’avoir de match nul.

J’utilise un Artificial Neural Networks (ANN) pour déterminer l’issu d’un match entre l’équipe 1 et
l’équipe2. En sortie j’ai trois catégories 0,1,2.

8
• 0 : victoire pour l’équipe2
• 1 : match nul
• 2 : victoire pour l’équipe1

J’entraîne mon model est j’obtiens une performance de 56%. J’applique mon modèle sur les matchs
de poule prévu pour la coupe du monde 2022. Ce qui me donne pour chaque match un pourcentage
de victoire pour l’équipe1, l’équipe2 et match nul.

La sortie qui a le pourcentage le plus élevé sera pris comme prédiction du résultat.

J’automatise le scripte python pour prédire tous les matchs jusqu’à la finale.

Du fait d’une performance de seulement 56% de mon modèle quand je relance mon modèle je
n’obtiens pas toujours le même vainqueur même si trois équipes sortent du lot : Brésil, Argentine et
Belgique.

Du fait qu’il y a une part d’aléatoire, je mets en place un script qui permet de prédire l’issus d’un match
dans le cas d’une erreur de prédiction.

VII. PowerBI
J’affiche le résultat du Machine Learning dans PowerBI ce qui me permet d’un simple coup d’œil de
voir la prédiction des matchs et de connaitre les pays qui doivent sortir de la poule.

VIII. Industrialisation d’un algorithme


Le principe d’internalisation, c’est de transformer l’algorithme de machine learning en un service facile
d’utilisation pour un utilisateur lambda.

Comme dit j’ai développé un code python en Deep Learning qui permet de prédire le vainqueur entre
deux matchs. Ce code a été industrialisé sous le format d’application web par Youssef EL MOUTE grâce

9
au framework Django et nous l’avons Dockerisé. Pour qu’il soit accessible depuis un ordinateur
externe, nous avons changer un paramètre qui se trouve dans le script settings (settings.py) :
ALLOWED_HOSTS = ["*"] # * = tout le monde

La dockerisation de l’application qui permettrait à un technicien système réseau de la déployer et la


mettre en production.

Une fois l’image lancé sur notre serveur et une redirection de port nous pouvons avoir accès à
l’interface graphique via l’IP du serveur et le port 8000

IX. Conclusion
Le modèle de Machine Learning n’est pas adapté pour ce type de prédiction, Je retiens que le modèle
de Deep Learning permet de faire une prédiction mais la précision du modèle est limitée entre 50% et
60%. C’est pour cela qu’il faut ajouter de la donnée à notre modèle.

Les axes d’améliorations qui permettront d’améliorer le modèle c’est de récupérer les performances
des meilleurs buteurs et d’analyser plus en profondeur chaque équipe avec un indicateur de
performance de chaque joueur.

10

Vous aimerez peut-être aussi