jeudi 14 novembre 2019

JIT compilation sous Python

La compilation à la volée (JIT, just-in-time compilation) est un procédé qui permet de compiler dynamiquement, durant l'exécution, tout ou partie d'un code programme. Dans ce tutoriel, nous étudions le package Numba pour Python. Il permet de rendre plus performantes des portions de nos programmes (des fonctions essentiellement) en introduisant simplement des "directives de compilation", sans autres modifications du code. Nous verrons que l'outil est diablement intéressant et permet d'obtenir des gains spectaculaires. Il l'est d'autant plus que nous pouvons profiter de la parallélisation automatique des calculs dans certaines configurations.

Mots-clés : just-in-time compilation, JIT, python, package numba, régression linéaire, descente du gradient, package numpy, parallélisation
Didacticiel : JIT sous Python
Code source : Python - Numba
Références :
Numba, "A high Performance Python Compiler", http://numba.pydata.org/
Tutoriel Tanagra, "Programmer efficacement sous Python", avril 2019.

mardi 12 novembre 2019

Ateliers Master SISE : logiciel SAS

Comme de tradition (2016, 2017, 2018), nous commençons l’année (universitaire) par des ateliers consacrés aux outils de la data science en Master SISE. Nous nous intéressons au logiciel SAS cette fois-ci. Même si par ailleurs, notre priorité est la maîtrise des outils R et Python, il n’en reste pas moins que SAS représente un acteur important en France, au sein d’une certaine catégorie d’entreprises en tous les cas. Dans notre département (qui commence en L3), une UE (unité d’enseignement) lui est consacrée en Master 1 puis, en Master 2, il est utilisé dans quelques cours de statistique, mais guère plus. Il m’a semblé intéressant de faire travailler les étudiants sur ce thème pour consolider leurs connaissances et préparer au mieux l’année.

Les 6 séances ont été réparties en 3 thèmes : Manipulation des Données, Statistique Descriptive, Statistique Inférentielle. Pour chaque séance, nous disposons : d’un support de présentation, d’un sujet de travaux pratiques sur machine, d’un ou plusieurs jeux de données (fichier Excel ou CSV), d’un corrigé sous la forme de fichiers SAS, d’un tutoriel vidéo montrant les différentes étapes de la réalisation des tâches.

Je me répète tous les ans, mais je ne m’en lasse pas, merci aux étudiants du Master SISE pour cet excellent travail qui profitera à tout le monde.


Ateliers Master SISE : logiciel SAS
ThèmesPrésentationsExercicesDataset CorrigésTutoriels
Manip. Data 1
Manip. Data 2
Stat. Desc. 1
Stat. Desc. 2
Stat. Inf. 1
Stat. Inf. 2

lundi 11 novembre 2019

Python Machine Learning avec Orange

Orange est un logiciel bien connu des passionnés de data mining. On trouve de nombreux tutoriels en ligne, j’en ai écrit moi-même plusieurs. Moins connue en revanche est la possibilité d’utiliser les fonctions de la librairie Orange dans des programmes rédigés en Python. Pourtant, la fonctionnalité est disponible depuis longtemps, bien largement avant la vague Python dans la pratique du machine learning de ces dernières années.

Dans ce tutoriel, je montre son mode opératoire dans un problème simple d’apprentissage supervisé. Nous constaterons que le package Orange pour Python est assez simple d’utilisation et, dans ce cadre, se pose comme une alternative tout à fait valable aux libraires très populaires telles que "scikit-learn" ou le tandem "tensorflow / keras".

Mots-clés : python, package orange, régression logistique, induction de règles, apprentissage, test
Code source et données : Breast Cancer Wisconsin
Références :
Demsar J, Curk T, Erjavec A, Gorup C, Hocevar T, Milutinovic M, Mozina M, Polajnar M, Toplak M, Staric A, Stajdohar M, Umek L, Zagar L, Zbontar J, Zitnik M, Zupan B (2013), "Orange: Data Mining Toolbox in Python", Journal of Machine Learning Research 14(Aug): 2349−2353.

mercredi 16 octobre 2019

Machine Learning - Outils pour l'enseignement

Je dois intervenir ce vendredi 18 octobre 2019 au séminaire de la SFDS consacré au "Machine Learning appliqué à l'Agro-Industrie". Je parlerai surtout des outils que je préconise et que j'utilise moi-même pour mes enseignements en lien avec la data science dans nos formations. Au préalable, j'essaie de cerner le phénomène "machine learning". Il constitue un terreau de nouvelles applications qui nécessitent des nouvelles fonctionnalités des outils. Lesquels doivent dépasser les attendus des "simples" logiciels de stats que nous connaissons depuis bien longtemps déjà.

Ma démonstration aboutit un peu à une ode à R et Python quand-même. Mais bon, reconstruire les évidences est parfois instructif m'a-t-on dit. Prendre du recul permet de remettre en perspective nos choix et nos décisions. Dans le cas de ces deux logiciels, au-delà des aspects pédagogiques et de leurs aptitudes, leur forte pénétration dans les entreprises et, de ce fait, leur présence explicite dans les offres d'emplois qui ciblent nos étudiants, sont des éléments d'appréciation primordiaux qui n'étaient pas évidents il y a quelques années encore, lorsqu'on parlait de logiciels libres dans le domaine du machine learning et de la data science. De même, l'ouverture vers la programmation qu'offre ces outils se révèle décisive dans la formation de nos étudiants. Nous pouvons ainsi doubler la compétence en traitements avec la capacité à produire du code performant.

Pour illustrer mon propos, je décrirai quelques projets réalisés par mes étudiants dans le cadre académique du Master SISE. Leur savoir-faire allié à l'efficacité opérationnelle de R et Python leur permettent de réaliser des véritables prouesses en temps réduit.

Support de l'intervention : Slides Machine Learning - Outils
Mots-clés : logiciel R, Python, machine learning, formation, master data science, science des données, big data analytics, logiciels libres

dimanche 6 octobre 2019

Performances des boucles sous R

J'assure mon cours de "Programmation R" en Master à cette époque de l'année. Lorsque j'aborde la question des boucles, je dis traditionnellement que ce n'est pas une bonne idée, le temps d'exécution étant souvent prohibitif. Je conseille aux étudiants de modifier leur code de manière à exploiter les aptitudes des fonctions de la famille des apply. Nous réalisons ensuite une série d'exercices pour voir comment ce type d'adaptation pourrait se mettre en place.

J'ai dû relativiser cette affirmation dans la période récente, parce que l'interpréteur R a énormément progressé avec les versions 3.4.0 puis 3.5.0. Depuis la 3.4.0 notamment, les boucles sont maintenant compilées à la volée (just-in-time), améliorant considérablement les temps de traitement sans que l'on ait à modifier en quoique ce soit notre code.

J'avais par le passé étudié les outils et astuces pour programmer efficacement sous R. Dans ce tutoriel, nous nous pencherons plus en détail sur la question des boucles en comparant les performances de la structure for() avec une solution passant par un sapply(). Je prendrai comme prétexte la programmation de l'algorithme de tri par sélection pour illustrer mon propos.

Mots-clés : logiciel R, langage R, programmation, sapply, boucles
Didacticiel : Boucles sous R
Code source : Loop in R
Références :
R. Rakotomalala, "Cours de Programmation R".
Tutoriel Tanagra, "Programmer efficacement sous R", février 2019.

jeudi 1 août 2019

Réseaux de neurones convolutifs sous Knime

Ecrire un tutoriel sur l'utilisation des réseaux de neurones convolutifs (CNN - Convolutional Neural Networks) - un des représentants les plus fameux du deep learning - pour le classement d'images me titillait depuis un moment déjà. Mais il y a tellement de choses à lire et à écrire que je repoussais sans cesse. La lecture récente du dernier ouvrage de Stéphane Tufféry (Tufféry, 2019) et la découverte des composants de deep learning sous KNIME (Keras, Tensorflow) m'ont poussé à me lancer.

Il existe de nombreux didacticiels en ligne, notamment sur l'utilisation des CNN en Python sur des bases qui font référence telles que MNIST ou "Cats and Dogs". Stéphane dans son ouvrage effectue les mêmes analyses, mais sous R. Ça ne sert à rien de les réitérer. Mon idée était de me démarquer en proposant une étude simplifiée sur une base moins usitée, en schématisant les étapes autant que possible, et en réalisant l'ensemble des traitements sans écrire une seule ligne de code. Je suis R et Python addict, entendons-nous bien, mais varier les plaisirs ne peut pas faire de mal. KNIME convient parfaitement dans ce cadre.

Mots-clés : deep learning, image mining, catégorisation d'images, réseau de neurones à convolution, car detection dataset, keras, tensorflow
Workflow Knime : Car detection - Knime
Références :
Knime - Keras Integration -- https://www.knime.com/deeplearning/keras
Tutoriel Tanagra, "Deep Learning avec Keras sous Knime", juillet 2019.
Tutoriel Tanagra, "Image mining avec Knime", juin 2016.

dimanche 28 juillet 2019

Deep Learning avec Keras sous Knime

"En dehors de R et Python, point de salut alors pour le deep learning ?" me demande, un brin inquiet, un internaute. J'ai compris quand j'ai voulu le rediriger vers d'autres langages (Java, C++) qu'il était surtout réfractaire à la programmation. Sa vraie question était plutôt de savoir s'il était possible d'exploiter les librairies de deep learning, comme le fameux tandem tensorflow / keras par exemple, sans passer par le codage informatique.

La réponse est oui. Dans ce tutoriel, nous verrons comment installer et rendre exploitables ces librairies dans le logiciel Knime, un de mes outils libres favoris pour la data science. Les opérations usuelles de manipulation de données, de modélisation et d'évaluation sont représentées par un "workflow" où les traitements sont symbolisés par des composants (nodes), et l'enchaînement des traitements par les liens entre ces nœuds. On parle alors de "programmation visuelle", moins traumatisante que l'écriture de ligne de code. Pour ce qui est de Knime, plus qu'une simple succession d'opérations, il s'agit bien de programmation puisqu'il est possible de définir des structures algorithmiques telles que les actions conditionnelles, des boucles, et même des fonctions sous forme de meta-nodes regroupant des actions.

Mots-clés : Knime, deep learning, tensorflow, keras, perceptron simple et multicouche, analyse prédictive
Didacticiel : Keras sous Knime
Données et workflow Knime : Keras workflow
Références :
Knime - Keras Integration -- https://www.knime.com/deeplearning/keras
Tutoriel Tanagra, "Deep Learning - Tensorflow et Keras sous R", avril 2018.
Tutoriel Tanagra, "Deep Learning avec Tensorflow et Keras (Python)", avril 2018.

mercredi 17 juillet 2019

Big Data, Machine Learning...

Cette fiche de lecture est consacrée au dernier ouvrage de Stéphane Tufféry, "Big Data, Machine Learning et Apprentissage profond", Technip, 2019.

Mots clés : machine learning, big data, apprentissage profond, deep learning, programmation R, logiciel R, packages spécialisés, image mining, reconnaissance d'images, text mining, analyse des réseaux sociaux, traitement des gros volumes de données, data science
Fiche de lecture : Big Data, Machine Learning et Apprentissage Profond

mardi 25 juin 2019

Économétrie - Classe inversée

Lorsque j'avais commencé mon cours d'économétrie ("théorie et pratique de la régression linéaire simple et multiple" serait plus approprié) il y a une quinzaine d'années, je disposais de 24h pour les CM (cours magistraux) et 12h pour les TD (travaux dirigés, sur machine en ce qui me concerne). C'était Byzance. Puis, au fil du temps sont arrivées les restrictions, de plus en plus oppressantes, au point que ces dernières années on m'accordait (on accordait aux étudiants) 8.75h CM et 10.5h TD. Je me suis toujours battu pour préserver les exercices sur machine, primordiales à mon sens, parce que les étudiants sont dans l'action, parce que je peux être au plus près d'eux pour échanger et parler des aspects opérationnels que l'on ne traite jamais dans les manuels d'économétrie. Il m'a bien fallu lâcher du lest d'un autre côté. C'est tombé sur les CM. Aussi peu d'heures (5 séances d'1h45) pour traiter de la corrélation, la régression simple, la régression multiple et l'appréhension des problèmes pratiques (expertise des résidus, colinéarité, sélection de variables, identification des points atypiques ; des thèmes de niveau L3, ni plus ni moins), on en rigolerait si ce n'était pas au détriment des étudiants.

Pour le coup, je me suis dit qu'il fallait absolument trouver une autre manière de réaliser mon cours d'économétrie, sinon on allait droit dans le mur. Ça tombe sous le sens finalement. Quel intérêt aujourd'hui de faire des CM lénifiants où les étudiants grattent avec un profond ennui, alors qu'ils ont à disposition de très nombreux supports sur le web, y compris d'excellents (pour certains) cours filmés réalisés par d'éminents collègues, en français (faites une recherche avec les mots-clés "régression linéaire" sur YouTube, juste pour voir), en anglais, dans d'autres langues. Je me suis dit que c'était là une occasion d'appliquer les principes de la pédagogie inversée (ou classe inversée), séduisante en théorie, mais dont la mise en œuvre n'est pas toujours évidente parce que nous devons forcément composer avec des contraintes de tout ordre, y compris matérielles. Pour ma part, j'avais une soixantaine d'étudiants, dans des salles où il est impossible de modifier la configuration du mobilier pour les organiser en groupes (notre service du patrimoine a certainement beaucoup de qualités, mais l'humour n'en fait pas partie).

Après réflexion, j'ai opté pour la version suivante de la classe inversée. Les étudiants sont organisés en groupes. Une semaine avant la séance, je leur transmets une liste de supports à lire, accompagnée d'une série d'exercices à réaliser. Le jour dit, je fais un rappel de cours très succinct (une quinzaine de minutes) en mettant l'accent sur les points importants. Puis, les étudiants, au titre de leur groupe, passent au tableau pour la correction des exercices sur la base du volontariat. Chaque passage avec succès correspond à un bonus sur la note finale de la matière.

Je n'étais pas vraiment convaincu de l'intérêt du rappel de cours, mais les étudiants ont insisté pour que je resitue les thèmes de la séance. Dans l'idéal, l'étudiant qui passe au tableau devrait effectuer une correction commentée. Dans les faits, il a tendance à écrire silencieusement à toute vitesse les équations et les résultats. Souvent les étudiants s'attachent au "comment faire" au détriment du "pourquoi le faire ainsi". Pendant qu'ils écrivent donc, je m'applique à les aider en les poussant à expliquer leur démarche ou en commentant moi-même, afin de positionner la question traitée par rapport au chapitre de cours concerné.

Ça a plutôt bien marché finalement, surtout parce que les étudiants ont adhéré au mode de fonctionnement. C'est heureux parce qu'un enseignement n'a aucun sens si on n'a pas leur assentiment. J'avais aussi la crainte que les séances se transforment en activité de recopie des corrections, mais la plupart ont joué le jeu et se sont beaucoup investis. Il m'a même fallu instaurer des règles de passage au tableau pour que les bonus soient équitablement répartis.

Je mets en ligne aujourd'hui la liste des exercices pour les 4 séances "CM" du cours d'économétrie (je consacrais la séance 5 des "CM" à la correction conjointe d'annales d'examen). L'objectif pédagogique est d'aiguiller les étudiants sur les différents thèmes du programme de L3. J'y joins les corrigés (sous Excel, tout le monde connaît mon attachement aux vertus pédagogiques du tableur pour l'initiation à la statistique) que je diffusais après coup afin que les étudiants disposent d'un repère commun. J'avoue que j'ai un peu du mal à m'y retrouver moi-même après tant d'années. Il se peut que certains exercices aient été glanés sur d'autres sites web ou encore dans des ouvrages de référence, je suis désolé de ne pas pouvoir créditer leurs auteurs faute de pouvoir les retrouver, mais je les remercie quoiqu'il en soit.

