Régression logistique

Temps de lecture : 4 minutes

Dans cet article, je te présente un autre type de modèle linéaire généralisé : la régression logistique. Oui, je te l’accorde, le nom est un peu exotique mais le principe reste simple; c’est une régression qui est très souvent utilisée dans les problèmes de classification. Allez, assez parlé, découvrons la merveille !

Notre cas d’étude… loufoque (comme d’habitude)

Disons qu’on s’est rendu compte que dernièrement, on n’était plus très efficace dans la journée. On suspecte que c’est parce qu’on ne dort pas assez la nuit (pourquoi, va savoir 😅). On veut vérifier si le manque d’efficacité est vraiment lié à une insuffisance de sommeil : on commence donc à relever le nombre d’heures de sommeil toutes les nuits et en fonction de ce nombre, on regarde si on est efficace dans la journée ou pas. Après 10 jours, notre relevé ressemble à ceci :

Efficacité en fonction du nombre d’heures de sommeil sur 10 nuits

Bon, on est d’accord, ce n’est pas écrit noir sur blanc mais il y a quand même un message qui ressort : « plus on dort et plus on est efficace ». On désire aller plus loin pour fabriquer un modèle qui prédit notre efficacité en fonction de nombre d’heures de sommeil. En gros, en entrée, on lui donnerait le nombre d’heures de sommeil et en sortie, il nous dirait :« va, tu seras efficace aujourd’hui, mon fils/ma fille ! » ou au contraire « va, tu seras très inutile aujourd’hui, mon fils/ma fille ! »… Il n’a pas encore beaucoup de tact, ce modèle !

Spécificités du problème

On peut remarquer que formulée de la sorte, la valeur de sortie Y ici n’est pas continue, elle est binaire : efficace (Y = 1) ou pas efficace (Y=0). Pour avoir une sortie continue, il serait donc intéressant que notre modèle retourne plutôt des probabilités i.e. qu’il nous dise que si on dort X heures, on a telles chances d’être efficace dans la journée. Mathématiquement, ceci revient à trouver la courbe sur laquelle en projetant nos points, on obtiendrait P(Y=1) (probabilité d’être efficace). Et si on regarde de près nos données, on peut remarquer qu’une courbe en « S » ferait très bien l’affaire, un peu comme ceci :

Régression logistique

Avec une telle courbe, quand on effectue les projections, les points en bas à gauche (pas efficace) auront une probabilité P(Y=1) proche de 0 tandis que ceux en haut à droite (efficace) auront P(Y=1) = 1 . Et les points intermédiaires auront des probabilités autour de 0.5, c’est bien ce qu’on recherchait non ?

Eh bien, cette courbe en « S  » porte le nom de fonction sigmoïde, et tout le but de la régression logistique est de trouver l’équation de la courbe qui colle le mieux à nos données.

Un peu de vision mathématique (juste un peu, ne t’inquiète pas 😉)

De fait, cette courbe est représentée par l’équation :

P(Y=1) = p = \frac {1}{1 + \exp(-Y)}

Et souviens-toi, on garde toujours en tête que notre Y est une fonction linéaire de X – c’est notre hypothèse de base. On peut donc écrire Y = a.X + b, a~et~b étant des nombres réels. Si on remet ça dans notre première équation plus haut, on obtient :

P(Y=1) = p = \frac {1}{1 + \exp(-(aX + b))}

Et si tu t’amuses à réécrire tout ça, tu obtiens (promis, c’est la dernière équation) :

\ln(\frac{p}{1 - p}) = aX + b

Tada, cette forme ne te rappelle pas quelque chose : c’est une expression linéaire au final ! Toute la régression logistique consiste donc à trouver les coefficients a,~b qui ajustent bien nos données : c’est pour cela qu’on dit que la régression logistique n’est qu’un type de régression linéaire généralisée. Pour trouver les coefficients a,~b, on utilise néanmoins une méthode différente de la minimisation des moindres carrés employée en régression linéaire simple : on se sert du maximum de vraisemblance ! Mais on a assez fait de math pour aujourd’hui. Je ne vais pas en dire plus sur ça dans cet article 🙂.

Toute cette petite partie « équations » n’était que pour te montrer un peu le principe de base de la régression logistique. En soi, sur Python, c’est plutôt facile à mettre en oeuvre.

Implémentation sur Python

On ira piocher encore dans la librairie sklearn. Dans son usage le plus simple, il faut juste écrire :

from sklearn.linear_model import LogisticRegression
modele = LogisticRegression()
# Entrainement du modèle
modele.fit(X,Y)
# On peut après l'utiliser pour prédire des sorties sur de nouvelles données Xnew
modele.predict(Xnew) 

Les options proposées par l’API de sklearn peuvent paraître un peu compliquées à première vue mais c’est juste les paramètres mathématiques de l’implémentation de ton modèle logistique. A moins que tu veuilles effectuer des traitements très spécifiques (incorporer des pénalités, utiliser un solver précis…etc), tu n’en auras pas besoin. Et si tu en as besoin, c’est que tu es suffisamment expérimenté pour comprendre tout seul 😉.

Bien sûr, comme pour tous les types de régression, tu peux avoir plus d’une variable en entrée (régression logistique multivariable), ou plus d’une classe en sortie (régression logistique multinomiale).

Partager

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *