Lorsque le Machine Learning permet d’identifier les sujets dit « tendance » de l’actualité – 1ère partie

Le précédent billet Pendant la période estivale, avec les carnets de vacances, n’oubliez pas Azure ML ;-) vous a (peut-être) permis de vous familiariser (si cela n’était pas déjà fait) avec Azure Machine Learning (Azure ML).

Les vacances sont aujourd’hui bel et bien finies et nous vous proposons à présent d’entrer dans le « vif du sujet » avec un cas d’usage concret : les sujets dit « tendance » ou « Trending Topics ».

J’en profite pour remercier très sincèrement Rebiha Rahba qui a conduit de bout en bout cette étude Azure ML ainsi que Julien Moreau-Mathis qui l’a accompagné pour partie dans ce travail.

image

A travers une série de billets que nous initions ici avec ce premier billet, nous souhaitons donc vous présenter et partager ensemble une étude récemment réalisée en partenariat avec News Republic. Comme vous le savez, News Republic est un agrégateur de médias qui propose à ses clients l’accès à de nombreux articles de presse, photos ou vidéos provenant de différentes sources à travers le monde.

Dans ce contexte, les « Trending Topics » s’inscrivent dans le thème de la recommandation d’articles et de sujets d’actualité. Ce premier billet de la série vise à vous présenter notre étude de cas. Nous y aborderons successivement les besoins, attentes et données de News Republic dans ce contexte.

Nous présenterons ensuite la solution envisagée sans usage de #MachineLearning, des suggestions d’amélioration que le Machine Learning permet et la solution élaborée à des fins d’évaluation comparatives.

Avant de rentrer plus avant dans ce sujet à proprement parler, arrêtons-nous un instant sur l’énoncé de quelques définitions susceptibles de faciliter la compréhension de ce qui va suivre.

Pour commencer, qu’entend-t-on par Tag ? Topic ?

De l’anglais « étiquette », le terme tag fait initialement office de mot-clé associé à un article donné. Il permet d’en décrire plus facilement l’information et de réaliser des regroupements entre les articles, l’idée étant de regrouper ceux qui comprennent les mêmes tags.

Le terme topic, lui, signifie le sujet ou thème de l’article. Si un article évoque plusieurs sujets, et c’est très souvent le cas dans la pratique, on associe plusieurs topics à un même article. Aussi, on peut de la même manière qu’avec les tags, regrouper les articles rattachés aux mêmes topics.

C’est de cette manière que nous emploierons par la suite ces 2 termes indifféremment et de façon interchangeables. En effet, bien qu’ils aient des sens différents comme défini ci-dessus, ils offrent en fait les même utilités et finalités ici : servir à faire un regroupement sémantique des articles.

News Republic en quelques mots

News Republic propose aujourd’hui une app permettant à ses utilisatrices et utilisateurs d’avoir accès à des articles de presse, des photos ou encore des vidéos issus de près de 1000 différentes sources de médias à travers le monde. Ainsi, chaque jour, près de 50 000 nouveaux articles sont ainsi mis à votre disposition.

image

Plus qu’un agrégateur, l’application vous propose également des services personnalisés. Vous pouvez ainsi choisir de mettre en place un système d’alerte pour être averti(e)s des nouveautés sur des sujets que vous affectionnez plus particulièrement. Cette dernière apprend de vos habitudes de navigation et vous propose également une interface utilisant les liens entre sujets et articles de presse pour en faciliter la navigation. Voilà à quoi cela pourrait ressembler sur votre appareil favori :-).

imageimageimage

Un rapide aperçus des besoins et autres demandes particulières

Dans le contexte de cette réflexion commune partagée ici, News Republic souhaite déterminer toutes les heures les articles et sujets présentant les plus fortes hausses et baisses d’audience par rapport aux autres. L’idée consiste donc à construire ici un tableau des tops et flops.

