[:fr]Ce dossier présente le business model de l’entreprise Netflix, géant mondial du streaming en ligne. Il présente les différents atouts qui font de l’entreprise le large leader du secteur de la VOD, ainsi que les principales menaces qui pourraient mettre à mal sa position dominante dans les années à venir.
Catégorie : Formation
La guerre contre les guerres d’édition dans Wikipedia
Par Amine AKKI, Hicham EL HAREM, Saad EL MAHFOUDI et Anas IRHBOULA, élèves du Parcours Data Science de l’IMT Atlantique.
Wikipedia est non seulement l’un des sites Web les plus visités, mais aussi l’une des plus grandes plateformes collaboratives du Web 2.0. Des millions d’éditeurs participent librement à l’élaboration et l’amélioration du contenu. Cependant, comme beaucoup d’autres choses dans la vie, la collaboration n’aboutit pas toujours de façon normale, surtout dans des articles plus controversés qui sont sujets à ce qu’on appelle les “Edit wars”.
Pour un visiteur de Wikipedia, Il est évident que par rapport à des pages comme “Pumpkin” et “Rivière” qui sont paisiblement développées, ils en existent d’autres qui sont très controversées : “Homosexualité” ou “Première guerre mondiale” à titre d’exemple. Or par souci de neutralité ces pages nécessitent d’être suivies et gérées par les administrateurs.
Notre intérêt est d’optimiser la détection de ces pages controversées afin de réduire les temps d’interventions, en mettant en œuvre un processus d’analyse de données.
Pour ce faire, nous avons travaillé sur un dataset de wikipedia où sont stockées les traces de révisions (modifications) des pages.
Chaque trace correspond à la version d’une page à un instant donné et contient des informations sur l’éditeur (nom ou adresse ip), la page (identifiant, titre, longueur en bytes …) et la modification qui a été faite (i.e. un code caractérisant de façon unique le contenu de la page après la révision qu’on notera dorénavant sha1).
Deux types d’actions sont possibles pour éditer une page wikipedia : 1) Faire sa propre modification en ajoutant/modifiant des passages du document ; 2) Faire un revert, c’est-à-dire annuler une ou plusieurs modifications faites sur un article pour revenir à une version antérieure.
Préparation à la guerre
Avant de commencer à élaborer des algorithmes complexes pour identifier les pages en conflit d’édition, découvrir les données et les préparer pour le traitement était une étape indispensable du projet.
Après avoir pris connaissance de la structure des traces de révisions et identifié le sens de chaque variable, nous avons procédé à une étape de préparation et sélection de données nécessaires pour la réalisation des objectifs de notre projet. En effet, Wikipedia fournit une base de données assez complète au niveau d’édition de pages Wiki où on trouve toutes les métadonnées de chaque page, e.g : taille de la page après chaque édition, titre, auteur/ éditeur, identifiant de la page, … etc.
Comme les données sont collectées de façon automatique, elles peuvent présenter des valeurs aberrantes (par exemple : identifiant de la page = 0). Il s’avérait donc nécessaire de commencer par vérifier et nettoyer le jeu de données avant d’appliquer une procédure analytique, en commençant tout d’abord par la suppression des données incomplètes (par exemple : Valeurs N/A ou NULL) et ensuite la création de nouvelles variables/indicateurs permettant de détecter les conflits éditoriaux sur une page Wiki.
Armes et munitions
La guerre éditoriale sur les articles de Wikipédia reste un sujet pour le moins… controversé et très subjectif. Une page sujette à une guerre éditoriale est difficile à définir et à identifier. Les avis diffèrent et les méthodes de détection se complètent comme s’opposent les unes aux autres.
Un choix doit être fait : quels signes pourraient nous permettre de reconnaître la présence de la guerre sur une page ?
Nous avons choisi six caractéristiques, en nous basant sur ce qui nous paraissait révélateur d’un conflit éditorial, et bien sûr, ce qu’on pouvait obtenir à partir des métadonnées à notre disposition, tout en nous appuyant sur les études publiées sur cette problématique (ici ou là).
Deux principaux indicateurs de la guerre éditoriale étaient bien sûr le nombre d’éditions et d’éditeurs sur la page. Ces deux informations à la fois faciles d’accès et assez révélatrices étaient le point de départ de notre fouille des pages. Elles ont d’ailleurs été prises en compte par l’étude faite par l’université de technologie et d’économie de Budapest : Characterization and prediction of Wikipedia edit wars.
Comme mentionné avant, les reverts (annuler une ou plusieurs modifications faites sur un article pour revenir à une version antérieure) ont leur importance. Quand le contenu d’une page est remis sans cesse à un état antérieur, l’avancement de l’écriture de celle-ci est clairement freiné par son caractère controversé ou par le fait qu’elle soit ciblée par des vandales, ce qui nous fait une transition directe à l’indice suivant : le degré de polémique. Le degré de polémique (measure of controversy) est un indice créé de toutes pièces et fortement inspiré de la recherche académique mentionnée un peu plus haut. On procède au calcul du nombre d’éditions confirmées (éditions ayant survécu pendant au moins 24 heures aux reverts) des utilisateurs impliqués dans les reverts et on l’utilise comme poids éliminant ainsi les vandales qui ont tendance à ne pas avoir d’éditions constructives.
Dans un niveau moindre, le temps qui s’écoule entre les éditions d’une page est important, si celui-ci est court, cela indique une activité dense et dynamique sur la page qui d’après nous peut indiquer qu’elle est en conflit. Ainsi nous avons rajouté la médiane de temps d’inter-éditions à nos indices.
Finalement, chaque article de Wikipédia peut contenir une page de Talk associée. Celle-ci regroupe les différentes discussions que peuvent avoir les utilisateurs sur le contenu de la page. Une page sous conflit éditorial est une page sur laquelle la discussion fait rage. La taille de la page Talk associée est quelque chose qu’on peut obtenir et qui renforcera notre pouvoir de détection de la guerre éditoriale.
Une fois ces indicateurs définis, il s’agit de sélectionner les pages qui se positionnent en tête selon un seuil défini en s’appuyant sur les histogrammes. À chaque page est donc attribué un score traduisant le nombre de critères validés (autrement dit l’indicateur vérifie le seuil prédéfini).
Et la guerre est déclarée à…
Le tableau suivant montre le top 15 des pages jugées en conflit.
Ce processus d’analyse est plus ou moins subjectif et dépend de la façon de choisir le seuil de chaque indicateur. Il était donc nécessaire de vérifier l’exactitude des résultats avant de valider l’ensemble de seuils.
Avoir un jeu de données de référence contenant la labellisation des pages « page en conflit » ou « page sans conflit » aurait été le meilleur moyen pour valider nos résultats. Malheureusement, le dataset fourni ne contient pas cette information vitale.
Nous avons donc proposé de vérifier manuellement les résultats en jetant un œil sur l’historique des éditions de ces pages, ainsi que le contenu de la page de discussion. Une méthode, qui certes, se base entièrement sur le jugement humain, mais qui nous a permis de nous assurer de l’efficacité de notre modèle.
Dans l’exemple ci-dessus, nous voyons clairement que les reverts sont systématiques et immédiats après chaque révision. Ceci étant, sur cet exemple, nous avons mis en lumière probablement l’action de robots. Une étude plus poussée doit être menée pour identifier si les actions sont bienvenues ou pas.
L’implémentation de notre algorithme pour la détection des conflits au sein de Wikipédia peut donc réduire les temps d’intervention des administrateurs, voire améliorer la détection elle même (mais cela demande à être validé !!!). De plus, le fait qu’une grande partie du code est écrite en Pyspark (langage de parallélisation d’exécution) permettra le passage à l’échelle en l’appliquant sur les jeux de données des autres versions de Wikipedia (English Wikipedia à titre d’exemple).
Comment vivre une nouvelle expérience utilisateur sur Yelp
Par Houssame Berkia, Florian Caringi, Yann Feunteun, Toufik Laichaoui, élèves du Parcours Data Science de l’IMT Atlantique.
Yelp est une entreprise créée en 2004 sur le marché de la recommandation. Les utilisateurs de Yelp, nommés les Yelpers, peuvent laisser des commentaires et des notes sur les différents commerces présents dans l’application en se créant un compte sur l’application. Ainsi les Yelpers ont accès aux évaluations et aux descriptions via l’expérience d’autres Yelpers. Chaque gérant de commerce (ou dirigeant) peut créer un compte gratuit pour publier des photos et envoyer des messages à ses clients. Yelp gagne de l’argent en vendant des publicités aux commerces de proximité. Elles sont clairement identifiées « Annonces Yelp » sur le site. Il y a un peu plus de 121000 publicités sur la plateforme aujourd’hui. Les commerces-annonceurs ne peuvent ni modifier les avis ni changer leur ordre d’apparition. De plus, Yelp possède en son sein un logiciel automatisé pour recommander les avis les plus utiles et fiables pour sa communauté, parmi les millions d’avis existants.
Yelp fait face à la concurrence des géants du web (google et facebook avec des services pros), de Tripadvisor et aux différentes communautés ou plateforme sur la recommandation collaborative. Le nombre de clients n’augmentant pas aussi vite que la concurrence, Yelp veut tout d’abord fidéliser sa communauté existante. Le prix de la publicité vendu aux commerces dépend de la visibilité que Yelp peut proposer à ces commerces et donc du nombre de Yelpers actifs sur la plateforme. Yelp doit trouver le moyen de garder ses bénéfices malgré un coût d’acquisition de plus en plus élevé d’une nouvelle clientèle.
Une des solutions est une des stratégies de génériques de Porter : se différencier par rapport à la concurrence sur les services proposés. Pour se faire, Yelp a lancé la réalisation d’une étude par notre groupe.
Pour mener à bien cette étude nous avons décidé d’utiliser une méthode pour ce projet de data-mining nommée CRISP-DM (Cross-Industry Standard Process for Data Mining). En tant que méthodologie, CRISP-DM comprend des descriptions des phases typiques d’un projet et des tâches à réaliser lors de chaque phase, et une explication des relations entre ces tâches. En tant que modèle de processus, CRISP-DM offre un
aperçu du cycle de vie d’un projet de data mining. Il y a 6 phases distinctes dans cette méthode. Une phase de compréhension du besoin métier, puis une autre pour comprendre les données fournies, ensuite préparer les données pour les utiliser lors de la phase de modélisation, et enfin une phase d’évaluation par rapport aux besoins métiers avant la phase de déploiement. Ces phases vont être le vecteur de présentation du projet dans cet article !
Compréhension du métier
Des objectifs commerciaux ont été définis pour répondre à cette problématique de différenciation par rapport à la concurrence :
- Sauvegarder la communauté de Yelpers
- Rendre plus user friendly l’application
- Augmenter la communauté de Yelpers
Pour pouvoir évaluer le projet des critères de réussite ont été définis :
- Diminuer le taux de churn de 10%
- Augmenter le taux d’acquisition de 5%
- Respect délai et coût
Yelp est une société habituée à avoir dans son sein de l’expertise en data-mining pour améliorer la pertinence du contenu et cibler au mieux la publicité sur la plateforme. De même, l’entreprise a déjà lancé de nombreux concours sur des problématiques variées en data-mining. Nous allons travailler en collaboration avec les experts en data-mining de Yelp et le pôle marketing. Yelp ayant plus de 12 ans d’existence et une grande communauté de Yelpers et de business, notre équipe dispose de nombreuses données bien formalisées. Pour ce projet seulement une partie des données sera étudiée. Toutefois, le programme pourra être étendu aux autres données si l’étude est une réussite. Enfin, la société ne prend pas beaucoup de risques mis à part le temps consacré par les experts de Yelp à travailler en collaboration avec notre équipe. L’entreprise, ayant souvent recours à des compétitions en ligne avec des récompenses, pourra arrêter l’étude si le délai n’est pas respecté pour faire passer le projet en mode compétition.
Les objectifs commerciaux du projet en commun avec notre équipe et les experts de Yelp ont été traduits en objectifs Data-Mining :
- Définir une sous-catégorie de commentaires pertinente pour vérifier la véracité des catégories choisies pour les labelliser avec labels: Food, Service, Worthiness, Ambiance
- Puis labelliser des commentaires avec les labels définis
- Puis appliquer des méthodes d’apprentissage supervisées (méthode qui apprend par rapport à un jeu de données et applique après ce qui a été appris) sur la sous-catégorie de commentaires, tester la performance de chacun pour choisir la meilleure
- Bilan à réaliser avec la direction marketing pour savoir si on réitère le processus
- Si bilan positif, réitération à d’autres sous-catégories
Pour aller plus loin, il nous faut maintenant comprendre les données fournies…
Compréhension des données
Nous avons pu travailler sur un dataset fourni par Yelp comprenant des données assez diversifiées. Il comprend plus de 8 millions de lignes qui concernent plus de 77000 commerces, avec des informations sur les caractéristiques de l’établissement comme l’ambiance, le service, la nourriture dans le cas des restaurants, etc.
Comme expliqué plus tôt, nous nous intéressons à classifier des commentaires. Pour cela une première étape est d’explorer les données sur les commentaires afin d’en juger la qualité. On retrouve alors 1980658 commentaires avec des informations sur le rating de chaque commentaire, à quel business il se rapporte, quel utilisateur l’a publié, etc.
Notre but est d’extraire des variables sur lesquels entraîner un modèle d’apprentissage (nous détaillerons cette partie-là par la suite). Il était donc nécessaire de savoir si nous disposons de commentaires de longueur suffisante.
Nous pouvons voir que la plupart des commentaires ont une longueur supérieure à 100 caractères. On peut en conclure que les commentaires sont de longueur suffisante pour pouvoir extraire une information pertinente.
Aussi, à la lecture des commentaires, il n’est pas évident de savoir pourquoi un utilisateur a préféré noter tel commentaire en quatre étoiles plutôt qu’en cinq, ou en deux étoiles plutôt qu’en une, c’est pour cela qu’on a préféré ne pas tenir compte du nombre d’étoiles attribuées à un commentaire pour notre démarche.
Pour nous atteler à la création d’un modèle d’apprentissage, nous devons préparer les données pour réaliser l’apprentissage sur un choix de données pertinent et ainsi réaliser des itérations sur le projet de manière intelligente…
Préparation des données
Les données sur lesquelles on a travaillé durant ce projet proviennent d’un dataset que Yelp a mis à disposition pour le challenge. On s’est proposé, dans un premier temps, de restreindre notre étude à une seule des catégories de restaurants présents dans nos données. Dans notre cas, la catégorie ayant le plus de commentaires est la catégorie des restaurants mexicains; notre étude s’est donc portée sur cette partie-là du dataset.
Afin d’avoir notre dataset pour l’étude, il nous a fallu faire une jointure entre les tables businesses et reviews du dataset. Nous avons ensuite conservé uniquement les attributs sur lesquels on va faire notre apprentissage (les commentaires) et on a créé quatre variables de sortie pour la catégorisation (nourriture, service, ambiance et rapport qualité-prix).
Dans le but d’avoir des données sur lesquelles on peut entraîner notre modèle, on devait labelliser à la main un minimum de reviews. Cependant, sachant que cette partie de notre étude peut être vraiment longue et n’ayant pas beaucoup de temps pour mener à bien le projet, il nous fallait trouver une autre solution. Nous avons donc trouvé un dataset labélisé de Yelp qui convenait très bien à ce qu’on voulait faire. En effet, il était constitué en prenant 10.000 commentaires aléatoirement dans le dataset pour avoir finalement, après nettoyage, 9.000 commentaires labellisés. Les mots les plus fréquents dans tous les commentaires ont été pris afin de tester leur présence ou non dans les commentaires à labelliser afin de constituer nos attributs en entrée. Nos attributs de sorties sont les catégories listées auparavant. Tous nos attributs dans notre table finale sont des attributs booléens (1 ou 0).
Avec la récupération d’un dataset pertinent, nous pouvons nous atteler à tester des modèles paramétrables ou non…
Modélisation
Après avoir vérifié quelques hypothèses lors de l’étape précédente (pas de données manquantes et encodage binaire des features) il convenait de déterminer le type de problème que nous devions résoudre. Ici il s’agit d’un problème de classification multi label. En effet, une review peut être classée dans plusieurs catégories différentes en même temps. Ainsi nous avons choisi les algorithmes les plus performants et les plus utilisés pour ce type de situation. Il s’agit du Random Forest, Gradient Boosting, Support Vector Machine et Naive Bayes.
Dans l’optique de simplifier le problème initial, nous avons choisi d’entraîner des classifieurs binaires, un pour chacune des catégories. Ainsi une review pourrait bien appartenir à plusieurs catégories. Nous avons répété cette opération sur les quatre algorithmes sus-cités afin de les comparer.
Nous avons choisi séparé le dataset d’origine comme suit: 80% des données pour l’entraînement des modèles et 20% pour le test.
Nous avons choisi la précision comme mesure de performance des modèles. La précision sera définie comme le pourcentage du nombre de reviews correctement classées sur le nombre de reviews évaluées. La figure suivante présente les résultats obtenus sur les données de test, après entraînement.
Algorithme | Random Forest | Gradient Boosting | SVM | Naive Bayes |
Précision | 71% | 75% | 62% | 54% |
Nous retiendrons le Gradient Boosting, ses performances sur le critère mesuré étant plus élevées.
Deux étapes sont primordiales pour terminer cette première itération …
Évaluation
Pour réaliser l’évaluation de la première itération du projet, nous avons pensé à un test sur groupe de population pour voir un changement de comportement par rapport à la plateforme sans et avec. Cette méthode se nomme l’A/B testing. De plus, nous pensons à un autre test en gardant pendant 1 mois une plateforme différente pour les utilisateurs anglophones pour évaluer le taux d’acquisition. Yelp est une société ayant l’habitude des projets de Data-Mining avec la méthode CRISP-DM. Notre équipe a dû se familiariser avec cette nouvelle méthode. Nous avons été hésitants au début sur les “retours arrière” possibles dans le processus. Par contre, comme toute méthode agile, nous avons bien compris l’intérêt d’un processus cyclique pour pouvoir fonctionner en itération du modèle sur des sous-catégories du dataset. Cette méthode a permis à notre équipe et à Yelp de comprendre les points suivants :
- l’exploration des données est une étape primordiale pour pouvoir choisir correctement les sous-catégories utilisées pour la modélisation
- la préparation des données n’a pas été simple, mais cette étape est primordiale pour pouvoir avoir les données choisies dans la modélisation
- le besoin métier ne doit pas être éclipsé à cause des difficultés techniques et le travail sur les données
- la phase de test à la fin de la première itération doit être menée rigoureusement pour savoir si notre première idée répond aux objectifs commerciaux.
Si l’évaluation est positive, nous nous devons de déployer la solution en collaboration avec les métiers nécessaires…
Déploiement
Pour réussir un déploiement, nous devons collaborer et donner les informations nécessaires aux personnes concernées dans le projet.
- Les décideurs devront être informés des changements sur la plateforme web, sur l’application mobile et le changement dans la structure de la base de données. En plus de l’utilité de ces changements. Si les résultats de l’étude sont jugés concluants, nous devons collaborer et informer le personnel suivant :
- Les experts en Data-Mining devront mettre en place le modèle de catégorisation des commentaires en fonctionnement pour les nouveaux commentaires
- Les experts en base de données devront être informés du changement de la base de données pour mettre en place la nouvelle base.
- Les développeurs web devront incorporer la nouvelle organisation des commentaires pour les commerces sur la plateforme web et récupérer les nouvelles infos de la base.
- Les développeurs de l’application mobile devront incorporer la nouvelle organisation des commentaires sur les commerces et récupérer les nouvelles données de la base.
- Le pôle communication et marketing devront informer les Yelpers des changements apportés et mettre en avant cette différenciation verticale par rapport aux applications concurrentes
Au niveau surveillance, les tâches seront :
- Surveillance de la plateforme web et de l’application mobile pour vérifier que les utilisateurs ont les commentaires catégorisés pour les commerces.
- Vérifier que les nouveaux commentaires sont correctement labellisés
Au niveau de la maintenance, les tâches seront :
- relancer le modèle avec les données récentes régulièrement avec une fréquence à définir.
Ainsi, la première itération s’achève. Si le résultat est probant, les décideurs peuvent décider de relancer d’autres itérations sur un autre jeu de données ou même changer la stratégie de data mining. Le but de la méthode CRISP-DM est de pouvoir adapter le projet et apprendre de chaque itération pour aller plus vite.
Yelp CityHeartbeat, quelles sont les tendances dans mon quartier ?
Par Arthur Bourgeois, Lucie Crucq, Célia Hocine et Jonathan Pathmanathan, élèves du Parcours Data Science de l’IMT Atlantique.
Permettre à ses utilisateurs de trouver le meilleur restaurant, coiffeur ou garagiste dans une ville, c’est la mission de Yelp. Créé en 2004, Yelp rassemble aujourd’hui plus de 115 millions d’avis sur son site et attire toujours plus de visiteurs par mois, principalement aux Etats-Unis où il se positionne en leader en matière de recommandations.
Comme d’autres avant eux, Yelp fait aujourd’hui appel à des personnes extérieures à son équipe pour développer de nouvelles idées afin de mieux répondre aux besoins de ses utilisateurs. L’entreprise a lancé le “Dataset Challenge” : un échantillon des données collectées par Yelp est mis à disposition des internautes, qui ont pour défi de trouver une façon innovante de les utiliser.
Dans le cadre de notre parcours “Data Science” à l’IMT Atlantique, nous avons eu pour mission de proposer un projet innovant basé sur les données du Dataset Challenge. Encadré par une équipe de professeurs experts dans les domaines de l’informatique, de l’analyse des données et de l’économie, nous nous sommes donc lancés dans la valorisation des données de Yelp.
CityHeartbeat : vers un nouveau service B2B
Très tôt dans notre réflexion, nous avons décidé de nous orienter vers un service à destination non pas des consommateurs, mais plutôt des commerçants. En effet, Yelp propose déjà de nombreux services aux consommateurs : recherche d’un business avec plusieurs filtres, écriture d’avis, système de notations sur de nombreux aspects du commerce…
En ce qui concerne les commerçants, Yelp offre des services pour attirer plus de clients : mise en avant du business sur le site (Yelp Ads) et proposition de bons de réductions type Groupon (Yelp Deals). Mais il manque selon nous des services pour aider les commerçants qui ne sont pas encore installés.
Elèves rigoureux et bien organisés que nous sommes, nous avons appliqué la méthode CRISP-DM pour structurer notre projet. Cette méthode est un pilier indispensable pour la réussite d’un projet de fouilles de données. Pour rappel, la méthode CRISP consiste en plusieurs phases :
- La compréhension du business qui permet de fixer les objectifs du projet en se posant les questions métiers
- La compréhension des données qui consiste en la découverte des données à notre disposition ainsi qu’à leur exploration
- La préparation des données qui est une phase de nettoyage et réorganisation des données, et si nécessaire de création de nouvelles valeurs calculées à partir d’autres données
- La modélisation pour la sélection du modèle de fouille de données ainsi que ses paramètres
- L’évaluation qui consiste à juger les performances du modèle et comparer les résultats produits avec les objectifs à atteindre
- Le déploiement à la fin du projet, phase pendant laquelle la solution est installée et de nouvelles pratiques sont mises en place suite aux conclusions tirées du projet.
En utilisant cette méthodologie, nous avons ainsi abandonné notre idée initiale : aider des commerçants à trouver la “recette” d’un business qui fonctionne était certes une belle idée, mais la phase de compréhension des données nous a permis de nous rendre compte que nous ne disposions pas des bonnes informations pour répondre à cette problématique. De plus, il était assez complexe de définir ce qu’était un commerce qui “fonctionne”, un critère trop subjectif.
Aidés par nos tuteurs, nous avons finalement pivoter et fait émerger une problématique un peu différente. Nous cherchons à exploiter les données pour répondre à une demande centrée sur le gérant d’un commerce. Un nouvel entrant qui souhaite s’installer dans un quartier a besoin d’informations sur les commerces de ce quartier, la fréquentation de ceux-ci, leur type, leurs notes et commentaires ainsi que leur catégorie de prix.
Notre future solution permettrait donc l’exploration d’un quartier pour permettre à un gérant de prendre mesure de la concurrence et d’observer les caractéristiques des business avec le plus de succès sur Yelp. Notre produit CityHeartbeat est né.
Nous avons passé un long moment à réfléchir sur les questions auxquelles devait répondre notre produit. Selon nous, deux questions principales intéressent un business qui souhaite s’installer : qui sont les concurrents déjà installés et qui sont les consommateurs qui viennent dans ce quartier ?
Quelles données pour une étude de marché ?
Après avoir défini nos objectifs, nous sommes passés à la phase 2 de la méthode : la compréhension des données.
Nous avions à notre disposition plusieurs tables regroupant des données par thème : la table business qui regroupe de très nombreuses données sur les commerces : leurs horaires d’ouverture, leur localisation, leur catégorie, leur note et des informations sur les services proposés ; la table checkin qui regroupe le nombre de visiteurs par période de temps pour chaque business ; la table reviews qui regroupe les avis des visiteurs ; la table users qui regroupe des informations sur les visiteurs.
Une première exploration de ces données nous a permis de nous rendre compte de plusieurs choses.
Premièrement, la table users n’est pas très utile dans notre cas car elle ne regroupe que des informations relatives à la communauté Yelp (nombre d’amis, commentaires des autres Yelpers…) et non pas des informations démographiques qui nous aideraient à qualifier les visiteurs d’un quartier… mais c’est un peu normal, non ?
Deuxièmement, la table des reviews nous paraît difficilement exploitable dans un premier temps, mis à part pour calculer le nombre d’avis par business. De plus, la date de l’avis ne veut pas dire grand chose car un utilisateur peut donner son avis plusieurs jours après sa visite.
Troisièmement, la table business, mise à plat, contient plus de 1000 informations différentes pour caractériser un business, ce qui rend sa manipulation difficile.
Enfin, nous remarquons que beaucoup d’informations, car non obligatoires, ne sont pas remplies : par exemple tous les restaurants n’ont pas rempli le champ “drive-thru” pour indiquer s’ils offrent ou non ce service. “Seulement 1% des business renseignent la case restrictions diététiques, ce qui la rend impossible à analyser” nous confie Célia, Data Quality Manager.
Suite à cette exploration, nous prenons deux décisions : utiliser uniquement les informations avec un taux de remplissage élevé pour garantir des informations pertinentes et partitionner la table business en sous-tables ne contenant que quelques colonnes pour faciliter et accélérer la manipulation des données.
Nous pouvons maintenant établir la liste des indicateurs que nous souhaitons suivre dans notre outil. CityHeartbeat permettra de visualiser :
- la répartition des business en fonction de leurs coordonnées GPS sur une carte ;
- leur nombre de checkins, leur nombre de reviews et leur note moyenne pour comprendre si ces business sont “performants” au sens de Yelp ;
- des données sur les catégories de business et leur gamme de prix ;
- des données sur les services proposés par les business (par exemple la livraison) et leurs horaires d’ouverture .
En ce qui concerne les consommateurs, nous ne pouvons rien afficher pour le moment mis à part leur nombre (grâce aux checkins).
Un POC interactif
Afin de réaliser notre tableau de bord, nous avons choisi l’outil Tableau Software, d’une part car nous connaissions déjà cet outil et d’autre part car c’est un outil puissant qui permet d’effectuer des calculs et d’en visualiser les résultats en temps réel. Il permet également une grande liberté dans la manipulation des données, les différents types de graphiques ainsi que les filtres. Dans un premier temps, par souci de simplification, notre première version de CityHeartbeat ne permet que d’observer les restaurants de la ville de Phoenix.
Le tableau de bord est très facile à prendre en main et la navigation y est intuitive. Il permet de répondre aux objectifs métiers que nous nous étions fixés et toute l’information capitale est synthétisée et présentée de la façon la plus parlante possible.
L’utilisateur peut rapidement visualiser où se trouvent les restaurants grâce à une carte de la ville observée. En fonction de la taille du point représentant le restaurant, l’utilisateur peut connaître sa fréquentation, et en fonction de la couleur allant du rouge au vert, il peut connaître la note donnée par les Yelpers. Un panel de filtres sur le côté de la carte permet de filtrer les restaurants de la zone : par leur catégorie, leurs horaires d’ouvertures et leur distance au point central de la zone étudiée.
L’outil permet également à l’utilisateur d’avoir une description globale des restaurants présents dans la zone choisie : comment sont réparties les enseignes en fonction de leur prix et de leur catégorie, combien de restaurants proposent certains services.
L’utilisateur peut aussi évaluer le poids du quartier par rapport à la ville entière : en effet, il peut voir quel pourcentage des checkins et des avis de la ville sont contenus dans la zone étudiée.
L’outil n’en est pour l’instant qu’à un stade de premier prototype. Nous avons plusieurs idées pour l’améliorer.
Premièrement, nous ne sommes pas totalement satisfaits de la façon dont la zone à explorer est définie. Aujourd’hui, nous utilisons une ville, un point de cette ville et nous calculons la distance entre chaque business de la ville et ce point central. L’utilisateur peut ensuite décider de réduire le rayon de la zone à explorer en diminuant la distance maximum au point choisi. Ce n’est pas la solution la plus pratique d’un point de vue utilisateur. La solution idéale serait de choisir une ville, puis un quartier de cette ville. Cela pose cependant plusieurs problèmes : les quartiers sont de taille très différente selon les villes (un “zoom” à l’intérieur du quartier serait alors nécessaire), de forme peu pratique à manier, et l’information du quartier n’est pas toujours disponible dans les données de Yelp.
Ensuite, comme cet outil est destiné à un commerçant qui cherche à s’installer, nous pourrions proposer plus d’options visant à lui permettre de comprendre pourquoi un business attire plus de personnes qu’un autre, en plus des checkins et de sa note. Entre autres, nous pourrions afficher une sélection d’avis : par exemple ceux qui sont notés les plus utiles, cools et drôles.
Nous pensions également indiquer quels sont les business qui ont souscrit à Yelp Ads ou Yelp Deals dans la zone observée, l’idée étant que de tels business devraient avoir une plus grande fréquentation, grâce à l’augmentation de leur visibilité. Cela pourrait idéalement inciter l’utilisateur de CityHeartbeat à souscrire lui-même à ces offres.
Dans tous les cas, nous sommes limités par les données en notre possession : certaines informations qui nous paraîtraient intéressantes ne sont pas assez remplies pour être exploitables, nous manquons d’informations sur la démographie des consommateurs… Nous devons également faire attention à ne pas montrer trop d’informations différentes sur notre tableau de bord, ce qui gênerait la lisibilité de l’outil.
Comment garantir nos revenus
En tant que membres de l’équipe Dynamic Solutions and Optimization de Yelp, notre mission n’est pas seulement d’améliorer le produit Yelp mais également de garantir des revenus. C’est la raison pour laquelle il est important de trouver un bon business model à notre projet.
Nous avons adopté un mode de vente en mensualités, avec une période d’essai où les interactions avec le tableau de bord seraient limitées pour donner envie à l’utilisateur d’acheter la version complète.
Notre produit pourrait en fait intéresser à la fois les commerçants qui souhaitent s’installer mais également des commerçants déjà implantés qui aimeraient se comparer facilement à leurs concurrents. Cela représente un nombre conséquent d’utilisateurs potentiels, sachant que rien qu’à Paris, 3 restaurants ouvrent chaque jour !
Ce que nous retenons de ce projet
Ce projet nous a permis de nous rendre compte de plusieurs choses.
Premièrement, ce n’est pas une légende : dans un projet de manipulation de données, ce n’est pas la modélisation ou la visualisation qui prennent le plus de temps.
Ici nous avons passé la majorité de notre temps à définir les objectifs de notre projet, puis à préparer les données. Une fois ces étapes passées, visualiser les données avec Tableau nous a semblé presque facile !
Ensuite, nous avons été confrontés au problème du big data, et là non plus, ce n’est pas une légende : la solution classique, mono serveur, que nous avions choisie pour la manipulation des données en Python, s’est heurtée à la quantité des données à manipuler (surtout le nombre de colonnes dans les datasets). En effet, nous n’avons pas utilisé d’architecture Big Data, et nous avons vite compris que le nombre important de calculs demandés nécessitait de changer de paradigme ! Faute de temps, nous avons donc contourné le problème en divisant les tables en sous-tables plus petites et donc faciles à manipuler, mais nous aurions cependant pu nous tourner vers des outils dédiés au Big Data comme Spark sur la plateforme Big Data TeraLab mise à notre disposition.
En conclusion, notre première version de CityHeartbeat s’est avérée fonctionnelle, facile à utiliser et pertinente. Pour évaluer sa performance, nous soumettrons un questionnaire de satisfaction à nos clients qui participeront bien entendu à l’évolution continuelle de la solution.
Affaire à suivre…
Qui se cache derrière les contributions Wikipédia ?
Par Mariam Thiam, Frédéric Tamagnan et Sébastien Guillon, élèves du Parcours Data Science de l’IMT Atlantique
Wikipédia, la plus célèbre encyclopédie du monde, compte plus de 30 millions d’articles. Sur cette plateforme, 25 000 articles sont créés quotidiennement dans plus de 280 langues. Les articles sont constamment édités, corrigés, et étoffés : il y a plus de 10 000 modifications par mois.
Mais quelle communauté se cache derrière ces contributions ? Peut-on identifier différents rôles chez les contributeurs ? Quelles sont les interactions entres les contributeurs ?
Dans cet article nous vous présenterons dans une première partie quelques statistiques sur notre dataset. Dans une deuxième partie nous étudierons les rôles des contributeurs. Enfin dans une troisième partie, en définissant comme lien social la coédition de pages (plusieurs personnes qui éditent la même page) nous découvrirons les interactions entre les contributeurs.
Quelques chiffres
Le dataset utilisé est Wikipédia simple, une version très allégée du dataset anglophone (de 2001 à 2016). Le dataset se présente comme une liste des contributions (ici nous faisons le focus sur les révisions) : identifiant de la révision, date et heure de la révision, identifiant de la page sur laquelle porte la révision, taille de la contribution, numéro identifiant de l’utilisateur, etc. La seule information que nous avions sur l’auteur de la révision était s’il était enregistré ou non. Voici quelques chiffres sur ce dataset :
Nombre de révisions | 4 936 382 |
Nombre d’articles | 167 671 |
Nombre de pages total (articles, pages d’aide, etc) | 391 930 |
Nombre de contributeurs enregistrés | 49 037 |
Nombre de contributeurs non enregistrés | 10 477 |
Nous travaillerons maintenant uniquement sur un dataset simplifié en ne prenant en compte que les révisions effectuées par des contributeurs enregistrés.
Détection des rôles
Namespace Majoritaire
Chaque révision -contribution- appartient à un « namespace » . Un namespace indique la catégorie dont fait partie la page de la révision. Une page peut être un article de l’encyclopédie, mais aussi une page de chat entre différents utilisateurs ou encore une page d’entraide.
Afin de déterminer les rôles des contributeurs, nous nous sommes intéressés aux namespaces utilisés par chacun d’entre eux et à leur quantité de participation.
Ci-dessous la liste des différents namespaces et définition des namespaces que nous utiliserons :
ID |
Subject Namespace |
Talk Namespace |
ID |
Description |
-2 |
Media |
|||
-1 |
Special |
Pages sans wikitext |
||
0 |
Main/Article |
Talk |
Article |
|
2 |
User |
User Talk |
3 |
Utilisateurs |
4 |
Wikipedia |
Wikipedia Talk |
5 |
Process & politique de wikipedia |
6 |
File |
File Talk |
7 |
Wikipedia Content |
8 |
Mediawiki |
Mediawiki Talk |
9 |
Espace d’édition pour les administrateurs |
10 |
Template |
Template Talk |
11 |
Template d’articles |
12 |
Help |
Help Talk |
13 |
Aide |
14 |
Category |
Category Talk |
15 |
Regroupement de pages |
Pour une description plus précise : https://en.wikipedia.org/wiki/Help:Files
A chaque subject namespace correspond un talk namespace. Par exemple Main va concerner les pages qui sont des articles en eux-mêmes alors que Talk (le talk namespace correspondant) va concerner les discussions autour de l’édition de ces articles.
Nous vous proposons de jeter un coup d’oeil sur la répartition des révisions du jeu de données par namespace. 71% des contributions concernent directement les articles (correction orthographique, ajout de contenu …).
Nous estimons que les namespaces majoritaires utilisés sont le reflet d’une activité de spécialisation pour chaque contributeur. Nous avons défini un namespace majoritaire pour un contributeur comme la catégorie de namespace où figurent plus de 30% de ses révisions. Un contributeur peut donc avoir entre 0 et 3 namespace majoritaires.
Un individu qui a 0 namespace majoritaire se disperse donc beaucoup entre les différentes catégories (ou alors n’a aucune révision à son actif) tandis qu’un individu avec 3 namespaces majoritaires se concentre sur 3 activités bien précises comme l’édition d’article, l’aide entre les membres, ou la discussion autour de certains articles (ou bien a fait très peu de révisions). Les namespaces majoritaires sont calculés de manière ordonnée. Pour un contributeur, son namespace majoritaire #1 contiendra plus de révisions que son namespace majoritaire #2 par exemple.
Cependant, une personne qui n’aurait fait que 3 révisions dans 3 namespaces différents, se verrait attribuer 3 namespaces majoritaires. Or cette personne a un impact mineur sur le site Wikipédia, on ne peut donc pas parler d’activités à proprement dit.
Score de participation
Afin de corriger le biais cité précédemment, nous avons défini un score de participation. Seul les individus avec un score de participation minimum jugé significatif pourront se voir attribuer un rôle.
Un attribut de notre dataset “minor” nous permet de savoir si une révision est mineure (le contributeur a écrit peu de texte) ou majeure (le contributeur a écrit beaucoup de texte).
Nous avons donc défini le score de participation :
Score de participation = Nombre total de révisions majeures (peu importe le namespace)
Définition des rôles
Nous vous proposons de lire notre matrice, qui définit des rôles pour la population de notre dataset.
Rôles |
Score de participation |
Namespace majoritaires |
Contributeur Érudit |
> 100 révisions majeures |
Article en #1 |
Contributeur dispersé |
> 25 |
Pas de namespace majoritaire |
Dépanneur |
> 25 |
Help ou Help_Talk en #1 OU #2 |
Talker |
> 25 |
N’importe quel talk namespace en #1 OU #2 |
Social Networker |
> 25 |
N’importe quel talk namespace en #1 ET #2 |
Catégoriseur |
> 25 |
Category en #1 |
Template Creator |
> 25 |
Template ou Template Talk en #1 |
Exemple : Supposons que Pierre ait effectué 300 révisions sur Wikipédia depuis 2001 dont :
- 162 dans le namespace Article (soit 54%)
- 120 dans le namespace Talk (soit 40%)
- 18 dans le namespace (6%)
Grâce à notre méthode, nous lui avons attribué 2 namespaces majoritaires (#1 = Article et #2 = User Talk). De plus, il a réalisé 150 révisions majeures parmi les 300 (donc le score de participation est assez significatif pour être validé). Par conséquent, Pierre endosse 2 rôles distincts chez Wikipédia : le premier de Contributeur Érudit (forte participation pour enrichir le contenu des articles) et le second de Talker !
Nos résultats
Rôles |
Description |
Population |
Proportion parmi les rôles détectés |
Contributeur Érudit |
Membre qui contribue fortement à l’enrichissement d’articles |
722 |
41% |
Contributeur dispersé |
Membre qui n’est pas vraiment spécialisé dans une tâche |
3 |
0% |
Dépanneur |
Membre qui aide les autres |
4 |
0% |
Talker |
Membre qui passe son activité principale à discuter |
844 |
47% |
Social Networker |
Version encore plus bavarde du Talker |
3 |
0% |
Catégoriseur |
Membre qui contribue au regroupement d’articles |
8 |
0% |
Template Creator |
Membre qui s’occupe de créer des canvas d’articles en amont de la création. |
217 |
12% |
TOTAL |
1801 |
100% |
Remarque 1 : Chaque membre peut se voir attribuer jusqu’à 2 rôles.
Remarque 2 : Nous avons identifié des rôles pour 1801 membres soit 3,6% des membres enregistrés de ce dataset.
Nous pouvons voir que les rôles majoritaires détectés concernent les articles, édition et discussion, ainsi que l’édition des canvas ou template d’articles.
La contrainte des 30% du namespace majoritaire est peut-être trop limitante pour la détermination des rôles plus subtils comme Social Networker ou Catégoriseur.
Détection des interactions
Nous avons ensuite cherché à déterminer les interactions entre contributeurs. Sur Facebook ou Twitter, les interactions sont explicites avec les likes, les liens d’amitiés ou de following. Sur Wikipédia, nous avons défini le lien social comme étant la co-édition de pages. Ainsi deux contributeurs se trouvent reliés s’ils ont contribué à la même page (article, page d’aide, etc).
Pour cette partie, nous avons travaillé sur un dataset allégé de 10 000 contributeurs. Nous avons associé dans une structure de données (dictionnaire Python) les groupes de contributeurs avec les pages qu’ils avaient co-édités.
Ainsi nous pouvions lire dans notre structure de données de manière : “Pierre et Jacques ont tous les deux contribués à la page sur Napoléon et à la page de discussion d’Obama. Pierre, Martin et Paul ont contribués tous les 3 au template de pages artistiques musicales”.
Nous avons ensuite extrait quelques statistiques de ces groupes de co-contribution.
Graphique du nombre de couples de contributeurs en fonction du nombre de page en commun
Voici maintenant quelques statistiques sur la distribution de la taille des couples de co édition :
Taille moyenne des groupes de co-édition |
3 |
Ecart type de la taille des groupes de co-édition |
3 |
Taille minimum des groupes de co-édition |
2 |
Taille maximum des des groupes de co-édition |
132 |
1er quartile de la distribution des tailles |
2 |
médiane de la distribution des tailles |
2 |
3ème quartile de la distribution des tailles |
3 |
Conclusion
Dans cet article nous avons donc identifié avec un modèle très simpliste les rôles dans le dataset Wikipédia que nous avons utilisé. Nous avons également mis en valeur les interactions entre les différents membres au travers du lien de co-édition.
Nous pourrions imaginer, pour améliorer le modèle des rôles, de prendre en compte plus de paramètres afin d’avoir une détection plus fine : faire une détection par année ou par mois, prendre en compte les révisions mineures associées à chaque namespace et les reverts. De plus, nous pourrions mettre ça en lien avec la co-édition afin de regarder comment les rôles et le graphe de communauté se superposent.
LiveBox Foudroyée en Spark
Mounir Haddad, promotion 2016, a participé au Prix de la Fondation Mines-Télécom du meilleur stage de fin d’études avec son stage intitulé « LiveBox Foudroyée en Spark ». Mounir a effectué son stage chez Orange, à la DSI à Guyancourt d’avril à septembre 2015. Il nous livre ici son Executive Summary et sa vidéo.
De la preuve de concept du projet LiveBox Foudroyée à la mise en production
A partir de 2011, Orange a pressenti le potentiel des mégadonnées de ses bases de production. Le groupe a restructuré ses différents services, à différents niveaux, pour y intégrer le Big Data. Plusieurs projets de traitement de données massives ont déjà vu le jour et sont actuellement en production. Néanmoins, le Big Data est un domaine en essor et l’écosystème de Hadoop ne cesse d’évoluer. Les acteursdoivent agir en conséquence.
Dans ce cadre, la DSI d’Orange a lancé plusieurs Proof of Concept (POC), dont le projet LiveBox Foudroyée (LBF), répondant à des cas d’usage métiers, pour apprécier les avantages et les performances de Spark, un nouvel outil prometteur. Si ceux-là sont jugés concluants, un environnement de production
dédié sera mis en place et des projets Spark y seront déployés. Le sujet du stage s’est inscrit dans cette initiative, l’objectif étant l’étude de la faisabilité de LBF dans un environnement Spark.
Le dispositif LBF vise à détecter en proactif le foudroiement de LiveBox et à prévenir les risques d’endommagement d’équipements, en recoupant les données du réseau Orange avec les prévisions et rapports météorologiques fournis par météoFrance.
Le projet LBF est actuellement en production sur une application implémentée en Pig. Il a été remarqué et sélectionné pour le trophée de l’innovation du salon Big Data Paris, qui s’est tenu en mars 2015 au CNIT de Paris. Un article du Journal du Net est consacré à cette édition du trophée.
La mission du stage a consisté en la refonte de ce dispositif dans un framework Spark, en utilisant le langage Scala. Les prérequis et les performances du prototype conçu ont été identifiés, ainsi que les problèmes rencontrés et leurs gravités. Les résultats ont été remontés lors d’une réunion sur l’industrialisation de Spark, avec l’équipe du centre de compétences BI & Big Data de la DSI d’Orange.
Le projet LiveBox Foudroyée
Chaque année, à peu près 10 000 LiveBox sont foudroyées. Dans ce cadre, Orange souhaite déployer le dispositif LBF.
Orange incite ses clients à débrancher la prise électrique de leur LiveBox ainsi que le câble ADSL relié à la prise téléphonique pendant la durée des orages. Si certaines solutions comme les prises parafoudre peuvent préserver un équipement, il n’est pas plus efficace que le débranchement de la LiveBox.
En outre, Orange peut détecter les LiveBox foudroyées afin de proposer à ses clients un échange rapide en boutique Orange ou point relais. Le foudroiement des LiveBox peut coûter cher à un opérateur suivant sa politique : Orange remplace gratuitement les équipements endommagés.
Le projet LBF contient trois principaux modules
-
Référentiel : Il s’agit de transformer les données des terminaisons de lignes clients issues de différentes sources internes au réseau Orange afin de constituer des données facilement exploitables pour les traitements des deux autres modules. En l’occurrence, pour chaque LiveBox, on rassemble plusieurs informations (ligne, adresse, commutateur…) qui seront utiles pour les calculs suivants. Le référentiel est généré une fois par jour, les enregistrements de la veille sont écrasés puis remplacés.
-
Préventif : L’objectif est d’informer le client en cas d’alerte d’orage pour éviter le foudroiement de sa LiveBox, en lui préconisant de la débrancher. Ce module se base sur un algorithme recoupant les prévisions de météoFrance avec celles du référentiel. Le calcul préventif est lancé quotidiennement à deux reprises (ou campagnes).
-
Proactif : Il s’agit de détecter en proactif le foudroiement des LiveBox et de proposer au client, après validation, un échange de son équipement. Ce module fonctionne grâce à un algorithme croisant les données de météoOrage avec celle des déconnexions de LiveBox. Le calcul proactif est lancé toutes les demi-heures, afin d’alerter les clients au plus tôt.
Le projet LBF vient en remplacement d’une ancienne application uniquement préventive.
Aussi, au vu des volumétries des sources de données, cette ancienne application devenait obsolète car elle s’exécutait sur un serveur unique : le traitement référentiel durait 10 h. Depuis début 2015, LBF est en production grâce à une application Pig sur un cluster distribué d’Orange. Le temps d’exécution du calcul référentiel est réduit à 23 min.
Aspects techniques
Le développement des modules de LBF est réalisé en local, dans un cluster pseudo-distribué. Cependant, un cluster simulé sur un ordinateur unique ne peut pas traiter de grandes quantités de données, à l’image de celle présentes en production. Un jeu de données réduit et anonymisé a donc été extrait des bases de production pour accompagner les phases de développement et de tests unitaires.
En outre, le test en local ne peut se substituer aux tests sur le cluster de tests d’Orange : les performances algorithmiques sont déterminées au cours de cette phase et certaines erreurs dans le code ne peuvent apparaître qu’en traitement distribué.
Les calculs réalisés lors des différents modules de LBF consistent essentiellement en un ensemble de filtres, de dédoublonnements et de jointures (fermées, ouvertes, élément le plus proche, jointures tridimensionnelles en temps et en surface). La difficulté réside dans les volumétries des tables sources.
Résultats
Quand on compare les performances de l’algorithme du calcul référentiel implémenté en Spark avec celles de l’application Pig en production, le constat est sans appel. Le temps d’exécution est divisé par 2 pour moins de ressources.
Référentiel en Pig (MapReduce) | Référentiel en Spark | |
Volumétrie en entrée | De l’ordre de 10 Go | |
Temps d’exécution | 23 min | 10 min |
Nombre de nœuds | 25 | 10 |
Nombre de cœurs | 200 | 24 |
Vitesse d’exécution | 0.43 Go/min | 1 Go/min |
Vitesse d’exécution/nœuds | 17 Mo/min | 300 Mo/min |
Cela peut s’expliquer par le recours à la RAM plutôt qu’à HDFS pour le stockage des jeux de données intermédiaires à la sortie finale, voire à la mémoire cache pour les données amenées à être utilisées à plusieurs reprises, mais aussi par le fait qu’un job Spark n’est pas forcément une succession de paires map / reduce, contrairement à un job dans le paradigme Hadoop.
En outre, certaines techniques offertes par Spark ont aidé à atteindre ces performances. Entre autres, l’usage des variables partagées telles que le broadcast réduit significativement le temps d’exécution. Ce type d’objets a la particularité d’être connu de tous les nœuds impliqués dans le job courant et est donc idéal pour certaines opérations telles que la jointure de 2 jeux de données, dont un est à volumétrie limitée. Ce concept est très économe en bande passante.
Aussi, pour résoudre le problème de déséquilibre des volumétries à traiter en parallèle, il a fallu recourir à des fonctions de répartition, fonctions qui redistribuent un jeu de données de manière équilibrée sur les différents mappers en jeu.
Les différents résultats ont été présentés au chef de projets et aux autres membres de l’équipe. Une démonstration de LBF sur Spark a été organisée. Aussi, une présentation animée par un autre stagiaire et moi-même, portant sur Spark et son application en milieu industriel a été organisée. Les membres du centre de compétences BI & Big Data d’Orange s’y sont joints, ainsi que plusieurs personnes d’autres équipes de la DSI d’Orange, intéressées par la technologie Spark.
Suite à ce stage, la DSI d’Orange envisage de mettre en place une plateforme sur l’architecture Spark et d’y porter le dispositif LBF de même que d’autres projets en production.
Retour d’expérience sur notre mission intitulée « Mise à disposition d’une boîte à outils pour Data Scientist ».
Par Quentin MARINIE et Fabien VIOSSAT, étudiants 3A IMT Atlantique.
Sur Facebook, ce sont près de 10 milliards de messages et 4,75 milliards de partages qui sont enregistrés chaque jour. Sur Twitter, le maximum de tweets par seconde est de 143 199. Si l’on rapporte ces chiffres à la courte durée de vie de ces entreprises (respectivement 12 et 10 ans) on se rend compte de l’importance croissante des réseaux sociaux dans notre vie de tous les jours. Mais très certainement vous-même appartenez à d’autres réseaux sociaux ou communautés telles que Wikipédia, Copains d’avant, Instagram, LinkedIn ou encore la communauté de votre fournisseur de forfait téléphonique.
Ces nouvelles solutions de communication ont un potentiel énorme mais les entreprises font alors face à de nouvelles problématiques : Comment gérer des millions d’individus ? Comment savoir si un forum ou une communauté est en « bonne santé » ?
Ce sont les questions auxquelles Standing On Giants, fournisseur de plate-formes pour communautés et filiale de Telefonica (UK), tentent de répondre en collaboration avec le département LUSSI de Télécom Bretagne. Il nous a donc été proposé (Quentin MARINIE et Fabien VIOSSAT) dans le cadre du Projet Ingénieur de la filière ISA de mener une phase de cadrage de cette mission. Encadrés par Mme Cécile Bothorel et M. Laurent Brisson, tous deux enseignants-chercheurs dans ce même département, nous avons pu entamer la phase préliminaire du projet. Cet article constitue notre retour d’expérience sur notre mission intitulée « Mise à disposition d’une boîte à outils pour Data Scientist ».
Ancrer son travail dans la durée…
Présents sur les réseaux sociaux depuis plusieurs années, nous nous sommes aperçus que nous étions purement et simplement novices dans l’analyse de leur utilisation. Guidés par nos tuteurs, nous nous sommes intéressés aux statistiques ainsi qu’à la théorie des graphes qui, comme dans de nombreux cas, permettent de solutionner nombre de problèmes. Lecture de thèses, recherche d’ouvrages ou d’articles sur internet mais encore prise en main d’un serveur, découvertes de packages sur différents langages ont été notre quotidien. Les premiers instants s’apparentaient donc à un état de l’art du domaine, nous avons ainsi pu donner une orientation initiale au projet.
Cette démarche s’inscrivant dans une mission durable, nous devions constamment donner une traçabilité à nos recherches, rédiger des documents présentant nos résultats ou encore proposer des tutoriels sur l’utilisation de méthodes.
En effet, un des points importants était la pérennité des résultats : notre étude ne durant que 6 mois et la mission étant destinée à durer plus longtemps, nous nous devions de laisser des traces pour garantir la bonne compréhension de nos travaux.
Où chercher ? Que chercher ?
Un des intérêts d’une telle mission est que d’une semaine à l’autre, avec l’obtention de résultats, il est nécessaire de réorienter les recherches. Des réunions étaient donc prévues avec nos tuteurs de manière à présenter ces résultats, discuter de ceux-ci et enfin fixer les prochains objectifs.
Il a par conséquent fallut effectuer de nombreux tests sans savoir s’ils allaient être concluants. Comme prévu, nombres d’entre eux se sont révélés peu intéressants pour la poursuite de l’étude. Cet aspect peu motivant était pourtant nécessaire.
Nous avons certainement autant appris de nos échecs que de nos découvertes.
La présence de nos encadrants était bien évidemment essentielle, dotés d’une plus grande expérience dans ces domaines, leurs intuitions se sont souvent révélées utiles et vraies. Cet appui nous a permis d’avancer bien plus vite que par nos simples recherches et, avec plus de recul, nous réalisons que le projet final a très peu à voir avec l’idée initiale que nous en avions.
Le bon outil pour le bon usage !
Neo4J, Python, R, NetworkX voici les premières pistes que nous avions pour explorer les graphes. Après une première prise en main de certains et une recherche sur d’autres logiciels, langages ou packages, nous avons sélectionnés ceux qui nous paraissaient à première vue les plus adaptés. Par la suite, nous avons dû approfondir nos recherches sur ces solutions.
Quelle solution convient la mieux à nos objectifs ? Un package présent sur Python et R est-il mieux documenté ou plus efficace sur l’un ou l’autre des langages ? Là encore de nombreux tests ont été réalisés sur nos propres machines avec à nouveau des tentatives non concluantes mais permettant de comparer les différentes solutions.
Cependant, nous avons assez rapidement fait face aux limites de nos ordinateurs. N’étant pas en possession des datasets de Standing On Giants, nous avons testés différents algorithmes classiques d’études de graphes (clustering, proximité, centralité, taille de cliques…) sur des datasets trouvés sur internet et aux caractéristiques bien différentes (de 4000 individus à près de 10 millions). En concertation avec nos encadrants, nous nous sommes alors vus attribuer un serveur de calcul du département LUSSI. L’idée étant de tester la scalabilité des packages sur des graphes de dimensions semblables à ceux susceptibles d’être fournis par Standing On Giants. Nous voulions ainsi tenter de trouver des liens ou des généralisations entre le temps d’exécution de certains algorithmes gourmands en ressources et les paramètres même du graphe. Tout cela ayant pour finalité de pouvoir donner une évaluation du temps d’exécution d’un algorithme sur un graphe uniquement en fonction de ses paramètres (cf. notre article sur ce même blog). Un serveur de 128 Go de RAM et 32 cœurs a alors été mis à notre disposition pour la durée du projet.
De l’art d’utiliser un serveur !
L’utilisation de ce serveur nous a réservé quelques surprises. Entre les problèmes de connexion au serveur lui-même, les problèmes de connexion internet via tunnel SSH, les mises en place problématiques de nos environnements R et Python ou encore les scripts qui semblent tourner sans fin, il nous a fallu nous accrocher. Initialement, cela nous semblait tout aussi simple que de prendre en main un terminal sous Ubuntu mais nous nous sommes alors rendu compte qu’une tâche aussi banale qu’importer un fichier s’avérait compliquée. Une fois le serveur et ses configurations mieux maîtrisées, les scripts ont pu être lancés (en tout une trentaine entre R et Python) dont certains ont été abandonnés car trop longs. De plus, une partie des résultats était à nouveau inexploitable ou n’apportaient pas d’informations quant aux relations entre temps d’exécution et paramètres du graphe (diamètre, densité, réciprocité…). Un serveur n’est pas aussi transparent qu’un ordinateur physique et cela implique pour son utilisation une grande maîtrise de ce dernier et des compétences d’administrateur système !
Ce qu’on en retient
Il y a donc différents aspects qui ressortent de ce projet.
Tout d’abord, il fut très intéressant de travailler sur une mission concrète d’entreprise d’autant plus lorsqu’elle a trait à des problématiques actuelles.
En effet, l’utilisation de la théorie des graphes pour décrire les réseaux sociaux est en pleine expansion et avoir pu en apprendre un peu plus auprès d’enseignants-chercheurs a été très enrichissant.
Cette approche assez exploratoire nous a également apporté un aperçu du travail effectué en recherche dans les différents laboratoires de Télécom ou même d’ailleurs.
Il n’est pas simple de devoir remettre souvent ses résultats en question et d’accepter que certaines tâches effectuées n’auront pas d’utilité pour la suite du projet. Enfin, et plus personnellement, cela nous a permis d’élargir notre domaine de connaissance : théorie des graphes, utilisation d’un serveur de calcul, découvertes de packages, lecture des thèses. Tous ces éléments ont fait de ce projet une expérience réellement intéressante et nous souhaiterions remercier nos deux encadrants, Cécile Bothorel ainsi que Laurent Brisson, de nous avoir soutenus, supportés et guidés lors de cette mission.
Faut-il passer sur une plate-forme Big Data ou non ?
Par Quentin MARINIE et Fabien VIOSSAT, étudiants 3A Telecom Bretagne.
L’objectif de notre projet est de pouvoir analyser des communautés de forums, parfois très populaires et très actives, à l’aide de la théorie des graphes. A terme, nous souhaitons équiper des Community Managers d’outils de monitoring de l’activité de leurs forums.
Notre projet d’étudiants en dernière année du parcours Data Science de la filière ISA est de faire un benchmark des outils existants et de pouvoir dimensionner la plate-forme d’analyse en fonction du volume des données à traiter.
Mise en place du benchmark
Nous avons, dans un premier temps établi un panorama des outils existants permettant d’analyse des réseaux d’interactions représentant l’activité d’échange sur des forums. Nous avons fait un comparatif des performances de ces outils. Ce comparatif des performances est tourné uniquement vers l’utilisation d’algorithmes d’Analyse de Réseaux Sociaux (Social Network Analysis en anglais) tel que le calcul de diamètre d’un graphe, le calcul de centralités (intermédiarité, proximité, etc.).
La première information importante que l’on a pu tirer de cela est le fait que nos machines personnelles (laptop) ne nous permettent pas de traiter des graphes de la taille des communautés de forums visées, soit quelques millions de nœuds. Nous avons donc eu recours à un serveur de recherche de l’équipe CNRS Decide du Labsticc à Télécom Bretagne (128 Go de RAM et 32 cœurs) dans l’espoir d’arriver à exécuter ces algorithmes.
Nous avons récupéré un panel de datasets sur le site SNAP de l’université de Stanford. Ces jeux de données réels sont échelonnés en nombre de nœuds et nombre d’arêtes, allant de 4000 nœuds et 88000 arêtes jusqu’à 3 millions de nœuds et 6 millions d’arêtes. Pour chacun de ces datasets nous avons pu calculer les caractéristiques descriptives des graphes qui nous importaient pour chacune des deux librairies en lice, Igraph-R et Igraph-Python, qui s’avèrent les plus performantes parmi les 7 librairies sélectionnées au départ dont NetworkX.
Igraph-R vs. Igraph-Python : nous avons fait un rapide comparatif des performances de 4 algorithmes sur 6 jeux de données : diamètre, intermédiarité des sommets, centralité de proximité, taille de la clique maximale. Cela nous a montré que Igraph-R est plus performant que Igraph-Python dans 23 des 24 cas comparés.
Notre machine sera-t-elle suffisante pour ce réseau d’interaction ?
Big data ou non ? Dans quel cas de forum faudra-t-il changer de paradigme et passer à une plate-forme Big Data ? Sachant les caractéristiques simples de notre forum, l’outillage sur notre serveur sera-t-il suffisant ?
La problématique est ici simple (et très répandue !) : « puis-je continuer à utiliser mes outils historiques, que je maîtrise et qui procurent une grande valeur ajoutée, pour ce nouveau jeu de données ? Ou bien dois-je passer à une autre plate-forme, moins riche… et que je maîtrise moins ? »
Notre volonté de prédire les temps d’exécution des algorithmes s’applique avant tout aux algorithmes de base, utilisés par nos outils maison, et gourmands en termes de temps. Les trois principaux étant :
- le calcul d’intermédiarité des sommets,
- la proximité des sommets,
- le calcul du diamètre du graphe.
Nous n’avons pas eu besoin de considérer la prédiction du calcul du diamètre car des méthodes permettant d’approximer cette valeur existent et réalisent le calcul en un temps machine négligeable (voir par exemple ce que nous avons utilisé : l’algorithme du bout du monde).
Nous avons alors effectué de multiples régressions en changeant la variable explicative de manière à trouver des corrélations avec les temps d’exécutions.
Les variables explicatives sont des descripteurs simples à calculer sur un nouveau jeu de données : on peut citer ici des caractéristiques de réseaux sociaux classiques tels que le nombre de noeuds, d’arêtes, la densité d’arêtes, ou encore le diamètre (avec la technique linéaire de calcul, nous pouvons nous servir de cette mesure comme caractéristique descriptive de notre réseau).
Ainsi, c’est prêt d’une trentaine de graphes qui ont été tracés et qui n’ont pu aboutir à aucune régression. Toutefois, nous avons obtenu les résultats suivants pour le paramètre composé : diamètre * nombre d’arêtes.
On peut constater que le coefficient de corrélation est ici de 1 avec la combinaison (diamètre * nombre d’arêtes) pour l’ensemble des datasets pris en compte. Il est important de savoir que le coefficient de corrélation maximum obtenu sur l’ensemble des autres graphes était de 0.86 lorsque l’on ne considérait que le nombre d’arêtes et qu’il était impossible d’interpoler la grande majorité des graphiques.
De multiples axes de progressions semblent possibles, tant sur la validation des régressions que nous avons pu réaliser, que sur les possibilités que cela pourrait apporter.
Mise en place du parcours de formation Data Science à IMT Atlantique
Ce parcours de 3ième année s’appuie sur 2 années de formation d’ingénieur généraliste. Elle propose aux étudiants ds cours aussi variés que complémentaires : Statistiques avancées, introduction au Big Data avec manipulation de l’environnement Hadoop/MapReduce, Business Intelligence, Informatique décisionnelle, SAS pour l’économétrie et l’actuariat, Fouille de données, Aide à la décision.
Nos ingénieurs sont confrontés aux concepts et techniques nécessaires aux différentes étapes de la gestion et de l’analyse de gisements données, jusqu’à leur interprétation pour l’aide à la décision.
La formation débouche sur des stages en data science mais surtout offre aux diplômés l’accès aux métiers de l’économie de la donnée.