Начнем с простой линейной регрессии. Простая линейная регрессия оценивает, насколько изменится целевая переменная, если единственный предиктор изменится на определенную величину. Формула простой линейной регрессии имеет вид

Символ «b ^ 0» известен как перехват (или константа), а символ «b ^ 1» - как уклон для X. Символ «Y ^ i» - это оценочное значение, известное как подогнанное значение. Разница между истинным значением «Yi» и подобранным значением «Y ^ i» называется остатками или ошибкой предсказания.

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

#Simple Linear regression of charges V.S. bmi
predictors = ['bmi']
outcome = 'charges'
model = LinearRegression()
model.fit(df[predictors], df[outcome])
print(f'Intercept: {model.intercept_:.3f}')
print(f'Coefficient Exposure: {model.coef_[0]:.3f}')
fitted = model.predict(df[predictors])
residuals = df[outcome] - fitted
ax = df.plot.scatter(x='bmi', y='charges', figsize=(15, 10))
ax.plot(df.bmi, fitted, linewidth=5, color='k', label=f'simple linear regression: charges = {model.intercept_:.3f} + {model.coef_[0]:.3f}bmi')
for x, yactual, yfitted in zip(df.bmi, df.charges, fitted): 
    ax.plot((x, x), (yactual, yfitted), '--', color='C1')
plt.tight_layout()
plt.legend()
plt.show()

В простой линейной регрессии, чтобы увидеть, каково соотношение зарядов и bmi, мы можем увидеть, что точка пересечения равна 1193, а наклон равен 394, соответственно. Оранжевая вертикальная пунктирная линия указывает остатки, разницу между тем, что предлагает линия регрессии, и тем, что есть на самом деле. Подбирая линию, мы фактически пытаемся минимизировать сумму этих различий. Это то, что называется методом наименьших квадратов. Метод наименьших квадратов просто определяется как сумма квадратов остатков. Причина принятия квадратов, а не простая разница в том, что разные остатки с разными знаками не компенсируют друг друга. Наконец, возведение в квадрат теоретически упрощает построение подобранной линии, чем, например, абсолютное значение разностей. Интерпретируя модель, мы можем сказать, что одна единица увеличения bmi приводит к увеличению заряда на 394 единицы. Перехват - это фактически корректировка для удовлетворения среднего заряда при рассмотрении значений bmi. В противном случае бессмысленно говорить о величине сборов, когда bmi равно нулю, поскольку bmi = 0 бессмысленно. Очевидно, мы можем расширить тот же подход для всего набора предикторов, чтобы проанализировать связь с целевым результатом.

Множественная линейная регрессия

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

где «p» обозначает общее количество предикторов, а «e» - остатки. Прежде чем углубляться в множественную регрессию, нам нужно иметь дело с категориальными предикторами, также известными как факторные переменные. Нам нужно найти способ преобразовать факторную переменную, чтобы ее можно было понять в множественной регрессии. Факторные переменные, также называемые категориальными переменными, принимают ограниченное количество дискретных значений. Двоичная (да / нет) переменная, также называемая переменной индикатор, является частным случаем факторной переменной. Например, предикторы пола и курильщика являются переменными двоичных факторов. Наиболее распространенный подход - преобразовать переменную в набор двоичных фиктивных переменных. Другие формы подходов к кодированию:

  • Справочное кодирование: наиболее распространенный тип кодирования, используемый статистиками, при котором один уровень фактора используется в качестве справочного, а другие факторы сравниваются с этим уровнем [1].
  • One hot Encoder: в этом типе кодировщика сохраняются все уровни коэффициентов. Хотя этот подход полезен для определенных алгоритмов машинного обучения, он не подходит для множественной линейной регрессии.
  • Кодирование отклонения. Тип кодирования, при котором каждый уровень сравнивается с общим средним значением, а не с контрольным уровнем.

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

В настройке регрессии факторная переменная с P отдельными уровнями обычно представлена ​​матрицей только с P- 1 столбцом. Это связано с тем, что регрессионная модель обычно включает член перехвата. В случае перехвата, после того как вы определили значения для двоичных файлов P- 1, значение для P- th известно и может считаться избыточным. Добавление P- -го столбца вызовет ошибку мультиколлинеарности [1].

Для этого в реализации Python мы применим это предложение. В некоторых случаях применение кодирования, такого как однократное кодирование, может привести к возникновению такого количества фиктивных переменных. В этой ситуации вы должны решить, полезно ли включение всех уровней факторной переменной. Вы можете использовать такой подход, как группирование разных уровней в один уровень на основе такого критерия, как остатки. Для упорядоченных факторных переменных, где порядок играет критическую роль, преобразование факторных переменных в числовую переменную сохранит информацию, содержащуюся в упорядочении, которая была бы потеряна, если бы она была преобразована в фактор. Например, для упорядоченных факторных переменных со значениями, такими как small, medium и large, значения могут быть закодированы как 1, 2, 3 или 1, 3, 5, в зависимости от интенсивности разницы.

Для множественной линейной регрессии нашего набора страховых данных реализация python выглядит следующим образом:

predictors = ['age', 'sex', 'bmi', 
              'children', 'smoker', 'region']
outcome = 'charges'
df_encoded = pd.get_dummies(df[predictors], drop_first=True)
df_lm_factor = LinearRegression()
df_lm_factor.fit(df_encoded, df[outcome])
print(f'Intercept: {df_lm_factor.intercept_:.3f}') 
print('Coefficients:')
for name, coef in zip(X.columns, df_lm_factor.coef_):
    print(f' {name}: {coef}')

Результатом будет:

[output]:
Intercept: -11938.539
Coefficients:
 age: 256.85635253734864
 bmi: 339.1934536108373
 children: 475.5005451491269
 sex_male: -131.3143593951132
 smoker_yes: 23848.534541912835
 region_northwest: -352.9638994246546
 region_southeast: -1035.0220493878253
 region_southwest: -960.0509913008365

Интерпретация множественной линейной регрессии не так проста и понятна, как одиночная линейная регрессия, особенно с факторными переменными. На основе выходных данных приведенного выше кода коэффициент является показателем отношения предиктора к цели. Например, коэффициент age, равный 257, указывает, что на одну единицу увеличения возраста, сборы увеличиваются на 257 единиц. Для факторной переменной ее следует интерпретировать по сравнению с контрольным уровнем. Например, коэффициент sex_male равен -131, что указывает на то, что половой мужчина имеет на 131 меньшее влияние на целевой результат, чем половой мужчина. Точно так же для smoker_yes эффект курильщика = да имеет на 23848 больший эффект, чем эффект курильщика, который не курит.

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

Ссылка

[1] Брюс, Питер, Эндрю Брюс и Питер Гедек. Практическая статистика для специалистов по данным: более 50 основных концепций с использованием R и Python. O’Reilly Media, 2020.