Retour sur ma formation de Data Analyst

J’ai terminé il y a quelques semaines ma formation de Data Analyst, formation née de la collaboration entre l’ENSAE et OpenClassrooms. Il s’agit d’un diplôme de niveau 6, ce qui est à cheval entre une L3 et un M1 d’un point de vue équivalence. Je ne vais pas revenir sur mon parcours m’ayant amené ici (déjà fait dans ce billet), mais simplement vous donner mon retour et présenter les différents projets.

Je sais que certaines personnes attendaient cet article. J’espère que cela pourra aider et répondre aux questions de ceux et celles qui hésitent à se lancer.

Edit : on m’a posé plusieurs fois la question concernant l’organisation et le temps passé. Mon objectif était de passer 20 heures par semaine sur la formation, que cela soit sur les cours ou bien sur les projets. Il faut savoir que certains projets demandaient beaucoup de temps de mise en oeuvre, d’autres demandaient plutôt une bonne maîtrise théorique avec une mise en oeuvre rapide. En fonction des projets je passais donc plus ou moins de temps sur la partie cours et/ou sur la partie pratique. Pour donner un ordre d’idée, mon rythme était grossomodo une validation de projet par mois en y consacrant 20 heures par semaine.

Points positifs

La formation est axée autour de projets à réaliser de A à Z, de la récupération des données jusqu’à la soutenance orale filmée. Parfois il s’agit de données fictives, mais la plus part des travaux sont basés sur des données réelles (FAO, Worldbank, RTE France…). Chaque projet est soutenu face caméra dans un temps imparti. Ceci permet d’appliquer quasiment immédiatement les connaissances acquises, de tester, de creuser et d’itérer entre théorie et application au quotidien. Enfin, cela oblige également à aiguiser son esprit de synthèse et de communication, puisque chaque soutenance doit être appuyée par une présentation sur slide et non par des fichiers techniques tels que des notebooks Jupyter.

Le second point pédagogique à retenir est qu’on est accompagné tout le long de sa formation par un mentor, qui est là pour vous aider, vous aiguiller, vous soutenir (Coucou Amaury :). Cela instaure au fil du temps une relation très particulière qu’on ne retrouve pas ailleurs. Formellement, il s’agit d’une visio-conférence hebdomadaire d’environ une heure. Si des difficultés majeures se présentent durant une phase de travail, on ne reste jamais longtemps dans le doute, sans réponse. Bien entendu, il est toujours possible d’échanger avec son mentor en dehors de la session officielle, bien que rien ne l’y oblige contractuellement.

Enfin, une fois officiellement étudiant, on a accès au Workplace d’OpenClassrooms, qui est le lieu de vie de la communauté. On y retrouve un groupe par formation, qui sont animés en permanence par les élèves, les mentors et l’équipe pédagogique puis des groupes plus informels pour inciter à créer du lien. C’est top pour échanger des conseils, des points de vue, des ressources, poser ses questions, etc. Pour ceux qui ne connaissent pas Workplace, il s’agit grossomodo d’un réseau Facebook privé.

Cette formation m’a apporté tout ce que je recherchais : des bases solides en statistiques et la possibilité de réaliser un stage en recherche (sur lequel je reviendrai dans un article dédié). Ayant un peu de background technique, c’était surtout la théorie que j’étais venu chercher, dans le but de continuer sur l’apprentissage du Machine Learning ensuite. C’est ce que je fais aujourd’hui en suivant un Master 2 en ligne en collaboration avec CentraleSupelec et OpenClassrooms.

Il y a un point dont je discutais avec Luc Bertrand (le directeur pédagogique de la branche data chez OpenClassrooms) : il est très difficile de définir ce qu’est un data analyst, que cela soit d’un point de vue académique : quelles connaissances doit-on acquérir ? Ou bien d’un point de vue marché du travail : quelles sont les compétences attendues par l’employeur recherchant un data analyst ?

OpenClassrooms a fait de mon point de vue le bon choix. A savoir enseigner les bases théoriques et techniques des statistiques pour permettre à l’élève d’aller ensuite dans la direction qu’il souhaite : vers encore plus de technique ou de théorie. Vers du Business Intelligence ou vers de la data science. Les différents projets permettent d’acquérir des compétences et une ouverture d’esprit qui seront utiles quelle que soit la suite envisagée.

