Construire un système de machine learning industrialisable avec Prevision.io

Une des avancées technologiques majeures des dernières années a été le développement des techniques de Machine Learning et d’intelligence artificielle, au point qu’elles paraissent aujourd’hui omniprésentes. Mais il semble y avoir encore plus de problèmes à résoudre qu’il n’y a de data scientists pour les résoudre. Les data scientists sont certes en forte demande, mais le problème vient surtout du fait que le workflow en vigueur dans la plupart des projets est archaïque. Un projet normal va utiliser un nombre importants de langages et de frameworks pour passer de l’acquisition des données, à leur préparation puis au déploiement des modèles, ce qui crée un système complexe et peu fiable, enclin à la panne d’une des parties.

C’est ce que notre expérience, dans de petites ou grandes entreprises, liées directement à la technologie ou non, nous a montré. Une grosse partie du travail de “data science” est fastidieux et répétitif, et a une faible valeur ajoutée.

Comment donc résoudre ce problème et automatiser au maximum ce travail ?

  • La préparation des données ? C’est pour nous le problème “dur”. La diversité des formats et des typologies de problèmes font qu’il n’existe pas, pour l’instant, de panacée pour automatiser l’extraction, la préparation et le formatage des données pour les rendre compatible a un problème de machine learning.
  • Mais le reste ? Notre objectif avec Prevision.io a été de créer un logiciel dans lequel il serait très simple d’utiliser n’importe type de données, à peine préparées, que ce soit des images, du texte, des données tabulaires ou d’autres, et qui ferait automatiquement tout le travail de modélisation et déploierait directement les modèles dans un environnement de production pour une utilisation immédiate.

Le but était de nous permettre à nous, Data Scientists, de nous concentrer sur notre véritable valeur ajoutée, c’est à dire de résoudre de vrais problèmes grâce aux données, et non pas de nous extasier devant la performance de nos modèles, 0.001% supérieure à celle de nos collègues.

Nous n’avons pas oublié la performance, cependant, et tout au long du développement, un de nos moteurs a été de ne jamais sacrifier la performance pour d’autres aspects de l’application. A chaque étape, en plus d’une validation fonctionnelle du service, nous avons donc systématiquement validé la performance statistique de nos modèles, pour nous assurer qu’ils étaient toujours au moins aussi bons que ceux développés “à la main” par nos data scientists.

Pour illustrer tout cela, nous allons essayer de construire un projet complet à partir de zéro, en quelques dizaines de minutes, à peine plus que le temps qu’il faut pour lire cet article.

Le problème que nous allons essayer de résoudre est un problème courant dans les entreprises aujourd’hui, qui est de savoir comment communiquer efficacement en utilisant les réseaux sociaux.

Avec de l’expérience, on peut estimer la portée de nos messages, mais c’est rarement fiable, et plus souvent de l’approximation qu’une véritable science.

En visant les community managers et les équipes de communication digitale, nous proposons donc de construire un outil qui leur permettrait d’estimer la portée de leurs tweets, de manière à ce qu’ils puissent mieux organiser leurs messages, et optimiser des détails comme les termes et hashtags à utiliser.

L’outil sera composé d’une application Flask comme back-end, recevant un input d’une page html très simple, pour ensuite utiliser l’API twitter, puis l’API de prédiction Prevision.io pour prédire le nombre de retweets avant de l’afficher dans le navigateur.

Les données

En utilisant l’API Stream publique de Twitter, nous avons récupéré quelques tweets, et quelques informations sur les utilisateurs qui les ont postés.

Un échantillon du jeu de données que nous utiliserons pour l’entraînement

On peut voir, dans cet échantillon du jeu de données, que les données sont encore “sales”. Il y a des variables numériques, catégorielles, des dates, et le texte et la biographie des utilisateurs sont du texte brut. La plupart des algorithmes de machine learning ne sont pas capables de traiter cela directement, l’analyse du langage naturel étant un problème en soi.

Nous avons essayé de construire la plateforme Prevision.io pour qu’elle puisse accepter tous ces types de données nativement, pour que vous n’ayez pas besoin de vous occuper avec des analyses statistiques ou des embeddings pour le texte, l’analyse des dates, ou l’encodage des variables catégorielles.

