Il y a 1 année · 11 minutes · Data

Retours sur PyData Paris

pydata.png

Les 14 et 15 juin, nous étions à la deuxième édition parisienne de PyData, la conférence internationale regroupant tous les sujets traitant de près ou de loin de Python et de la Data. Au cours de cet article, nous allons vous faire un retour sur quelques-unes des interventions qui nous ont marqués.

Overview : programme et pitches

Keynote d’ouverture – « Predictive Modeling and Python: some trends » – O. Grisel

Lors de cette keynote d’ouverture, Olivier Grisel nous a parlé de l’évolution des outils pour la modélisation prédictive au cours du temps. Si l’on se réfère en termes de quantité de données à traiter par des « Data Scientists », tout était encore envisageable en Excel il y a peu de temps. Avec l’augmentation progressive de la taille des datasets à traiter et de la complexité des cas d’utilisation à adresser, des outils plus performants comme Python ou R sont apparus plus adéquats. Et puis, au fur et à mesure, les données d’entrée que l’on avait à traiter ne tenaient plus en mémoire, si bien que des outils tels que Hive devenaient nécessaires pour faire toute la phase de traitement et Feature Engineering des données. Cependant, une fois ces phases réalisées, les données traitées pouvaient repasser en mémoire, et l’utilisation de bibliothèques telles que scikit-learn était toujours envisageable. La nouvelle tendance aujourd’hui est que même les datasets traités ne tiennent plus en mémoire, et il faut alors utiliser des frameworks de calcul distribué comme Spark qui permettent de réaliser toutes les étapes avec le même outil.

Le présentateur a ensuite identifié les problèmes liés aux passages à l’échelle des modèles prédictifs. Ces problèmes surviennent à plusieurs niveaux :

  • Les phases de Feature Engineering et de scoring d’un modèle sont très consommatrices en termes d’I/O
  • La phase d’entraînement d’un modèle de Machine Learning consomme énormément de CPU (Cross-Validation, Modèles d’ensemble, …)

Aujourd’hui, des outils tels que Spark sont de plus en plus utilisés pour la quasi totalité des phases d’un projet data. Cependant, son API Python peut présenter quelques limites:

  • Nécessité de passer d’un driver Python à du code sur JVM puis repasser à des workers Python, créant ainsi beaucoup de latence
  • La traceback est très complexe pour les développeurs ne faisant pas de Scala
  • Pas de pur modèle Python en local pour PySpark

Ces problèmes font que, souvent, il est nécessaire de comprendre toute la stack pour debugger du code. Malgré cela, des outils comme Spark restent les références dans le domaine du processing et modeling de la donnée à grande échelle. Cependant, quelques alternatives sont en train de voir le jour. Des bibliothèques comme dask ou distributed, qui sont des purs outils Python, permettent de travailler sur de grosses volumétries de données tout en continuant d’utiliser de manière similaire les bibliothèques classiques que sont pandas ou scikit-learn via des runs asynchrones. Ces bibliothèques ne sont pas encore prêtes pour la production, et il leur manque quelques pièces importantes (shuffle et group by distribués notamment), mais pourront à l’avenir devenir des alternatives crédibles à Spark.    

Pour terminer, Olivier Grisel a parlé des frameworks pour le Massive Parallel Processing (MPP), tels que BigQuery, PrestoDB ou Impala, qui permettent de lancer des requêtes SQL sur de larges volumes de données en utilisant des moteurs différents du Map-Reduce classique. Bien que très pratiques, ces outils ne permettent de faire que du SQL. C’est donc intéressant pour des requêtes ad-hoc, mais il n’y a notamment pas de possibilité de visualisations simples des données, ni de processus de tests facilement implémentables. C’est pourquoi des bibliothèques telles que blaze et ibis apparaissent, permettant d’avoir des APIs en Python par dessus les moteurs SQL.

En conclusion, l’une des choses principales à retenir est que, bien que les bibliothèques pour le calcul parallélisé sont de plus en plus nombreuses et utilisées, on ne devrait jamais sacrifier la possibilité d’utiliser une seule machine locale tant que c’est possible.

Liens utiles :

Présentation similaire Keynote PyData Berlin 2016 : vidéo

Twitter : @ogrisel

Dépôt Github :  ogrisel

Dépôt Github dask :   dask

« Lightning, a library for large-scale machine learning in Python » – F. Pedregosa

