Ausreißer, Hebelwirkung und Einfluss

Einführung in Regression mit statsmodels in Python

Maarten Van den Broeck

Content Developer at DataCamp

Roach-Datensatz

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

Eine gewöhnliche Kakerlake

Einführung in Regression mit statsmodels in Python

Welche Punkte sind Ausreißer?

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

Ein Streudiagramm der Masse von Kakerlaken im Vergleich zu ihrer Länge mit einer Trendlinie. Die meisten Punkte folgen ziemlich genau der Trendlinie.

Einführung in Regression mit statsmodels in Python

Extreme Erklärungswerte

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)

![Ein Streudiagramm der Masse von Kakerlaken im Vergleich zu ihrer Länge, mit einer Trendlinie. Die meisten Punkte sind blau, aber ein ganz kurzer und ein ganz langer Punkt sind orange. (https://assets.datacamp.com/production/repositories/5857/datasets/312d375df71d931d4787dcfb926b69e183bb3b3f/scatter-roach-mass-vs-length-extreme-length.png =110)

Einführung in Regression mit statsmodels in Python

Werte, die von der Regressionsgeraden abweichen

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)

Ein Streudiagramm der Masse von Kakerlaken im Vergleich zu ihrer Länge, mit einer Trendlinie. Die meisten Punkte sind blau, aber ein ganz kurzer und ein ganz langer Kakerlak haben orangefarbene Punkte. Die meisten Punkte sind Kreise, aber ein Punkt, der einen Fisch mit einer scheinbaren Masse von Null darstellt, ist ein Kreuz.

Einführung in Regression mit statsmodels in Python

Hebelwirkung und Einfluss

Die Hebelwirkung zeigt, wie extrem die Werte der erklärenden Variablen sind.

Der Einfluss misst, wie stark sich das Modell ändern würde, wenn du die Beobachtung bei der Modellierung aus dem Datensatz weglassen würdest.

Jemand, der einen Schraubenschlüssel dreht

Einführung in Regression mit statsmodels in Python

.get_influence() und .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
Einführung in Regression mit statsmodels in Python

Kochdistanz

Die Cook-Distanz ist das gängigste Maß für den Einfluss.

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
Einführung in Regression mit statsmodels in Python

Die einflussreichsten Kakerlaken

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 # really short roach
54   Roach   390.0       29.5  0.394740    0.365782 # really long roach
40   Roach     0.0       19.0  0.061897    0.311852 # roach with zero mass
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
Einführung in Regression mit statsmodels in Python

Die einflussreichste Kakerlake loswerden

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"})

Ein Streudiagramm der Masse von Kakerlaken im Vergleich zu ihrer Länge, mit zwei Trendlinien. Eine Trendlinie nutzt alle Daten, die andere lässt die kürzeste Kakerlake weg. Die zweite Trendlinie hat einen deutlich steileren Anstieg.

Einführung in Regression mit statsmodels in Python

Lass uns üben!

Einführung in Regression mit statsmodels in Python

Preparing Video For Download...