AccueilBlogTest technique régression logistique : fondations statistiques pour Data Scientist
Guide recrutement data

Test technique régression logistique : fondations statistiques pour Data Scientist

La régression logistique est souvent le premier algorithme demandé en entretien. Mais la maîtriser vraiment — coefficients, régularisation, hypothèses — différencie les profils solides.

Data Builder·Juin 2025·6 min de lecture·Data Scientist
Sommaire
  1. Pourquoi la régression logistique
  2. Fonction sigmoïde et log-odds
  3. Interpréter les coefficients
  4. Régularisation L1 et L2
  5. Hypothèses et diagnostics
  6. Extension multiclasse
  7. Grille

1Pourquoi la régression logistique plutôt que linéaire

Question discriminante

Pourquoi ne peut-on pas utiliser une régression linéaire pour prédire une probabilité ?

  • Problème régression linéaire — peut prédire des valeurs hors [0,1]. Une probabilité doit être bornée entre 0 et 1
  • Solution — transformer la sortie via la fonction sigmoïde qui mappe ℝ → [0,1]
  • Interprétation — la régression logistique modélise log(p/(1-p)) = β₀ + β₁X₁ + ... (les log-odds)
  • Avantage — interprétable, probabilités calibrées, base pour comprendre les GLMs

2Fonction sigmoïde et odds ratio

Question discriminante

Qu est-ce qu un odds ratio ? Comment l interprétez-vous dans le contexte d un modèle de churn ?

import numpy as np from sklearn.linear_model import LogisticRegression import pandas as pd model = LogisticRegression(C=1.0, solver='lbfgs') model.fit(X_train, y_train) # Odds ratios : exp(coeff) odds_ratios = pd.Series( np.exp(model.coef_[0]), index=X_train.columns ).sort_values(ascending=False) print(odds_ratios) # age: 0.95 -> +1 an d age = probabilite churn * 0.95 # jours_inactif: 1.12 -> +1 jour inactif = probabilite churn * 1.12 # nb_achats_12m: 0.88 -> +1 achat = probabilite churn * 0.88
  • Odds ratio > 1 — la feature augmente la probabilité de l événement
  • Odds ratio < 1 — la feature diminue la probabilité
  • Odds ratio = 1 — la feature n a pas d effet
  • Exemple — OR = 1.12 pour 'jours_inactif' signifie : chaque jour d inactivité supplémentaire multiplie les odds de churn par 1.12 (+12%)

3Interpréter les coefficients

Question discriminante

Comment les coefficients d une régression logistique sont-ils affectés par le scaling des features ?

  • Sans scaling — les coefficients ne sont pas comparables. Une feature en euros (0-100000) aura un coefficient très petit vs une feature en [0,1]
  • Avec StandardScaler — tous les coefficients sont sur la même échelle. Le coefficient absolu reflète l importance relative de la feature
  • Interprétation — avec scaling : 'la feature la plus importante est celle avec le coefficient absolu le plus élevé'
  • À ne pas confondre — la magnitude du coefficient ≠ p-value de la feature

4Régularisation L1 (Lasso) et L2 (Ridge)

Question discriminante

Quelle est la différence entre L1 et L2 dans sklearn LogisticRegression ? Quand utilisez-vous l un ou l autre ?

# sklearn : parametre C = 1/lambda (inverse de la regularisation) # C petit -> forte regularisation, C grand -> faible regularisation # L2 (Ridge) : penalty='l2' - par defaut # Réduit les coefficients sans les mettre à zéro model_l2 = LogisticRegression(penalty='l2', C=0.1, solver='lbfgs') # L1 (Lasso) : penalty='l1' # Met les coefficients non importants à zéro = sélection de features model_l1 = LogisticRegression(penalty='l1', C=0.1, solver='liblinear') # ElasticNet : combinaison L1 + L2 model_en = LogisticRegression(penalty='elasticnet', l1_ratio=0.5, solver='saga')
  • L1 — sélection de features naturelle (coefficients → 0). Utile avec beaucoup de features non pertinentes
  • L2 — réduit mais ne supprime pas. Préférer si toutes les features sont potentiellement utiles
  • Tuning de C — utiliser GridSearchCV ou cross_val_score

5Hypothèses et limites

Question discriminante

Quelles sont les hypothèses de la régression logistique ? Quand échouent-elles ?

  • Linéarité des log-odds — relation linéaire entre les features et le log-odds. Vérifier avec des partial dependence plots
  • Indépendance des observations — pas de structure temporelle ou spatiale non capturée
  • Pas de multicolinéarité forte — deux features très corrélées rendent les coefficients instables
  • Quand elle échoue — relations non linéaires (préférer XGBoost), très grande dimensionnalité, interactions complexes
  • Calibration — les probabilités de la régression logistique sont bien calibrées contrairement à celles de Random Forest

6Extension multiclasse

Question discriminante

Comment la régression logistique gère-t-elle plusieurs classes ?

  • One-vs-Rest (OvR) — un classifieur binaire par classe. Classe i vs toutes les autres. Simple mais peut avoir des régions non couvertes
  • Multinomial (Softmax) — un seul modèle qui optimise la log-vraisemblance multinomiale. Plus cohérent, solver='lbfgs' ou 'sag'
  • sklearn — multi_class='auto' choisit multinomial si solver compatible, sinon OvR
from sklearn.linear_model import LogisticRegression from sklearn.model_selection import StratifiedKFold, cross_validate from sklearn.preprocessing import StandardScaler from sklearn.pipeline import Pipeline import numpy as np pipeline = Pipeline([ ('scaler', StandardScaler()), ('model', LogisticRegression( C=0.1, class_weight='balanced', max_iter=1000, solver='lbfgs' )) ]) cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42) scores = cross_validate(pipeline, X, y, cv=cv, scoring=['roc_auc', 'precision', 'recall', 'f1']) print(f"AUC: {scores['test_roc_auc'].mean():.3f} +/- {scores['test_roc_auc'].std():.3f}") # Odds ratios pour l interpretabilite pipeline.fit(X_train, y_train) import pandas as pd odds = pd.DataFrame({ 'feature': X.columns, 'odds_ratio': np.exp(pipeline.named_steps['model'].coef_[0]) }).sort_values('odds_ratio', ascending=False) print(odds.head(10))
  • Regularisation L1 vs L2 - L2 (Ridge, defaut) : penalise les grands coefficients, garde toutes les features. L1 (Lasso) : coefficients a zero = selection automatique de features
  • Desequilibre de classes - class_weight="balanced" ajuste le poids. Alternative : ajuster le threshold de decision plutot que le defaut 0.5
  • Metriques selon le contexte - AUC-ROC : ranking general. Precision-Recall : quand faux positifs coutent cher. F1 : equilibre. Accuracy : inutile sur classes desequilibrees
  • Odds ratios - interpretabilite cle. OR=2.5 = probabilite de l evenement multipliee par 2.5 quand la feature augmente d une unite
  • Calibration - verifier que P(y=1|score=0.7) ≈ 70% (Platt scaling ou isotonic regression). Critique pour le scoring de credit ou pricing

7Grille par niveau

NiveauMaitriseSignal GONO-GO
JuniorComprend la sigmoïde, train/predict/proba, métriquesExplique pourquoi on utilise sigmoïde, sait interpréter predict_probaPense que la régression logistique est toujours linéaire
ConfirméOdds ratios, L1/L2, C parameter, hypothèsesInterprète les odds ratios, sait tuner C, connaît L1 vs L2Ne sait pas ce qu est un odds ratio
SeniorCalibration, diagnostics de multicolinéarité, GLMsVérifie la calibration, sait quand la régression logistique est meilleure qu XGBoostUtilise toujours XGBoost sans justifier

Vous recrutez un Data Scientist ?

Premier entretien gratuit. Rapport GO/NO-GO sous 48h.