Si vous avez déjà lu la version courte, passez directement au paragraphe : Premiers pas vers l'IA : les questions clés
Pour lire la version courte, cliquer ici
Pourquoi travailler sur l’emailing ?
Quand on observe un peu son entourage, il convient de penser que l’internaute moyen privilégie les réseaux sociaux et autres messageries en ligne à sa boite mail. Bien que le marketing s’adapte en conséquence, l’email n’en est pas pour autant délaissé, bien au contraire : l’internaute moyen possède plus de 2 boîtes mail, est abonné à plus de 6 newsletters et reçoit en conséquent de nombreux emails tous les jours. Des marketeurs nostalgiques qui s’accrochent à ce canal ancestral ? Pas vraiment : 76 % des abonnés à une newsletter affirment avoir déjà acheté un produit ou un service en ligne en cliquant sur le lien présent dans un mail, et 75 % se rendent en boutique pour acheter des produits ou services promus dans une newsletter. Il s’agit donc bien d’une réelle force de vente qui n’est pas amenée à mourir, car elle convient à tous : c’est même le canal préféré des utilisateurs pour communiquer avec les marques.
Pour en savoir plus sur le marché de l’emailing, voir l’étude EMA – Email Marketing Attitude, menée pour la onzième année en France :
https://comarketing-news.fr/lemail-en-2017-les-chiffres-cles-a-connaitre/
Classifier les emails promotionnels plus finement que Gmail
Ceci étant dit, améliorer l’expérience emailing est une problématique très actuelle.
Une boite mail a très vite tendance à devenir illisible, fouillie, car submergée par une quantité astronomique d’emails divers et variés. Les clients actuels (Gmail, Outlook, Yahoo, …) restent des interfaces relativement simples qui n’offrent rarement plus qu’un outil de recherche pour s’y retrouver dans cet océan de newsletter.
A la manière dont Gmail classifie les emails en grandes catégories (Principale, Réseaux sociaux, Promotions, Notifications), on se propose au sein de cet article d’aller encore plus loin et de catégoriser les emails promotionnels en fonction de leur catégorie de produit ou de service.
Par exemple, un email promotionnel de Samsung présentant son dernier smartphone serait classifié en « Phones », et un email d’Audi en « Vehicles ». Ainsi, l’utilisateur pourrait rechercher les promotions qui l’intéressent directement par secteur d’activité.
Si le problème semble simple lorsque l’on connaît le domaine d’activité d’une marque donnée, il l’est beaucoup moins si la marque n’est pas connue ou si elle propose des produits de différentes catégories, comme le fait la grande distribution de type Amazon ou Cdiscount.
Alors comment faire pour que l’email soit classé automatiquement dans la bonne catégorie ? Je me suis penché sur la question dans le cadre de mon stage chez Keley Data.
Vous avez dit machine learning ?
La classification est un problème classique que nous résolvons tous les jours. Imaginons que nous voulions classifier les jours du calendrier sur une année donnée en deux catégories : « week-end » et « semaine ». Il suffirait d’une condition simple, vérifiant que le jour est un samedi, un dimanche, ou un autre jour de la semaine. Il existe dans ce cas une loi connue permettant de classifier aisément ces jours.
Pour les emails promotionnels, il n’existe malheureusement pas de règle fondamentale connue permettant de classifier un email dans la catégorie « Phones ». Intuitivement, on pourrait penser que l’utilisation du mot « Téléphone » conduit à la catégorie « Phones », mais la réalité est plus complexe : le mot téléphone peut être utilisé dans n’importe quel email pour donner un contact téléphonique par exemple. Un programme simple ne permet donc pas de déterminer le secteur de l’email. Un humain en revanche, en lisant rapidement l’email, n’a aucun mal à le faire. Pourquoi ? Car il repère des schémas de mots, d’images, de style, … qui font appel à son expérience sensible et qui entraînent une conclusion : « ça parle de téléphones ».
En l’absence de règles formalisables, nous devons donc recourir au Machine Learning (apprentissage automatique en français). Cela consiste à créer une intelligence artificielle qui comme un enfant, apprend petit à petit à quoi ressemble un email qui « parle de téléphones » grâce à son « expérience sensible » qui est précisément choisie lors de la conception.
En termes de vocabulaire, on appelle cette IA un « classifieur » et son expérience sensible la « base d’apprentissage ». Il existe de nombreuses technologies permettant de concevoir des classifieurs : réseaux de neurones et deep learning, modèles à bases d’arbres (random forests et xgboost), régressions logistiques, Naive Bayes… Comment choisir parmi toutes ces technologies ? Quelles sont les questions-clés à se poser pour résoudre ce problème ?
Premiers pas vers l’IA : les questions clés
Le cadre du projet étant fixé, je me suis lancé. La première étape en Data Science est de se poser les bonnes questions conceptuelles, d’un point de vue qualitatif puis technique.
a. Qu’est-ce que l’IA peut être capable de lire dans l’email ? En termes plus techniques : quelles « features » (caractéristiques : variables / informations utiles) extraire des documents pour alimenter l’IA ?
b. Quels documents utiliser pour l’apprentissage ? Soit : quelle base de données d’apprentissage utiliser ?
c. Quelle technologie de machine learning utiliser ? Soit : quel type d’algorithme utiliser ? En quel langage ?
d. Comment mesurer l’efficacité de l’IA ? Soit : quelle procédure de test implémenter ? Et quel indicateur de performance choisir ?
Les éléments de réponses apportés
a. Choix des données à extraire de l’email
Lorsqu’un humain réalise l’exercice, il analyse tous les éléments perceptibles qui constituent l’email : les images, le texte, les couleurs, la mise en page, … Dans le cadre de ce projet, il convenait de commencer simple. J’ai donc dans un premier temps uniquement considéré le texte, gardant le reste des éléments pour les itérations futures. Les features choisies sont donc l’ensemble des mots de l’email, obtenus après un « parsing » de son code HTML (nettoyage des balises et récupération des chaînes de caractères). On appelle un mot issu du document « token » (chaine de caractères).
Un problème est apparu très vite : parmi tous les mots de l’email, de nombreux ne sont pas du tout informatifs, comme de classiques « acheter », « se désinscrire » ou « promotions ». Ces mots étant majoritaires devant les mots vraiment déterminants, il convient de les discriminer. La méthode retenue est une pondération des mots, à l’aide d’un score devant être le reflet de son importance. L’idée principale derrière ce score est qu’un mot est important s’il est fréquent dans l’email mais peu fréquent dans le corpus en général. Ainsi, le mot « désinscrire », très fréquent dans le corpus d’emails et n’apparaissant en général qu’une fois par email, aura un score bien plus faible que le mot « mascara », présent uniquement dans quelques emails de beauté et en abondance. Cette méthode de pondération fait partie d’une famille appelée TF-IDF (de l’anglais term frequency-inverse document frequency), très utilisée pour la fouille de textes.
Pour plus d’informations sur le TF-IDF : https://fr.wikipedia.org/wiki/TF-IDF
A l’issu de ce parsing et de cette pondération, on obtient une liste de couple (mot,score) pour chaque document. C’est ce qui sera fourni en entrée à l’IA.
b. Choix de la base d’apprentissage
Nous avons besoin d’entraîner le classifieur à l’aide d’une base d’apprentissage, constituée de documents dont on connaît le secteur, pour qu’il puisse lui-même classifier de nouveaux e-mails dont le secteur est inconnu.
J’ai donc souscrit à de nombreuses newsletters en ligne pour récolter le plus de messages possibles, provenant du plus de sources différentes possibles. Mais dans la pratique, ce processus est très long, car il s’agit de trouver les bonnes sources, de s’inscrire et de valider l’inscription pour des centaines d’annonceurs différents. Et même avec plus de 200 annonceurs, je ne recevais que quelques centaines d’emails par semaine, et très mal répartis selon les secteurs. A ma grande surprise, certains gros annonceurs n’ont même jamais envoyé un seul email. Peut-être qu’il leur fallait une preuve d’activité quelconque, que je ne leur fournissais évidemment pas.
La base d’apprentissage est donc constituée d’emails promotionnels auxquels j’ai associé à la main une catégorie de produit. Cette base d’apprentissage est cependant actuellement de petite taille (quelques milliers d’emails), et mal répartie du fait d’un trop grand nombre d’emails de mode et de beauté.
Une amélioration possible est d’étendre le corpus d’apprentissage à d’autres documents, comme des pages web ou des articles Wikipédia. Par exemple, une page web de Samsung constitue certainement un bon document d’apprentissage pour la catégorie « Phones », au même titre qu’un de leurs emails. L’avantage de charger ces documents depuis le web est qu’on obtient rapidement une base de données très grande, sans avoir à dépendre d’annonceurs. C’est en ce moment une piste d’amélioration que je creuse.
c. Choix de la technologie de machine learning
Le machine learning étant une discipline très à la mode depuis quelques années, de nombreux chercheurs se sont penchés sur la question de la classification. Il existe ainsi de nombreuses technologies différentes, chacune portant son lot de spécificités et n’étant donc pas adaptée à tous les problèmes. Il convenait donc de benchmarker toutes ces technologies pour choisir la plus adaptée à mon problème mais aussi à mes compétences.
Pour le langage de programmation, Python est roi dans le domaine du machine learning. Et ça tombe bien, car c’est un langage haut niveau facile à prendre en main. Une fois la technologie choisie, il est simple de trouver en ligne des algorithmes et bibliothèques opensource en Python, comme scikit-learn, ou le désormais célèbre Tensorflow de Google.
Pour plus d’informations sur ces bibliothèques Python :
Pour la technologie, c’est une classification Naive Bayésienne que j’ai retenue. C’est une technologie simple et très efficace lorsque l’on traite des données texte.
Le principe se fonde sur le théorême de Bayes, un théorême fondamental de la théorie des probabilités. Il est également appelé « théorème de probabilité des causes » car il permet de calculer la probabilité d’un événement lorsque l’on connait la combinaison de variables, grâce aux probabilités d’obtenir ces variables (les « causes »).
Pour les matheux, l’énoncé du théorême :
https://fr.wikipedia.org/wiki/Th%C3%A9or%C3%A8me_de_Bayes
Pour plus d’informations sur le Naive-Bayes : https://fr.wikipedia.org/wiki/Classification_na%C3%AFve_bay%C3%A9sienne
Rapidement, le principe est de calculer le nombre d’occurrences de chaque variable (token) au sein de chaque document, et au sein de chaque document d’une catégorie précise. En divisant par le nombre total d’occurrences, on obtient une probabilité simple. On fait ensuite une hypothèse simplifiante (dite « naïve ») : chaque token est indépendant des autres. On peut alors calculer pour chaque document, grâce au théorême de Bayes, les probabilités :
P(Catégorie Phones | (mot 1,mot 2,…,mot n))
P(Catégorie Clothes | (mot 1,mot 2,…,mot n) )
P(Catégorie Beauty | (mot 1,mot 2,…,mot n))
…
| = sachant que
On choisit finalement la catégorie ayant la probabilité la plus forte.
L’hypothèse d’indépendance des tokens est forte car a priori, les mots sont liés par un champ lexical commun et ne sont donc pas indépendants. Cependant, cela ne pose pas de problème ici car les probabilités ci-dessus sont apparus assez discriminantes. En pratique, la classification bayésienne est un algorithme simple mais déjà très performant.
d. Choix de la procédure de test
Pour le test de performance, l’idée est de calculer le taux d’erreur sur un ensemble d’emails dont on connait les catégories : l’ensemble de validation. Cependant, pour que le test ne soit pas biaisé par le choix de l’ensemble, il convient d’utiliser une méthode plus complexe. Le choix s’est porté sur une méthode dite de « validation croisée » (k-fold cross validation en anglais) : on échantillonne un ensemble de test en un nombre choisi d’échantillons, puis on choisit un des échantillons comme ensemble de validation et les autres échantillons comme ensemble d’apprentissage. On mesure l’erreur sur cet échantillon. Puis on réitère en prenant chaque échantillon une fois comme ensemble de validation. L’erreur finale est la moyenne (quadratique, pour donner davantage de poids aux erreurs extrêmes) des erreurs mesurées à chaque itération.
Cette méthode est très utilisée en machine learning.
Pour plus d’informations : https://fr.wikipedia.org/wiki/Validation_crois%C3%A9e
Des résultats contrastés
Après implémentation de la procédure détaillée ci-dessus, les résultats ne se sont malheureusement pas révélés à la hauteur de mes espérances. Le taux d’erreur est très élevé, et la majorité des emails sont catégorisés comme « Clothes » ou « Beauty products », les catégories les plus représentées.
Bien que le raisonnement semble correct, les données ne sont pas d’assez bonne qualité. Des problèmes sont apparus :
• La base de données est trop petite et trop mal répartie : certaines catégories sont surreprésentées et d’autres sous-représentées
• Certains e-mails utilisent beaucoup d’images et trop peu de texte
Les conséquences sont de mauvais tokens pour beaucoup de documents (les seuls mots pouvant être récupérés étant ceux des mentions légales en footer de l’email, ou des mots trop génériques relatifs à l’emailing en général…) et une absence d’exemples pour certaines catégories, qui ne peuvent donc évidemment jamais être prédites.
Et maintenant ?
Le programme fonctionne, mais cette première version de catégorisation d’emails promotionnels a encore des progrès à faire.
Je travaille actuellement à son amélioration, qui s’articule autour de deux points principaux :
• Dans un premier temps : amélioration de la base d’apprentissage. Il est nécessaire de l’étoffer avec de nouveaux documents, comme des pages web ou des articles. Avec une plus grosse base de données sur laquelle on a plus de contrôle, les problèmes de mauvaise répartition et de sur ou sous-représentation de certaines catégories disparaissent.
• Dans un second temps : prise en compte d’autres features. Le texte seul est trop limité dans de nombreux e-mails, empêchant dès le début du processus une bonne lecture du document. L’idée serait de prendre en compte les images, le texte des images, la mise en page, ou toute autre caractéristique décrivant un e-mail. Ceci ouvre la porte à de nouvelles disciplines : analyse d’image, analyse du rendu de l’email, parsing plus complexe du code html, etc…
En conclusion, cette première itération est révélatrice de l’application pratique du machine learning : l’IA ne devient vraiment intelligente que si les données qu’on lui fournit sont de quantité et de qualité suffisante. Cependant cette première expérience m’a beaucoup appris, et ne demande qu’à être approfondie grâce aux pistes d’améliorations intéressantes qui ont été dégagées.