Implémenter deux algorithmes de Machines Learning (un non-supervisé et un autre supervisé) pour la détection de profils « atypique » de Twitter. Réaliser des clusters et une classification des différents profils des utilisateurs.
Par « atypique » nous entendions des profils d'utilisateurs qui se distingues des autres. Cela peut se manifester par une publications importante de tweets, avoir un nombre d'amis/de folowers important, envoyer des tweets avec un contenu sensible, avoir un profil vérifié, ...
Pour mener à bien cette analyse nous avons eu recours à un dataset regroupant environ 4,6 millions de Tweets (27,6 Go). Celui-ci peut être téléchargé via le lien suivant : Cliquer ici
A noter qu'un tweet est décrit par les attributs suivants :
Ce projet a été mené par :
- Antoine-Valentin CHARPENTIER
- Esso-Manam MANGANMANA
- Florian BOURRIER
- Gnouyarou Marc-Arthur KADANGHA
script
: Dossier qui contient les algorithmes à la fois de classification/clustering ainsi que des utilitaires pour par exemple insérer les tweets dans la base de données MongoDB, ...data
: Dossier qui stocke les différents tweetsrequirement.txt
: récapitule les bibliothèques qui ont besoin d'être installé pour que le projet fonctionnedocker-compose.yml
permet de configurer une instance de MongoDB dans un container docker pour un utilisateur mongodb avec pour mot de passe mongo. Le scriptinit-mongo.js
quand à lui permet d'attribuer des droit de lecture et d'écriture sur la base de données configurée par ledocker-compose.yml
- Avoir Docker OU MongoDB d'installer (dans ce deuxième cas, il peut être nécessaire de changer l'URI de la base de données MongoDB dans les fichiers de script)
- D'avoir python 3 d'installé
- Cloner le projet:
git clone [email protected]:Antoine-ValentinCharpentier/Tweet-Analysis.git
- Se déplacer dans le répertoire:
cd Tweet-Analysis
- Initialiser l'environnement virtuel:
python -m venv .venv
.venv\Scripts\activate OU source .venv/bin/activate
pip install -r requirements.txt
- Allumer la base de données MongoDB. La commande suivante est à utiliser si vous utilisez Docker Compose.
docker compose up
- Déposer les tweets dans le dossier
data
présent à la racine du projet - Lancer le script présent dans le fichier
script/utils/importData.ipynb
pour pouvoir insérer les différents tweets dans la base de données. - Lancer le script présent dans le fichier
script/utils/createUsers.ipynb
pour pouvoir isoler les différents utilisateurs, calculer des attributs supplémentaires sur ceux-ci et les normaliser. - Lancer le script présent dans le fichier
script/utils/previewUsers.ipynb
pour pouvoir visualiser rapidement la distribution des différents attributs des utilisateurs. - Lancer le script
script/utils/acp.ipynb
pour effectuer une ACP et voir s'il est possible ou non de réduire le nombre de dimensions et donc accélérer les calculs ultérieurs. - Lancer le script présent dans le fichier
script/utils/clustering.ipynb
. Celui-ci exécutera un algorithme de clustering sur nos utilisateurs, qui n'est rien de moins que le K-means. Les labels générés sont sauvegardés dans une collection distincte. - Effectuer la labélisation des utilisateurs. Pour ce faire, nous vous proposons deux solutions :
- Réaliser la labélisation manuellement. Pour cela, nous mettons à votre disposition une interface graphique dans le script
script/utils/LabelingUI.ipynb
qui vous présentera un par un chaque utilisateur et vous demandera de cliquer soit sur un bouton vert pour dire qu'il est normal, soit sur un bouton rouge pour dire qu'il est atypique. Le programme ne vous affichera que les utilisateurs qui n'ont jamais été labélisés. À noter que la labélisation peut être effectuée en plusieurs étapes. Vous pouvez labéliser une partie des données un jour, puis une autre un autre jour. Par ailleurs, afin de simplifier la labélisation manuelle, nous avons ajouté une petite fonctionnalité sur cette interface qui met en évidence les valeurs des attributs qui nous paraissent atypiques. De plus, ce script se chargera de normaliser les différentes données. - Effectuer la labélisation de manière automatique à l'aide du script
script/utils/userLabeling.ipynb
. Cette deuxième méthode est certainement moins précise, mais elle permet de gagner beaucoup de temps. Cette méthode utilise des règles que nous avons fixées de manière rigide. Si l'un des attributs qui, selon nous, pourrait rendre un utilisateur atypique est dépassé, alors l'utilisateur est directement considéré comme atypique.
- Réaliser la labélisation manuellement. Pour cela, nous mettons à votre disposition une interface graphique dans le script
- Lancer le script présent dans le fichier
script/utils/classificationSvm.ipynb
. Celui-ci exécutera un algorithme de classification sur nos utilisateurs à l'aide des données précédemment labélisées. Cet algorithme n'est rien de moins que le SVM. Les labels générés sont sauvegardés dans une collection distincte. - Lancer le script présent dans le fichier
script/utils/CompareBoth.ipynb
afin de comparer les résultats des deux algorithmes de machine learning.
À chaque étape du traitement effectué, nous avons décidé de stocker les calculs dans une nouvelle collection MongoDB sans écraser la précédente. En effet, les calculs réalisés peuvent prendre du temps. Ainsi, en cas d'erreur lors de l'écriture d'un nouveau script, nous n'avons pas besoin de relancer l'intégralité des scripts précédents.