dimanche 29 novembre 2020

(Vidéo) Recodage des explicatives qualitatives en ADL

Cette vidéo montre une solution possible pour l'intégration de variables explicatives qualitatives dans un modèle d'analyse discriminante linéaire. Elle passage par l'utilisation des "dummy variables" c.-à-d. des indicatrices 0/1. Deux questions importantes apparaissent alors : combien d'indicatrices créer pour recoder convenablement une variable catégorielle à K modalités ; et comment lire les résultats par la suite.

Mots-clés : analyse discriminante prédictive, dummy variables, indicatrices, codage disjonctif
Didacticiel vidéo : Recodage dummy variables en ADL
Classeur Excel : heart disease
Références :
"Pratique de l'Analyse Discriminante Linéaire", mai 2020, chapitre 3.

samedi 28 novembre 2020

(Vidéo) Exportation des modèles prédictifs

 Dans cette vidéo, je vais plus loin dans le déploiement de modèles prédictifs en abordant 2 points clés du processus : le stockage du modèle élaboré sur les données d'apprentissage dans un fichier de manière à pouvoir l'exploiter par la suite sans avoir à le réentraîner ; l'élaboration d'une application de déploiement qui prend en entrée le modèle sauvegardé et les données à traiter, dans le but d'automatiser le processus de prédiction.

Après avoir détaillé la démarche, je détaille les deux programmes pour R (glm), Python (Scikit-Learn, LogisticRegression) et Knime (Logistic Regression Learner) : (1) celui qui permet d'entraîner le modèle sur les données d'apprentissage et de le sauvegarder ; (2) celui qui prend en entrée le fichier représentant le modèle et les données de déploiement, effectue la prédiction, et exporte cette dernière dans un fichier Excel (un CSV aurait pu faire l'affaire aussi).

Les codes sources et les données utilisées sont bien sûr disponibles.

Mots-clés : modélisation, exportation des modèles, déploiement, logiciel r, glm, python, scikit-learn, knime
Didacticiel vidéo : Exportation de modèles et déploiement
Slides de présentation : Modélisation - Déploiement
Données et programmes : Codes R et Python, Archive Knime
Références :
"Introduction à R – Régression Logistique", mars 2012.
"Python – Machine Learning avec scikit-learn", septembre 2015.
"Analyse prédictive avec Knime", février 2016.

dimanche 22 novembre 2020

(Vidéo) Conversion d'un Notebook Python avec Pandoc

Dans cette vidéo, je montre comment générer un fichier Word (docx) à partir d'un projet Jupyter Notebook (ipynb). On peut y voir plusieurs avantages pour le post-traitement du document : disposer d'un correcteur orthographique et grammatical plus performant, bénéficier des fonctionnalités d'édition plus avenants des traitements de texte, etc. 

Je m'appuie sur un projet très succinct de construction d'un arbre de décision sur le jeu de données ultra-connu des Iris de Fisher. Nous remarquerons que les commentaires, le code, les sorties y compris graphiques du notebook sont parfaitement intégrés dans le fichier Word.

Mots-clés : pandoc, jupyter notebook, scikit-learn, arbre de décision
Didacticiel vidéo : Pandoc pour fichiers ipynb
Données et programme : Notebook et output
Références :
Pandoc - A universal document converter.

jeudi 19 novembre 2020

(Vidéo) Modélisation, évaluation, déploiement

 Dans cette vidéo, je parle d'une des modalités d'évaluation pratique que j'utilise dans mon cours d'introduction à la data science, dans la partie concernant l'analyse prédictive tout du moins.

L'idée est simple : les étudiants doivent produire une modèle prédictif pour le classement, en mesurer les performances, puis le déployer sur une base non-étiquetée c.-à-d. sans la variable cible.

Ils doivent rendre plusieurs éléments dont les projections réalisées sur cette dernière base. Parmi les critères d'évaluation du travail des étudiants figure en bonne place la confrontation entre les classes prédites et les classes observées que j'avais en réalité conservé à part pour la correction. Deux aspects m'importent alors : la performance prédictive pure (la capacité à faire le moins d'erreurs possibles), qui me permet de comparer les projets ; la concordance entre les erreurs annoncées et celles que je mesure moi-même après coup.

