Краткое руководство по реализации линейной регрессии с помощью Python statsmodels & scikit-learn libraries.

Линейная регрессия - это базовый метод прогнозной аналитики, который использует исторические данные для прогнозирования выходной переменной. Он популярен для прогнозного моделирования, потому что его легко понять и объяснить на простом английском языке.

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

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

Основная идея заключается в том, что если мы можем подогнать модель линейной регрессии к наблюдаемым данным, мы сможем использовать эту модель для прогнозирования любых будущих значений. Например, предположим, что мы обнаружили на основе исторических данных, что цена (P) дома линейно зависит от его размера (S ). Фактически, мы обнаружили, что цена дома ровно в 90 раз превышает его размер. Уравнение будет выглядеть так:

P = 90*S

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

P = 90*1500 = $135,000

В этом сообщении блога мы рассмотрим:

  1. Основные концепции и математика, лежащие в основе модели
  2. Как реализовать линейную регрессию с нуля с использованием смоделированных данных
  3. Как реализовать линейную регрессию с помощью statsmodels
  4. Как реализовать линейную регрессию с помощью scikit-learn

Это краткое руководство адаптировано из курса Next XYZ Линейная регрессия с Python, который включает изолированную среду в браузере, задачи, которые необходимо выполнить, и проекты с использованием общедоступных наборов данных.

Основные понятия и математика

В модели линейной регрессии есть два типа переменных:

  • входные или предикторные переменные - это переменные, которые помогают предсказать значение выходной переменной. Обычно его называют X.
  • Выходная переменная - это переменная, которую мы хотим предсказать. Обычно обозначается как Y.

Чтобы оценить Y с помощью линейной регрессии, мы предполагаем уравнение:

Yₑ = α + β X

где Y ₑ - это оценочное или прогнозируемое значение Y, основанное на нашем линейном уравнении.

Наша цель - найти статистически значимые значения параметров α и β, которые минимизируют разницу между Y и Y ₑ.

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

Итак, как мы оцениваем α и β? Мы можем использовать метод под названием обычные наименьшие квадраты.

Обычные наименьшие квадраты

Цель метода наименьших квадратов - найти значения α и β, которые минимизируют сумму квадратов разницы между Y и Да ₑ. Мы не будем здесь проводить вывод, но с помощью расчетов мы можем показать, что значения неизвестных параметров следующие:

где - это среднее значение X, а Ȳ - среднее значение Y.

Если вы знакомы со статистикой, вы можете распознать β как просто
Cov (X, Y) / Var (X).

Линейная регрессия с нуля

В этом посте мы будем использовать два модуля Python:

  • statsmodels - модуль, который предоставляет классы и функции для оценки множества различных статистических моделей, а также для проведения статистических тестов и исследования статистических данных.
  • scikit-learn - модуль, который предоставляет простые и эффективные инструменты для интеллектуального анализа и анализа данных.

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

Для начала давайте смоделируем некоторые данные и посмотрим, как прогнозируемые значения (Y ₑ) отличаются от фактического значения (Y):

Если приведенный выше код запущен (например, в записной книжке Jupyter), это будет примерно так:

Чтобы оценить y с помощью метода OLS, нам нужно вычислить xmean и ymean, ковариацию X и y (xycov) и дисперсию X (xvar), прежде чем мы сможем определить значения для alpha и beta.

Out:
alpha = 2.0031670124623426
beta = 0.32293968670927636

Отлично, теперь у нас есть оценка для alpha и beta! Наша модель может быть записана как Yₑ = 2,003 + 0,323 X,, и мы можем делать прогнозы:

Out:
array([3.91178282, 2.81064315, 3.27775989, 4.29675991, 3.99534802,
       1.69857201, 3.25462968, 2.36537842, 2.40424288, 2.81907292,
       ...
       2.16207195, 3.47451661, 2.65572718, 3.2760653 , 2.77528867,
       3.05802784, 2.49605373, 3.92939769, 2.59003892, 2.81212234])

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

