Линейная регрессия с параллельными наклонами

Промежуточная регрессия со statsmodels в Python

Maarten Van den Broeck

Content Developer at DataCamp

Предыдущий курс

Этот курс предполагает знание материала из Introduction to Regression with statsmodels in Python

Промежуточная регрессия со statsmodels в Python

От простой регрессии к множественной

Множественная регрессия — это регрессионная модель с несколькими объясняющими переменными.

Больше объясняющих переменных даёт более глубокий анализ и точные прогнозы.

Промежуточная регрессия со statsmodels в Python

Содержание курса

Глава 1

  • Регрессия «параллельных наклонов»

Глава 2

  • Взаимодействия
  • Парадокс Симпсона

Глава 3

  • Больше объясняющих переменных
  • Как работает линейная регрессия

Глава 4

  • Множественная логистическая регрессия
  • Логистическое распределение
  • Как работает логистическая регрессия
Промежуточная регрессия со statsmodels в Python

Набор данных о рыбах

mass_g length_cm species
242.0 23.2 Bream
5.9 7.5 Perch
200.0 30.0 Pike
40.0 12.9 Roach
  • Каждая строка соответствует одной рыбе
  • mass_g — целевая переменная
  • 1 числовая и 1 категориальная объясняющая переменная
Промежуточная регрессия со statsmodels в Python

По одной объясняющей переменной

from statsmodels.formula.api import ols

mdl_mass_vs_length = ols("mass_g ~ length_cm",
                         data=fish).fit()
print(mdl_mass_vs_length.params)
Intercept   -536.223947
length_cm     34.899245
dtype: float64
  • 1 коэффициент свободного члена
  • 1 коэффициент наклона
mdl_mass_vs_species = ols("mass_g ~ species + 0",
                          data=fish).fit()

print(mdl_mass_vs_species.params)
species[Bream]    617.828571
species[Perch]    382.239286
species[Pike]     718.705882
species[Roach]    152.050000
dtype: float64
  • 1 коэффициент свободного члена для каждой категории
Промежуточная регрессия со statsmodels в Python

Обе переменные одновременно

mdl_mass_vs_both = ols("mass_g ~ length_cm + species + 0",
                       data=fish).fit()
print(mdl_mass_vs_both.params)
species[Bream]    -672.241866
species[Perch]    -713.292859
species[Pike]    -1089.456053
species[Roach]    -726.777799
length_cm           42.568554
dtype: float64
  • 1 коэффициент наклона
  • 1 коэффициент свободного члена для каждой категории
Промежуточная регрессия со statsmodels в Python

Сравнение коэффициентов

print(mdl_mass_vs_length.params)
Intercept   -536.223947
length_cm     34.899245
print(mdl_mass_vs_both.params)
species[Bream]    -672.241866
species[Perch]    -713.292859
species[Pike]    -1089.456053
species[Roach]    -726.777799
length_cm           42.568554
print(mdl_mass_vs_species.params)
species[Bream]    617.828571
species[Perch]    382.239286
species[Pike]     718.705882
species[Roach]    152.050000
Промежуточная регрессия со statsmodels в Python

Визуализация: 1 числовая объясняющая переменная

import matplotlib.pyplot as plt
import seaborn as sns

sns.regplot(x="length_cm",
            y="mass_g",
            data=fish,
            ci=None)

plt.show()

Диаграмма рассеяния: масса рыбы против длины с линией тренда

Промежуточная регрессия со statsmodels в Python

Визуализация: 1 категориальная объясняющая переменная

sns.boxplot(x="species",
            y="mass_g",
            data=fish,
            showmeans=True)

Ящичная диаграмма массы рыбы по видам

Промежуточная регрессия со statsmodels в Python

Визуализация: обе объясняющие переменные

coeffs = mdl_mass_vs_both.params
print(coeffs)
species[Bream]    -672.241866
species[Perch]    -713.292859
species[Pike]    -1089.456053
species[Roach]    -726.777799
length_cm           42.568554
ic_bream, ic_perch, ic_pike, ic_roach, sl = coeffs
sns.scatterplot(x="length_cm",
                y="mass_g",
                hue="species",
                data=fish)
plt.axline(xy1=(0, ic_bream), slope=sl, color="blue")
plt.axline(xy1=(0, ic_perch), slope=sl, color="green")
plt.axline(xy1=(0, ic_pike), slope=sl, color="red")
plt.axline(xy1=(0, ic_roach), slope=sl, color="orange")

Модель параллельных наклонов: масса рыбы против длины с разбивкой по видам

Промежуточная регрессия со statsmodels в Python

Давайте потренируемся!

Промежуточная регрессия со statsmodels в Python

Preparing Video For Download...