Mots-clés : analyse prédictive, arbre de décision, knime, déploiement
Didacticiel vidéo : Modélisation, évaluation, déploiement
Support : Schéma CRISP-DM
Données et programme : Spam et archive Knime
Références :
R. Rakotomalala, "Support de cours Data Science".

dimanche 15 novembre 2020

(Vidéo) Subdivision train-test pour les comparaisons

La période de confinement est un véritable challenge pour l'enseignement. Autant je suis à l'aise en cours avec les étudiants en présentiel dans la salle informatique durant les travaux dirigés sur machine ; autant j'ai du mal à me situer en distanciel, sans véritable retours, sans repères sur l'avancement des uns et des autres.

Pour mieux accompagner les étudiants, j'ai décidé de créer une chaîne vidéo sur YouTube pour qu'ils puissent avoir sous la main (sous les yeux) les explications ou démonstrations que j'effectue au début de chacune de mes séances.

En effet, je me permets d'aller vite en présentiel (je suis incapable de faire autrement de toute manière) parce que je suis avec eux par la suite. Je passe mon temps à roder derrière les étudiants, traquant les bugs, expliquer ce que je constate mal compris, refaire avec eux les étapes des traitements, ou tout simplement discuter de tel ou tel aspect de la data science. Ces échanges sont on ne peut plus enrichissants, à la fois pour les étudiants et pour les enseignants.

Rien de tout cela en distanciel, et surtout reproduire les démos à plusieurs reprises n'est pas envisageable, même si l'idée de discussion privée existe avec les outils d'échange à distance que nous utilisons.

Finalement, cette idée de vidéos n'est pas si mauvaise. Je m'étais toujours refusé à le faire jusqu'à présent. D'une part parce que montrer ma bobine sur le web ne m'intéresse pas spécialement ; d'autre part parce que je crois en la force de l'écrit où nous disposons de l'opportunité de prendre le temps d'expliquer les choses, parfois même de faire des digressions, choses moins évidente dans une vidéo où l'on doit être le plus schématique possible sous peine de perdre le spectateur. Mais bon, nécessité fait loi. Au moins pour les démonstrations, cette idée des tutoriels-vidéos me paraît viable.

Dans cette vidéo, je montre comment subdiviser un ensemble de données en échantillons d'apprentissage et de test, et comment s'organiser pour que la même partition soit exploitée pour comparer différents algorithmes de machine learning implémentés dans différents logiciels de data science. Nous utilisons : Knime, Tanagra, Sipina, Python / Scikit-Learn, R / Rpart. Le matériel pédagogique (données, programmes) associé aux traitements est disponible ci-dessous.

Allez savoir. Peut-être sommes-nous à un tournant de notre pratique de l'enseignement dans les universités….

Mots-clés : analyse discriminante, régression logistique, arbre de décision, python, logiciel r, scikit-learn, rpart, tanagra, sipina, knime
Didacticiel vidéo : Comparaisons des algorithmes
Support : Schéma train-test en analyse prédictive
Données et programmes : Spam, archives et code R/Python
Références :
"Analyse prédictive avec Knime", février 2016.
"Apprentissage-test avec Orange, Tanagra et Weka", avril 2008.
"Apprentissage-test avec Sipina", mars 2008.
"Python - Machine Learning avec Scikit-Learn", septembre 2015.
"Introduction à R – Arbre de décision", mars 2012.

samedi 31 octobre 2020

Réduction de dimension - La méthode GLRM

 La réduction de dimensionnalité est une tâche essentielle de l'analyse exploratoire. L'objectif est de concentrer la représentation des données sur un faible nombre de facteurs, exprimés à l'aide des variables initiales, qui traduisent les "formes" (pattern) pertinentes qui les régissent. En résumant l'essentiel de l'information sur un jeu de caractères réduits : nous pouvons représenter graphiquement les observations quand leur nombre est faible (souvent dans le plan) pour mieux apprécier les proximités ; les algorithmes de machine learning subséquents (supervisé ou non) sont plus efficaces lorsqu'ils sont appliqués sur un espace de représentation plus consistant.

