vendredi 27 décembre 2019

Détection des anomalies - Diapos

La détection des anomalies consiste à repérer dans les données les observations qui s'écartent significativement des autres, soit par les valeurs de certaines variables prises individuellement (une personne faisant 2m20), soit par des combinaisons de valeurs incongrues (1m90 pour 50 kg). Ces observations sont par nature rares et éparses, elles peuvent être consécutives à l'intégration par inadvertance d'individus d'autres populations dans un échantillon de données (un basketteur intégré dans un fichier recensant des sumotoris).

Les  valeurs atypiques faussent souvent les résultats fournis par les algorithmes de machine learning. Leur identification et leur traitement sont des aspects importants de la pratique de la data science. Mais leur détection peut être également une finalité en soi, lorsqu'on pense par exemple qu'elles sont le fruit d'un comportement déviant générant des observations inhabituelles (tentative de fraude d'un opérateur lors d'un accès sur un serveur, etc.).

Dans ce support, je présente la méthode LOF (local outlier factor). Elle cherche à identifier les observations atypiques en comparant les densités locales des points dans un voisinage dont le périmètre (le nombre de voisins) est un paramètre de l'algorithme. Je détaille les calculs et je montre le comportement de l'approche sur un jeu de données en faisant appel à la librairie Rlof pour R. Un tutoriel sous Python suivra.

Mots-clés : anomalies, points atypiques, points aberrants, nouveautés, anomaly detection, outlier detection, novelty detection, local outlier factor, logiciel R, package rlof, reachability distance
Support de cours : Local Outlier Factor
Références :
Breunig, M. M.; Kriegel, H.-P.; Ng, R. T.; Sander, J. (2000). LOF: Identifying Density-based Local Outliers. Proceedings of the 2000 ACM SIGMOD International Conference on Management of Data. SIGMOD. pp. 93–104.
Tutoriel Tanagra, "Détection univariée des points aberrants", mai 2008.
Rakotomalala R., "Pratique de la régression", chapitre 2 "Points aberrants et influents", mai 2015.

mardi 24 décembre 2019

Implémentation du Naive Bayes sous R

J'ai fait travailler mes étudiants sur la programmation sous R du classifieur bayésien naïf récemment. Schématiquement, la méthode est relativement simple à implémenter, surtout lorsque toutes les variables explicatives sont qualitatives. Il en est de même lorsqu'elles sont toutes quantitatives. Il y a en revanche des choix stratégiques à mettre en place lorsqu'elles sont mixtes. Je pensais que la principale difficulté viendrait de cette partie. Non en réalité. Je me suis rendu compte après coup que le principal écueil était de développer une implémentation performante du déploiement, lorsque nous appliquons le modèle sur des individus supplémentaires. Parce que R possède des caractéristiques qui lui sont propres, les temps d'exécution peuvent varier dans des proportions très importantes selon notre habilité à en tirer profit.

Dans ce tutoriel, nous nous penchons sur la programmation des fonctions fit() - construction du modèle sur un jeu de données - et predict() - application du modèle en prédiction sur un jeu de données - du Naive Bayes. La variable cible est forcément qualitative. Nous nous en tiendrons au cas des variables explicatives qualitatives. L'objectif n'est pas de proposer une resucée du naive bayes. Plusieurs packages disponibles sur le CRAN s'en chargent très bien. Il s'agit surtout pour nous d'étudier l'impact des choix d'implémentation sur les temps d'exécution sous R.

Mots-clés : programmation R, logiciel R, modèle d'indépendance conditionnelle, naive bayes classifier, classification naïve bayésienne
Didacticiel : Naive Bayes sous R
Code source + Données : Heart - Large - Long
Références :
Tutoriel Tanagra, "Le classifieur Bayésien Naïf revisité", mars 2010.
Tutoriel Tanagra, "Programmer efficacement sous R", février 2019.

dimanche 8 décembre 2019

Word2Vec avec H2O sous Python

Ce tutoriel fait suite au support de cours consacré au prolongement lexical (word embedding) où nous avions étudié l'algorithme "Word2Vec" dans le cadre de la fouille de textes (text mining ; on parle aussi de NLP, natural language processing). Nous mettons en œuvre la technique sur un jeu de données jouet tiré de l'ouvrage de Coelho et Richert (2015). Le premier objectif est de représenter les termes du corpus dans un espace de dimension réduite en les contextualisant c.-à-d. en tenant compte de leur voisinage. Le second consiste à calculer les coordonnées des documents pour apprécier leurs proximités dans ce nouvel espace de représentation ainsi défini.

Nous nous appuyons sur la librairie H2O pour Python. Nous l'avions déjà exploré à plusieurs reprises précédemment (par ex. "Machine Learning avec H2O", janvier 2019). L'enjeu dans notre contexte est de savoir préparer correctement le corpus pour que l'on puisse faire appel aux fonctions dédiées. Cette tâche est quand-même assez particulière sous H20. Nous y porterons toute notre attention – de la manière la plus didactique possible, voire scolaire – pour ne pas perdre le lecteur en route.

Mots-clés : word2vec, word embedding, prolongement des mots, prolongement lexical, deep learning, python, package h2o, package nltk, text mining, nlp
Didacticiel : Word2Vec avec H2O
Code source + données : H2O + NLTK - Prog. Python
Références :
Tutoriel Tanagra, "Deep learning : l'algorithme Word2Vec", décembre 2019.

samedi 7 décembre 2019

Deep learning : l'algorithme Word2Vec

Le prolongement lexical ou word embedding est une technique de text mining qui permet de décrire les termes d'un corpus à l'aide d'un vecteur de valeurs numériques (de taille paramétrable), de manière à ce que les termes qui apparaissent dans des contextes similaires soient proches (au sens d'une distance quelconque, la distance cosinus par exemple).