Exercices corrigés - Économétrie
ThèmeSujetCorrigé
Séance n°1. Corrélation de Pearson. Estimation, intervalle de confiance, tests, corrélation partielle, corrélation de Spearman.
Séance n°2. Régression linéaire simple. Estimation des coefficients, intervalle de confiance, tests de significativité, prédiction ponctuelle et par intervalle.
Séance n°3. Régression linéaire multiple. Estimation des coefficients, intervalle de confiance, tests de significativité, tests généralisés sur les coefficients, prédiction ponctuelle et par intervalle, rupture de structure, test de Chow.
Séance n°4. Pratique de la régression. Etude des résidus, colinéarité et sélection de variables, points atypiques et influents, traitement des exogènes qualitatives.

lundi 17 juin 2019

Économétrie - Projet Open Data

Suite à des circonstances particulières, il m'a fallu improviser une évaluation de mon cours d'économétrie une année. J'avais décidé de faire travailler mes étudiants sur la modélisation à partir des "Open Data". J'avais en-tête un double objectif : (1) les faire travailler sur la pratique de la régression linéaire multiple, qui était un peu le coeur du cours il faut dire ; (2) les amener à s'intéresser aux "Open Data", le potentiel d'études qu'elles (données ouvertes) recèlent, mais aussi la difficulté à les exploiter puisqu'elles ne sont pas explicitement collectées à des fins d'analyse.

Les étudiants ont si bien travaillé que j'ai reconduit le dispositif l'année suivante en rajoutant une soutenance pour que les étudiants puissent présenter et de défendre leur travail. Ils ont beaucoup d'imagination pour dégoter des sujets originaux voire épiques qui ont le mérite de titiller ma curiosité.

Je mets en ligne le cahier des charges que je diffusais auprès des étudiants (souvent des personnes me contactent pour avoir des idées de mémoire, je me dis que le thème universel des "open data" peut inspirer). Dans notre timing, suite à ma présentation du format de l'évaluation, ils avaient deux semaines pour me proposer un sujet qui tient la route, que je devais valider, puis deux semaines supplémentaires pour finaliser l'étude et me rendre un rapport. Les soutenances avaient lieu la semaine suivante. Sachant qu'en parallèle, ne l'oublions pas, ils suivent les autres enseignements et subissent d'autres évaluations sous des formes diverses et variées.

Enfin, très important, je proscrivais l'utilisation des bases déjà préparées que l'on retrouve sur les sites dépôts dédiés aux challenges ou à l'étude des algorithmes de machine learning. Elles sont très bien dans le cadre restreint des compétitions et des comparaisons, mais elles ne reflètent en rien la démarche la modélisation dans une étude réelle, contexte où la préparation des données tient une place primordiale et conditionne la qualité des résultats.

Les étudiants peuvent utiliser les outils qu'ils souhaitent. Ils s'appuient sur R ou Python souvent, mais plusieurs ont fait le choix de Gretl. La seule règle imposée était que je puisse reproduire les calculs à l'identique.

Cahier des charges : Projet Open Data - Modélisation

jeudi 13 juin 2019

Outils d'optimisation sous R

J'utilise quasiment toujours le tableur Excel pour disséquer les algorithmes de machine learning. Il n'y a rien de mieux je trouve pour décortiquer les formules. On ne peut pas rentrer des commandes au petit bonheur la chance, nous sommes obligés de tout comprendre pour pouvoir tout décomposer. Comme une grande partie des méthodes revient à optimiser une fonction de perte (ou de gain), je m'appuie alors sur le solveur. J'obtiens souvent des résultats satisfaisants, comme par exemple dans mon ouvrage – qui servira de référence – consacré à la “Pratique de la régression logistique” où l'on maximise la log-vraisemblance.

Je me suis demandé s'il existait un équivalent du solveur sous R. En cherchant un peu, je me suis rendu compte que oui, il s'agit de la fonction optim() du package “stats”, installé et chargé par défaut sous R. Tout comme son homologue sous Excel, il peut fonctionner avec seulement une fonction objectif et un vecteur de paramètres. Mais il peut aller plus loin, nous pouvons lui fournir d'autres informations pour qu'il soit plus efficace. Il sait produire également des résultats additionnels nécessaires à l'inférence statistique lorsque nous travaillons sur les algorithmes de régression par exemple.

Dans ce tutoriel, nous montrons l'utilisation des fonctions optim() et optimHess() pour la programmation de la régression logistique. Nous comparerons les résultats d'une part avec les sorties de la fonction glm() de R, d'autre part avec les fruits d'une petite implémentation maison de l'algorithme de Newton-Raphson.

Mots-clés : optim, optimHess, algorithme d'optimisation, bfgs, newton-raphson, log-vraisemblance, vecteur gardient, matrice hessienne, logiciel R, solveur excel, régression logistique
Didacticiel : Optimisation sous R
Données et programme R : optim et optimHess
Références :
R. Rakotomalala, "Pratique de la régression logistique", Version 2.0, mai 2017.

lundi 10 juin 2019

Régression ZIP sous R et Python

Ce tutoriel fait suite au support de cours consacré à la Zero-Inflated Poisson Regression, une technique adaptée à la modélisation d'une variable de comptage lorsque la valeur "0" est surreprésentée.

Nous travaillerons sous R dans un premier temps. Nous détaillons les différentes manières de modéliser une variable cible représentant un dénombrement. Nous appliquerons tour à tour la régression logistique, la régression de Poisson et la régression ZIP avec le package "pscl" (Political Science Computational Library). Nous analyserons les résultats pour essayer de comprendre l'intérêt des différentes approches. Dans un deuxième temps, nous reprenons dans les grandes lignes la même étude en travaillant sous Python cette fois-ci. Nous ferons appel au package "statsmodels". Nous constaterons – sans surprise – la convergence des résultats avec ceux de R.

Mots-clés : régression zip, zero-inflated poisson regression, régression de poisson, régression logistique, package pscl, package statsmodels, logiciel R, test de vuong
Données et programmes R / Python : Affairs
Références :
R. Rakotomalala, "Régression ZIP - Diapos", juin 2019.
R. Rakotomalala, "Régression de Poisson - Diapos", mai 2019.

jeudi 6 juin 2019

Régression ZIP - Diapos

En grattant un peu pour rédiger mon précédent support pour la Régression de Poisson, je me suis rendu compte qu’il y avait une abondante littérature dans le domaine. Dans ce document, je m’intéresse à la " Zero-inflated Poisson Regression " c.-à-d. à la construction d’un modèle de comptage dans le cas où la valeur 0 est surreprésentée.

Je réutilise l’exemple des infidélités maritales (tout un programme) où l’on essaie d’expliquer (Y) le nombre de tromperies dans les ménages sur une période étudiée. Le schéma de modélisation repose sur l’idée qu’elle (la valeur zéro) est régie par deux phénomènes : (Y = 0) parce que la personne est intrinsèquement fidèle, elle ne risque pas d’aller voir ailleurs ; (Y = 0) parce que la personne n’a pas eu l’occasion ou l’opportunité de folâtrer sur la période étudiée.

Ce support décrit les mécanismes sous-jacents à la Régression ZIP : l’estimation des paramètres, les tests statistiques associés, notamment celui qui permet de cerner la contribution effective du modèle par rapport à la régression de Poisson usuelle.

Mots-clés : modèle de comptage, régression de poisson, régression zip, zero-inflated poisson regression, estimation du maximum de vraisemblance, test de vuong, fonction de lien logit, fonction de lien log
Données et calculs sous Excel : Affairs ZIP
Références :
R. Rakotomalala, "Régression de Poisson - Diapos", mai 2019.

lundi 27 mai 2019

Régression de Poisson avec R