Mon attention a été attirée récemment par l'algorithme GLRM (generalized low rank model). Plusieurs qualités sont mises en avant pour justifier son utilisation : à l'instar de l'AFDM, elle sait traiter nativement les descripteurs mixtes ; en s'affranchissant de la définition des facteurs sous la forme de combinaisons linéaires des variables initiales, elle dépasse les limitations de l'ACP notamment et est capable de capturer des formes non-linéaires. Une solution performante qui nous sortirait donc du sempiternel cadre de la décomposition en valeurs singulières d'une variante de la matrice des données initiales. L'idée est d'autant plus séduisante que l'appréhension des problèmes à très forte dimensionalité est devenu un standard dans le contexte du traitement des données non-structurées, en particulier le text mining.

Dans ce tutoriel, nous décrivons succinctement la méthode, puis nous étudions son comportement en l'opposant à l'ACP lorsque les descripteurs sont tous quantitatifs, à l'AFDM lorsqu'ils sont mixtes. Nous utilisons les jeux de données décrits dans l'ouvrage consacré à l'analyse factorielle qui a été mise en ligne récemment (Rakotomalala, 2020). Nous exploitons l'implémentation disponible dans la librairie H2O que nous avons explorée déjà à plusieurs reprises (Tutoriels Tanagra – H2O).

Mots-clés : réduction de dimensionnalité, analyse factorielle, acp, analyse en composantes principales, afdm, analyse factorielle des données mixtes
Didacticiel : La méthode GLRM
Code R et données : Autos et Tennis
Références :
H2O Tutorials, "Generalized Low Rank Models".

dimanche 19 juillet 2020

Pratique des Méthodes Factorielles avec Python

Ca faisait un moment que j'avais envie de le faire mais des multiples contraintes m'en avaient toujours empêché. Enfin j'ai pu travailler activement à la rédaction livre d'un consacré à l'analyse factorielle. J'ai fait la synthèse dans un ensemble que j'espère cohérent ce que j'ai pu écrire sur les méthodes factorielles ces quinze dernières années. Le plan est relativement classique. Nous présentons tour à tour les différentes techniques qui font référence dans le domaine (ACP, MDS, AFC, ACM, AFDM).

Par rapport à la très abondante littérature qui existe (tant en ouvrages qu'en supports accessibles en ligne), fidèle à mon habitude, j'ai essayé de me démarquer en évitant déjà d'abreuver le lecteur de succession de formules matricielles arides, en simplifiant la présentation des techniques (ce n'est pas le plus facile), en retraçant dans le détail les aspects calculatoires à l'aide d'exemples illustratifs, en utilisant le langage Python et ses librairies scientifiques standards (numpy, scipy, scikit-learn).

Nous utilisons en particulier la librairie "fanalysis" d'Olivier Garcia (ancien du Master SISE, promotion 2000), accessible sur GitHub, qui fait référence aujourd'hui pour l'analyse factorielle avec Python. Elle est en adéquation avec les pratiques décrites dans les ouvrages phares de l'analyse de données (cf. la bibliographie). Quelques requêtes Google semblent montrer (juin 2020) qu'il y a peu d'outils et de documentation sur ce créneau, qui correspond pourtant à une véritable attente si j'en juge aux accès sur mon site des tutoriels où les documents relatifs aux méthodes factorielles d'une part, à la pratique de la data science sous Python d'autre part, font partie de ceux qui sont le plus téléchargés. A chaque étape, nous calibrerons les résultats en les comparant à ceux de SAS (proc princomp, proc factor, proc corresp), R (factominer, ade4, ca, pcamixdata, psych)  et TANAGRA (avec les composants de l'onglet "Factorial Analysis").

Bien sûr, les programmes (notebooks Jupyter) et les données accompagnent la diffusion de l'ouvrage.