Fabian Pedregosa nous a présenté Lightning, une bibliothèque Python spécifique pour le Machine Learning à grande échelle. Lightning a été développée en partant du principe que des projets phares commes scikit-learn ne permettent pas toujours de couvrir tous les cas d’utilisation, ni d’intégrer beaucoup de nouveaux algorithmes. Comprenant de nombreux algorithmes pour l’optimisation à grande échelle, Lightning a une API compatible avec scikit-learn et scalable. Le terme grande échelle inclu ici les cas où il y a énormément d’échantillons de données, mais aussi les cas où il y a énormément de features (colonnes) dans un dataset, avec des algorithmes spécifiques pour chaque cas.

Bien que la bibliothèque soit compatible avec scikit-learn, il y a tout de même des différences en termes de philosophie de construction du code. En effet, scikit-learn est basée sur les modèles: la classe correspond à la fonction de coût, et l’algorithme en lui-même est un paramètre. Dans Lightning, c’est l’inverse: l’API est basée sur l’algorithme (qui correspond à la classe), et la fonction de coût est un paramètre.

Enfin, il n’est jamais vain de rappeler que Lightning est une des premières bibliothèques construites en répondant aux critères de scikit-learn-contrib, permettant d’être acceptée comme bibliothèque compatible avec l’API scikit-learn.

« 10 plotting libraries » – X. Dupré

La Data Visualization est un vaste sujet, et chaque domaine peut avoir des contraintes spécifiques en fonction des données et des informations que l’on cherche à montrer. Cette présentation de Xavier Dupré avait pour but de présenter quelques bibliothèques Python pour la visualisation. De nombreuses bibliothèques existent, nous présentons ici les principales qui ont été introduites, que ce soit pour de la visualisation statique ou interactive.

Visualisations statiques

  • seaborn: Basée sur matplotlib, permet de créer des graphes statistiques attrayants, tels qu’on peut les réaliser en R ou via matplotlib, avec peu de lignes de code et un design élégant.
  • basemap: Aussi basée sur matplotlib, permet de créer des cartes de manière très simple avec simplement.
  • ete3: Bibliothèque permettant de représenter et analyser des arbres de décision. On peut très simplement représenter les différentes branches d’un arbre et afficher la distribution des données dans les branches.
  • ggplot: bibliothèque basée sur la même syntaxke que la bibliothèque ggplot2 de R.
  • missingno: Permet de repérer et visualiser les données manquantes dans une DataFrame pandas.

Visualisations interactives

Les bibliothèques permettant des visualisations interactives sont très souvent basées sur du Javascript, qui reste la référence dans le domaine.

  • bokeh: Permet de réaliser simplement des visualisations interactives dans le style de d3.js
  • mpld3: Permet de concilier matplotlib avec d3.js
  • lightning-viz: bibliothèque qui fonctionne aussi en R, JavaScript et Scala.
  • bqplot: Visualisations interactives pour les notebooks Jupyter, utilisant d3.js et ipywidgets.

« How to apply data to make better hiring decision in recruitment » – K. Yeung

Au cours de cette présentation, Ken Yeung a parlé de leurs différents travaux concernant des approches Data Driven pour le recrutement. Plusieurs constats ont mené à la volonté de réaliser ce genre d’études. Premièrement, les entreprises peuvent perdre jusqu’à plusieurs millions en recrutant les mauvaises personnes. Mais un autre point important est de savoir que la notion de recrutement peut être perçue comme subjective et souffre d’un biais dû à l’humain. Des études ont pu révéler que des recruteurs peuvent parfois ne passer que très peu de temps sur un CV et ne regarder que certains concepts clés, principalement à cause du grand nombre de CVs à étudier pour un même poste. C’est pourquoi une approche Data Driven pour analyser les CV et repérer les potentiels bons candidats semblait intéressante.

L’approche proposée est relativement simple:

  • Transformer les CV dans un format structuré de données ;
  • Extraire des features représentatives des candidats ;
  • Entraîner un modèle en se basant sur les CVs des employés de l’entreprise ;
  • Appliquer les prédictions de ce modèle sur les CV des candidats pour un poste spécifique pour repérer un sous groupe de CV de potentiels bons candidats.

Le gros du travail se situe alors dans l’identification et l’extraction des features à partir des CVs qui ont été préalablement parsés. Voici quelques unes des features utilisées pour catégoriser un candidat:

  • Séniorité ;
  • Potentiel de management ;
  • Expérience en industrie ;
  • Indices de performances sur certaines expériences ;
  • Compétences tirées à partir de l’intitulé du job de la personne.

La majorité de ce travail d’extraction a été fait en Python, en construisant un extracteur spécifique pour chaque feature, et en les assemblant dans un pipeline scikit-learn. De nombreuses questions se posent encore, comme le fait d’être dépendant de la CV-thèque de l’entreprise ou bien de potentiellement scorer moins bien des candidats avec des profils plus atypiques, mais cette étude donne un bon exemple de comment utiliser les données à disposition pour assister les recruteurs à prendre de meilleures décisions.

