Régression logistique pour prédire des probabilités

Apprentissage supervisé en R : régression

Nina Zumel and John Mount

Win-Vector LLC

Prédire des probabilités

  • Prédire si un événement survient (oui/non) : classification
  • Prédire la probabilité qu'un événement survienne : régression
  • Régression linéaire : prédit des valeurs dans [$-\infty$, $\infty$]
  • Probabilités : limitées à l'intervalle [0,1]
    • Donc, c'est non linéaire
Apprentissage supervisé en R : régression

Exemple : prédire la dystrophie musculaire de Duchenne (DMD)

  • résultat : has_dmd entrées : CK, H
Apprentissage supervisé en R : régression

Un modèle de régression linéaire

model <- lm(has_dmd ~ CK + H, 
            data = train)

test$pred <- predict(
    model, 
    newdata = test
)

résultat : has_dmd $\in$ {0,1}

  • 0 : FALSE
  • 1 : TRUE

Le modèle prédit des valeurs hors de [0:1]

Apprentissage supervisé en R : régression

Régression logistique

$$ log(\frac{p}{1-p}) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + ... $$

glm(formula, data, family = binomial)
  • Modèle linéaire généralisé
  • Suppose des entrées additives, linéaires en log-cotes : $log( p/(1-p) )$
  • family : décrit la distribution d'erreur du modèle
    • régression logistique : family = binomial
Apprentissage supervisé en R : régression

Modèle DMD

model <- glm(has_dmd ~ CK + H, data = train, family = binomial)
  • résultat : deux classes, p. ex. $a$ et $b$
  • le modèle retourne $Prob(b)$
    • Recommandé : 0/1 ou FALSE/TRUE
Apprentissage supervisé en R : régression

Interpréter des modèles de régression logistique

model
Call:  glm(formula = has_dmd ~ CK + H, family = binomial, data = train)

Coefficients:
(Intercept)           CK            H  
  -16.22046      0.07128      0.12552  

Degrees of Freedom: 86 Total (i.e. Null);  84 Residual
Null Deviance:       110.8 
Residual Deviance: 45.16     AIC: 51.16
Apprentissage supervisé en R : régression

Prédire avec un modèle glm()

predict(model, newdata, type = "response")
  • newdata : par défaut, les données d'entraînement
  • Pour obtenir des probabilités : utilisez type = "response"
    • Par défaut : retourne les log-cotes
Apprentissage supervisé en R : régression

Modèle DMD

model <- glm(has_dmd ~ CK + H, data = train, family = binomial)
test$pred <- predict(model, newdata = test, type = "response")

Apprentissage supervisé en R : régression

Évaluer une régression logistique : pseudo-$R^2$

$$ R^2 = 1 - \frac{RSS}{SS_{Tot}} $$

$$ pseudo R^2 = 1 - \frac{deviance}{null.deviance} $$

  • Déviance : analogue à la variance (RSS)
  • Déviance nulle : similaire à $SS_{Tot}$
  • pseudo R^2 : part de déviance expliquée
Apprentissage supervisé en R : régression

Pseudo-$R^2$ sur les données d'entraînement

Avec broom::glance()

glance(model) %>% 
  summarize(pR2 = 1 - deviance/null.deviance)
   pseudoR2
1 0.5922402

Avec sigr::wrapChiSqTest()

wrapChiSqTest(model)
"... pseudo-R2=0.59 ..."
Apprentissage supervisé en R : régression

Pseudo-$R^2$ sur les données de test

# Données de test
test %>% 
  mutate(pred = predict(model, newdata = test, type = "response")) %>%
  wrapChiSqTest("pred", "has_dmd", TRUE)

Arguments :

  • trame de données
  • nom de la colonne de prédiction
  • nom de la colonne de résultat
  • valeur cible (événement cible)
Apprentissage supervisé en R : régression

Courbe de gain

GainCurvePlot(test, "pred","has_dmd", "DMD model on test")

Apprentissage supervisé en R : régression

Passons à la pratique !

Apprentissage supervisé en R : régression

Preparing Video For Download...