Ma formation data analyst #2 : j’ai attaqué le Machine Learning !

Dans mon précédent billet, je racontais le début de ma formation de data analyst, la découverte de SQL, Python, Seaborn... Dans ce deuxième volet, il est question de Machine Learning, d’algorithmes et de choix. On atteint le cœur du réacteur.

Maëlle Fouquenet
10 min readDec 30, 2020

Le début de cycle Machine Learning (ML pour les intimes) a coïncidé avec le début du confinement. J’avoue qu’en l’écrivant, je suis assez fière d’y être enfin : les mains dans le moteur des algorithmes qui deviennent de plus en plus présents partout dans nos vies (souvent sans qu’on le sache/voit).

Après avoir dévoré des livres comme “Weapons of Math Destruction: How Big Data Increases Inequality and Threatens Democracy”, de Cathy O’Neil, après avoir entendu Franck Pasquale, Kate Crawdford, Evgeny Morozov, Sofya Nobel et tant d’autres alerter sur les enjeux et les biais des algorithmes, la transparence, les conséquences sur les démocraties, j’avais hâte de passer à la pratique.

Le cycle a débuté avec des algorithmes de régression puis de classification. On a travaillé avec des algorithmes supervisés et non supervisés. Il a été question de paramètres, de branches, de nombre de feuilles, de PCA, de coudes ou encore de silhouettes. A cause du Covid19, on maîtrisait déjà plutôt bien les notions de clusters, faux positifs et faux négatifs, termes qu’on utilise aussi dans les algorithmes. J’ai créé des modèles, je les ai entrainés sur une partie de dataset puis testés sur l’autre. J’ai aussi découvert Kaggle et les compétitions de machine learning, les sites d’affrontements de code en ligne.

Les projets de machine learning

Ma première étape sur le chemin des algorithmes de machine learning a été le datathon.

1/ Un datathon à partir des valeurs foncières

Le principe du datathon est simple : des groupes qui “s’affrontent”, un jeu de données découvert le matin, une livraison le lendemain à 15h. On livre quoi ? Ça dépend de ce qu’on a réussi à faire mais idéalement un algorithme qui fonctionne avec une interface pour pouvoir le manipuler facilement.

A la découvert des données, ce n’était pas l’explosion de joie. J’avoue qu’il y a plus sexy que le fichier des Demandes de Valeurs Foncières pour s’éclater.

Mais finalement, notre groupe (de quatre personnes) a trouvé rapidement son fil conducteur et l’a tenu jusqu’au bout : nous étions Pizza Immobilier, “une agence nouvelle génération basée sur la data analyse et l’intelligence artificielle.” Notre présentation s’adressait à des investisseurs car, avec une activité en pleine croissance (merci le Covid), nous avions besoin de nous développer. Notre cible : les Parisiennes et Parisiens qui quittent Paris et veulent s’installer en Pays de Loire mais ne connaissent pas les villes (à part peut-être Nantes un peu).

Notre méthode : à partir des plusieurs critères (écoles, santé, espaces verts, équipements sportifs, haut/très haut débit, temps de trajet pour Paris en train, nombre de pizzérias — ça c’est notre touche perso pour se différencier, il a beaucoup été question de pizzas à l’ananas d’ailleurs), on leur propose un top 3 des villes qui correspondent le plus à leurs besoins et attentes, prix des logements au m2 inclus avec au choix appartement ou maison.

Concrètement, comment avons-nous procédé ?

Nous avons décidé rapidement que nous travaillions sur les dix plus grandes villes de la région pour des questions de temps et de connaissance du terrain (ce qui nous permettrait de savoir immédiatement si la proposition était pertinente ou non). Ce dernier point a d’ailleurs été notable dans au moins un des projets concurrents qui proposait des villes ou des quartiers de villes pas franchement attirants, mais qui techniquement répondaient aux critères (c’est une des limites des données, elles ne donnent pas de contexte).

Puis c’était la recherche et la collecte des données qu’on pourrait utiliser pour nourrir notre algorithme. Comme dans le projet climat précédent, mon expérience de journaliste fan de données m’a permis de proposer une série de bases de données, toutes en open data.

La phase suivante a été de les ouvrir et voir si elles étaient utilisables pour notre projet. Nous nous sommes répartis les bases, avec pour mission de dire rapidement si elles étaient utilisables ou pas (contenaient bien les informations supposées, étaient exploitables, avec un critère géographique qui correspondait à notre projet…).

Aperçu de l’appli avec notation de 1 à 5 des critères, puis génération dynamique de carte, fonds de carte OpenStreetMap