Mots-clés : analyse factorielle, méthodes factorielles, analyse en composantes principales, ACP, positionnement multidimensionnel, mds, multidimensional scaling, analyse factorielle des correspondances, AFC, analyse des correspondances multiples, ACM, AFCM, analyse factorielle des données mixtes, python, jupyter notebook
Ouvrage : Pratique de l'analyse factorielle
Notebooks Jupyter : Notebooks Analyse Factorielle
Données exemples : Data Méthodes Factorielles
Site de référence : Cours Analyse Factorielle

dimanche 10 mai 2020

Pratique de l'Analyse Discriminante Linéaire

Bon, les circonstances font qu'il m'a été possible de consacrer suffisamment de temps à l'écriture d'un livre. J'ai choisi de travailler sur l'analyse discriminante linéaire, une méthode prédictive que je trouve très intéressante, tant par sa mécanique interne que par l'usage que l'on peut en faire.

Curieusement, alors qu'elle est souvent abordée dans les ouvrages de statistique exploratoire (data science dirait-on aujourd'hui), je ne connais pas de référence qui lui est entièrement consacrée en français. Je la trouve pourtant très riche. Il y a vraiment beaucoup de choses à dire sur son compte. J'ai décidé de m'y coller en choisissant délibérément l'axe prédictif, et en essayant de mettre en avant les différents aspects qui en font le sel. Ceux justement que j'essaie de souligner dans les séances que je lui consacre dans mes enseignements. En effet, sa présentation se résume très rapidement à un empilement de formules matricielles si l'on n'y prend garde. Il fallait absolument éviter cet écueil en se focalisant sur sa pratique, en étant toujours autant que possible concret et pragmatique.

Un package pour R, discriminR, réalisé par un groupe d'étudiants du Master SISE (promotion 2017-2018), Tom Alran, Benoît Courbon et Samuel Rasser-Chinta, accompagne cet ouvrage. Il permet de mettre facilement  en application les principales idées qui ont mises en avant, avec des sorties aux standards de SAS Proc Discrim et Proc Stepdisc. Un tutoriel décrit son mode opératoire et la lecture des résultats dans le chapitre consacré aux logiciels. Merci à eux d'avoir bien voulu nous faire profiter de leur travail.

Ça fait plus de 20 ans que j'enseigne l'analyse discriminante prédictive, je ne m'en lasse pas, je lui trouve toujours de beaux atours et j'adore en parler.

Mots-clés : analyse discriminante linéaire, ADL, linear discriminant analysis, LDA, fonctions de classement, évaluation, sélection de variables, stepdisc, variables explicatives qualitatives, disqual, bayésien naïf, régularisation, analyse factorielle discriminante, analyse des correspondances discriminante, proc discrim, proc stepdisc, logiciel R, package discriminR, scikit-learn, python
Ouvrage : Analyse discriminante linéaire
Package R : discriminR 0.1.0
Données exemples : Data ADL
Références :
Page de cours, "Analyse discriminante".

mardi 14 avril 2020

Dépendances des variables qualitatives - Version 2.1

Voilà un item de ma TODO LIST qui vient de resurgir de nulle part. Après 9 ans, j'ai mis à jour mon livre intitulé "Etude de dépendances – Variables qualitatives". Les deux premières versions dataient de 2007 (version 1.0 puis 2.0). Le document a été recompilé en 2011 semble-t-il, mais sans que je n'aie conservé une trace du pourquoi. Il était resté en stand-by depuis.

La période étant propice à l'introspection, j'ai essayé de faire le tour de mes supports en suspens. Et je me suis rendu compte que j'avais noté une série de modifications à faire sur ce document. Je l'ai donc mis à jour en corrigeant déjà les coquilles qui pouvaient l'émailler ici ou là, en modifiant les options de compilation pour qu'une table de matière apparaisse dans les lecteurs de PDF, en rajoutant des références ou en retirant les liens URL devenus obsolètes, et en rajoutant quelques sections qui me paraissaient intéressantes.

Le fichier Excel des exemples illustratifs a été complété en conséquence.

Mots-clés : tableau de contingence, khi-2, mesures PRE (proportional reduction in error), odds et odds-ratio, coefficient de concordance, mesures d'association, associations ordinales
Techniques décrites : statistique du khi-2, test d'indépendance du khi-2, contributions au khi-2, t de Tschuprow, v de Cramer, lambda de Goodman et Kruskal, tau de Goodman et Kruskal, U de Theil, coefficient phi, correction de continuité, Q de Yule, kappa de Cohen, kappa de Fleiss, gamma de Goodman et Kruskal, tau-b de Kendall, tau-c de Kendall, d de Sommers, test de Mc Nemar, coefficient d'incertitude symétrique
Ouvrage : Etude des dépendances - Variables qualitatives - Tableau de contingence et mesures d'association
Exemples illustratifs : Credit.xlsx

jeudi 9 avril 2020

Analyse Discriminante Linéaire sous R

En rédigeant mon précédent tutoriel consacré à l'analyse discriminante sous Python, je me suis rendu compte que je n'avais jamais écrit d'équivalent pour R, où l'on passerait en revue les fonctionnalités de la fonction lda() du package MASS qui fait référence sous cet environnement. C'est étonnant, surtout que je la pratique depuis un bon moment déjà. C'est même une des premières méthodes de R que j'ai explorées avec glm() et rpart(). Nous allons essayer d'y remédier dans ce document.

Nous reprenons la trame de la présentation pour Python, en prenant appui toujours sur notre support de cours dédié, mais en l'adaptant bien sûr aux spécificités de lda(). Notre référence reste SAS, avec les procédures proc discrim et proc candisc. Un des enjeux fort sera de faire le lien entre les parties descriptives et prédictives en dérivant les fonctions de classement à partir des fonctions canoniques discriminantes.

Mots-clés : logiciel R, analyse discriminante linéaire, analyse discriminante prédictive, ADL, linear discriminant analysis, lda, package MASS, sélection de variables, package klaR, stepdisc, logiciel SAS, proc discrim, proc candisc
Didacticiel : ADL sous R
Données et code source R : Kirsch - Mirabelle - Poire
Références :
R. Rakotomalala, "Analyse discriminante linéaire".
Tutoriel Tanagra, "Analyse discriminante linéaire sous Python", avril 2020.

lundi 6 avril 2020

Analyse Discriminante Linéaire sous Python

L'analyse discriminante linéaire est une méthode prédictive où le modèle s'exprime sous la forme d'un système d'équations linéaires des variables explicatives. Je l'affectionne particulièrement. Le temps que je lui consacre dans mes enseignements fait partie de mes séances favorites notamment parce qu'elle se prête à des multiples lectures. Je tiendrai très facilement des heures avec un nombre pourtant réduit de slides.

Dans ce tutoriel, nous étudierons le comportement de la classe de calcul LinearDiscriminantAnalysis du package "scikit-learn" pour Python. En faisant le tour de ses propriétés et méthodes, nous passerons en revue les différents aspects de la technique. Pour mieux situer la teneur des résultats, nous mettrons en parallèle les sorties de la procédure PROC DISCRIM du logiciel SAS qui fait figure de référence dans le domaine.

Mots-clés : python, analyse discriminante linéaire, adl, test manova, lambda de wilks, coefficients des fonctions de classement, package scikit-learn, logiciel sas, prox discrim
Données et code source Python : Kirsch - Mirabelle - Poire
Références :

mardi 31 mars 2020

Régression Logistique sous Python

Ce tutoriel fait suite à la série d'exercices corrigés de régression logistique sous R (TD 1 à TD 8). Il aurait pu constituer la 9ème séance des travaux dirigés où l'on ferait travailler les étudiants sous Python. J'aime bien alterner les logiciels dans ma pratique de l'enseignement. J'ai quand-même préféré le format tutoriel parce qu'il y a de nombreux commentaires à faire sur le mode opératoire  et les résultats des outils que nous utiliserons. Les librairies "statsmodels" et "scikit-learn" adoptent des points de vue très différents sur les mêmes traitements. Il est important de mettre en relation directe les thèmes et les commandes avec le cours rédigé disponible en ligne (voir références).

Enfin, ce document peut être vu comme le pendant pour la régression logistique de celui consacré à la régression linéaire disponible sur notre site ("Python - Econométrie avec StatsModels", septembre 2015).

