Lorsque le Machine Learning permet d’identifier les sujets dit « tendance » de l’actualité - 2nde partie

Le premier billet de notre série était destiné à introduire le sujet des « Trending Topics », une réflexion menée en partenariat avec News Republic.

Nous y avons ainsi présenté pour ce cas d’usage concret, les demandes et attentes quant à une solution appropriée à cette problématique, l’approche que l’on pourrait mettre en œuvre sans Machine Learning avec les limites que l’on peut percevoir, les axes d’une évolution avec l’introduction du #MachineLearning.

Nous vous proposons à présent de poursuivre dans cette dynamique et d’entrer dans le vif du sujet. Nous verrons donc dans ce deuxième billet comment la solution Azure Machine Learning (Azure ML) nous permet de construire 2 approches :  sans Machine Learning vs. avec Machine Learning.

Nous présenterons ainsi les différentes expérimentations Azure ML construites pour la circonstance et montrerons comment ces 2 approches diffèrent non seulement dans leur manière de traiter la donnée mais également dans les résultats obtenus.

Toutes les réalisations seront construites sur Azure ML, solution qui comme vous le savez est mise à l’honneur au sein de ce blog.

image

Avant de faire un focus sur les expérimentations proprement dites dans l’environnement de développement visuel et collaboratif Azure ML Studio, nous souhaitons rappeler ici brièvement comment nos expérimentations Azure ML nous permettent, à partir des données brutes fournies par News Republic, de construire des services Web prêts à l’emploi.

Du point de vue du scientifique des données (Data Scientist), le schéma suivant retrace la chaine de traitement complète des données au sein d’une expérimentation Azure ML type :

image

Du côté de l’environnement News Republic, l’appel d’un service Web permet de lancer l’expérimentation Azure ML construite par le Data Scientist :

image

Dans ce qui suit, nous vous proposons de réaliser un zoom sur les principales expérimentations réalisées en faisant un découpage entre le prétraitement des données et la partie réservée au lancement de l’algorithme. Nous pourrons ainsi y voir que les retraitements prennent généralement plus de place ; ce qui est toujours le cas. En effet, ce qui est au final le plus complexe dans l’élaboration d’une étude Machine Learning, ce n’est pas tant le choix de l’algorithme à appliquer – L’antisèche Algorithmes de Microsoft Azure ML devrait vous aider dans cette tâche si besoin - mais plutôt le prétraitement des données qu’il est nécessaire de réaliser en amont.

Le clustering sur les tags

Méthode adoptée

Voici un aperçu de l’expérimentation dédiée au Clustering sur les tags réalisée dans Azure ML :

image

Comme abordé dans le premier billet, le but de notre clustering est de regrouper les tags en fonction des thèmes ou sujets auxquels ils se rattachent.

Au travers des tests réalisés et des échanges avec News Republic, il nous a semblé plus judicieux de laisser en paramètre le nombre de clusters et de mettre une valeur par défaut égale à 8 par exemple. L’idée sous-jacente est que les sujets traités dans l’actualité se rapportent généralement à 8 thèmes principaux : la politique, le sport, l’informatique et le multimédia, l’économie, l’international, les célébrités, etc.

image

Retraitements

La partie cerclée en orange réalise les retraitements sur la table « NewsArticleTag ». Présentée dans le précédent billet, voici un bref rappel de la table :

image

Nous rappelons ici, et comme nous pouvons le voir sur l’expérimentation Azure ML, que les retraitements sur les données brutes constituent sans aucun doute une grande partie du travail du Data Scientist.

Voyons ici comment Azure ML nous permet de les réaliser de manière simple et intuitive au travers d’un ensemble de modules.

  • Le module Reader permet de lire les données de la table,
  • Le module Project Columns en extrait les variables qui nous intéressent,

image

image

  • Le module Execute R-Scriptnous permet d’écrire et d’exécuter un script R destiné à imposer les types de certaines variables parfois mal interprétés. (R est un langage de programmation sous licence libre orienté vers le calcul statistique, et constitue l’un des langages favoris pour faire de Machine Learning dans la mesure où il est à la fois rapide et simple d’utilisation. Il est utilisé ici notamment pour répondre à l’exigence de réversibilité attendue pour la solution proposée.)

image

  • Le module Enter Datanous permet d’introduire de la donnée. Connecté à la deuxième entrée du module Execute R-Script, il nous permet d’ajouter à notre data frame le paramètre qui donne le nombre de clusters.

image

Voici alors ce que l’on obtient après les retraitements réalisés sur la table « NewsArticleTag » :

