Викиди, важелі та вплив

Вступ до Regression зі statsmodels у Python

Maarten Van den Broeck

Content Developer at DataCamp

Набір даних про плітку

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

Звичайна плітка

Вступ до Regression зі statsmodels у Python

Які точки є викидами?

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

Точкова діаграма маси пліток проти їхньої довжини з трендом. Більшість точок тісно прилягають до лінії тренду.

Вступ до Regression зі statsmodels у Python

Екстремальні значення пояснювальної змінної

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)

Точкова діаграма маси пліток проти їхньої довжини з лінією тренду. Більшість точок сині, але одна дуже коротка та одна дуже довга плітка позначені помаранчевим.

Вступ до Regression зі statsmodels у Python

Значення відповіді далеко від регресійної лінії

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)

Точкова діаграма маси пліток проти їхньої довжини з лінією тренду. Більшість точок сині, але одна дуже коротка та одна дуже довга плітка позначені помаранчевим. Більшість точок — кола, але одна риба з нульовою масою позначена хрестиком.

Вступ до Regression зі statsmodels у Python

Важіль і вплив

«Важіль» — це міра того, наскільки екстремальні значення пояснювальної змінної.

«Вплив» вимірює, наскільки змінився б модуль, якби ви вилучили спостереження з набору даних під час моделювання.

Людина крутить гайковим ключем

Вступ до Regression зі statsmodels у Python

.get_influence() та .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
Вступ до Regression зі statsmodels у Python

Відстань Кука

Відстань Кука — найпоширеніша міра впливу.

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
Вступ до Regression зі statsmodels у Python

Найвпливовіші плітки

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 # дуже коротка плітка
54   Roach   390.0       29.5  0.394740    0.365782 # дуже довга плітка
40   Roach     0.0       19.0  0.061897    0.311852 # плітка з нульовою масою
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
Вступ до Regression зі statsmodels у Python

Вилучення найвпливовішої плітки

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

Точкова діаграма маси пліток проти їхньої довжини з двома лініями тренду. Одна — для всіх даних, інша — без найкоротшої плітки. Друга має помітно більший нахил.

Вступ до Regression зі statsmodels у Python

Давайте потренуємось!

Вступ до Regression зі statsmodels у Python

Preparing Video For Download...