Une fois les bases sélectionnées, nettoyées, nous avons rapporté les données pour 1000 habitants afin de pouvoir comparer les villes (on ne savait pas encore comment standardiser des données), transformer les résultats pour chaque ville en note entre 1 et 5 et appliquer un algorithme de type KNN avec un paramètre à trois voisins. Le tout intégré dans une fonction qui enregistre l’importance préalablement donnée par le client sur chaque critère et s’il préfère une maison ou un appartement. L’algo mouline tout et ressort trois villes qui sont les plus proches de la demande.

Côté réalisation, on a utilisé Python et Poltly, la librairie SciKitLearn pour l’algorithme, OpenStreetMap pour le fonds de carte. Les bases de données étaient disponibles sur les portails open data (région Pays de Loire, ministère, open data SNCF, OpenDataSoft).

Ce que j’en retire :

D’abord l’équipe a très fonctionné, la répartition des tâches, les discussions, les directions et les impulsions ont été assez évidentes. Ensuite, la réalisation et la démo en directe font leur petit effet wouah (parce que ça marche, et en si peu de temps, c’est un défi). Et puis nous avons gagné le challenge nantais et présenté notre projet lors de la finale rassemblant les sept campus data en France de la Wild Code School, plus celui d’Amsterdam et les deux en “remote”data .

En revanche, notre taille d’équipe limitée (quatre personnes quand les autres campus étaient six par équipe) ne nous a pas permis d’offrir une interface utilisateur vraiment soignée. En si peu de temps, on priorise. Nous avons présenté et fait la démo via Google Colabs, c’était très propre et fonctionnel, mais il a manqué la jolie barre qu’on fait glisser pour noter un critère. Le groupe vainqueur a ainsi utilisé Streamlit, un outil pour coder des interfaces.

Quoi qu’il en soit, c’était une très bonne expérience, avec la satisfaction d’avoir produit un résultat qui tenait la route en un temps très réduit (oui parce qu’on a dormi la nuit ^^).

2/ Netfloux, notre algo de recommandation de films

L’autre gros projet de machine learning de ces six semaines a été de coder un algorithme de recommandation qui suggère 5 films à partir d’un film initial. Pour schématiser, on nous a demandé de créer un algo à la Netflix (toute proportion gardée bien sûr).

Les bases de données utilisées (MovieLens et Imdb) étaient multiples : une pour les notations des utilisateurs (“ratings”), une pour les infos sur les films, une autre pour les acteurs/actrices… Elles étaient aussi conséquentes en terme de poids.

Créer un algorithme de recommandation de films est un exercice classique dans l’apprentissage du machine learning.

Nos choix et méthodologie :

Etant donné le délai dont on disposait, notre groupe de projet (nous étions quatre là aussi) a pris le parti de travailler sur un algorithme centré sur le contenu, donc à partir des films et non pas de profils d’internautes.

De plus, nous avons délibérément choisi de ne pas traiter certaines informations, comme la colonne “acteurs/actrices” (qui manquait d’explications sur la méthodologie de son contenu et nous paraissait trop aléatoire et trop sujette à produire des “bulles” qui renverraient toujours les mêmes acteurs dans les réponses).

La première difficulté a été de faire correspondre ces différentes bases de données pour que les infos contenues dans l’une tombe en face du bon film dans l’autre si on les rapprochait. Deuxième difficulté, et c’est souvent le cas, les bases contenaient des données manquantes, des doublons. Enfin, troisième difficulté, il a aussi fallu déterminer comment exploiter la colonne “genre” qui pouvait regrouper plusieurs réponses pour un même film. Les variables ont été transformées en indicateurs exploitables.

Après avoir travaillé les bases, les avoir nettoyées, et les avoir rassemblées en une seule, nous avons standardisé les données. Là dessus, nous avons appliqué un algorithme KNN à 5 voisins, ce qui signifie que l’algorithme va chercher les 5 films les plus proches de celui indiqué au départ selon des critères qu’on lui soumet. Ici nous avons retenu : le genre, la durée, les notes (nombre total et moyenne pour chaque film), l’année de sortie du film.

Avant d’arriver à des résultats globalement concluants, on a eu quelques surprises. Si on peut voir la relation entre Top gun et E.T. (les deux volent ?), je déconseille fortement Seven aux enfants (même ceux qui ont aimé Toy Story). Quant au rapprochement entre Dirty dancing et Babe

A chaque test, des modifications étaient faites sur un critère ou un paramètre pour améliorer les suggestions. Côté code, on a utilisé Python et la librairie SciKitLearn pour l’algorithme.