Ce tutoriel fait suite au support de cours dédié à la Régression de Poisson. Je reprends la trame et les données d'un traitement décrit dans l'ouvrage "Approaching Multivariate Analysis - A Practical Introduction" (2010, chapitre 13). Les auteurs effectuent les traitements sous SPSS. J'ai trouvé intéressant de pouvoir reproduire (ou pas) leurs résultats en effectuant l'analyse sous R avec l'outil glm() du package "stats" de R.

Mots-clés : régression de poisson, modèle de comptage, glm, logiciel R, codage disjonctif, codage imbriqué, tests de significativité, résidus déviance, résidus standardisé, levier
Didacticiel : Régression de Poisson avec R
Données et programme : Poisson Regression
Références :
P. Dugard, J. Todman, H. Staines, "Approcahing Multivariate Analysis - A Practical Introduction", Second Edition, Routeledge, 2010.
R. Rakotomalala, "Régression de Poisson - Diapos", Mai 2019.

vendredi 24 mai 2019

Régression de Poisson - Diapos

J'essaie de mettre de l'ordre dans mes documents concernant mon cours d'économétrie en ce moment. Je suis tombé sur une très ancienne TODO LIST où j'avais noté une série de choses à faire en relation avec cet enseignement, entres autres la régression de Poisson. J'avais acheté un livre à cet effet (Hilbe, 2011), et il prenait malheureusement la poussière dans ma petite bibliothèque personnelle depuis plusieurs années.

Il n'est jamais trop tard pour bien faire. J'ai lu l'ouvrage, excellent au demeurant (à mi-chemin entre le texte didactique et la monographie), et j'ai décidé rédiger un support de cours pour cette technique explicative où la variable réponse représente un comptage. Sont détaillés dans le diaporama : les principes qui sous-tendent la méthode, l'estimation des paramètres par la méthode du maximum de la vraisemblance, les outils nécessaires à sa pratique (tests et intervalles de confiance, sélection de variables, identification des points atypiques et influents).

L'écriture de ce support aura été pour moi l'occasion de continuer à explorer une autre manière de présenter une méthode statistique en faisant la part belle à du code R. Il ne faut pas que la présentation soit dépendante du langage, certainement pas. Mais illustrer par des instructions et des sorties de logiciel peuvent aider à comprendre les concepts. Je l'espère tout du moins.

Un tutoriel détaillant la mise en oeuvre de la régression de Poisson sur un ensemble de données arrive incessamment sous peu.

Mots-clés : régression de poisson, modèle de comptage, estimation du maximum de vraisemblance, déviance, sélection de variable, critères aic / akaike et bic / schwarz, étude des résidus, détection des points atypiques et influents, surdispersion, overdispersion
Support de cours : Poisson Regression
Données pour illustration du cours : Affairs
Références :
J.M. Hilbe, ''Negative Binomial Regression'', Second Edition, Cambridge University Press, 2011.

mercredi 15 mai 2019

Économétrie avec gretl

En faisant faire un travail d'analyse économétrique sur les "Open Data" à mes étudiants, où ils étaient libres d'utiliser l'outil de leur choix, j'ai constaté que plusieurs d'entre eux ont opté pour "gretl" (Gnu Regression, Econometrics and Time-series Library). Je connaissais, je l'avais testé vite fait par le passé, mais sans creuser davantage. Ces étudiants avaient parfaitement répondu au cahier des charges de l'étude, là où la majorité de leurs collègues avaient travaillé sous R. Visiblement, "gretl" semble proposer des fonctionnalités assez complètes, qui répondent aux attendus de mon enseignement d'économétrie de Licence en tous les cas. Nous allons examiner cela dans ce tutoriel.

Nous prenons comme repère la quatrième séance de TD (travaux dirigés sur machine) de mon cours. L'objectif est d'expliquer la nocivité des cigarettes (teneur en CO – monoxyde de carbone) à partir de leurs caractéristiques (teneur en nicotine, en goudron, poids). Les thèmes abordés sont : l'importation et la description des données, la pratique de la régression linéaire multiple avec l'estimation des paramètres du modèle et l'inspection des résultats. Mettre en parallèle les sorties de "gretl" et la correction du TD (traité sous R) accessible en ligne nous permettra de calibrer notre démarche et vérifier les résultats.

Mots-clés : gretl, économétrie, régression linéaire multiple, analyse des résidus, tests de normalité, détection des points atypiques et influents, graphique des résidus, tests généralisés
Didacticiel : Régression avec gretl
Données et programme : Gretl - Cigarettes
Références :

dimanche 12 mai 2019

Économétrie - TD 6 - Évaluation

Je passe au contrôle pour la sixième session sur machine (après les TD 1.A, TD 1.B, TD 2, TD 3, TD 4, TD 5) de mon cours d'économétrie. Contrairement aux autres séances, je fournis uniquement les données et les objectifs. Charge aux étudiants (en groupes de 2 souvent) de mettre au point une stratégie pour élaborer le modèle le plus performant.

Nous sommes un peu beaucoup dans une vision "machine learning" où seule compte l'efficacité prédictive (un chercheur célèbre disait qu'en machine learning, on recherche avant tout à identifier ce qui marche le mieux, alors qu'en statistique, on chercherait plutôt à expliquer pourquoi ça marche). Au regard de la durée de la séance (1h45) où les étudiants doivent effectuer les traitements, mettre en forme les résultats, et rédiger un compte rendu, il est difficile de se lancer dans des considérations métaphysiques de toute manière.

Les étudiants reçoivent deux ensembles de données dispatchées dans deux feuilles d'un classeur Excel. Le premier est classique (données étiquetées), il comporte la variable endogène à prédire et un certain nombre d'exogènes candidates. Ils doivent l'exploiter pour créer le meilleur modèle possible. Le second contient uniquement les explicatives, les observations étant numérotées (données non-étiquetées). J'ai conservé pour la correction les valeurs de la colonne cible. Les étudiants doivent produire les prédictions ponctuelles et les intervalles de prédiction. Une partie de l'évaluation repose sur la confrontation entre les prédictions des étudiants et les valeurs observées (que j'ai réservées à part). Deux critères m'importent dans l'histoire : (1) l'erreur quadratique moyenne (écarts entre prédiction ponctuelle et valeur observée) ; (2) la qualité des fourchettes de prédiction (leur – faible - amplitude et la proportion des valeurs observées effectivement couvertes par les fourchettes, ces deux caractéristiques étant antinomiques).

Dans le fichier mis en ligne ici, l'objectif est de prédire le prix des véhicules à partir de leurs caractéristiques (encore les voitures Monsieur…). Il y a deux (tout petits) pièges : la distribution de l'endogène est fortement asymétrique, une transformation serait souhaitable ; une des exogènes présente une valeur unique, on devrait s'en apercevoir avec les statistiques descriptives (si on pense à les calculer), il ne sert à rien de l'introduire dans le modèle.

Travailler en temps contraint oblige les étudiants à avoir une bonne maîtrise, d'une part des concepts et méthodes de la régression linéaire multiple, d'autre part des outils (Excel, R ou Python, ils ont le choix), pour espérer pouvoir s'en sortir.

Sujet du contrôle : Régression multiple - Excel, R ou Python
Données : Car prices - Data
Données pour correction : Car prices - Étiquettes

samedi 11 mai 2019

Économétrie - TD 5 - Régression sous Python

Ne dit-on pas que "L'ennui naquit un jour de l'uniformité" ? Pour varier encore une fois les plaisirs, je fais travailler les étudiants sous Python dans ce cinquième TD (après TD 1.A, TD 1.B, TD 2, TD 3, TD 4) de mon cours d'économétrie. L'objectif est de pousser les étudiants à s'abstraire de l'outil, la forme, pour se concentrer sur le fond, la pratique de la régression linéaire multiple. Tout comme pour R, certains connaissent déjà, d'autres non. Pour préparer la séance, je les enjoins à réaliser des exercices de remise à niveau pour Python.

Durant le TD, nous revenons sur les principaux thèmes étudiés cette année : la régression linéaire multiple, l'inspection des résidus, la détection de la colinéarité, la sélection de variables, les tests généralisés, la détection et le traitement des points atypiques et influents, la prédiction ponctuelle et par intervalle. Temps imparti : 1h45. Bien s'exercer sous Python en amont est fondamental pour le succès de la séance.

