Il y a quelques semaines, j’ai démarré une formation de Data Scientist chez DataScientest. Dans le cadre de cette formation, j’ai réalisé un projet accompagné de Felix PEYRE et Alexis Teskrat. Ce projet, c’est plus d’une centaine d’heures de travail encadrées par notre responsable de promotion Thomas Boehler qui nous a permis de mettre au point un modèle de détection des spams dans les mails utilisant le NLP. Voici plus en détail notre travail :
• Quels sont les enjeux du projet ?
Le Risque Zéro n’existe pas
Le Chief Data Officer est un cadre supérieur responsable des données au sein de son entreprise. Il ne faut, toutefois, pas confondre son métier avec celui de Chief Digital Officer, souvent raccourci en CDO également.
De par sa nature assez récente, le poste de CDO est assez difficile à définir tant ses missions sont diverses et évolutives en fonction du secteur d’activité de son entreprise. Il remplit, en effet, un large champ de fonctions allant du management de données au contrôle qualité de la Data en passant par la gestion des équipes de Data Science. En somme, il est chargé de mettre en place la stratégie globale de l’organisation concernant la Data.
Selon l’ANSII (Agence française de sécurité des systèmes d’information) : le phishing vise à faire envoyer au destinataire d’un email apparemment légitime ses données bancaires ou ses identifiants de connexion à des services financiers, afin de lui voler de l’argent.
En plus du phishing, les spams peuvent également prendre la forme de publicité ou d’une escroquerie également connue sous le nom de “Nigerian Scam”. Il est admis que 94% des cybermenaces commencent par un e-mail (source Vade Secure), 67% des attaques de ransomware commencent par un e-mail de phishing ou de spam (Statistica), tout cela entraînant une perte de 1,77 milliard de dollars pour les entreprises en 2019.
Nous comprenons donc qu’il est nécessaire de créer des outils capables de détecter de telles fraudes. En machine learning, on appelle cela un problème de classification binaire, le but étant de dire si un email est malveillant ou non au vu de son contenu.
Malheureusement, les filtres anti-spam actuels ne sont pas efficaces à 100%
Les détecteurs de spam inclus dans les services de messagerie gratuits (Gmail, Outloook, AOL, GMX, etc.) ne sont pas efficaces à 100%. Pourquoi ? Parce qu’ils se concentrent uniquement sur l’analyse des en-têtes.
Comment le traitement du langage naturel (NLP) a révolutionné les détecteurs de spam
Cela fait une décennie que les experts conviennent que la Natural Language Processing (NLP) ou Traitement automatique du langage naturel (TALN) en français, dans l’apprentissage automatique est l’un des outils les plus puissants pour détecter les e-mails suspects.
Le NLP c’est comme apprendre la langue de votre propre esprit…
En bref, le NLP est un sous-ensemble de l’intelligence artificielle (IA), où elle est essentiellement responsable de la compréhension du langage humain par une machine ou un robot. Ainsi, au lieu d’analyser uniquement les caractéristiques numériques (par exemple le nombre de mots en majuscules ou le nombre d’url), nous avons décidé d’analyser le texte du corps, comme s’il s’agissait d’une variable à part entière.
• Quelles ont été les étapes clés du projet ?
Nous avons passé la majeure partie de notre temps à nettoyer et comprendre nos données, construire le dataframe, faire du feature engineering (créer de nouvelles variables facilitant l’apprentissage pour nos algorithmes).
Il a fallu réfléchir à une stratégie de modélisation pour résoudre ce problème. Nous sommes passés par des méthodes de NLP afin de faire comprendre à nos algorithmes le contenu des mails. Les méthodes de classifications utilisées ont été les suivantes : des Random forest et des SVM.
Enfin nous avons créé une application de détection des spams en ligne à l’aide du framework Streamlit.
• Quelles données ont été utilisées ?
Ham/Spam distribution
L’ensemble de données contient un ensemble d’environ 4000 e-mails datant de 2010, rédigés en anglais et divisés en deux dossiers spam et ham (e-mails sains). Les e-mails sont composés d’un corps et d’un en-tête. L’en-tête contient généralement le sujet, la date, l’expéditeur, etc.
Le ratio spam / ham est de 32%, comme on peut le voir sur le graphique ci-dessous :
En effet les hams représentent environ 68% de l’ensemble de nos emails contre environ 32% pour les spams. L’en-tête de chaque email contient beaucoup d’informations lorsqu’il est rempli (27 fonctionnalités), mais quand on regarde le nombre de valeurs manquantes dans les en-têtes de nos mails, voici ce que l’on obtient :
Nous nous apercevons que 19 variables du header ont plus de 90% de valeurs manquantes dans notre jeu de données. Ces variables du header n’ont donc pas été utilisées, nous nous sommes concentrés sur le corps du mail.
Nous avons construit un DataFrame contenant l’ensemble des emails avec pour features le texte du mail. Puis nous avons créé d’autres features, par exemple nous avons cherché à renseigner le nombre de caractères spéciaux, le nombre de mots en majuscules, le nombre de liens http (non sécurisés de fait) etc.
Il peut être intéressant de se faire une idée du contenu des mails en utilisant des wordclouds. Sur ces images, plus l’occurrence d’un mot est forte dans notre jeu de données plus la police de ce mot sera large dans le wordcloud :
• Quelles sont les étapes du processus de modélisation ?
Notre modèle permet de traiter simultanément des variables textuelles et numériques via la création d’une matrice creuse après la tokenisation du texte. Un test de classification Random Forest est ensuite effectué sur cette matrice creuse.
*La variable content n’est rien d’autre que le message du mail.
Tout d’abord, notre jeu de données est divisé en un ensemble d’entraînement et un ensemble de tests. La méthode du Bag of Words est un procédé couramment utilisé en NLP qui nous a permis de numériser notre variable de texte (« content »).
A la différence d’un tokenizer plus classique, Tf-IDF-Vectorizer permet de prendre en compte la fréquence d’apparition d’un mot dans un élément du dataset ainsi que la rareté de ce même mot au sein de l’ensemble du dataset. Ces Bags of words sont ensuite fusionnés avec les variables numériques créés lors de l’étape de feature engineering dans une seule et unique matrice creuse.
L’entraînement d’un algorithme de classification peut alors être effectué et ses performances peuvent être évaluées par matrice de confusion et calcul du F1-score. La comparaison de différents algorithmes de classification (SVM, LR,RF) nous a permis d’identifier le modèle Random Forest comme celui offrant les meilleures performances (Précision et F1-score > 97%).
• Où pouvons-nous retrouver l’application complète ?
Notre application de détection des spams en ligne est disponible en cliquant sur le lien suivant :
L’application offre la possibilité de tester des exemples de spams ou de hams pré-enregistrés.
L’application vous permet également de tester vos propres emails, il vous suffit alors de copier/coller le texte de votre email dans le champ prévu à cet effet, pour l’analyser.
Néanmoins comme nous avons utilisé un ensemble de mail rédigé en anglais, votre message devra aussi être écrit dans la langue de Shakespeare !
Vous y retrouvez aussi toute notre méthodologie plus en détail.
• Quelle suite à ce projet ? Quelles en seraient les améliorations possibles ?
Les datasets de mails sont assez difficiles à trouver, mais si l’occasion se présente, nous aimerions entraîner notre modèle avec un nombre beaucoup plus important de mails, si possible dans des langues différentes, récentes et provenant de boites mails variées. Car les méthodes de fraude évoluent en permanence et elles s’adaptent parfois à des cibles bien particulières. Il pourrait être intéressant d’avoir des mails dont le header n’est pas vide car toutes les informations qu’il contient nous permettrait de mieux comprendre l’intention d’un mail.