Régression : une introduction

Download nbviewer Onyxia
Binder Open In Colab githubdev

Nous allons partir du même jeu de données que précédemment, c’est-à-dire les résultats des élections US 2020 présentés dans l’introduction de cette partie: les données de vote aux élections présidentielles américaines croisées à des variables sociodémographiques. Le code est disponible sur Github.

#!pip install --upgrade xlrd #colab bug verson xlrd
#!pip install geopandas

import requests

url = 'https://raw.githubusercontent.com/linogaliana/python-datascientist/master/content/course/modelisation/get_data.py'
r = requests.get(url, allow_redirects=True)
open('getdata.py', 'wb').write(r.content)

import getdata
votes = getdata.create_votes_dataframes()

Le précédent chapitre visait à proposer un premier modèle pour comprendre les comtés où le parti Républicain l’emporte. La variable d’intérêt étant bimodale (victoire ou défaite), on était dans le cadre d’un modèle de classification.

Maintenant, sur les mêmes données, on va proposer un modèle de régression pour expliquer le score du parti Républicain. La variable est donc continue. Nous ignorerons le fait que ses bornes se trouvent entre 0 et 100 et donc qu’il faudrait, pour être rigoureux, transformer l’échelle afin d’avoir des données dans cet intervalle.

Ce chapitre utilise toujours le même jeu de données, présenté dans l’introduction de cette partie: les données de vote aux élections présidentielles américaines croisées à des variables sociodémographiques. Le code est disponible sur Github.

Principe général

Le principe général de la régression consiste à trouver une loi $h_\theta(X)$ telle que

$$ h_\theta(X) = \mathbb{E}_\theta(Y|X) $$

Cette formalisation est extrêmement généraliste et ne se restreint d’ailleurs par à la régression linéaire.

En économétrie, la régression offre une alternative aux méthodes de maximum de vraisemblance et aux méthodes des moments. La régression est un ensemble très vaste de méthodes, selon la famille de modèles (paramétriques, non paramétriques, etc.) et la structure de modèles.

La régression linéaire

C’est la manière la plus simple de représenter la loi $h_\theta(X)$ comme combinaison linéaire de variables $X$ et de paramètres $\theta$. Dans ce cas,

$$ \mathbb{E}_\theta(Y|X) = X\beta $$

Cette relation est encore, sous cette formulation, théorique. Il convient de l’estimer à partir des données observées $y$. La méthode des moindres carrés consiste à minimiser l’erreur quadratique entre la prédiction et les données observées (ce qui explique qu’on puisse voir la régression comme un problème de Machine Learning). En toute généralité, la méthode des moindres carrés consiste à trouver l’ensemble de paramètres $\theta$ tel que

$$ \theta = \arg \min_{\theta \in \Theta} \mathbb{E}\bigg[ \left( y - h_\theta(X) \right)^2 \bigg] $$

Ce qui, dans le cadre de la régression linéaire, s’exprime de la manière suivante:

$$ \beta = \arg\min \mathbb{E}\bigg[ \left( y - X\beta \right)^2 \bigg] $$

Lorsqu’on amène le modèle théorique ($\mathbb{E}_\theta(Y|X) = X\beta$) aux données, on formalise le modèle de la manière suivante:

$$ Y = X\beta + \epsilon $$

Avec une certaine distribution du bruit $\epsilon$ qui dépend des hypothèses faites. Par exemple, avec des $\epsilon \sim \mathcal{N}(0,\sigma^2)$ i.i.d., l’estimateur $\beta$ obtenu est équivalent à celui du Maximum de Vraisemblance dont la théorie asymptotique nous assure l’absence de biais, la variance minimale (borne de Cramer-Rao).

# packages utiles
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import sklearn.metrics
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
# packages utiles
import statsmodels.api as sm
import statsmodels.formula.api as smf

La régression logistique

Ce modèle s’applique à une distribution binaire. Dans ce cas, $\mathbb{E}_{\theta}(Y|X) = \mathbb{P}_{\theta}(Y = 1|X)$. La régression logistique peut être vue comme un modèle linéaire en probabilité:

$$ \text{logit}\bigg(\mathbb{E}_{\theta}(Y|X)\bigg) = \text{logit}\bigg(\mathbb{P}_{\theta}(Y = 1|X)\bigg) = X\beta $$

La fonction $\text{logit}$ est $]0,1[ \to \mathbb{R}: p \mapsto \log(\frac{p}{1-p})$.

Elle permet ainsi de transformer une probabilité dans $\mathbb{R}$. Sa fonction réciproque est la sigmoïde ($\frac{1}{1 + e^{-x}}$), objet central du Deep Learning.

Il convient de noter que les probabilités ne sont pas observées, c’est l’outcome binaire (0/1) qui l’est. Cela amène à voir la régression logistique de deux manières différentes :

  • En économétrie, on s’intéresse au modèle latent qui détermine le choix de l’outcome. Par exemple, si on observe les choix de participer ou non au marché du travail, on va modéliser les facteurs déterminant ce choix ;
  • En Machine Learning, le modèle latent n’est nécessaire que pour classifier dans la bonne catégorie les observations

L’estimation des paramètres $\beta$ peut se faire par maximum de vraisemblance ou par régression, les deux solutions sont équivalentes sous certaines hypothèses.

# packages utiles
from sklearn.linear_model import LogisticRegression
import sklearn.metrics
# packages utiles
from scipy import stats
Previous
Next