Ce projet a pour objectif de développer un système intelligent de détection de spams à partir d'emails. Conçu pour BMSecurity, il vise à renforcer la sécurité des communications en classifiant automatiquement les emails comme "spam" (malveillant) ou "ham" (légitime). Le système combine des techniques avancées de Traitement du Langage Naturel (NLP) et d'apprentissage supervisé, et est destiné à être une base évolutive pour l'intégration aux plateformes de messagerie de nos clients.
flowchart TB
%% ========================
%% Pipeline de Classification Spam/Ham
%% ========================
%% Analyse Exploratoire des Données (EDA)
subgraph EDA[" Analyse Exploratoire des Données"]
EDA1(["Compréhension structure des données"])
EDA2(["Gestion valeurs manquantes et doublons"])
EDA3(["Analyse distributions et corrélations"])
EDA4(["Nuages de mots pour Spam et Ham"])
end
%% Prétraitement du texte
subgraph PREPROCESS[" Prétraitement du Texte"]
PRE1(["Conversion en minuscules"])
PRE2(["Suppression doublons et valeurs vides"])
PRE3(["Tokenisation"])
PRE4(["Suppression stopwords"])
PRE5(["Suppression ponctuation / caractères spéciaux"])
PRE6(["Stemming"])
end
%% Extraction des caractéristiques
subgraph FEATURES[" Extraction des Caractéristiques"]
F1(["Vectorisation : TF-IDF ou CountVectorizer"])
end
%% Modélisation et évaluation
subgraph MODEL[" Entraînement & Évaluation"]
M1(["Decision Tree Classifier"])
M2(["Naïve Bayes Classifier"])
M3(["Support Vector Machine (SVM)"])
M4(["Évaluation : Matrice de confusion, Précision, Rappel, F1-score"])
M5(["Validation croisée"])
end
%% Optimisation des hyperparamètres
subgraph TUNING[" Optimisation Hyperparamètres"]
T1(["GridSearchCV ou RandomizedSearchCV"])
end
%% Sélection et sauvegarde du meilleur modèle
subgraph SAVE[" Sélection & Sauvegarde du Meilleur Modèle"]
S1(["Comparaison performances"])
S2(["Persistance du modèle optimal"])
end
%% Interface utilisateur
subgraph UI[" Interface Utilisateur (Streamlit)"]
UI1(["Visualisation résultats EDA"])
UI2(["Tester modèle en temps réel"])
UI3(["Afficher prédiction Spam/Ham et probabilité"])
end
%% ========================
%% Flux principal
%% ========================
EDA1 --> EDA2 --> EDA3 --> EDA4 --> PRE1 --> PRE2 --> PRE3 --> PRE4 --> PRE5 --> PRE6
PRE6 --> F1 --> M1
F1 --> M2
F1 --> M3
M1 --> M4
M2 --> M4
M3 --> M4
M4 --> M5 --> T1 --> S1 --> S2 --> UI2
EDA4 --> UI1
S2 --> UI2 --> UI3
- Analyse Exploratoire des Données (EDA) : Compréhension de la structure des données, gestion des valeurs manquantes et doublons, analyse des distributions et corrélations, création de nuages de mots (Word Clouds) pour Spams et Hams.
- Prétraitement du Texte Robuste :
- Conversion en minuscules.
- Suppression des doublons et gestion des valeurs manquantes/vides.
- Tokenisation du texte.
- Suppression des stopwords (mots vides).
- Suppression de la ponctuation et des caractères spéciaux.
- Application du stemming pour réduire les mots à leur racine.
- Extraction des Caractéristiques (Vectorisation) : Conversion du texte prétraité en vecteurs numériques (TF-IDF ou CountVectorizer).
- Entraînement et Évaluation de Modèles de Classification :
- Implémentation et test de plusieurs algorithmes : Decision Tree Classifier, Naïve Bayes Classifier, Support Vector Machine (SVM).
- Évaluation des performances via des métriques clés : Matrice de confusion, Précision, Rappel, F1-score.
- Validation croisée pour évaluer la robustesse des modèles.
- Optimisation des Hyperparamètres : Utilisation de
GridSearchCVouRandomizedSearchCVpour affiner les performances des modèles. - Sélection et Sauvegarde du Meilleur Modèle : Comparaison des performances et persistance du modèle optimal.
- Interface Utilisateur Interactive (Streamlit) : Une application web simple permettant de :
- Visualiser les résultats clés de l'EDA.
- Tester le modèle en temps réel en soumettant un email.
- Afficher la prédiction ("Spam" ou "Ham") et potentiellement la probabilité associée.
- Python (3.8+)
- Pandas : Manipulation et analyse de données.
- NumPy : Calcul numérique.
- NLTK : Traitement du Langage Naturel (tokenisation, stopwords, stemming).
- Scikit-learn : Machine Learning (modèles de classification, vectorisation, évaluation).
- Matplotlib : Visualisation de données.
- Seaborn : Visualisation statistique de données.
- WordCloud : Génération de nuages de mots.
- Streamlit : Création d'interfaces utilisateur web interactives.
- Jira : (Outil de gestion de projet)
- Git / GitHub : (Contrôle de version)
.
├── data/
│ └── DataSet_Emails.csv
├── note-book.ipynb
├── preprocessing.py # Module Python pour les fonctions de prétraitement réutilisables
├── models/
│ ├── best_model.pkl
│ └── tfidf_vectorizer.pkl
├── app.py
├── requirements.txt
└── README.mdSuivez ces étapes pour configurer et exécuter le projet localement :
-
Cloner le dépôt :
git clone <URL_DU_VOTRE_DEPOT> cd nom_du_dossier_du_projet
-
Créer un environnement virtuel (recommandé) :
python -m venv venv # Sur Windows .\venv\Scripts\activate # Sur macOS/Linux source venv/bin/activate
-
Installer les dépendances :
pip install -r requirements.txt
(Assurez-vous que
requirements.txtcontient toutes les bibliothèques listées dans la section Technologies Utilisées). -
Télécharger les données NLTK nécessaires : Lancez un interpréteur Python ou une cellule de notebook et exécutez :
import nltk nltk.download('stopwords') nltk.download('punkt') nltk.download('wordnet') # Si vous utilisez la lemmatisation
-
Exécuter les notebooks Jupyter : Pour l'analyse des données, le prétraitement et l'entraînement du modèle, ouvrez les notebooks dans l'ordre :
jupyter notebook # ou jupyter labNaviguez vers
notebooks/01_eda_preprocessing.ipynbetnotebooks/02_model_training_evaluation.ipynbet exécutez toutes les cellules. -
Lancer l'application Streamlit : Après avoir entraîné et sauvegardé votre modèle, vous pouvez lancer l'interface interactive :
streamlit run app.py
L'application s'ouvrira automatiquement dans votre navigateur par défaut.
Ce projet est géré en suivant une approche agile. Les tâches sont planifiées et suivies dans Jira sous forme d'Epics et de tickets, organisées sur des tableaux Kanban. Des rituels de sprint (Daily Scrums, Rétrospectives, Revues de Sprint) sont mis en place pour assurer une progression continue et une amélioration itérative.
- Commits : 30+
- Issues résolues : 5+
- Tests : 95% de couverture