De mon côté, j’ai appréhendé cette formation comme un tremplin vers la data science et le machine learning. Et en ce sens, je n’ai pas été déçu. Cela a demandé beaucoup d’efforts d’apprentissage allant au delà du minimum requis pour valider les différents projets. Notamment en allant chercher quotidiennement des ressources externes – généralement universitaires – pour comprendre et saisir l’intuition, les concepts et le raisonnement mathématique rencontrés au fil des projets. Mais que cela fut passionnant !

Points négatifs

Ces derniers sont très subjectifs et révèlent plutôt les points que j’aurais aimé être différents, dans la vision qui est la mienne. A savoir celle d’aborder cette année comme une année préparatoire vers de la théorie plus avancée.

Je dirais que la principale frustration a été l’absence de pratique de l’algèbre linéaire au sein des projets. Dans le sens où on ne réalise quasiment aucun calcul matriciel / vectoriel, car on implémente pas d’algorithmes à la main. Ce n’est pas le but initial de cette formation, mais cela reste indispensable quand l’on souhaite étudier ou travailler dans le domaine de l’analyse de données.

Il y a d’ailleurs parfois un choc culturel entre certains cours de l’ENSAE qui peuvent être très théoriques, où l’on admet que l’élève est à l’aise avec l’algèbre linéaire et la lecture d’équations mathématiques relativement avancées et la réalité des projets souvent très applicatifs ne nécessitant pas forcément de compétences théoriques pour être menés à bien.

Pour ma part j’ai beaucoup aimé ces quelques cours, mais ils sont souvent très denses et à la fois trop synthétiques. Il faut les considérer comme un appel à aller chercher d’autres ressources. C’était parfois seulement après plusieurs heures voire plusieurs journées de travail que le cours initial rattaché au projet me paraissait clair. Sans bagages mathématiques post-bac, les cours ne se suffisent donc pas à eux-même. De plus, leur compréhension n’étant la plus part du temps pas nécessaires dans la réussite des projets, on peut aisément imaginer qu’ils passent à la trappe pour bon nombre d’élèves.

Présentation des projets

Pour vous faire une meilleur idée de ce qui vous attend concrètement durant cette formation, je présente ici les principaux projets autour desquels la forme s’articule.

Réalisez une étude de santé publique

Ce projet est vraiment génial, car il plonge de suite dans la réalité du terrain : à savoir qu’il faut comprendre ses données, avant de pouvoir les traiter. La connaissance métier est souvent tout aussi importante que les compétences techniques. Le but du projet est d’analyser des données provenant de la FAO (Food and Agriculture Organization) qui est l’organisme rattaché à l’ONU ayant pour ambition de faire disparaître la faim dans le monde.

Données de la FAO

Ici, on apprend à récupérer des données puis à les traiter avec Python / Pandas et SQL. Toutes les bases du traitement de données sont passées en revue (import, nettoyage, sélection / regroupement / agrégation)

En plus de permettre de mieux comprendre un sujet si primordial, à savoir la faim dans le monde, on prend également conscience qu’avec un petit peu de manipulation et de technique, on peut déjà faire parler ses données, sans même aborder de concepts statistiques à proprement parler.

Il faudra compter une centaine d’heures de travail sur ce projet. Peut-être plus si vous n’avez jamais codé en Python, ni fait de SQL au paravant. Les livrables attendus seront une analyse exploratoire permettant de mettre en évidence les causes de la faim dans le monde et de rejeter certains aprioris.

Mon repository GitHub de mon projet

Analysez les ventes de votre entreprise

Ici, on ne réalise plus simplement un traitement de données disons basique, mais bel et bien une analyse statistique exploratoire. On répondra aux questions suivantes : Qu’est-ce qu’une analyse univariée ? Bivariée ? Qu’est-ce qu’une distribution d’une variable statistique ? Comment la caractériser ?

Les cours rattachés aux projets, majoritairement réalisées par Nicolas Rangeon, sont vraiment géniaux. Ils permettent de découvrir les statistiques de manière pédagogique et intuitive. Je dirais qu’on est sur un niveau à cheval entre une Terminale S et un début post-bac. Parmi les concepts qui vont être appris puis appliqués en Python, on peut citer :

  • Calcul d’une moyenne, d’une variance, d’une médiane, des quantiles
  • Calcul des indicateurs de dispersion : Skewness / Kurtosis
  • Analyse de concentration : indice de Gini, courbe de Lorenz
  • Construction et représentation graphique : boxplot (boîte à moustache), histogramme, séries temporelles
  • Analyse bivariée : coefficient de corrélation, régression linéaire, ANOVA.

Ce projet fait également office d’introduction à Matplotlib, la librairie la plus populaire pour la visualisation de donnés en Python. Il demandera une cinquantaine d’heures de travail, voire plus. Les livrables seront une analyse exploratoire statistique permettant d’avoir une vision claire du business de l’entreprise fictive.

Mon repository GitHub du projet

Produisez une étude de marché

Le but principal du projet est de comprendre ce qu’est une ACP (Analyse en composantes principales) ou plus couramment une PCA en anglais (Principal Components Analysis).

L’entreprise pour laquelle on travaille est fictive, il s’agit d’une entreprise agro-alimentaire spécialisée dans le poulet. En revanche, les données utilisées pour réaliser l’étude sont bien réelles puisqu’il s’agit à nouveau des données issues de la FAO.

Là aussi la partie théorique est enseignée par Nicolas Rangeon, qui prend le temps de vraiment décrire l’intuition et le mécanisme d’une PCA. Ne seront pas abordées les notions de diagonalisation de matrice, ni le calcul à proprement parler des vecteurs propres et des valeurs propres. Mais finalement cela n’est pas forcément utile pour comprendre le principe, l’utilité et l’intuition d’une PCA. Si l’on a compris qu’il s’agit de prendre dans ses données les axes ayant le plus d’inertie et de projeter les données sur ces axes, c’est déjà pas mal 🙂

D’autres fondamentaux statistiques sont également abordés. Cette fois-ci il ne s’agit plus uniquement d’analyse exploratoire mais aussi de statistiques inférentielles. On peut notamment citer :

  • Découverte des tests statistiques (tester une moyenne, une variance, test d’adéquation à une loi)
  • La comparaison de deux échantillons
  • La réduction de dimensions via une PCA
  • Clustering des données via l’algorithme k-means

Suite à l’analyse exploratoire, on doit déterminer quels sont les pays à cibler en priorité pour développer l’entreprise à l’international. Il faut compter une petite centaine d’heures pour réaliser ce projet. Ceci allant de la récupération des données, traitement, analyse, tests statistiques et conclusion.

Mon repository GitHub du projet

Détectez des faux billets

Le but pédagogique de ce projet est double :

1) Interpréter de manière un peu plus approfondie le résultat d’une PCA, notamment l’éboulis des valeurs propres (eigenvalues scree plot en anglais) et surtout le cercle des corrélations.

2) Découvrir un premier algorithme de classement supervisé linéaire, la régression logistique 🙂 Le cours rattaché au projet aborde la méthode des moindres carrés ordinaires (Ordinary least squares en anglais), la régression linéaire, la régression logistique et l’analyse de la variance. Les cours sont relativement théoriques et risquent parfois de perdre l’élève car il y a peu de détail et de contexte. Par exemple on y retrouve l’écriture matricielle explicite des paramètres d’une régression linéaire (appelée l’équation normale) mais sans explication ni démonstration. Cela aurait mérité un peu de justification, qui est intéressante et simple à comprendre. Car il s’agit simplement de minimiser la fonction de coût sous sa forme matricielle, en regardant sa dérivée en zéro. On obtient ainsi explicitement le vecteur contenant tous les paramètres.

Pour ceux que cela intéresse, voici une petite démonstration (sans le détail des calculs des dérivées) par ici.

Quand on n’a encore jamais fait de machine learning, ce projet est plaisant car il permet de voir comment un modèle mathématique simple (qui sous-tend ceci étant dit encore aujourd’hui beaucoup d’algorithmes plus complexes) permet déjà d’obtenir d’excellents résultats en terme de prédiction.

Cette fois-ci, le livrable attendu est un programme en Python auquel on soumet les caractéristiques d’un ou plusieurs billets sous forme de fichier CSV et qui donne en sortie pour chaque billet s’il s’agit d’un vrai ou non. On est donc ici dans les fondamentaux du Machine Learning. Avant de présenter le programme, il faudra présenter l’analyse exploratoire réalisée qui permet de justifier la construction du modèle.

Mon Repository GitHub du projet

Effectuez une prédiction de revenus

Ce projet est très particulier. Il fait appel à diverses méthodes statistiques et probabilistes permettant de générer un jeu de données enrichi, tant en termes de variables que d’individus. L’approche est plutôt bayesienne, bien que le terme n’est jamais employé. Ce qui est dommage, c’est que l’on est guidés dans la démarche sans vraiment d’explication. Un cours sur les probabilités est néanmoins rattaché au projet.

Démarche du projet :

