Le paradoxe de Simpson

Régression intermédiaire avec statsmodels en Python

Maarten Van den Broeck

Content Developer at DataCamp

Un paradoxe des plus ingénieux !

Le paradoxe de Simpson survient quand la tendance d'un modèle sur l'ensemble des données diffère fortement de celles des modèles sur des sous-ensembles.

tendance = coefficient de pente

Régression intermédiaire avec statsmodels en Python

Données synthétiques de Simpson

x y groupe
62.24344 70.60840 D
52.33499 14.70577 B
56.36795 46.39554 C
66.80395 66.17487 D
66.53605 89.24658 E
62.38129 91.45260 E
  • 5 groupes de données, étiquetés « A » à « E »
1 https://www.rdocumentation.org/packages/datasauRus/topics/simpsons_paradox
Régression intermédiaire avec statsmodels en Python

Régressions linéaires

Ensemble des données

mdl_whole = ols("y ~ x", 
                 data=simpsons_paradox).fit()

print(mdl_whole.params)
Intercept           -38.554  
x                     1.751  

Par groupe

mdl_by_group = ols("y ~ group + group:x + 0",
                   data = simpsons_paradox).fit()

print(mdl_by_group.params)
  groupA    groupB    groupC    groupD    groupE  
 32.5051   67.3886   99.6333  132.3932  123.8242  
groupA:x  groupB:x  groupC:x  groupD:x  groupE:x  
 -0.6266   -1.0105   -0.9940   -0.9908   -0.5364
Régression intermédiaire avec statsmodels en Python

Tracer l'ensemble des données

sns.regplot(x="x",
            y="y",
            data=simpsons_paradox,
            ci=None)

Nuage de points de l'ensemble de données du paradoxe de Simpson, tous groupes confondus. La tendance est positive.png

Régression intermédiaire avec statsmodels en Python

Tracer par groupe

sns.lmplot(x="x",
           y="y",
           data=simpsons_paradox,
           hue="group",
           ci=None)

Nuage de points du paradoxe de Simpson, coloré par groupe. La tendance est maintenant négative pour chaque groupe.png

Régression intermédiaire avec statsmodels en Python

Réconcilier la différence

Bon conseil

Si possible, tracez l'ensemble de données.

Conseil courant

On ne peut pas choisir un « meilleur » modèle en général – cela dépend des données et de la question à laquelle vous répondez.

Autre bon conseil

Formulez la question avant de modéliser.

Régression intermédiaire avec statsmodels en Python

Exemple de résultats de test

scatter-video-games-whole.png

scatter-video-games-by-group.png

Régression intermédiaire avec statsmodels en Python

Exemple de maladie infectieuse

scatter-cities-whole.png

scatter-cities-by-group.png

Régression intermédiaire avec statsmodels en Python

Réconcilier la différence

  • Souvent (mais pas toujours), le modèle par groupe est plus éclairant.
  • Manquez-vous des variables explicatives ?
  • Le contexte est important.
Régression intermédiaire avec statsmodels en Python

Paradoxe de Simpson dans des jeux de données réels

  • Le paradoxe est généralement moins évident.
  • Vous pourriez observer une pente nulle plutôt qu'un renversement complet.
  • Il peut ne pas apparaître dans chaque groupe.
Régression intermédiaire avec statsmodels en Python

Passons à la pratique !

Régression intermédiaire avec statsmodels en Python

Preparing Video For Download...