image

La partie cerclée en rouge, se charge, quant à elle, de traitements similaires sur le fichier « tags_20150527.csv ».

  • Le module Reader permet de lire les données du fichier,
  • Le module Project Columns en extrait les variables qui nous intéressent,
  • Le module Metadata Editornous permet lui aussi d’imposer les types de certaines variables parfois mal interprétés.

image

Voici alors ce qu’on obtient après les retraitements réalisés sur la table « NewsArticleTag » :

image

Lancement de l’algorithme

C’est au niveau de la partie violette que le reste du travail est réalisé. Le module Execute R Script permet en effet de faire tourner un script R dans Azure ML. C’est ici qu’est construite la matrice de cooccurrence des tags et qu’on applique l’algorithme K-Moyennes ou K-Means pour le partitionnement (clusters).

Au vu de la table « NewsArticleTag » et du fichier « tags_20150527.csv » (présentés en première partie), l’idée est d’utiliser ici la cooccurrence des tags au sein des articles pour réaliser des liens entre eux. Considérons 3 tags : « Microsoft » « Windows 10 » et « jardinage ».

On peut supposer que les tags « Microsoft » et « Windows 10 », parce qu’ils sont rattachés à un thème commun, sont plus susceptibles de se retrouver ensemble dans des articles de presse que « Windows 10 » et « jardinage ».

Ainsi, plus le nombre d’articles au sein desquels les tags se retrouvent ensemble est grand, plus ils sont susceptibles d’être liés par leur sens. Avant de faire tourner l’algorithme de clustering, nous avons donc construit une matrice de cooccurrence des tags.

La matrice est de format nb_tag*nb_tag. En lignes se trouvent les vecteurs associés aux tags, les variables sont les identifiants des tags.

La matrice donne ainsi pour chaque tag, le nombre de fois où il apparait avec chacun des tags. Il est ensuite possible de faire tourner l’algorithme des K-Moyennes.

Graphiquement, on peut imager les nb_tags tags comme des points dans nb_tags dimensions.

Comme le graphe est basé sur la cooccurrence, ce n’est pas la distance euclidienne entre les points qui est révélatrice de leur dissimilarité mais le cosinus de l’angle formé par les vecteurs. Nous n’utilisons donc pas la distance euclidienne mais cosinus comme mesure de leur dissimilarité.

image

Le nombre maximum d’itération est égale à 10 et l’algorithme des K-Moyennes appliqué est celui de Lloyd.

image

Lancement du service Web

L’entrée et la sortie du service Web apparaissent en bleu dans l’expérimentation.

image

Résultat obtenu

Voici le résultat obtenu lorsqu’on fixe le nombre k de clusters à 8.

image

Chaque ligne de ce data frame représente un tag. De gauche à droite, on y trouve l’identifiant du tag, le cluster auquel il appartient suite au clustering ainsi que son libellé. Les 8 colonnes suivantes renseigneront plus bas les coordonnées des 8 clusters dans le plan.

Voici ce qu’on obtient sur Azure ML en ajoutant à la suite de ce data frame un simple script R qui nous permet de faire un nuage de points.

image

Le calcul des Tops et Flops par cluster

Méthode adoptée

Afin d’illustrer les apports de la solution proposée vis-à-vis de l’approche initiale sans Machine Learning qui nous sert de référence, nous avons créé des évolutions simulées de 6 topics au cours d’un mois :

  • « Football »
  • « François Hollande »
  • « Julie Gayet »
  • « Germanwings »
  • « Meurtre en Moselle »
  • « Programme TV »

(Compte tenu des topics, cela nous ramène sur la période mars-avril dernier pour les données réelles afférentes.)

L’intérêt de cette simulation est qu’elle comprend des topics dont le nombre de vues diffère en termes de niveau, d’évolution au cours du temps et de saisonnalité.

image

On voit ainsi graphiquement que les tags « Football » suit une saisonnalité d’une semaine tandis que « Programme TV » présente une saisonnalité journalière. Le tag « Meurtre en Moselle » se veut typique des sujets qui font ponctuellement l’actualité : dont on entend parler une fois puis jamais plus. « François Hollande » représente les tags qui sont constamment présents dans la presse. « Julie Gayet » est présent car lié à « François Hollande » et à une certaine actualité du moment.

Nous avons également identifié en violet 5 points où ces tags suivent des évolutions intéressantes.

Sur le 1er point en partant de la gauche, les vues pour « François Hollande » et « Germanwings » sont identiques en niveau mais très différentes en croissance.