« Become an expert in webscraping (data extraction) » – F. Vauchelles

Fabien Vauchelles, CTO chez Zelros, a pu nous présenter, au cours d’un workshop, sa vision de ce qu’est un « expert » du webscraping et de comment le devenir.

Dans son introduction, il a commencé par énumérer quelques conseils et pièges à éviter pour extraire les données d’un site web. Il a notamment insisté sur les différentes questions à se poser avant de se décider à passer à l’acte : Est-ce légal ? Est-ce que les données sont liées au business du site ? Suis-je sûr que le site ne met pas les données à disposition ? Bien sûr, il a déconseillé d’utiliser son accès DSL et de passer par un agent utilisateur par défaut. Vous trouverez plus de détails dans sa présentation « From 0 to 1 with scraping ».

Le framework Scrapy écrit en python a été décrit comme l’un des plus simples, des plus efficaces et des plus robustes pour l’extraction de données structurées dans des pages web. Il a aussi évoqué son projet, Scrapoxy, qui empêche que votre scraper ne soit  blacklisté. En effet, scrapoxy permet d’utiliser un groupe de proxy pour lancer un grand nombre de requêtes (des instances AWS et OVH peuvent être utilisées). C’est open-source, écrit en AngularJS/Node.js et facilement utilisable avec Scrapy.

Dans une seconde partie nous avons pu mettre en pratique le framework Scrapy, en nous confrontant à quatre challenges d’une difficulté graduelle. D’abord nous devions scraper le contenu d’une page web puis de plusieurs et enfin contourner différentes mesures de protections (authentification, refus d’agent utilisateur non usuel). Ci-dessous le dépôt Github permettant de rejouer cet atelier

Liens utiles :

Présentation  : « From 0 to 1 with scraping »

Dépôt Github Workshop : Scraping challenge workshop

Twitter :    @fabienv

Dépôt Github :   fabienvauchelles

« Building Visualisations in D3.JS for Python Programmers » – T. Parslow

Là encore, le sujet de Visualisation de la donnée a été abordé. Thomas Parslow nous a présenté la bibliothèque JavaScript D3.js permettant de créer des visualisations interactives pour mettre en valeur la donnée. Selon lui, bien qu’il existe un grand nombre de façons de créer des visualisations en python, seule l’utilisation de Javascript permet d’avoir un contrôle total.

S’en est suivi des exemples concrets de visualisations ainsi qu’un premier tour de découverte concis et intéressant du code lié à D3.js. Plus de détails dans sa présentation Introduction to D3.JS.

Liens utiles :

Présentation  : Introduction to D3.JS

Twitter :  @almostobsolete

« When Software Craftsmanship meets Data Science » – Y. Benoit and S. Lequeux

Cette présentation était l’occasion pour nous de revenir sur nos idées et nos avancées pour concilier les domaines de la Data Science et du Software Craftsmanship. Ces domaines, ainsi que les profils de personnes qui les composent, fonctionnent à priori différemment mais ont tout à gagner à collaborer.

C’est pourquoi nous sommes revenus sur les principales différences entre ces deux mondes, tant sur les objectifs, les personnes, l’éducation que sur les outils utilisés. Une fois ces constats faits, des pistes de réflexion ainsi que des conseils et exemples concrets issus de nos travaux ont été proposés. Parmi les thèmes abordés, les environnements de travail, les tests, l’agilité et la place du Data Scientist au sein des équipes.

Toutes ces réflexions ont pour objectif d’intégrer au plus tôt le Data Scientist dans un mode de travail orienté vers le développement et le déploiement continu, pour une intégration et une mise en production plus simple et optimisée des projets avec les Data Engineers et DevOps.

Nous reviendrons sur toutes ces notions dans un article dédié.

Liens utiles :

Twitter : @YoannBENOIT@slequeux

Yoann Benoit
Yoann est Data Scientist chez Xebia depuis près de deux ans. Il intervient sur de nombreux sujets autour de la Data Science et du Big Data, allant de la collecte, du traitement et de l'analyse des données jusqu'à la mise en production de pipelines complets de Machine Learning. Speaker et rédacteur à la fois sur les concepts et les technologies liées à la Data Science, il travaille principalement avec Python, Scala et Spark. Il intervient de plus en tant que formateur sur l'Analyse de Données et le Machine Learning sur Spark.

Une réflexion au sujet de « Retours sur PyData Paris »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *