Régression linéaire et analyse de la variance avec Python
Objectifs pédagogiques
- Comprendre et savoir mettre en œuvre un modèle de régression linéaire.
- Savoir mesurer la qualité et la performance d’un modèle de régression.
- Comprendre et savoir mener une analyse de la variance à un ou deux facteurs.
Programme détaillé
La formation traite de modèles entrant dans le cadre du modèle linéaire général (GLM), pour modéliser des phénomènes quantitatifs.
Régression linéaire simple 4h
- Point de vue descriptif : méthode des moindres carrés (MCO)
- Point de vue inférentiel : validation et qualité du modèle
- Généralisation du modèle en prévision
- Applications sur cas pratiques
Régression linéaire multiple 10h
- Estimation et validation du modèle
- Sélection de modèles : sélections backward, forward ou stepwise à l’aide des critères AIC, BIC ou Cp de Mallows
- Traitements des variables explicatives qualitatives
- Evaluation de la qualité prédictive d’un modèle
- Applications sur cas pratiques
Analyse de la variance à un facteur 2h
- Le modèle à effets fixes, tests de comparaisons multiples, analyse de la variance non paramétrique
- Applications sur cas pratiques
Analyse de la variance à deux facteurs et plus 2h
- La notion d’interactions
- Utilisation de variables quantitatives et qualitatives dans le cadre du modèle linéaire général (analyse de la covariance)
- Applications sur cas pratiques
Public visé
Data analysts, chargés d’études statistiques
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
Régression et ANOVA en Python : statsmodels, ses formules et ses pièges
Pour la régression linéaire et l’analyse de la variance « à la manière d’un statisticien », avec coefficients, écarts-types, tests et tableau d’analyse de la variance, la bibliothèque de référence en Python est statsmodels. Elle propose deux interfaces, et le choix entre les deux n’est pas anodin.
Deux interfaces, une différence qui compte
L’interface par formules (statsmodels.formula.api) reprend la syntaxe de R : salaire ~ experience + C(diplome) * C(sexe). Elle code automatiquement les variables qualitatives, déclarées avec C(), et ajoute la constante. L’interface par matrices (statsmodels.api) demande de tout préparer soi-même, y compris la constante : oublier sm.add_constant() revient à estimer une régression forcée par l’origine, sans message d’avertissement.
import statsmodels.api as sm
import statsmodels.formula.api as smf
modele = smf.ols("salaire ~ experience + C(diplome) * C(sexe)", data=df).fit()
print(modele.summary())
sm.stats.anova_lm(modele, typ=2) # tableau d'analyse de la variance
Par défaut, anova_lm() calcule des sommes de carrés séquentielles (type I), qui dépendent de l’ordre des variables dans la formule ; l’argument typ=2 donne des tests qui n’en dépendent pas.
Comparaisons multiples et version non paramétrique
Après une analyse de la variance à un facteur, la méthode de Tukey compare toutes les paires de moyennes en contrôlant le risque global d’erreur. Le test de Kruskal-Wallis, sa version non paramétrique, est dans SciPy :
from statsmodels.stats.multicomp import pairwise_tukeyhsd
from scipy.stats import kruskal
print(pairwise_tukeyhsd(df["salaire"], df["diplome"]).summary())
kruskal(*[g["salaire"] for _, g in df.groupby("diplome")])
Ce que Python ne fait pas tout seul : la sélection stepwise
Contrairement à SAS (GLMSELECT) ou R (step()), ni statsmodels ni scikit-learn ne proposent de sélection stepwise par AIC ou BIC prête à l’emploi. Les critères sont bien disponibles (modele.aic, modele.bic), mais la boucle d’ajout et de retrait des variables s’écrit en quelques lignes. Le SequentialFeatureSelector de scikit-learn mène des sélections forward ou backward, mais sur un autre principe : il compare les modèles par validation croisée, c’est-à-dire sur leur qualité de prévision plutôt que sur un critère d’information.
Les mêmes outils, avec une variable à expliquer qualitative, mènent à la classification supervisée avec Python.