Ce besoin s’accompagne d’un ensemble de demandes particulières quant aux conditions de mise en œuvre d’une solution technique afférente :

  • La solution doit offrir une réversibilité de façon à pouvoir fonctionner aussi bien en local que dans le Cloud Azure pour le contexte qui anime ici.
  • En termes de stockage au niveau de l’environnement Azure : la sortie (output) doit être stockée dans le même compte de stockage Azure que l’entrée (input) sous forme de table ou bien de blob. Pour faire simple, une table est un tableau clé/valeur tandis qu’un blob, est un conteneur qui peut contenir plusieurs fichiers.

Les besoins et attentes ainsi rapidement établis, notre objectif qui va nous guider tout au long dans cette série de billets consiste à élaborer une étude Machine Learning permettant de déterminer toutes les heures le tableau des tops et flops sur les topics qui font l’actualité.

Les données utilisées en entrée

Cette réflexion s’appuie sur un compte de stockage Azure. Ce dernier contient en entrée plusieurs tables et blobs nous permettant de disposer :

  1. D’une décomposition des tags et de leur poids par article.
  2. Du libellé d’un tag en fonction de son identifiant.
  3. Du nombre de vues sur les tags en fonction du temps.

Ces tables et blobs partagés pour réaliser notre étude se décomposent respectivement comme suit.

Table « NewsArticleTag »

Cette table donne la décomposition par article. Pour chacun d’eux, elle donne les tags (ou plus précisément leur identifiant) et leur poids au sein de l’article. Le poids des tags a été calculé selon une méthode de calcul de poids propre à News Republic.

Parmi les méthodes de calcul de poids connues, on peut citer ici la méthode de pondération TF-IDF (Term Frequency-Inverse Document Frequency), très utilisée dans la fouille de textes (Text Mining).

image

Fichier « tags_20150527.csv »

Ce fichier permet d’associer l’identifiant d’un tag à son libellé.

image

Table « ArticlesViewedR2T1 »

Cette table donne le nombre de vues sur les tags en fonction du temps.

image

Les résultats produits en sortie

A l’instar des données, les résultats intermédiaires et finaux sont stockés directement dans le compte de stockage Azure précédent sous forme également de table ou blob.

Dans la pratique, nous optons ici pour le blob, les données ainsi stockées étant renouvelées toutes les heures et donc plus éphémères. Chacun peut trouver d’autres critères pour opter pour l’un ou l’autre des stockages.

Une approche sans Machine Learning

Cette section est destinée à présenter le type de solution que l’on serait susceptible d’envisager sans utilisation du Machine Learning.

Le principe exprimé ci-après se veut simple et facile à mettre en œuvre.

Dans une telle approche, le tableau de tops et flops peut être constitué au travers d’un scoring des tags et comparaison de leur rang actuel avec celui d’il y a 30 jours.

Cette approche présente certes l’avantage d’être pragmatique mais appelle néanmoins quelques commentaires qui peuvent se traduire le cas échéant en divers points d’amélioration :

  • Cette démarche présuppose que les tags suivent tous une saisonnalité de 30 jours or nous pouvons facilement nous accorder se le fait qu’il peut se passer beaucoup de choses en 30 jours. Les audiences peuvent très bien être similaires en niveau mais suivre des croissances différentes. Aussi, les audiences sur les tags n’ont pas la même saisonnalité. Par exemple, on peut légitimement penser qu’un tag comme « programme TV » est d’avantage sollicité tous les jours en fin de soirée alors que le tag « football » suit lui un pic d’audience le week-end (et/ou en fonction du calendrier des rencontres programmées) ; d’où des saisonnalités bien différentes. Pour pallier à cela, l’idée serait d’adopter une solution calculant dynamiquement la saisonnalité : à chaque tag sa saisonnalité.
  • Autre point lié à une saisonnalité mal définie, le tableau des tops et flops présente une redondance de tags tous les jours à la même heure, toutes les semaines, etc. On peut ici reprendre comme exemple le tag « programme TV » qui reviendrait en top tous les soirs aux mêmes heures ou encore le tag « football » tous les week-ends.
  • Le tableau final a dans ses tops et flops de nombreux tags issus du même thème ou couvrants la même information. Prenons comme exemple le crash d’avion de la compagnie aérienne Germanwings dans les Alpes intervenu en mars dernier. Au moment de cette actualité, nous pourrions avoir dans le tableau des tops « Germanwings », « crash d’avion », « crash dans les Alpes » etc.

