Obserwacje odstające, dźwignia i wpływ

Wprowadzenie do regresji z użyciem statsmodels w Pythonie

Maarten Van den Broeck

Content Developer at DataCamp

Zbiór danych o płociach

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

Pospolita płoć

Wprowadzenie do regresji z użyciem statsmodels w Pythonie

Które punkty są obserwacjami odstającymi?

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

Wykres rozrzutu masy płoci względem długości z linią trendu. Większość punktów ściśle podąża za linią trendu.

Wprowadzenie do regresji z użyciem statsmodels w Pythonie

Ekstremalne wartości zmiennej objaśniającej

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)

Wykres rozrzutu masy płoci względem długości z linią trendu. Większość punktów jest niebieska, ale jeden bardzo krótki i jeden bardzo długi okaz mają punkty pomarańczowe.

Wprowadzenie do regresji z użyciem statsmodels w Pythonie

Wartości zmiennej odpowiedzi odległe od linii regresji

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)

Wykres rozrzutu masy płoci względem długości z linią trendu. Większość punktów jest niebieska, ale jeden bardzo krótki i jeden bardzo długi okaz mają punkty pomarańczowe. Większość punktów to kółka, ale jeden punkt reprezentujący rybę o pozornej masie zero to krzyżyk.

Wprowadzenie do regresji z użyciem statsmodels w Pythonie

Dźwignia i wpływ

Dźwignia mierzy, jak ekstremalne są wartości zmiennej objaśniającej.

Wpływ mierzy, jak bardzo model zmieniłby się po usunięciu danej obserwacji ze zbioru danych.

Osoba dokręcająca klucz

Wprowadzenie do regresji z użyciem statsmodels w Pythonie

.get_influence() i .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
Wprowadzenie do regresji z użyciem statsmodels w Pythonie

Odległość Cooka

Odległość Cooka jest najpopularniejszą miarą wpływu.

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
Wprowadzenie do regresji z użyciem statsmodels w Pythonie

Najbardziej wpływowe okazy płoci

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
Wprowadzenie do regresji z użyciem statsmodels w Pythonie

Usuwanie najbardziej wpływowego okazu płoci

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

Wykres rozrzutu masy płoci względem długości z dwiema liniami trendu. Jedna uwzględnia wszystkie dane, druga wyklucza najkrótszy okaz. Druga linia ma wyraźnie większe nachylenie.

Wprowadzenie do regresji z użyciem statsmodels w Pythonie

Czas na ćwiczenia!

Wprowadzenie do regresji z użyciem statsmodels w Pythonie

Preparing Video For Download...