Более двух объясняющих переменных

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

Maarten Van den Broeck

Content Developer at DataCamp

Повторение пройденного

sns.scatterplot(x="length_cm", 
                y="height_cm",
                data=fish,
                hue="mass_g")

Двумерный точечный график, где масса отображается цветом для визуализации третьей числовой переменной.

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

Фасетирование по видам

grid = sns.FacetGrid(data=fish,

col="species",
hue="mass_g", col_wrap=2,
palette="plasma")
grid.map(sns.scatterplot,
         "length_cm",
         "height_cm")
plt.show()

Точечный график высоты, длины и массы рыб, разбитый на фасеты по видам. Более яркий цвет означает большую массу.

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

Фасетирование по видам

  • Для фасетирования можно использовать более одной категориальной переменной
  • Не злоупотребляйте фасетированием
  • С ростом числа переменных построение графиков усложняется

Точечный график высоты, длины и массы рыб, разбитый на фасеты по видам. Более яркий цвет означает большую массу.

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

Уровни взаимодействий

Без взаимодействий

ols("mass_g ~ length_cm + height_cm + species + 0", data=fish).fit()

парные взаимодействия между переменными

ols(
  "mass_g ~ length_cm + height_cm + species +
  length_cm:height_cm + length_cm:species + height_cm:species + 0", data=fish).fit()

тройное взаимодействие между всеми тремя переменными

ols(
  "mass_g ~ length_cm + height_cm + species + 
  length_cm:height_cm + length_cm:species + height_cm:species + length_cm:height_cm:species + 0", data=fish).fit()
Промежуточная регрессия со statsmodels в Python

Все взаимодействия

ols(
  "mass_g ~ length_cm + height_cm + species + 
  length_cm:height_cm + length_cm:species + height_cm:species + length_cm:height_cm:species + 0", 
  data=fish).fit()

эквивалентно

ols(
  "mass_g ~ length_cm * height_cm * species + 0", 
  data=fish).fit()
Промежуточная регрессия со statsmodels в Python

Только парные взаимодействия

ols(
  "mass_g ~ length_cm + height_cm + species + 
  length_cm:height_cm + length_cm:species + height_cm:species + 0", 
  data=fish).fit()

эквивалентно

ols(
  "mass_g ~ (length_cm + height_cm + species) ** 2 + 0", 
  data=fish).fit()
Промежуточная регрессия со statsmodels в Python

Процесс предсказания

mdl_mass_vs_all = ols(
  "mass_g ~ length_cm * height_cm * species + 0",
  data=fish).fit()

length_cm = np.arange(5, 61, 5)
height_cm = np.arange(2, 21, 2)
species = fish["species"].unique()

p = product(length_cm, height_cm, species)

explanatory_data = pd.DataFrame(p,
                                columns=["length_cm",
                                         "height_cm",
                                         "species"])

prediction_data = explanatory_data.assign(
  mass_g = mdl_mass_vs_all.predict(explanatory_data))

print(prediction_data)
     length_cm  height_cm species       mass_g
0            5          2   Bream  -570.656437
1            5          2   Roach    31.449145
2            5          2   Perch    43.789984
3            5          2    Pike   271.270093
4            5          4   Bream  -451.127405
..         ...        ...     ...          ...
475         60         18    Pike  2690.346384
476         60         20   Bream  1531.618475
477         60         20   Roach  2621.797668
478         60         20   Perch  3041.931709
479         60         20    Pike  2926.352397

[480 rows x 4 columns]
Промежуточная регрессия со statsmodels в Python

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

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

Preparing Video For Download...