Mots-clés : python, package statsmodels, package scikit-learn, log-vraisemblance, régression logistique, inférence statistique, évaluation du modèle en resubstitution et en test, courbe roc, critère auc
Didacticiel : Régression logistique avec statsmodels et scikit-learn
Données et code source Python : Infidélité
Références :
R. Rakotomalala, "Cours de régression logistique".

vendredi 27 mars 2020

Régression Logistique -- TD 8

Huitième et dernier TD de mon cours de régression logistique, nous traitons de la régression logistique multinomiale où la variable cible est qualitative nominale à plus de 2 modalités.

Nous explorons deux packages spécialisés, "nnet" et "vgam". Les modes opératoires sont similaires mais il faut faire attention aux spécificités, notamment lors de la prédiction. Ces librairies, de par leur mode de fonctionnement, requièrent la standardisation ou la normalisation des données. L'occasion est belle pour montrer comment réaliser l'opération sur l'échantillon d'apprentissage (facile), puis la transposer sur l'échantillon test (la procédure n'est pas toujours très bien comprise par les étudiants).

Enfin, pour élargir nos perspectives d'analyse,  une comparaison avec les résultats d'un arbre de décision – autre méthode qui permet d'appréhender simplement les variables cibles nominales – est réalisée.

Mots-clés : logiciel R, régression multinomiale, arbre de décision, package rpart, scale, rappel / sensibilité par classe, précision par classe

Sujet du TD : Régression multinomiale
Données : waveform
Correction du TD (code R) : waveform – Correction
Correction du TD (Notebook) : Notebook TD 8
Vidéo de correction : Vidéo TD 8
Référence : Site du cours de régression logistique

jeudi 26 mars 2020

Régression Logistique -- TD 7

Dans cette septième séance, nous abordons le traitement des données groupées en régression logistique. La ligne du tableau de données correspond à une combinaison des variables explicatives, on parle de pattern ou de profil. Elle représente un ensemble d'observations dont tout ou partie (ou aucun) sont rattachées à la modalité cible de la variable dépendante.

Ce prisme permet de mieux souligner l'influence des caractéristiques des individus dans la régression. Avec l'étude des profils, nous pouvons identifier les aspects mal restitués, ceux qui pèsent fortement – voire indûment – dans le modèle. Elle permet également de suggérer des combinaisons des variables qui approfondissent notre analyse.

Mots-clés : logiciel R, covariate pattern,  profil, données groupées, levier, résidus de pearson, résidus déviance, statistique de pearson, statistique déviance, distance de cook, interaction, données titanic

Sujet du TD : Covariate pattern
Données : titanic
Correction du TD (code R) : titanic – Correction
Correction du TD (Notebook) : Notebook TD 7
Vidéo de correction : Vidéo TD 7
Référence : Site du cours de régression logistique

mercredi 25 mars 2020

Régression Logistique -- TD 6

Nous approfondissons la sélection de variables durant cette sixième séance. Nous revenons tout d'abord sur les approches classiques pas-à-pas, ascendantes et descendantes. Elles fournissent des sous-ensembles de variables parfois différentes qui sont autant de scénarios de solutions. Nous confrontons les résultats et nous nous en remettons aux performances prédictives pour identifier la plus intéressante.

Puis nous explorons les approches alternatives, en particulier les techniques de ranking, qui agissent en amont et indépendamment des méthodes de machine learning pour effectuer la sélection, et l'approche wrapper, qui s'appuie sur des critères de performances estimés explicitement à partir des méthodes de machine learning.

Mots-clés : logiciel R, stepwise, forward, backward, stepAIC, critère AIC, akaike, BIC, schwartz, méthode filtre, ranking, incertitude symétrique, symmetrical uncertainty, méthode CFS, wrapper, package caret, cross-validation, validation croisée, sélection de variables

Sujet du TD : Sélection de variables, Ranking, Wrapper
Données : kr-vs-kp
Correction du TD (code R) : kr-vs-kp – Correction
Correction du TD (Notebook) : Notebook TD 6
Vidéo de correction : Vidéo TD 6
Référence : Site du cours de régression logistique