Au niveau du 2ème point, les vues pour « Football » et « Germanwings » sont identiques en niveau mais opposées en croissance. Seront-ils tous les 2 dans les tops ?

Au 3ème point, « Meurtre en Moselle » reste le plus bas en niveau mais présente une forte croissance. Dans ce cas, paraitra-t-il dans les tops ou flops ?

Au 4ème point, « Julie Gayet », qui a toujours eu jusque-là un très faible nombre de vues, suit une forte progression mais reste plus bas en niveau que François Hollande.

Au 5ème point, « Programme TV » est celui qui suit momentanément la plus forte hausse. Mais celle-ci résulte exclusivement de sa saisonnalité. Doit-t-il donc faire partie des tops ?

Nous verrons dans ce qui suit que les deux approches sans et avec Machine Learning (présentées dans le précédent billet) ne répondent pas identiquement à ces questions.

Une fois la simulation réalisée, place à l’expérimentation sur Azure ML. Voici un aperçu de celle dédiée au calcul des tops et flops sur les évolutions simulées.

image

Retraitements

La partie cerclée en orange est destinée au retraitement des données et notamment de texte. On retire du nom des tags les caractères spéciaux, les chiffres, etc.

image

Lancement de l’algorithme

C’est au niveau de la partie violette que se fait le calcul des tops et flops.

Nous avons également créé une expérimentation permettant de reconstruire les tops et flops en suivant l’approche sans Machine Learning. Voyons maintenant comment les deux solutions traitent les différentes évolutions.

Résultats obtenus

image

Approche sans Machine Learning

image

Approche avec Machine Learning

image

Les points 1 à 5 représentent les 5 points allant de gauche à droite sur le graphe.

Les valeurs de la variable « end_point » sont l’évolution du scoring sur une semaine (approche sans Machine Learning) et la valeur de la première différentielle en ces points (approche avec Machine Learning). Nous allons maintenant faire des zooms successifs sur les résultats obtenus aux 5 points du graphique.

image

Avec la solution sans Machine Learning, le tag « Programme TV » apparait dans les flops alors que la baisse est due à sa composante saisonnière. On a bien « Germanwings » et « Football » en tops dans les 2 solutions.

image

Avec la solution sans Machine Learning, le tag « Germanwings » n’apparait pas significativement dans les flops malgré sa forte baisse. Autre fait marquant : « François Hollande » apparait dans les flops alors que son niveau reste constant.

Pourquoi ? Comme le scoring en prend en compte son évolution de rang sur la dernière semaine. Comme les tags « Germanwings » et « Football » ont augmenté en niveau, le rang de « François Hollande » est en baisse. Avec la solution ML proposée, on a bien « Football » et « Germanwings » respectivement dans les tops et flops.

image

L’approche sans Machine Learning ne prend pas en compte le nouveau tag « Meurtre en Moselle » qui connait à ce point précis une forte hausse de son audience. Il apparait en première place du top avec la solution Machine Learning.

image

Les deux solutions mettent « Julie Gayet » en première position des flops. Ce qui est en accord avec l’évolution observée sur le graphe.

Cependant, l’approche sans Machine Learning ne prend pas en compte la hausse de « François Hollande ». C’est parce que son rang en niveau n’est pas modifié. De la même manière, on retrouve « Germanwings » dans les flops parce que son rang a baissé.

image

Avec l’approche sans Machine Learning, on trouve cette fois « Programme TV » dans les tops et « Julie Gayet » dans les flops : l’un du fait de sa saisonnalité et l’autre de la baisse de son rang par rapport à la semaine passée.

Comme énoncé précédemment, le but de cette simulation était uniquement de mettre en lumière les différences de résultats entre l’approche sans Machine Learning et celle utilisant du Machine Learning. Et nous venons de le voir, les différences sont notables.

Voici l’expérimentation réalisée sur les données réelles de News Republic.

image

Comme sont désormais présentés au travers des deux premiers billets l’approche avec Machine Learning, nos expérimentations Azure ML et les résultats obtenus, il nous paraitrait intéressant de considérer un autre aspect du travail du scientifique des données (Data Scientist) : celui de faire des choix ou arbitrages en fonction des besoins et des attentes exprimées.

Les deux prochains billets seront donc consacrés aux différents choix et arbitrages réalisés lors de la construction de nos expérimentations Azure ML qu’il s’agisse de choix d’algorithme ou de méthode de calcul. (Nous laisserons volontairement de côté la dimension prétraitement propre aux données considérées.)