Sujet du TD : Régression multiple - Python
Données : Mortality - Data
Correction du TD : Mortality - Correction

vendredi 10 mai 2019

Économétrie - TD 4 - Régression sous R (II)

"Ah bon ? On ne traite pas un fichier de voitures aujourd'hui ?". Les étudiants sont caustiques parfois. Oui, oui, pour ce quatrième TD (après TD 1.A, TD 1.B, TD 2 et TD 3) de mon cours d'économétrie, le propos de la régression est l'explication de la nocivité des cigarettes à partir de leur teneur en divers composants. Nettement moins poétique que les automobiles je trouve. Mais il faut bien varier les plaisirs. Nous travaillons sous le logiciel R pour la seconde fois. Les thèmes méthodologiques abordés sont la régression linéaire multiple, l'analyse des résidus dont les tests de normalité, la détection et le traitement des points atypiques, la sélection de variables, la prédiction sur les individus supplémentaires regroupés dans un fichier à part, l'exportation des résultats.

Petite coquetterie, je demande aux étudiants de produire à la fin du TD un rapport (word ou pdf) récapitulant les questions, le code R et leurs éventuels commentaires. Pour ce faire, je les aiguille sur la création de projets Markdown sous Rstudio. J'effectue une petite démonstration en début de séance. On trouve facilement des tutoriels à ce sujet sur le web.

Comme d'habitude, les étudiants ont 1h45 pour réaliser les exercices.

Sujet du TD : Régression multiple - R - Markdown
Données : Cigarettes - Data
Correction du TD : Cigarettes - Correction

jeudi 9 mai 2019

Économétrie - TD 3 - Régression sous R (I)

(1) "Qu'importe le flacon pourvu qu'on ait l'ivresse" et (2) "cent fois sur le métier il faut remettre son ouvrage" sont deux adages qui me conviennent parfaitement (surtout le premier, on se demande pourquoi). Dans ce troisième TD de mon cours d'économétrie (après TD 1.A, TD 1.B et TD.2), nous revenons (précepte 2) sur la corrélation et la régression simple, mais avec un autre outil (précepte 1), le logiciel R, tant prisé par les statisticiens. Certains de nos étudiants sont assez familiarisés avec R, d'autres non. Pour que tout le monde soit d'emblée opérationnel, je leur conseille de réaliser préalablement (avant la séance !) des exercices de remise à niveau pour R.

Les thèmes abordés durant ce TD sont : la corrélation, intervalle de confiance de la corrélation, la corrélation sur les rangs, la régression simple, l'estimation de la pente et de la constante, les tests de significativités, les graphiques usuels en régression simple, la prédiction ponctuelle et par intervalle.

Temps imparti : 1h45. Les meilleurs y arrivent, pourvu qu'ils aient une bonne connaissance de R en amont.

Sujet du TD : Corrélation et régression simple - R
Données : Autos completed - Data
Correction du TD : Autos completed - Correction

mercredi 8 mai 2019

Économétrie - TD 2 - Régression multiple

Deuxième séance de TD (la première est scindée en 1.a et 1.b) pour mon cours d'économétrie. Le thème est la régression multiple, avec la dernière session sous Excel. Nous explorons : l'estimation des coefficients par le calcul matriciel et à l'aide de la fonction droitereg(), la construction du tableau d'analyse de variance, le calcul du coefficient de détermination, le test de significativité globale de la régression, le calcul des critères AIC (Akaike) et BIC (Schwarz), les tests de significativité individuelle des coefficients, la sélection de variables, la prédiction ponctuelle et par intervalle, l'évaluation de l'impact des variables à travers les coefficients standardisés, les tests généralisés sur les coefficients.

Le temps imparti est de 1h45. C'est court mais faisable… si on maîtrise les formules du cours et que l'on sait manipuler les fonctions matricielles d'Excel.

Enfin, afin que les étudiants puissent retravailler sereinement dessus après la séance, outre le corrigé, je décris les opérations dans un tutoriel ("Régression linéaire sous Excel", mars 2018) où l'on réalise des tâches similaires sur un autre fichier de données.

mardi 7 mai 2019

Économétrie - TD 1.b - Régression simple

Voici la seconde partie de la première séance des TD d'économétrie, consacrée à la régression simple sous Excel. Les thèmes abordés sont : estimation des paramètres, tableau d'analyse de variance, coefficient de détermination, test de significativité globale de la régression, test de significativité de la pente, graphiques des résidus, prédiction ponctuelle et par intervalle. Temps de travail escompté pour ces exercices : 45 minutes.

Sujet du TD : Régression simple - Excel
Données : Cars Acceleration (1) - Data
Correction du TD : Cars Acceleration (1) - Correction

lundi 6 mai 2019

Économétrie - TD 1.a - Corrélation

J'arrête mon cours d'économétrie (Modèle Linéaire -- Niveau Licence 3) cette année. Comme pour mon enseignement d'Excel – Programmation VBA, j'ai décidé de mettre en ligne mes travaux dirigés sur machine (TD) avant qu'ils ne tombent dans l'oubli.

Je publie aujourd'hui le premier de la série (qui comprendra TD 1.A, TD 1.B, TD 2, TD 3, TD 4, TD 5 et TD 6). Il est consacré à l'analyse des corrélations, nous utilisons le logiciel Excel.  J'ai deux commentaires. (1) Elaborer une fiche de TD est toujours très compliqué. Il faut arbitrer entre deux extrêmes : donner trop peu d'indications avec le risque de subir la fameuse phrase qui fuse du fond de la salle "qu'est-ce qu'il faut faire là ?" ; trop diriger le travail, le commentaire "on recopie le code sans rien comprendre Monsieur" est tout aussi dévastateur. Il faut donc titiller l'esprit des étudiants en leur donnant suffisamment d'indications, mais pas trop. Tout est dans la subtilité. (2) Je sais bien qu'un tableur n'est pas un logiciel d'économétrie. Mais je trouve personnellement que c'est un formidable outil pédagogique pour l'enseignement des statistiques, au moins dans un premier temps. On ne peut pas rentrer des commandes sans comprendre dans Excel. La nécessité de décrypter les formules pour réaliser les calculs aide les étudiants à assimiler les éléments du cours.

Dans cette première séance (première partie de ma première séance en réalité dans ma pratique), nous travaillons sur l'analyse des corrélations disais-je, avec les thèmes suivants : calcul du coefficient de corrélation de Pearson, test de significativité, intervalle de confiance, corrélation partielle, non-linéarité et corrélation des rangs (Spearman). Un étudiant d'un bon niveau devrait réaliser ces exercices en 1h à peu près.

Sujet du TD : Analyse des corrélations - Excel
Données : Autos - Data
Correction du TD : Autos - Correction

samedi 4 mai 2019

Python - Détection de communautés avec MDS

La détection de communautés est une des applications phares de l'analyse des réseaux sociaux. Outre un support de cours, je l'avais déjà abordé dans un ancien tutoriel. Sous Python, l'objectif était de se familiariser d'une part avec les notions essentielles de l'analyse des communautés (voisinage, centralité, individus relais, …), d'autre part de découvrir les fonctionnalités du package "igraph". Nous avions traité le fameux problème du "Club de karaté de Zachary" où les données se présentent sous la forme d'une matrice d'adjacence binaire (absence ou présence de lien entre les sociétaires du club).

Nous cherchons à aller plus loin aujourd'hui avec une configuration où les connexions entre les individus sont valorisées par une valeur numérique positive ou nulle. Le tableau de départ de l'étude correspond à une matrice de dissimilarités. Nous verrons que le positionnement multidimensionnel (Muldimensional Scaling en anglais, MDS) constitue une voie intéressante pour répondre à la problématique de la détection de communautés dans ce contexte. En effet, en positionnant les points dans espace euclidien, il permet l'exploitation des algorithmes de machine learning adaptés à ce système de représentation "individus x variables" c.-à-d. la très grande majorité d'entre eux.