Ce que j’en retire :

Ce projet a été utile pour mesurer à quel point il est important de bien connaître le contenu et la structure des bases de données pour pouvoir coder un algorithme efficace.

Contrairement à d’autres projets de groupe, celui-ci n’était pas facilement “découpable”, notamment parce qu’on voulait tous triturer notre propre algorithme pour savoir ce qu’on était capable de produire.

On a aussi expérimenté, testé d’autres approches (un algo Kmeans pour générer des profils utilisateurs à coupler aux caractéristiques des films) qu’on a laissé tomber en cours de route par manque de temps. Il faut savoir renoncer à certaines choses pour que le produit fonctionne et soit terminé en temps et en heure.

Aperçu d’un test de notre algorithme final de recommandation à partir du film “Top Gun”.

En confinement, garder le rythme des journées

En marge du travail intense lors des cours et des différents projets, je me suis appuyée sur les rituels déjà existants lors de la formation sur site et conservés pendant le confinement :

  • les daily du matin, moment de partage des inquiétudes, des difficultés, mais aussi des bons plans de cavistes “pour après”
  • les cours sous forme de live coding qui se déroulent plusieurs fois par semaine, qui sont l’occasion de revenir sur les notions floues
  • les intervenants extérieurs : Jennifer Prendki à propos de de la création de modèles d’IA plus efficients ; Dayo Aderibigbe sur la transformation des données en or pour l’utilisateur ; Simon Louvet de DataPlayers pour un TP
  • la rétro du vendredi qui tient le rôle de récap’ de la semaine. On échange à cette occasion avec le groupe des développeurs, on se défie gentiment au quiz hebdo pour voir ce qu’on a retenu de la semaine via Kahoot (et sa musique plus ou moins agaçante).

Ces rendez-vous, encore plus à distance, impriment un rythme important à conserver, qui donne des repères, aide à tenir la distance. Car il parait de plus en plus probable que les six semaines qui nous restent de formation ne se tiendront pas en présentiel. Malheureusement.

Gérer la passion et le manque de temps

Cette formation m’apporte toujours énormément d’excitation et d’effervescence intellectuelle, même plus qu’au début puisqu’on touche au sujet qui me passionne : le fonctionnement des algorithmes :) Mais elle génère aussi des frustrations en raison de la grande quantité de notions nouvelles à absorber en peu de temps. La sensation de ne pas avoir assez de temps pour tout faire (y compris certains exercices optionnels) me laisse un sentiment inaccompli.

J’aimerais avoir le temps de plus jouer avec chaque algorithme, plus tester de paramètres. Avoir plus de temps pour revoir en replay cette conférence qui semblait passionnante mais qui s’est déroulée en même temps qu’une autre obligatoire dans le programme. Avoir plus de temps pour papoter avec mes collègues de formation, échanger sur notre recherche de stage, la suite, la vie… Bref les petites discussions qui égayent une journée en présentiel.

Et puis, il faut bien le dire, avoir une famille, c’est aussi souvent la “vie réelle” qui reprend le dessus à peine la journée de formation achevée. Rien d’anormal à cela, mais quand on apprend et qu’on est passionné par le sujet, on est souvent avide et donc frustré de ne pas avoir le temps de fouiner plus.

Le confinement, la boxe et le chocolat

Le fait de ne pas sortir ou très peu joue probablement aussi dans ce sentiment de pouvoir aller plus loin dans les lectures et les expérimentations mais d’être un peu coincée, dans une sorte d’immobilité.

J’ai d’ailleurs repris deux semaines avant les vacances de Noël les cours de fit boxing. Ça ne vaut pas les cours de boxe en physique, mais au moins je bouge et mon dos remercie les minutes de gainage qui contrebalancent les heures assise sur la chaise du salon (pas du tout prévue pour cet usage). Sans oublier que ça compense (un tout petit peu) les tablettes de chocolat qui disparaissent mystérieusement dans la journée.

Une chose est certaine, malgré l’apprentissage en distanciel, malgré le sentiment de manquer de temps pour faire tout ce que je voudrais, le bond en terme d’acquisition de compétences de ces six dernières semaines me parait prodigieux. De plus, juste avant les vacances, j’ai entamé le NLP (Natural language processing, c’est le traitement automatique du langage naturel), ça promet de belles choses pour les six semaines à venir !

--

--

Maëlle Fouquenet

Journaliste en formation/reconversion data analyst, ex responsable numérique @ESJPRO. Algo, transparence, audio, ❤#Berlin, #Nantes, #freediving et #lindyhop