Valeurs aberrantes, levier et influence

Introduction à la régression avec statsmodels en Python

Maarten Van den Broeck

Content Developer at DataCamp

Ensemble de données : gardons

roach = fish[fish['species'] == "Roach"]
print(roach.head())
   species  mass_g  length_cm
35   Roach    40.0       12.9
36   Roach    69.0       16.5
37   Roach    78.0       17.5
38   Roach    87.0       18.2
39   Roach   120.0       18.6

Un gardon commun

Introduction à la régression avec statsmodels en Python

Quels points sont aberrants ?

sns.regplot(x="length_cm",
            y="mass_g",
            data=roach,
            ci=None)
plt.show()

Nuage de points des masses de gardons selon leur longueur avec une ligne de tendance. La plupart des points suivent de près la tendance.

Introduction à la régression avec statsmodels en Python

Valeurs explicatives extrêmes

roach["extreme_l"] = ((roach["length_cm"] < 15) |
                    (roach["length_cm"] > 26))

fig = plt.figure()
sns.regplot(x="length_cm",
            y="mass_g",
            data=roach,
            ci=None)

sns.scatterplot(x="length_cm",
                y="mass_g",
                hue="extreme_l",
                data=roach)

Nuage de points des masses de gardons selon leur longueur, avec une ligne de tendance. La plupart des points sont bleus, mais un gardon très court et un très long sont en orange.

Introduction à la régression avec statsmodels en Python

Valeurs de réponse éloignées de la droite de régression

roach["extreme_m"] = roach["mass_g"] < 1

fig = plt.figure()
sns.regplot(x="length_cm",
            y="mass_g",
            data=roach,
            ci=None)

sns.scatterplot(x="length_cm",
                y="mass_g",
                hue="extreme_l",
                style="extreme_m",
                data=roach)

Nuage de points des masses de gardons selon leur longueur, avec une ligne de tendance. La plupart des points sont bleus, mais un très court et un très long sont en orange. La plupart des points sont des cercles, mais un poisson avec une masse apparente de zéro est une croix.

Introduction à la régression avec statsmodels en Python

Levier et influence

Le « levier » mesure le caractère extrême des valeurs de la variable explicative.

L'« influence » mesure à quel point le modèle changerait si vous excluiez l'observation de l'ensemble de données lors de la modélisation.

Une personne qui tourne une clé

Introduction à la régression avec statsmodels en Python

.get_influence() et .summary_frame()

mdl_roach = ols("mass_g ~ length_cm", data=roach).fit()

summary_roach = mdl_roach.get_influence().summary_frame()
roach["leverage"] = summary_roach["hat_diag"] print(roach.head())
   species  mass_g  length_cm  leverage
35   Roach    40.0       12.9  0.313729
36   Roach    69.0       16.5  0.125538
37   Roach    78.0       17.5  0.093487
38   Roach    87.0       18.2  0.076283
39   Roach   120.0       18.6  0.068387
Introduction à la régression avec statsmodels en Python

Distance de Cook

La « distance de Cook » est la mesure d'influence la plus courante.

roach["cooks_dist"] = summary_roach["cooks_d"]
print(roach.head())
   species  mass_g  length_cm  leverage  cooks_dist
35   Roach    40.0       12.9  0.313729    1.074015
36   Roach    69.0       16.5  0.125538    0.010429
37   Roach    78.0       17.5  0.093487    0.000020
38   Roach    87.0       18.2  0.076283    0.001980
39   Roach   120.0       18.6  0.068387    0.006610
Introduction à la régression avec statsmodels en Python

Gardons les plus influents

print(roach.sort_values("cooks_dist", ascending = False))
   species  mass_g  length_cm  leverage  cooks_dist
35   Roach    40.0       12.9  0.313729    1.074015 # gardon vraiment court
54   Roach   390.0       29.5  0.394740    0.365782 # gardon vraiment long
40   Roach     0.0       19.0  0.061897    0.311852 # gardon avec masse nulle
52   Roach   290.0       24.0  0.099488    0.150064
51   Roach   180.0       23.6  0.088391    0.061209
..     ...     ...        ...       ...         ...
43   Roach   150.0       20.4  0.050264    0.000257
44   Roach   145.0       20.5  0.050092    0.000256
42   Roach   120.0       19.4  0.056815    0.000199
47   Roach   160.0       21.1  0.050910    0.000137
37   Roach    78.0       17.5  0.093487    0.000020
Introduction à la régression avec statsmodels en Python

Retirer le gardon le plus influent

roach_not_short = roach[roach["length_cm"] != 12.9]

sns.regplot(x="length_cm",
            y="mass_g",
            data=roach,
            ci=None,
            line_kws={"color": "green"})

sns.regplot(x="length_cm",
            y="mass_g",
            data=roach_not_short,
            ci=None,
            line_kws={"color": "red"})

Nuage de points des masses de gardons selon leur longueur, avec deux lignes de tendance. L'une utilise toutes les données, l'autre exclut le plus court gardon. Cette deuxième ligne est nettement plus pentue.

Introduction à la régression avec statsmodels en Python

Passons à la pratique !

Introduction à la régression avec statsmodels en Python

Preparing Video For Download...