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

Что такое регрессионный анализ?

Регрессионный анализ — это широко используемый и мощный статистический метод для количественной оценки взаимосвязи между двумя или более переменными.

Чаще всего он используется для объяснения связи между независимыми и зависимыми переменными. Зависимая переменная — это то, что вы пытаетесь предсказать, в то время как ваши входные данные становятся вашими независимыми переменными.

Например, если у нас есть набор данных о доходах и ценах, и мы пытаемся количественно определить, что происходит с доходами при изменении цены. Цена становится вашей независимой переменной, доход (то, что вы пытаетесь предсказать) — вашей зависимой переменной.

Предположения линейной регрессии

Чтобы правильно применить линейную регрессию, вы должны выполнить следующие 5 ключевых предположений:

  • Мы исследуем линейную зависимость
  • Все переменные подчиняются нормальному распределению
  • Мультиколлинеарность очень мала или отсутствует
  • Автокорреляция отсутствует или отсутствует
  • Данные гомоскедастичны

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

Формула линейной регрессии

При выполнении регрессионного анализа цель состоит в том, чтобы сгенерировать уравнение, объясняющее взаимосвязь ваших независимых и зависимых переменных.

В линейной регрессии уравнение выглядит следующим образом.

где m — наклон линии, b — точка, в которой линия регрессии пересекает ось y. X — независимая переменная.

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

Линейная регрессия Sklearn

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

Во-первых, сгенерируйте некоторые данные, на которых мы можем запустить линейную регрессию.

# generate regression dataset
from sklearn.datasets.samples_generator import make_regression
X, y = make_regression(n_samples=100, n_features=1, noise=10)

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

%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
plt.plot(X, y, 'o', color='black');
plt.title("Sample Dataset"

Ниже мы можем ясно видеть, что существует связь между нашей независимой и зависимой переменной.

Теперь используйте Sklearn для запуска регрессионного анализа.

from sklearn.linear_model import LinearRegression
#run regression
reg = LinearRegression().fit(X, y)

Затем постройте нашу подогнанную линию против нашего набора данных, чтобы визуально увидеть, насколько хорошо она подходит.

#Generated Predictions
y_predicted = reg.predict(X)
#Plot Our Actual and Predicted Values
plt.plot(X, y, 'o', color='black');
plt.plot(X,y_predicted,color='blue')
plt.title("Actuals vs Regression Line")

Легко видеть, что наша регрессия довольно хорошо соответствует нашим входным данным.

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

#get coefficients and y intercept
print("m: {0}".format(reg.coef_))
print("b: {0}".format(reg.intercept_))
#m: [64.61969623]
#b: -0.5324534814869875

R-квадрат

Метрика, которую вы можете использовать для количественной оценки того, сколько вариаций зависимой переменной объясняет ваша линейная модель, называется R-квадрат (R2). Другими словами, он оценивает, насколько близко разбросаны значения y вокруг вашей линии регрессии, чем ближе они к вашей линии регрессии, тем лучше.

Диапазон R-квадрата составляет от 0% до 100%. Чем выше R-Squared, тем лучше.

#Returns the coefficient of determination R^2 of the prediction.
reg.score(X, y)
#0.9725287282456724

В нашем случае наша линия регрессии способна объяснить 97,25% вариации, очень хорошо!

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

Остаточные участки

Остатки – это разница между зависимой переменной (y) и прогнозируемой переменной (y_predicted).

График остатка представляет собой график рассеяния независимых переменных и остатка. Рассчитаем остатки и нанесем их на график.

residuals = y-y_predicted
plt.plot(X,residuals, 'o', color='darkblue')
plt.title("Residual Plot")
plt.xlabel("Independent Variable")
plt.ylabel("Residual")

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

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

Интерпретация коэффициентов регрессии

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

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

  • Нулевая гипотеза (H0): коэффициенты равны нулю
  • Альтернативная гипотеза (H1): коэффициенты НЕ равны нулю

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

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

import statsmodels.api as sm
est = sm.OLS(y, X)
est2 = est.fit()
print(est2.summary())

При ближайшем рассмотрении вы увидите, что R-квадрат, который мы ранее рассчитали со Sklearn, составляет 97,3%.

Чтобы проверить нулевую гипотезу коэффициентов, мы будем использовать статистику t. Посмотрите на P›| т | столбец. Это p-значения для t-теста. Короче говоря, если они меньше желаемого значения (обычно 0,05), вы отвергаете нулевую гипотезу. В противном случае вы не сможете отклонить нулевое значение и, следовательно, должны выбросить эту независимую переменную.

Выше, предполагая значение значимости 0,05, наше P-значение 0,000 намного ниже значимости. Таким образом, мы отклоняем нулевую гипотезу о том, что коэффициент равен 0, и делаем вывод, что x1 является важной независимой переменной для использования.

Если бы у вас было больше независимых переменных, они были бы перечислены здесь, и вы бы выполнили аналогичный тест.

Вывод

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