A partir de classes de population de plusieurs pays, l’on va générer des individus et leur attribuer une « classe parents » correspondant aux revenus de leurs parents.Pour cela, on va suivre la méthode suivante :

  1. Générer de faux parents dont les revenus sont distribués selon une loi normale
  2. A partir du coefficient d’élasticité propre à chaque pays, on va attribuer une classe enfant à chaque parent. Cela permet ensuite de calculer les différentes probabilités conditionnelles, à savoir combien de chance a-t-on d’avoir un parent de telle classe quand l’enfant appartient à telle classe.
  3. Ensuite, à partir du jeu de données initial, pour chaque pays on duplique chaque classe de revenus plusieurs centaines de fois pour pouvoir ventiler les différentes probabilités conditionnelles et ainsi avoir un échantillon représentatif.

Notre jeu de données et désormais enrichi de centaines d’individus plutôt qu’un seul individu par classe ainsi que d’une feature supplémentaire « classe parents ». A partir de ce jeu de données enrichi, on va entraîner une régression linéaire pour prédire le revenu de chaque individu.

Enfin, on va analyser finement notre régression linéaire :

  1. Comprendre l’influence de chaque variable endogène
  2. Juger de la pertinence du modèle, notamment via l’analyse des résidus de la régression linéaire

Le livrable attendu sera le modèle de régression linéaire permettant de prédire les revenus ainsi que l’analyse du modèle permettant de conclure sur l’impact propre de chaque variable.

Mon repository GitHub du projet

Prédisez la demande en électricité

Ce projet est peut-être celui qui demande le plus d’efforts en terme d’investissement intellectuel car ici il ne sera pas possible de sélectionner correctement les hyper-paramètres du modèle de prédiction sans comprendre le mécanisme mathématique derrière. Tout le travail est centré atour de l’analyse et de la modélisation de séries temporelles. Les séries temporelles sont un sujet vaste et complexe. On a donc vite fait de se perdre dans cette jungle théorique où les approches sont diverses et variées.

Bien entendu, si l’on souhaite décrire ce que l’on voit ou analyser une série temporelle a posteriori ou bien encore prédire l’avenir de cette série, ce ne sont pas les mêmes outils. Le projet est principalement basé sur la prédiction (mais pas que), notamment à l’aide des modèles basés sur des méthodes stochastiques où l’on considère la série temporelle comme la réalisation d’une variable aléatoire.

Les modèles les plus connus sont les modèles ARMA et toutes ses variantes (ARIMA / SARIMA…). Certains de ces modèles comptent de nombreux hyper-paramètres et il n’est pas toujours facile de saisir l’intuition qui se cache derrière chacun d’entre-eux. C’est à mon avis le plus gros challenge de ce projet.

Pour ma part, en plus d’avoir passé beaucoup de temps à comprendre ces modèles, j’en ai aussi profité pour écrire ma propre fonction de grid-search car les méthodes classiques de cross-validation que l’on utilise en machine learning ne sont pas forcément les plus pertinentes ici.

Ici, le livrable attendu est la présentation du modèle utilisé (modèle, choix des hyper-paramètres, etc.) ainsi qu’une prévision des données sur une année.

Voici un excellent article à ce propos et le lien vers mon repository GitHub du projet.

Conclusion

Cette formation a tout changé pour moi. Elle a complètement chamboulé mes perspectives et m’a permis de révéler mon goût prononcé pour les mathématiques. J’ai pu découvrir les statistiques, les bases du machine learning, faire un stage en recherche.

Bien entendu le format ne correspondra peut-être pas à tout le monde. De plus le contenu et les projets vont continuer d’évoluer, donc ne vous fiez pas uniquement à ce que j’ai pu décrire ici. Enfin, peut-être que certains trouveront la formation trop théorique, d’autres au contraire pas assez.

Pour ma part j’aime beaucoup le choix qu’a fait OpenClassrooms d’orienter la formation vers des projets qui posent les fondamentaux de la data science et de l’analyse statistique plutôt que vers la préparation à un travail d’expert BI, même si la mise en pratique de la théorie pure est parfois absente. Cela aurait été par exemple intéressant d’implémenter une PCA ou un algorithme de régression à la main.

Je rédigerai d’autres articles bientôt pour parler de mon stage réalisé durant la formation, des cours en ligne hors OpenClassrooms qui me permettent de progresser encore aujourd’hui (je pense principalement aux cours d’Andrew Ng <3) et enfin pour parler de mon Master en ligne CentraleSupelec / OpenClassrooms que je viens de commencer 🙂

Pour toutes questions / retours, n’hésitez pas à commenter, à m’envoyer un email ou à me contacter sur Twitter / LinkedIn.

Laisser un commentaire

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