Dans ce support,  je présente la méthode word2vec basée sur un algorithme de deep learning (réseau de neurones multicouche). Elle traduit la notion de contexte par le voisinage des mots dont on peut moduler l'amplitude. De la description des termes, nous pouvons dériver une description matricielle des documents, tableau de données à partir de laquelle nous pouvons appliquer les techniques usuelles de machine learning (catégorisation, clustering, etc.).

Mots-clés : word embedding, prolongement de mots, prolongement lexical, word2vec, text mining, réduction de la dimensionnalité, deep learning
Support de cours : Word2Vec – Deep Learning
Références :
Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. "Efficient Estimation of Word Representations in Vector Space." In Proc. of Workshop at ICLR. (Sep 2013).

dimanche 1 décembre 2019

Deep learning avec PyTorch sous Python

Dans ce document, nous nous attelons à l'instanciation, l'apprentissage et l'évaluation de perceptrons simples et multicouches avec PyTorch. Nous travaillons à partir d'un fichier de données que nous devons importer et préparer au préalable. Toutes les étapes seront détaillées. J'insisterai sur la manipulation des "tensor", le format de vecteurs et matrices qu'utilise la librairie pour ses manipulations internes. Je m'attarderai également sur la construction un peu particulière des réseaux qui nécessite une connaissance (très basique, n'exagérons rien) des mécanismes de classes (l'héritage et la surcharge des méthodes) sous Python.

Mots-clés : deep learning, perceptron simple et multicouche, réseau de neurones, pytorch, python
Didacticiel : PyTorch for deep learning
Code source + données : Breast PyTorch
Références :
PyTorch, https://pytorch.org/
Tutoriel Tanagra, "Deep learning : perceptrons simples et multicouches", novembre 2018.

samedi 30 novembre 2019

Auto-encodeur avec Keras sous Python

Ce tutoriel fait suite au support de cours consacré aux auto-encodeurs (cf. référence ci-dessous). Nous mettons en oeuvre la technique sur un jeu de données jouet (des automobiles pour ne pas changer) à l'aide des librairies tensorflow et keras pour Python.

Il y a différentes manières de considérer les auto-encodeurs. Dans notre cas, nous adoptons le point de vue de la description des données dans un espace de dimension réduite. Comme une alternative à l'ACP (analyse en composantes principales) en somme. L'objectif est de cerner au mieux les attentes que l'on pourrait avoir par rapport aux résultats qu'elle fournit dans ce contexte, notamment en matière de qualité de reconstitution des données.

Mots-clés : deep learning, auto-encodeur, autoencoder, réseau de neurones, perceptron, tensorflow, keras, python, acp, analyse en composantes principales
Code source + données : Cars Autoencoder
Références :
Tutoriel Tanagra, "Deep learning : les Auto-encodeurs", novembre 2019.

mercredi 27 novembre 2019

Deep learning : les auto-encodeurs

Un auto-encodeur est un réseau de neurones non-supervisé utilisé pour la réduction de dimension et la data visualisation. Il se présente comme un perceptron multicouches où les neurones des couches d'entrée et de sortie sont identiques, ils sont formés par les descripteurs. Le réseau peut comporter plusieurs couches intermédiaires, la couche centrale, de taille fortement réduite par rapport à la dimensionnalité initiale, constitue le "code" permettant de compresser l'information disponible aussi fidèlement que possible au sens d'un critère à optimiser.

Ce support de cours présente les principes sous-jacents à cette technique de deep learning. Le parallèle est fait avec l'ACP (analyse en composantes principales), l'intérêt des auto-encodeurs est de pouvoir proposer différents niveaux d'abstraction et de savoir appréhender les "pattern" non-linéaires.

Mots-clés : deep learning, réseaux de neurones, réduction de la dimensionnalité, visualisation des données, pattern non-linéaire, couches cachées, perceptron, filtrage du bruit
Support de cours : Auto-encodeur
Références :
Wikipedia, "Autoencoder".
Rakotomalala R., "Deep learning : perceptrons simples et multicouches", nov. 2018.

mercredi 20 novembre 2019

Discrétisation supervisée rapide

Nous nous intéressons à la discrétisation supervisée dans ce tutoriel, plus particulièrement à la méthode descendante MDLP de Fayyad et Irani (1993). Nous évaluons les solutions qu'elle propose sur deux bases de données et nous comparons les temps d'exécution sous R, à travers les packages "discretization" et "RWeka".

Une étude rapide de l'algorithme permet de faire le parallèle avec l'induction par arbre de décision. Fort de cette idée, nous proposons un algorithme de discrétisation basée sur rpart(). On peut toujours argumenter sur la qualité des solutions proposées, ce n'est pas notre propos. En revanche, il apparaît clairement que cette nouvelle approche s'avère autrement plus rapide sur les très grandes bases de données.

Mots-clés : discrétisation, apprentissage supervisé, logiciel R, package discretization, package rweka, mdlp, rpart, arbres de décision
Didacticiel : Discrétisation supervisée rapide
Code source + données : Discrétisation rpart
Références :
Tutoriel Tanagra, "La discrétisation des variables quantitatives", octobre 2014.
Tutoriel Tanagra, "Discrétisation – Comparaison de logiciels", février 2010.

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
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 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 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.

Pour les personnes qui ne sont pas très familiarisés avec la manipulation des données sous Excel, un  double programme de remise à niveau est disponible : (1) sur le traitement des listes sous Excel (filtres automatiques, avancés, tableaux croisés dynamique) ; (2) sur les statistiques descriptives sous 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.