Mots-clés : positionnement multidimensionnel, multidimensional scaling, MDS, détection de communautés, clustering, classification automatique, k-means, python, package scikit-learn
Programme Python + Données : MDS Communautés
Références :
R. Rakotomalala, "Détection de communautés - Diapos", mars 2017.
R. Rakotomalala, "Positionnement multidimensionnel - Diapos", avril 2019.

dimanche 28 avril 2019

Multidimensional scaling sous R

Ce tutoriel vient illustrer mon support de cours consacré au positionnement multidimensionnel (Multidimensional Scaling en anglais, MDS). L'objectif est de représenter dans le plan les positions relatives des villes en prenant en entrée les distances kilométriques des routes qui les relient. C'est une application très parlante et/mais ressassée du MDS (exemple pour les villes de France). J'essaie d'être original ici en traitant les villes de Madagascar.

Mon idée initiale était de récupérer les informations directement sous R via les API des services de cartographie en ligne (Google Maps, Bing Maps, OpenStreetMap, etc.). Mais la tâche ne s'est pas avérée aussi triviale que je ne le pensais. J'en parle justement dans ce document où je montre comment  accéder aux données dans une application R à l'aide des packages spécialisés, en ce qui concerne OpenStreetMap tout du moins. Souhaitant traiter les villes principales des provinces de Madagascar, et leur nombre étant relativement retreint (6 provinces), j'ai finalement décidé de recueillir manuellement les distances sur Google Maps.

Mots-clés : positionnement multidimensionnel, mds classique, mds non-métrique, cmdscale, isoMds, package MASS, logiciel R, Madagascar, provinces
Données et programme R : MDS sous R
Références
R. Rakotomalala, "Positionnement multidimensionnel - Diapos", avril 2019.

samedi 27 avril 2019

OpenStreetMap sous R

Pour illustrer mon support de cours consacré au "multidimensional scaling" (MDS), je souhaitais reproduire le sempiternel exemple du positionnement des villes dans le plan à partir de leurs distances routières réciproques. Le choix d'un pays original me permettrait de me démarquer, à savoir Madagascar que je connais très bien.

Obtenir ces données en ligne sur Google Maps via un navigateur est très facile. Mais bon, tant qu'à faire, ce serait plus fun de les capter dans notre application R en faisant appel aux API dédiées, via les packages qui savent les manipuler (ex. mapsapi). Et patatras, j'apprends qu'il faut s'enregistrer pour obtenir une clé. L'accès reste gratuit certes tant qu'on reste en deçà d'une certaine limite, mais il faut – quoiqu'il en soit – fournir des informations bancaires lorsqu'on active son compte. Eh bien non ! Moi, je ne veux pas.

Je me suis tourné vers les alternatives gratuites, libres, sans enquiquinements. OpenStreetMap me semblait être une solution tout à fait valable. J'ai galéré ! Il y a certes de très nombreux tutoriels sur le net. Mais la majorité travaillent à partir de données préparées dans des formats spécifiques encapsulées dans des packages. Je n'ai pas trouvé un exemple clair et simple qui travaille exclusivement avec des données récupérées en ligne. J'ai cherché pourtant. J'ai donc remis à plus tard mon tutoriel sur les applications du MDS pour m'orienter vers la manipulation des données obtenues via l'API OpenStreetMap. La mission est simple : afficher la carte de Madagascar, obtenir la distance entre Antananarivo et Fianarantsoa, afficher le trajet en ces deux villes.

Mots-clés : R, package openstreetmap, package osrm, package jsonlite, package ggplot2, Madagascar, Antananarivo, Fianarantsoa
Références :

jeudi 25 avril 2019

Positionnement multidimensionnel - Diapos

Le positionnement multidimensionnel (multidimensional scaling en anglais, MDS) est une technique de visualisation qui permet de visualiser dans un repère euclidien (à p = 2 ou p = 3 dimensions le plus souvent) les positions relatives d'objets décrits par une matrice de distances, de dissimilarités ou de similarités.

Ce support décrit les arcanes de la méthode. Il met l'accent sur le MDS classique dans un premier temps, avant de généraliser la présentation aux approches métriques et non-métriques. Les aspects pratiques sont détaillés avec force exemples : l'évaluation de la qualité de la représentation, le rapprochement avec l'ACP (analyse en composantes principales), le problème des valeurs propres négatives, le positionnement des individus supplémentaires, le traitement d'une matrice de corrélations,…

Mots-clés : positionnement multidimensionnel, multidimensional scaling, MDS, matrice de distance, stress, distance euclidienne, dissimilarité, similarité, principal coordinates analysis, PCoA, ACP, analyse en composantes principales, matrice de corrélations, MDS métrique, MDS non-métrique, produit scalaire
Support : MDS
Données : autos_mds
Références :
Debois D., "Une introduction au positionnement multidimensionnel", Revue MODULAD, n°32, p.1-28, 2005.

mercredi 17 avril 2019

Programmer efficacement sous Python

J'avais écrit récemment un document à propos de l'optimisation des programmes sous R ("Programmer efficacement sous R", février 2019). Dans ce tutoriel, nous étudierons cette fois-ci comment déboguer, analyse et optimiser du code en Python, via l'EDI (Environnement de Développement Intégré) SPYDER livré avec la distribution ANACONDA.

D'autres environnements de développements existent pour Python ("Here are the most popular Python IDEs / Editors", KDnuggets, Décembre 2018) mais, pour ma part, SPYDER me convient très bien au jour le jour. Je le conseille souvent à mes étudiants, en partie à cause de sa similitude avec RStudio. L'interface leur étant familière, le passage d'un langage à l'autre est moins abrupt.

Tout comme pour R, nous prétexterons de l'implémentation du leave-one-out (LOOCV – Leave-One-Out Cross-Validation) en modélisation prédictive (analyse discriminante linéaire) pour explorer les fonctionnalités proposées par SPYDER.

Mots-clés : débogueur, profileur, analyse de code, leave-one-out, python, scikit-learn
Didacticiel : Programmation efficace sous Python
Programme python et données : waveform
Références :
SPYDER: The Scientific Python Development Environment -- https://docs.spyder-ide.org/

samedi 13 avril 2019

Graphique de dépendance partielle - R et Python

Récemment, j'avais étudié les outils agnostiques (applicables à tous types de classifieurs) pour mesurer l'importance des variables dans les modèles prédictifs (Février 2019). Toujours inspiré par l'excellent ouvrage de Christopher Molnar, "Interpretable Machine Learning", je m'essaie à l'étude de l'influence des variables cette fois-ci. L'objectif est de répondre à la question : de quelle manière la variable pèse sur la prédiction du modèle ? Pour schématiser, je dirais que l'importance traduit l'intensité de l'impact global de la variable. L'influence, elle, s'intéresse au sens et à la forme de la relation avec la cible, mais toujours à travers le modèle.

Dans ce tutoriel nous étudierons le graphique de dépendance partielle ("partial dependence plot" en anglais, PDP) qui permet de caractériser, d'une certaine manière qu'on essaiera de délimiter, l'influence d'une variable dans un modèle. Nous travaillerons sous R dans un premier temps, je proposerai un programme pour le calculer, puis nous verrons si nos résultats concordent avec ceux du package "iml" pour R. Dans un deuxième temps, nous travaillerons sous Python, et nous explorerons cette fois-ci la procédure dédiée proposée par le package "scikit-learn".

Mots-clés : interprétation des modèles, partial dependence plot, gradient boosting machine, régression logistique, importance des variables, influence des variables, package iml, package scikit-learn
Données et programmes R & Python : autos
Références :
C. Molnar, "Interpretable Machine Learning - A Guide for Making Black Box Models Explainable", février 2019.

samedi 6 avril 2019

R - Machine learning avec mlr

