Académique Documents
Professionnel Documents
Culture Documents
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.
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.
• 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
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
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
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'@'%';
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.
Ensuite je parse le résultat. Pour récupérer seulement les informations dont j’ai besoin.
• 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.
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é.
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).
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.
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.
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.
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.
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
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.
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
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