Le seul prétraitement que nous avons fait ici a été d’ajouter une colonne correspondant au logarithme naturel du nombre de retweet, qu’on utilisera comme cible de la régression, ce qui peut aider la convergence dans les problèmes de régression biaisés.

Construire un modèle

La page de connexion Prevision.io

Avec ce jeu de données, il nous faut maintenant nous connecter à notre compte sur le site prevision.io et créer un nouveau projet. A l’heure actuelle, il est possible d’importer des données sous forme de fichier .csv, ou à travers un connecteur Hive. D’autres sont en préparation, et nous supporterons bientôt tous les standards utilisés dans l’industrie.

Une fois que le jeu de données est importé, la plateforme va analyser les colonnes et il vous faudra sélectionner laquelle représente la cible que vous souhaitez prédire. Si votre jeu de données possède une colonne “ID”, vous pourrez l’indiquer pour que la plateforme ne l’utilise pas pour l’entraînement. Vous pouvez aussi explicitement exclure des colonnes, ce qui est très pratique dans notre cas, étant donné que l’on ne souhaite prédire que la colonne “retweet_count_log”, et que le nombre de retweets brut ne devrait pas être présent dans le jeu de données (autrement, les modèles essaieraient de prédire le logarithme du nombre en fonction du nombre lui-même, ce qui n’est pas l’objectif du problème).

La plateforme a automatiquement détecté que la colonne que nous avons sélectionné contient des valeurs réelles, et à donc défini le problème comme une régression. Il ne nous reste donc plus qu’a cliquer sur “entraîner les modèles” pour lancer le processus.

Pour la plateforme, le véritable travail commence maintenant. Elle va analyses les données, transformer les dates et le texte, combiner des colonnes et commencer à sélectionner, entraîner et optimiser les modèles.

Mais pour nous, le travail est terminé et il ne reste plus qu’à attendre.

Le processus d’entraînement complet prend un certain temps, et en fonction de la taille du jeu de données, il peut falloir attendre plusieurs heures. Mais il est tout a fait possible de commencer à utiliser le projet dès le début de l’entraînement. Au bout de quelques minutes, même sur les plus gros jeux de données, certains modèles simples seront prêts, dont la performance sera encore limité, mais qu’il sera tout à fait possible de déployer et d’utiliser.

Suivi de l’entraînement des modèles.

On se dirige donc dans la section “Clé API”, où on peut sélectionner le projet qui nous intéresse et générer un “token”, qu’il suffira de copier-coller dans votre application pour la lier avec le modèle.

Et on peut donc maintenant utiliser l’application décrite plus haut pour prédire le nombre de retweets.

Vous pouvez donc tester quelques tweets, depuis votre compte, ou pour simuler ce qu’il se passerait si un utilisateur célèbre l’avait écrit. Nous n’avons récupéré qu’un échantillon minuscule du flux twitter, pendant un temps très court, nos modèles ne pourront donc pas capturer toute la richesse des messages postés sur ce réseau social.

Mais même si l’application et le back-end sont très simples, la partie prédictive de notre architecture est totalement prête pour la production.

Pour conclure, que vous soyez une start-up qui souhaite rapidement ajouter une brique d’intelligence artificielle à son produit, ou une entreprise plus importante, qui souhaite tester de nombreux cas d’usage de manière à créer des services personnalisés pour ses clients, Prevision.io vous permet de créer un système de Machine Learning robuste et flexible, qui peut facilement passer à l’échelle.

Nous continuons à implémenter de nombreuses features, certaines qui vont rendre votre travail plus simple, avec de nouveaux connecteurs et et de moyens de mieux gérer vos jeux de données et vos modèles, d’autres pour améliorer encore la performance, en incluant automatiquement des données exogènes ou de nouveaux types de modèles, et enfin de nouveaux types de données, tels que les images et la vidéo grâce au deep learning, ou des flux grâce à l’online learning.

La plateforme est disponible dès maintenant en Français, Anglais et Mandarin.

Nous publierons régulièrement des articles pour illustrer les aspects et les applications les plus intéressants de la plateforme, donc restez à l’écoute !

Pour toute question, n’hésitez pas à nous contacter sur prevision@prevision.io, ou sur twitter : @PrevisionIO.