La profusion des packages est à la fois une force et une faiblesse de R. Une force parce que nous disposons d'une richesse telle qu'il est possible de trouver un package qui réponde à nos besoins de traitements, quels qu'ils soient (presque). Une faiblesse parce que, en l'absence d'une coordination forte, ils adoptent souvent des modes opératoires disparates qui déroutent les utilisateurs. C'est en ces termes que j'introduisais le package "caret" qui se propose d'unifier la pratique du machine learning sous R dans un moule unique.

Je pourrais tenir exactement le même discours en ce qui concerne la librairie "mlr" que je présente dans ce tutoriel. Nous traiterons d'un exemple (assez amusant) de "football mining" tiré de l'excellent ouvrage de Zhao et Cen (2014) pour en détailler les fonctionnalités.

Mots-clés : analyse prédictive, régression logistique, arbre de décision, svm, support vector machine, k-plus proches voisins, gradient boosting, courbe ROC, AUC, filtrage des variables, importance des variables, football mining, série A italienne, holdout, validation croisée, benchmarking, tuning
Didacticiel : Machine learning sous R avec mlr
Données et programme : Package mlr - Football
Références :
Bischl et al., "Machine learning in R".

lundi 1 avril 2019

Interpréter un classement en analyse prédictive

Mon attention a été attirée récemment sur un post (mars 2019) du blog "Lovely Analytics" concernant l'interprétation du processus de classement à l'aide du package "lime" pour Python. Très peu souvent abordé dans les articles scientifiques, l'affaire est pourtant d'importance en pratique. En effet, quoi de plus naturel que d'essayer d'identifier les caractéristiques qui ont prédominé lors de l'attribution d'une classe à un individu en prédiction. Dans de nombreux domaines, cette justification est primordiale pour asseoir la crédibilité de la décision. On sait que le modèle refuse l'attribution d'un crédit à une personne parce qu'elle est au chômage, ou parce qu'elle a bouton sur le nez, ou, pire, parce qu'elle a un revers à deux mains, ou que sais-je encore… en tous les cas, on ne peut certainement pas se retrancher derrière la décision de l'ordinateur en invoquant l'infaillibilité de la data science et des fameux algorithmes.

Dans ce tutoriel, nous essayons d'expertiser les solutions avancées par "lime" en vérifiant leur adéquation avec l'interprétation usuelle que l'on peut faire du classement dans les situations où on sait le faire, à savoir lorsqu'on utilise les arbres de décision et les classifieurs linéaires.

Mots-clés : python, package scikit-learn, package lime, classement, prédiction, arbre de décision, régression logistique
Didacticiel : Décortiquer lime
Données et programmes : Lime avec Python
Références :
M.T. Ribeiro, S. Singh, C. Guestrin, "Local Interpretable Model-Agnostic Explanations (LIME) : An Introduction", https://www.oreilly.com/learning/introduction-to-local-interpretable-model-agnostic-explanations-lime

mardi 26 mars 2019

Python - Machine learning avec mlxtend

Dans ce tutoriel, via une trame d’analyse prédictive assez standard, nous explorons le package "mlxtend" (machine learning extensions) de Sebastian Raschka. Je l'avais découvert initialement en cherchant des outils pour l'extraction des règles d'association sous Python. J'avais noté en lisant la documentation qu'il proposait des fonctionnalités assez intéressantes pour l'évaluation des modèles, que l'on retrouve peu dans les autres bibliothèques. De fil en aiguille, j'ai identifié d'autres procédures que je trouve assez judicieuses.

Plutôt que de s'opposer aux packages déjà bien en place, "mlxtend" propose des outils qui s'interfacent avec ceux de scikit-learn par exemple, tirant parti de la puissance de ce dernier.

Mots-clés : python, machine learning, analyse prédictive, scikit-learn, évaluation des modèles, bootstrap, importance des variables, test de mcnemar, test de cochran, sélection des variables, wrapper, svm, rbf, régression logistique, stacking, combinaison de modèles
Didacticiel : Présentation de mlxtend
Données et programme : Mlxtend avec Python
Références :
Sebastian Raschka, "MLxtend: Providing machine learning and data science utilities and extensions to Python's scientific computing stack", in The Journal of Open Source Software, 3(24), april 2018.

mardi 26 février 2019

Programmer efficacement sous R

Mon attention a été attirée récemment par l'excellent ouvrage "Efficient R Programming" de Gillepsie et Lovelace (2017), accessible en ligne. Les auteurs exposent les tenants et aboutissants de la programmation efficace sous R. Au-delà des trucs et astuces, ils discutent des principes de l'écriture de programmes performants (en occupation mémoire et en temps d'exécution) et présentent – entres autres – les outils de benchmarking et de profiling (profilage en français) de code. Je me suis dit que ce serait une bonne chose d'illustrer leur utilisation dans le cadre de la programmation d'une procédure type de machine learning.

Mon choix s'est porté sur la programmation du leave-one-out, une procédure de rééchantillonnage pour l'évaluation des modèles prédictifs. L'optimisation du code reposera sur une analyse fine des étapes grâce à l'outil de profiling. Nous pourrons gratter du temps d'exécution en jouant sur les spécificités des primitives de calcul utilisées, le choix des structures de données, la parallélisation des calculs. Tout cela en préservant la lisibilité du code source, gage indispensable de pérennité des applications sur le long terme.

Mots-clés : langage R, package microbenchmark, package profvis, package MASS, package parallel, programmation parallèle, leave-one-out
Programmes et données : waveform
Références :
C. Gillepsie, R. Lovelace, ''Efficient R programming'', avril 2017.

samedi 23 février 2019

Importance des variables dans les modèles

En flânant sur le web, j'ai découvert l'excellent ouvrage libre de Christoph Molnar : “Interpretable Machine Learning” (13 fév. 2019). Son propos est de mettre l'accent sur l'interprétation des modèles. J'ai pris beaucoup de plaisir à le lire et surtout j'ai (re)découvert des approches intéressantes notamment dans le chapitre 5 intitulé “Model-Agnostic Methods” où il présente des méthodes génériques qui peuvent s'appliquer à tous types de classifieurs.

Je me suis intéressé en particulier à la “permutation feature importance”, une technique destinée à mesurer l'importance des variables. Dans ce tutoriel, nous l'étudierons en la programmant nous-même sous R sur un jeu de données bien connu (Breast Cancer Wisconsin) pour lequel nous avons rajouté des variables générées aléatoirement pour corser l'affaire. Nous utilisons une régression logistique parce qu'elle propose intrinsèquement un procédé permettant d'évaluer l'influence des variables. Ce sera l'occasion d'étalonner la technique agnostique et étudier sa capacité à identifier la solution adéquate. Dans un deuxième temps, nous utiliserons le package “iml” développé par l'auteur de l'ouvrage et qui fournit des outils clés en main. Nous pourrons ainsi comparer nos résultats.

Mots-clés : logiciel R, package iml, package mlr, influence des variables, régression logistique
Programmes et données : Breast Cancer Wisconsin
Références :
C. Molnar, "Interpretable Machine Learning - A Guide for Making Black Box Models Explainable", février 2019.

mercredi 13 février 2019

Règles d'association sous Python

Ça fait un moment que je n'ai plus écrit de didacticiels sur les règles d'association. Comme je m'investis de plus en plus dans Python dans mes enseignements, je me suis dit qu'il était temps d'en écrire un pour ce langage, en complément d'un ancien document consacré à différents logiciels, notamment R avec le package "arules" (‘'Règles d'association – Comparaison de logiciels'', novembre 2008). J'utilise la librairie ‘'mlxtend'' (machine learning extensions) qui propose une série d'outils pour le machine learning : clustering, classification supervisée, régression, etc., et donc l'extraction des itemsets fréquents et des règles d'association que nous étudierons dans ce didacticiel.

L'organisation de ce document est on ne peut plus classique dans notre contexte : chargement et préparation des données, extraction des itemsets fréquents, recherche des sous-ensembles d'itemsets comportant des items particuliers, déduction des règles d'association à partir des itemsets fréquents, recherche de sous-ensembles de règles au regard de la présence de certains items ou répondant à des critères numériques.

Mots-clés : python, package mlxtend, itemsets fréquents, règles d'association, support, confiance, lift, apriori
Didacticiel : Règles d'association sous Python
Programmes et données : python_market_basket.zip
Références :
Tutoriel Tanagra, "Extraction des règles d'association - Diapos", Juin 2015.

lundi 4 février 2019

R et Python, performances comparées

Lancer un débat sur les mérites des différents langages de programmation est une bonne manière de plomber un repas entre informaticiens. J'en avais fait les frais naguère lorsque j'avais voulu comparer les performances de plusieurs d'entre eux (Java, C++, C#, Delphi - alors que j'en étais arrivé à la conclusion finalement que le meilleur outil était celui dont on maîtrisait le mieux les contours, et que la structuration des données jouait un rôle fondamental).

