Раскрывая силу терминов взаимодействия в линейной регрессии

Узнайте, как сделать линейные модели более гибкими, включив условия взаимодействия.

Линейная регрессия — это мощный статистический инструмент, используемый для моделирования связи между зависимой переменной и одной или несколькими независимыми переменными (признаками). Важной и часто забываемой концепцией регрессионного анализа являются условия взаимодействия. Короче говоря, условия взаимодействия позволяют нам исследовать, изменяется ли отношение между целью и независимой переменной в зависимости от значения другой независимой переменной.

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

В этой статье мы предоставим интуитивно понятное объяснение терминов взаимодействия в контексте линейной регрессии.

Что такое условия взаимодействия в регрессионных моделях?

Во-первых, давайте рассмотрим более простой случай, то есть линейную модель без членов взаимодействия. Такая модель предполагает, что влияние каждого признака или предиктора на зависимую переменную (цель) не зависит от других предикторов в модели.

Следующее уравнение описывает такую ​​спецификацию модели с двумя особенностями:

Чтобы объяснение было более понятным, давайте воспользуемся примером. Представьте, что мы заинтересованы в моделировании цен на объекты недвижимости (y) с использованием двух признаков: их размера (X1) и логического флага, указывающего, находится ли квартира в центр города (X2). β0 — точка пересечения, β1 и β2 — коэффициенты линейной модели, а ε — ошибка (необъяснимая по модели).

После сбора данных и оценки модели линейной регрессии мы получаем следующие коэффициенты:

Зная оценочные коэффициенты и то, что X2 является логическим свойством, мы можем записать два возможных сценария в зависимости от значения X2.

Как их интерпретировать? Хотя это может не иметь большого смысла в контексте недвижимости, мы можем сказать, что квартира площадью 0 квадратных метров в центре города стоит 310 (значение пересечения), а каждый квадратный метр дополнительной площади увеличивает цену на 20. В другом случае разница только в том, что точка пересечения меньше на 10 единиц. На следующем графике показаны две наиболее подходящие линии.

Как мы видим, линии параллельны и имеют одинаковый наклон — коэффициент при X1, который в обоих случаях одинаков.

Условия взаимодействия представляют совместные эффекты

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

Поэтому мы считаем, что между двумя сценариями должен быть разным не только перехват, но и наклон линий. Как это сделать? Именно тогда вступают в игру условия взаимодействия. Они делают спецификацию модели более гибкой и позволяют учитывать такие закономерности.

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

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

Как только мы запишем два сценария для X2 (центр города или нет), мы сразу увидим, что наклон (коэффициент на X1) двух линий разный. Как мы и предполагали, дополнительный квадратный метр площади в центре города сейчас стоит дороже, чем в пригороде.

Интерпретация коэффициентов с условиями взаимодействия

Добавление условий взаимодействия в модель изменяет интерпретацию всех коэффициентов. Без члена взаимодействия мы интерпретируем коэффициенты как уникальное влияние предиктора на зависимую переменную.

Таким образом, в нашем случае мы могли бы сказать, что β1 — это уникальное влияние размера квартиры на ее цену. Однако при использовании условия взаимодействия влияние размера квартиры различно для разных значений X2. Другими словами, уникальное влияние размера квартиры на ее цену больше не ограничивается β1.

Чтобы лучше понять, что представляет собой каждый коэффициент, давайте еще раз взглянем на необработанную спецификацию линейной модели с условиями взаимодействия. Напоминаем, что X2 — это логическая функция, указывающая, находится ли конкретная квартира в центре города или нет.

Теперь мы можем интерпретировать каждый из коэффициентов следующим образом:

  • β0 — точка пересечения квартир за пределами центра города (или любой другой группы, у которой значение логического признака X2 равно 0),
  • β1 — наклон (влияние цены) для квартир за пределами центра города,
  • β2 — разница в отрезке между двумя группами,
  • β3 — разница уклонов между квартирами в центре города и за его пределами.

Например, предположим, что мы проверяем гипотезу о равном влиянии размера квартиры на ее цену независимо от того, находится квартира в центре города или нет. Затем мы оценим линейную регрессию с помощью члена взаимодействия и проверим, значительно ли β3 отличается от 0.

Несколько дополнительных замечаний по условиям взаимодействия:

  • Мы представили термины двустороннего взаимодействия, однако возможны и взаимодействия более высокого порядка (например, из 3 признаков).
  • В нашем примере мы показали взаимодействие числового признака (размер квартиры) с булевым (находится ли квартира в центре города или нет). Однако мы можем создать условия взаимодействия и двух числовых признаков. Например, мы можем создать условие взаимодействия размера квартиры с количеством комнат. Дополнительные сведения по этой теме см. в источниках, указанных в разделе Ссылки.
  • Может случиться так, что член взаимодействия статистически значим, но основные эффекты - нет. Затем мы должны следовать иерархическому принципу, утверждающему, что если мы включаем в модель член взаимодействия, мы также должны включать основные эффекты, даже если их влияние не является статистически значимым.

Практический пример на Python

После всего теоретического введения давайте посмотрим, как добавить условия взаимодействия в модель линейной регрессии в Python. Как всегда, мы начинаем с импорта необходимых библиотек.

import numpy as np
import pandas as pd

import statsmodels.api as sm
import statsmodels.formula.api as smf

# plotting
import seaborn as sns 
import matplotlib.pyplot as plt

# settings
plt.style.use("seaborn-v0_8")
sns.set_palette("colorblind")
plt.rcParams["figure.figsize"] = (16, 8)
%config InlineBackend.figure_format = 'retina'

В нашем примере мы будем оценивать линейные модели, используя statsmodels library. Для набора данных мы будем использовать набор данных mtcars. Я совершенно уверен, что если вы когда-либо работали с R, вы уже знакомы с этим набором данных. Сначала мы загружаем набор данных:

mtcars = sm.datasets.get_rdataset("mtcars", "datasets", cache=True)
print(mtcars.__doc__)

При выполнении фрагмента выводится подробное описание набора данных. Мы показываем только соответствующие части — общее описание и определение столбцов:

   ====== ===============
   mtcars R Documentation
   ====== ===============

   The data was extracted from the 1974 *Motor Trend* US magazine, and
   comprises fuel consumption and 10 aspects of automobile design and
   performance for 32 automobiles (1973–74 models).

   A data frame with 32 observations on 11 (numeric) variables.

   ===== ==== ========================================
   [, 1] mpg  Miles/(US) gallon
   [, 2] cyl  Number of cylinders
   [, 3] disp Displacement (cu.in.)
   [, 4] hp   Gross horsepower
   [, 5] drat Rear axle ratio
   [, 6] wt   Weight (1000 lbs)
   [, 7] qsec 1/4 mile time
   [, 8] vs   Engine (0 = V-shaped, 1 = straight)
   [, 9] am   Transmission (0 = automatic, 1 = manual)
   [,10] gear Number of forward gears
   [,11] carb Number of carburetors
   ===== ==== ========================================

Затем мы извлекаем фактический набор данных из загруженного объекта:

df = mtcars.data
df.head()

Для нашего примера предположим, что мы хотим исследовать взаимосвязь между количеством миль на галлон (mpg) и двумя характеристиками: весом (wt, непрерывный) и типом трансмиссии (am, логический).

Во-первых, мы наносим данные на график, чтобы получить некоторые начальные сведения.

sns.lmplot(x="wt", y="mpg", hue="am", data=df, fit_reg=False)
plt.ylabel("Miles per Gallon")
plt.xlabel("Vehicle Weight");

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

model_1 = smf.ols(formula="mpg ~ wt + am", data=df).fit()
model_1.summary()

В следующих таблицах показаны результаты подбора линейной регрессии без члена взаимодействия.

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

X = np.linspace(1, 6, num=20)
sns.lmplot(x="wt", y="mpg", hue="am", data=df, fit_reg=False)
plt.title("Best fit lines for from the model without interactions")
plt.ylabel("Miles per Gallon")
plt.xlabel("Vehicle Weight")
plt.plot(X, 37.3216 - 5.3528 * X, "blue")
plt.plot(X, (37.3216 - 0.0236) - 5.3528 * X, "orange");

Поскольку коэффициент по признаку am практически равен нулю, линии почти перекрываются.

Затем мы используем вторую модель, на этот раз с термином взаимодействия между двумя функциями. Ниже мы покажем, как добавить термин взаимодействия в качестве дополнительных входных данных в формулу statsmodels.

model_2 = smf.ols(formula="mpg ~ wt + am + wt:am", data=df).fit()
model_2.summary()

В следующих сводных таблицах показаны результаты подбора линейной регрессии с учетом взаимодействия.

Из сводной таблицы можно быстро сделать два вывода:

  • все коэффициенты, включая член взаимодействия, статистически значимы.
  • проверив R2 (и его скорректированный вариант, поскольку у нас разное количество признаков в моделях), мы можем констатировать, что модель с членом взаимодействия дает лучшее соответствие.

Как и в предыдущем случае, построим наиболее подходящие линии.

X = np.linspace(1, 6, num=20)
sns.lmplot(x="wt", y="mpg", hue="am", data=df, fit_reg=False)
plt.title("Best fit lines for from the model with interactions")
plt.ylabel("Miles per Gallon")
plt.xlabel("Vehicle Weight")
plt.plot(X, 31.4161 - 3.7859 * X, "blue")
plt.plot(X, (31.4161 + 14.8784) + (-3.7859 - 5.2984) * X, "orange");

Сразу видно разницу в подгоночных линиях (как по перехвату, так и по наклону) для автомобилей с АКПП и МКПП.

Бонус. Мы также можем добавить термины взаимодействия, используя PolynomialFeatures от scikit-learn. Преобразователь предлагает не только возможность добавлять условия взаимодействия произвольного порядка, но также создает полиномиальные признаки (например, квадраты значений доступных признаков). Для получения дополнительной информации, пожалуйста, обратитесь к документации.

Подведение итогов

При работе с терминами взаимодействия в линейной регрессии следует помнить несколько вещей:

  • Условия взаимодействия позволяют нам проверить, изменяются ли отношения между целью и функцией в зависимости от значения другой функции.
  • Мы добавляем условия взаимодействия как умножение исходных признаков. Добавляя эти новые переменные в регрессионную модель, мы можем измерить эффекты взаимодействия между ними и целью. Крайне важно тщательно интерпретировать коэффициенты условий взаимодействия, чтобы понять направление и силу взаимосвязи.
  • Используя термины взаимодействия, мы можем сделать спецификацию линейной модели более гибкой (разные наклоны для разных линий), что может привести к лучшему соответствию данным и повышению эффективности прогнозирования.

Вы можете найти код, использованный в этом посте, в моем репозитории GitHub. Как всегда, любые конструктивные отзывы более чем приветствуются. Вы можете связаться со мной в Твиттере или в комментариях.

Понравилась статья? Станьте участником Medium, чтобы продолжить обучение, читая без ограничений. Если вы воспользуетесь этой ссылкой, чтобы стать участником, вы поддержите меня без каких-либо дополнительных затрат с вашей стороны. Заранее спасибо и до встречи!

Вас также может заинтересовать один из следующих материалов:









Рекомендации

Все изображения, если не указано иное, принадлежат автору.

Первоначально опубликовано в Блоге разработчиков NVIDIA 26 апреля 2023 г.