L’introduction du Machine Learning

Compte tenu des points d’amélioration ainsi identifiés, et avec l’introduction du Machine Learning, la démarche adoptée au niveau de cas d’usage s’articule au travers des axes suivants.

Clustering sur les articles et tags par thème

Comme nous venons de le voir au niveau des points d’amélioration envisagés, le tableau des tops et flops obtenu présente de nombreux tags issus du même thème ou couvrant la même information. L’idée consiste ici à remédier à ce problème en regroupant au préalable sémantiquement les tags. Nous obtiendrons ainsi plusieurs groupes de tags suivant les sujets ou thèmes auxquels ils sont rattachés. Ces groupes une fois ainsi constitués, nous pourrons construire des tableaux de tops et flops par cluster. Le tableau final présentera pour chaque thème les topics les plus et moins populaires.

Décomposition des séries chronologiques et analyse de leur tendance

Le but ici est de se défaire de l’hypothèse de saisonnalité statique égale à 30 jours. En effet, nous ne souhaitons pas comparer entre les tags la hausse ou la baisse de part d’audience en 30 jours. Ce que nous voulons, c’est prendre en considération toutes les évolutions suivies par chacun des tags au cours des trente derniers jours et surtout pouvoir constater ces évolutions visuellement, avoir une trace de ce qui se passe réellement.

Autre point d’amélioration non négligeable évoqué précédemment, nous souhaitons nous défaire de ces tags qui réapparaissent tous les jours ou toutes les semaines dans les tops et flops. Nous souhaitons nous défaire en effet de la saisonnalité des parts d’audience sur les tags. Ce qui nous intéresse, ce n’est plus l’évolution en niveau mais l’évolution globalement suivie au cours du temps, la tendance générale défaite des mouvements saisonniers qui font que les tableaux des tops et flops obtenus se répètent.

Pour tout cela, nous allons appréhender chaque tag comme la suite chronologique de sa part d’audience. Nous allons ainsi étudier l’évolution au cours du temps de sa part d’audience. Nous allons décomposer le mouvement suivi en ses composantes tendancielle, saisonnière et irrégulière pour ensuite se défaire des 2 dernières et en extraire ainsi seulement la tendance.

Comparaison de leur différence première

Une fois la tendance déterminée, nous pouvons étudier sa croissance à un temps T donné. Nous proposons ainsi de calculer les différences premières et de les comparer. C’est de cette manière qu’on obtient notre classement par cluster.

En additionnant ces classements par clusters on obtient notre tableau final.

Au final

Cette seconde solution doit permet de répondre aux questions suivantes :

  • « Quelle a été l’évolution en tendance du tag « football » durant le dernier mois ? »
  • « Quelle en est la croissance actuelle ? »
  • « Et en comparaison aux autres tags ? »

En guise de conclusion pour cette introduction

Le cadre de notre cas d’usage concret mené en partenariat avec News Republic étant ainsi posé et partagé, avec les demandes et attentes, les axes de la solution envisagée en introduisant le Machine Learning Learning, nous vous proposons de profiter du prochain billet pour « rentrer dans la peau d’un scientifique des données (Data Scientist) » et ainsi rentrer dans le vif du sujet.

Nous y verrons comment Azure Machine Learning nous permet de construire ces 2 approches (sans et avec Machine Learning).

Nous présenterons les différentes expérimentations Azure ML construites pour la circonstance et illustrerons comment ces 2 approches diffèrent non seulement dans leur manière de traiter la donnée – s’il était nécessaire de revenir dessus - mais également dans les résultats obtenus.

Rendez-vous est donc pris pour le prochain épisode de la série de billet si la proposition vous agrée.  Stay tuned ;)