J'imagine qu'on se heurterait à la même fronde de la part de certains (une moitié vs. l'autre ?) data scientists si l'on se mettait à opposer R et Python. L'année dernière, à la même époque, j'avais essayé de montrer qu'on pouvait enseigner les deux dans les formations en data science, et que le passage d'un outil à l'autre engendrait un surcoût pédagogique négligeable au regard des avantages, notamment en termes de positionnement de nos étudiants sur le marché du travail. Je m'attache à appliquer ce principe dans mes enseignements à l'Université.

Malgré tout, je me risque à un petit comparatif dans ce tutoriel. Parce que j'entends beaucoup d'affirmations ici et là qui ne sont pas vraiment argumentées. J'ai décidé de vérifier par moi-même en observant les performances des outils dans un cadre précis, bien délimité : chargement d'un fichier CSV volumineux (9.796.862 observations et 42 variables – il s'agit de la base KDD CUP 99 dont chaque ligne a été dupliquée), réalisation de calculs de statistique descriptives simples (moyennes, croisements, tris).

Tous les outils testés ont mené à bien les opérations, c'est une information primordiale. Après, nous avons des résultats – spécifiques à l'expérience menée, je souligne encore une fois – qui titillent quand même pas mal notre intellect. Je vous laisse les découvrir.

Bien sûr, les temps de traitement annoncés dans ce tutoriel sont propres à ma machine fixe (Core i7 - 3.1 Ghz). J'ai refait les tests sur mon ordinateur portable (Core i5 - 2.7 Ghz), les valeurs sont différentes dans l'absolu (le contraire eût été étonnant), mais les positions et écarts relatifs restent identiques. J'imagine qu'il en sera de même sur votre ordinateur.

Enfin, à l'attention des ronchons pro-ci ou pro-ça dont j'entends déjà les grognements, je leur dis de monter leurs propres expérimentations, et surtout de bien veiller à mettre en ligne leurs codes et leurs données pour que tout un chacun puisse retracer ce qui est annoncé. S'assurer de la reproductibilité des résultats est la base même de la démarche scientifique.

Mots-clés : logiciel R, fichier CSV, kdd cup 99, package data.table, packager readr, package dplyr, python, package pandas, statistique descriptive
Didacticiel : R et Python, performances
Programmes : Chargement et statistiques (R et Python)
Données : kddcup99twice.7z
Références :
Tutoriel Tanagra, "R ou Python, il faut choisir ?", Janvier 2018.

dimanche 13 janvier 2019

Stacking avec R

Ce tutoriel fait suite au support de cours consacré au stacking. L'idée, rappelons-le, est de faire coopérer des modèles en prédiction en espérant que les erreurs se compenseront. L'ensemble serait alors plus performant que les modèles sous-jacents qui le composent, pris individuellement. A la différence du boosting ou du bagging, nous créons les classifieurs à partir de la même version des données d'entraînement (sans pondération ou autres modifications), la diversité nécessaire à la complémentarité provient de l'utilisation d'algorithmes de familles différentes. Dans les exemples que nous explorerons, le pool comprendra un arbre de décision, une analyse discriminante linéaire, et un SVM avec un noyau RBF. On peut penser que ces approches possèdent des caractéristiques suffisamment dissemblables pour qu'en classement, elles ne soient pas constamment unanimes (si les modèles sont unanimes, les faire coopérer ne sert à rien).

Nous étudierons le stacking de deux manières dans ce document. Dans un premier temps, nous programmerons à partir de zéro les différentes manières de combiner les modèles (vote ‘'hard'', vote ‘'soft'', métamodèle). Au-delà du plaisir à le faire, l'objectif est de décortiquer les étapes pour s'assurer la bonne compréhension des approches. Ensuite seulement, dans un deuxième temps, nous utiliserons les outils spécialisés (caretEnsemble, H2O). Le fait de détailler les opérations précédemment permettra de mieux appréhender les paramètres et les opérations préalables que nécessitent l'appel des fonctions dédiées au stacking dans ces packages.

Mots-clés : stacking, stacked ensemble, modèles ensemblistes, logiciel R, caretEnsemble, h2o, arbre de décision, analyse discriminante linéaire, svm, noyau rbf
Didacticiel : Stacking avec R
Données et programme R : spambase + prog. R
Références :
Wolpert D., "Stacked Generalization", Neural Networks, 5:241:259, 1992.

mardi 8 janvier 2019

Stacking

Combiner des modèles prédictifs pour les rendre collectivement plus performants est une idée qui a largement fait son chemin auprès des data scientists. Les approches bagging, boosting, sont souvent mises en avant. Elles reposent sur le principe de l'application du même algorithme d'apprentissage sur différentes variantes des données (ex. par pondération des observations) de manière à obtenir un pool de classifieurs présentant une hétérogénéité satisfaisante.

Une autre piste existe. On peut s'appuyer sur la diversité des algorithmes eux-mêmes pour produire l'ensemble de classifieurs. On pourrait par exemple utiliser, un arbre de décision, une analyse discriminante linéaire et un support vector machine avec un noyau RBF. L'efficacité globale dépend alors de l'efficacité individuelle des modèles et de leur hétérogénéité (décorrélation si l'on se réfère à la terminologie de random forest).

Dans ce support, nous traçons les grandes lignes de l'approche. L'agrégation des modèles tient alors une place centrale. Elle peut reposer sur un vote simple ou pondéré. Elle peut aussi, et c'est le principe du stacking, être modélisé à partir des prédictions des classifieurs qui constituent le pool. On aurait alors un modèle de modèles, un métamodèle prédictif.

Mots-clés : ensemble de modèles, métamodèle, stacking, stacked ensemble, vote simple, vote pondéré, python, scikit-learn, h2o
Support de cours : Stacking - Diapos
Références :
H2O Documentation, "Stacked Ensembles".

vendredi 4 janvier 2019

Machine Learning avec H2O (Python)

H2O est une plate-forme JAVA de machine learning. Elle propose des outils pour la manipulation et la préparation de données, des algorithmes de modélisation, supervisées, non-supervisées ou de réduction de dimensionnalité. Nous pouvons accéder à ses fonctionnalités en mode client-serveur via différents langages de programmation avec le mécanisme des API (application programming interface). Nous nous appuierons sur Python dans ce tutoriel, mais nous aurions pu réaliser entièrement la même trame sous R.

Ce tutoriel comporte trois grandes parties : nous évaluerons son aptitude à paralléliser ses algorithmes d’analyse prédictive ; nous étudierons ensuite dans le détail ces approches supervisées, en regardant de près les (une partie des) paramètres et les sorties ; enfin, nous jetterons un oeil sur quelques outils additionnels de H2O, toujours pour le supervisé.

Mots-clés : h2o, python, régression logistique binaire, random forest, gradient boosting, perceptron simple et multicouche, deep learning, naive bayes, grid search, automl, stacking, stacked ensembles, validation croisée, échantillon de validation, multithreading, parallélisation, processeur multicœur
Didacticiel : Machine Learning avec H2O
Données et programme Python : H2O - Programme Python
Références :
H2O.ai -- http://docs.h2o.ai/h2o/latest-stable/h2o-docs/index.html