Синяя линия - это линия наилучшего соответствия, Yₑ = 2,003 + 0,323 X. Из этого графика видно, что существует положительная линейная зависимость между X и у. Используя нашу модель, мы можем предсказать y из любых значений X!

Например, если бы у нас было значение X = 10, мы можем предсказать, что:
Yₑ = 2,003 + 0,323 (10) = 5,233.

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

Теперь, когда мы узнали, как реализовать модель линейной регрессии с нуля, мы обсудим, как использовать метод ols в библиотеке statsmodels.

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

В этом примере мы будем рассматривать только переменную TV - мы исследуем, могут ли расходы на телевизионную рекламу предсказать количество продаж продукта. Начнем с импорта этого CSV-файла как pandas фрейма данных, используя read_csv():

Во-первых, мы используем функцию statsmodelsols для инициализации нашей простой модели линейной регрессии. Здесь используется формула y ~ X, где X - это предикторная переменная (TV расходы на рекламу), а y - выходная переменная (Sales). Затем мы подбираем модель, вызывая метод fit() объекта OLS.

Нам больше не нужно вычислять alpha и beta самостоятельно, поскольку этот метод делает это автоматически! Вызов model.params покажет нам параметры модели:

Out:
Intercept    7.032594
TV           0.047537
dtype: float64

В обозначениях, которые мы использовали, α - это точка пересечения, а β - это наклон, т.е. α = 7.032 и β = 0,047.

Таким образом, уравнение для модели будет: Продажи = 7,032 + 0,047 * ТВ.

Проще говоря, это означает, что в среднем, если мы потратили 100 долларов на телевизионную рекламу, мы должны ожидать продажи 11,73 единиц.

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

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

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

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

Out:
0    26.04725
dtype: float64

Линейная регрессия с scikit-learn

Мы научились реализовывать модели линейной регрессии с помощью statsmodels… теперь давайте научимся делать это с помощью scikit-learn!

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

Yₑ = α + β₁X₁ + β₂X₂ +… + βₚXₚ, где p - количество предикторов.

В нашем примере мы будем прогнозировать Sales, используя переменные TV и Radio, т.е. нашу модель можно записать как:

Продажи = α + β₁ * ТВ + β₂ * Радио.

Сначала мы инициализируем нашу модель линейной регрессии, затем подгоняем модель к нашим предикторам и выходным переменным:

Опять же, нет необходимости вычислять значения для alpha и betas самостоятельно - нам просто нужно вызвать .intercept_ для alpha и .coef_ для массива с нашими коэффициентами beta1 и beta2:

Out:
alpha = 2.921099912405138
betas = [0.04575482 0.18799423]

Поэтому нашу модель можно записать как:

Продажи = 2,921 + 0,046 * телевидение + 0,1880 * радио.

Мы можем предсказать значения, просто используя .predict():

Out:
array([20.555464, 12.345362, 12.337017, 17.617115, 13.223908,
       12.512084, 11.718212, 12.105515,  3.709379, 12.551696,
       ...
       12.454977,  8.405926,  4.478859, 18.448760, 16.4631902,
        5.364512,  8.152375, 12.768048, 23.792922, 15.15754285])

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

Out:
[54.24638977]

Это означает, что если мы потратим 300 долларов на телевизионную рекламу и 200 долларов на рекламу на радио, мы должны ожидать, что в среднем будет продано 54 единицы.

Надеюсь, вам понравился этот краткий урок об основах линейной регрессии!

Мы рассмотрели, как реализовать линейную регрессию с нуля и с помощью statsmodels и scikit-learn в Python. На практике вам нужно будет знать, как проверить вашу модель и измерить эффективность, как выбрать значимые переменные для вашей модели, как обрабатывать категориальные переменные, а также когда и как выполнять нелинейные преобразования.

У нас есть полный курс, охватывающий все эти темы (и многое другое!) Здесь на Next XYZ, если вам интересно узнать больше о линейной регрессии с помощью Python!