Régression linéaire à pentes parallèles

Régression intermédiaire avec statsmodels en Python

Maarten Van den Broeck

Content Developer at DataCamp

Le cours précédent

Ce cours suppose les acquis d'« Introduction to Regression with statsmodels in Python » (https://learn.datacamp.com/courses/25942)

Régression intermédiaire avec statsmodels en Python

De la régression simple à la régression multiple

La régression multiple est un modèle de régression avec plus d'une variable explicative.

Plus de variables explicatives donnent plus d'information et de meilleures prédictions.

Régression intermédiaire avec statsmodels en Python

Contenu du cours

Chapitre 1

  • Régression à « pentes parallèles »

Chapitre 2

  • Interactions
  • Paradoxe de Simpson

Chapitre 3

  • Plus de variables explicatives
  • Fonctionnement de la régression linéaire

Chapitre 4

  • Régression logistique multiple
  • La loi logistique
  • Fonctionnement de la régression logistique
Régression intermédiaire avec statsmodels en Python

L'ensemble de données sur les poissons

mass_g length_cm species
242.0 23.2 Bream
5.9 7.5 Perch
200.0 30.0 Pike
40.0 12.9 Roach
  • Chaque ligne représente un poisson
  • mass_g est la variable réponse
  • 1 explicative numérique, 1 catégorielle
Régression intermédiaire avec statsmodels en Python

Une variable explicative à la fois

from statsmodels.formula.api import ols

mdl_mass_vs_length = ols("mass_g ~ length_cm",
                         data=fish).fit()
print(mdl_mass_vs_length.params)
Intercept   -536.223947
length_cm     34.899245
dtype: float64
  • 1 coefficient d'ordonnée à l'origine
  • 1 coefficient de pente
mdl_mass_vs_species = ols("mass_g ~ species + 0",
                          data=fish).fit()

print(mdl_mass_vs_species.params)
species[Bream]    617.828571
species[Perch]    382.239286
species[Pike]     718.705882
species[Roach]    152.050000
dtype: float64
  • 1 coefficient d'ordonnée à l'origine par catégorie
Régression intermédiaire avec statsmodels en Python

Les deux variables en même temps

mdl_mass_vs_both = ols("mass_g ~ length_cm + species + 0",
                       data=fish).fit()
print(mdl_mass_vs_both.params)
species[Bream]    -672.241866
species[Perch]    -713.292859
species[Pike]    -1089.456053
species[Roach]    -726.777799
length_cm           42.568554
dtype: float64
  • 1 coefficient de pente
  • 1 coefficient d'ordonnée à l'origine par catégorie
Régression intermédiaire avec statsmodels en Python

Comparer les coefficients

print(mdl_mass_vs_length.params)
Intercept   -536.223947
length_cm     34.899245
print(mdl_mass_vs_both.params)
species[Bream]    -672.241866
species[Perch]    -713.292859
species[Pike]    -1089.456053
species[Roach]    -726.777799
length_cm           42.568554
print(mdl_mass_vs_species.params)
species[Bream]    617.828571
species[Perch]    382.239286
species[Pike]     718.705882
species[Roach]    152.050000
Régression intermédiaire avec statsmodels en Python

Visualisation : 1 variable explicative numérique

import matplotlib.pyplot as plt
import seaborn as sns

sns.regplot(x="length_cm",
            y="mass_g",
            data=fish,
            ci=None)

plt.show()

Nuage de points masse vs longueur des poissons, avec droite de tendance linéaire

Régression intermédiaire avec statsmodels en Python

Visualisation : 1 variable explicative catégorielle

sns.boxplot(x="species",
            y="mass_g",
            data=fish,
            showmeans=True)

Boîtes à moustaches de la masse des poissons par espèce

Régression intermédiaire avec statsmodels en Python

Visualisation : les deux variables explicatives

coeffs = mdl_mass_vs_both.params
print(coeffs)
species[Bream]    -672.241866
species[Perch]    -713.292859
species[Pike]    -1089.456053
species[Roach]    -726.777799
length_cm           42.568554
ic_bream, ic_perch, ic_pike, ic_roach, sl = coeffs
sns.scatterplot(x="length_cm",
                y="mass_g",
                hue="species",
                data=fish)
plt.axline(xy1=(0, ic_bream), slope=sl, color="blue")
plt.axline(xy1=(0, ic_perch), slope=sl, color="green")
plt.axline(xy1=(0, ic_pike), slope=sl, color="red")
plt.axline(xy1=(0, ic_roach), slope=sl, color="orange")

Modèle à pentes parallèles de la masse vs longueur, catégorisé par espèce

Régression intermédiaire avec statsmodels en Python

Passons à la pratique !

Régression intermédiaire avec statsmodels en Python

Preparing Video For Download...