Classification supervisée : analyse discriminante, régression logistique et arbres avec Python
Objectifs pédagogiques
- Connaître et savoir mettre en œuvre les méthodes paramétriques de référence permettant de répondre au problème de discrimination (également appelé classification supervisée) : analyse discriminante, régression logistique.
- Connaître et savoir mettre en œuvre les méthodes d’arbres (CART et random forest) dans le cadre de la classification supervisée.
- Être capable de définir et de calculer des critères permettant de comparer les performances de modèles.
Programme détaillé
La formation traite de modèles adaptés à la prévision de phénomènes qualitatifs en fonction de variables quantitatives et qualitatives.
Présentation du problème de la classification supervisée 3h
- Cadre statistique
- Critères de performance
- Approche scoring
Analyse discriminante linéaire 3h
- Approche descriptive
- Approche prédictive
- Analyse discriminante quadratique
- Applications sur cas pratiques
Régression logistique 6h
- Présentation du modèle
- Estimation des paramètres et tests
- Sélection de modèle
- Introduction aux méthodes pénalisées (ridge et lasso)
- Applications sur cas pratiques
Arbres 6h
- Méthodologie CART (arbres de décision)
- Agrégation (bagging) d’arbres : forêts aléatoires
- Applications sur cas pratiques
Public visé
Data analysts, chargés d’études statistiques, data scientists
Prérequis
- Connaissances de base en statistiques descriptives (formation Statistiques descriptives avec Python).
- Connaissances de base en statistique inférentielle (formation Statistique inférentielle : estimation ponctuelle, intervalle de confiance et test statistique).
- Connaissances de base de Python (formation Python initiation).
Approche pédagogique
Classification supervisée en Python : scikit-learn ou statsmodels ?
Deux bibliothèques couvrent l’essentiel des méthodes de classification supervisée en Python, avec deux philosophies différentes : scikit-learn, pensée pour prédire, et statsmodels, pensée pour expliquer et tester. Savoir laquelle répond à la question posée évite bien des contresens.
scikit-learn : une même grammaire pour toutes les méthodes
Tous les modèles y partagent la même interface fit / predict, ce qui rend leur comparaison directe :
LinearDiscriminantAnalysisetQuadraticDiscriminantAnalysispour l’analyse discriminante ;LogisticRegressionpour la régression logistique ;DecisionTreeClassifier(arbres de type CART) etRandomForestClassifier(forêts aléatoires) ;sklearn.metricspour les critères de performance : matrice de confusion, courbe ROC, AUC.
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
rf = RandomForestClassifier(n_estimators=500, random_state=0).fit(X_train, y_train)
roc_auc_score(y_test, rf.predict_proba(X_test)[:, 1])
statsmodels : coefficients, écarts-types et tests
Pour lire un modèle en statisticien (significativité des coefficients, odds-ratios, comparaison de modèles emboîtés), statsmodels produit une sortie comparable à celles de R ou de SAS :
import numpy as np
import statsmodels.formula.api as smf
logit = smf.logit("defaut ~ age + revenu + C(statut)", data=df).fit()
print(logit.summary())
np.exp(logit.params) # odds-ratios
Un piège classique
La LogisticRegression de scikit-learn applique par défaut une pénalisation L2 (paramètre C=1.0). Ses coefficients ne sont donc pas ceux du maximum de vraisemblance et diffèrent de ceux obtenus avec statsmodels, R ou SAS sur les mêmes données. Ce n’est pas un défaut : c’est un choix orienté vers la prédiction. Il rappelle que la régression logistique « classique » et ses versions pénalisées (ridge, lasso) sont deux outils voisins, à ne pas confondre au moment d’interpréter un coefficient.
Les méthodes d’agrégation par boosting et les SVM relèvent d’une autre formation : Machine learning : bagging, gradient boosting, SVM avec Python.