Построение регрессионной модели
Построение регрессионной модели означает подбор прямой линии для данных, чтобы предсказывать будущие значения. Сначала мы визуализируем наши данные, чтобы получить представление о том, как они выглядят, и увидеть закономерности и взаимосвязи.
Данные могут показывать положительную линейную зависимость, но мы подтверждаем это, вычисляя коэффициент корреляции Пирсона, который показывает, насколько наши данные близки к линейности.
Рассмотрим простой набор данных о зарплате, чтобы понять коэффициент корреляции Пирсона.
Набор данных состоит из двух столбцов:
- YearsExperience: количество лет, в течение которых человек работает;
- Salary (целевая переменная): соответствующая годовая зарплата в долларах США.
Теперь нам нужно построить модель, которая будет предсказывать зарплату на основе опыта работы.
Мы можем понять, что это можно сделать с помощью простой линейной регрессионной модели, потому что у нас есть только один предиктор и непрерывная целевая переменная.
Но можем ли мы напрямую применить алгоритм простой линейной регрессии? Нет.
У нас есть несколько предположений для применения линейной регрессии, и одно из них — линейность. Нам нужно проверить линейность, и для этого мы вычисляем коэффициент корреляции.
Что такое линейность?
Давайте разберёмся с этим на примере.
Из таблицы выше мы видим, что при увеличении опыта на один год зарплата увеличивается на 5000 долларов. Изменение постоянно, и когда мы строим эти значения, мы получаем прямую линию. Такой тип взаимосвязи называется линейной зависимостью.
Теперь в простой линейной регрессии мы уже знаем, что подгоняем регрессионную линию к данным для прогнозирования будущих значений, и это может быть эффективно только тогда, когда данные имеют линейную зависимость.
Итак, нам нужно проверить линейность в наших данных. Для этого давайте рассчитаем коэффициент корреляции.
Перед этим мы сначала визуализируем данные с помощью диаграммы рассеяния, чтобы получить представление об отношениях между двумя переменными.
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
df = pd.read_csv("C:/Salary_dataset.csv")
sns.set(style="whitegrid")
plt.figure(figsize=(8, 5))
sns.scatterplot(x='YearsExperience', y='Salary', data=df, color='blue', s=60)
plt.title("Scatter Plot: Years of Experience vs Salary")
plt.xlabel("Years of Experience")
plt.ylabel("Salary (USD)")
plt.tight_layout()
plt.show()
Мы можем наблюдать на диаграмме рассеяния, что с увеличением опыта работы зарплата также имеет тенденцию к увеличению. Хотя точки не образуют идеальную прямую линию, взаимосвязь кажется сильной и линейной.
Чтобы подтвердить это, давайте теперь рассчитаем коэффициент корреляции Пирсона.
import pandas as pd
df = pd.read_csv("C:/Salary_dataset.csv")
pearson_corr = df['YearsExperience'].corr(df['Salary'], method='pearson')
print(f"Pearson correlation coefficient: {pearson_corr:.4f}")
Коэффициент корреляции Пирсона равен 0,9782. Мы получаем значение коэффициента корреляции в диапазоне от -1 до +1. Если оно близко к 1: сильная положительная линейная зависимость; близко к 0: отсутствие линейной зависимости; близко к -1: сильная отрицательная линейная зависимость.
Здесь мы получили значение коэффициента корреляции 0,9782, что означает, что данные в основном следуют прямолинейному шаблону, и между переменными существует очень сильная положительная зависимость.
Из этого мы можем наблюдать, что простая линейная регрессия хорошо подходит для моделирования этой взаимосвязи.
Как рассчитать коэффициент корреляции Пирсона?
Давайте рассмотрим 10-точечный образец данных из нашего набора данных.
Когда оба X и Y увеличиваются вместе, корреляция считается положительной. Если один увеличивается, а другой уменьшается, корреляция отрицательная.
Сначала давайте рассчитаем дисперсию для каждой переменной. Дисперсия помогает нам понять, насколько значения удалены от среднего.
Мы начнём с расчёта дисперсии для X (Годы опыта). Для этого нам сначала нужно вычислить среднее значение X.
$\bar{X} = \frac{1}{n} \sum_{i=1}^{n} X_i$
$= \frac{1.2 + 3.3 + 3.8 + 4.1 + 5.0 + 5.4 + 8.3 + 8.8 + 9.7 + 10.4}{10} = \frac{70.0}{10} = 7.0$
Далее мы вычитаем каждое значение из среднего и затем возводим его в квадрат, чтобы убрать отрицательные значения.
Мы рассчитали квадратичные отклонения каждого значения от среднего. Теперь мы можем найти дисперсию X, взяв среднее значение этих квадратичных отклонений.
$\text{Sample Variance of } X = \frac{1}{n – 1} \sum_{i=1}^{n} (X_i – \bar{X})^2$
$= \frac{33.64 + 13.69 + 10.24 + 8.41 + 4.00 + 2.56 + 1.69 + 3.24 + 7.29 + 11.56}{10 – 1} = \frac{96.32}{9} \approx 10.70$
Здесь мы разделили на ‘n-1’, потому что мы имеем дело с выборочными данными и использование ‘n-1’ даёт нам несмещённую оценку дисперсии.
Дисперсия выборки X равна 10,70, что говорит нам о том, что значения «Годов опыта» в среднем находятся на расстоянии 10,70 квадратных единиц от среднего значения.
Поскольку дисперсия является квадратичным значением, мы берём квадратный корень, чтобы интерпретировать её в тех же единицах, что и исходные данные. Это называется стандартным отклонением.
$s_X = \sqrt{\text{Sample Variance}} = \sqrt{10.70} \approx 3.27$
Стандартное отклонение X равно 3,27, что означает, что значения «Годов опыта» отклоняются примерно на 3,27 года выше или ниже среднего значения.
В том же порядке мы вычисляем дисперсию и стандартное отклонение для ‘Y’.
$\bar{Y} = \frac{1}{n} \sum_{i=1}^{n} Y_i$
$= \frac{39344 + 64446 + 57190 + 56958 + 67939 + 83089 + 113813 + 109432 + 112636 + 122392}{10} = \frac{827239}{10} = 82,723.90$
$\text{Sample Variance of } Y = \frac{1}{n – 1} \sum (Y_i – \bar{Y})^2 = \frac{7,898,632,198.90}{9} = 877,625,799.88$
$\text{Standard Deviation of } Y \text{ is } s_Y = \sqrt{877,625,799.88} \approx 29,624.75$
Мы рассчитали дисперсию и стандартное отклонение для ‘X’ и ‘Y’.
Следующий шаг — рассчитать ковариацию между X и Y.
Мы уже имеем средние значения X и Y, а также отклонения каждого значения от их средних значений. Теперь мы умножаем эти отклонения, чтобы увидеть, как две переменные варьируются вместе.
$\text{Sample Covariance} = \frac{1}{n – 1} \sum_{i=1}^{n}(X_i – \bar{X})(Y_i – \bar{Y})$
$= \frac{808771.5}{10 – 1} = \frac{808771.5}{9} = 89,863.5$
Мы получили выборочную ковариацию 89863,5. Это указывает на то, что с увеличением опыта зарплата также имеет тенденцию к увеличению.
Но величина ковариации зависит от единиц измерения переменных (годы × доллары), поэтому она не является непосредственно интерпретируемой. Это значение показывает только направление.
Теперь мы делим ковариацию на произведение стандартных отклонений X и Y. Это даёт нам коэффициент корреляции Пирсона, который можно назвать нормализованной версией ковариации.
$r = \frac{\text{Cov}(X, Y)}{s_X \cdot s_Y} = \frac{89,863.5}{3.27 \times 29,624.75} = \frac{89,863.5}{96,992.13} \approx 0.9265$
Итак, рассчитанный нами коэффициент корреляции Пирсона равен 0,9265. Это говорит нам о том, что между годами опыта и зарплатой существует очень сильная положительная линейная зависимость.
Таким образом, мы находим коэффициент корреляции Пирсона.
Формула для коэффициента корреляции Пирсона:
$r = \frac{\text{Cov}(X, Y)}{s_X \cdot s_Y} = \frac{\frac{1}{n – 1} \sum_{i=1}^{n} (X_i – \bar{X})(Y_i – \bar{Y})} {\sqrt{\frac{1}{n – 1} \sum_{i=1}^{n} (X_i – \bar{X})^2} \cdot \sqrt{\frac{1}{n – 1} \sum_{i=1}^{n} (Y_i – \bar{Y})^2}}$
$= \frac{\sum_{i=1}^{n} (X_i – \bar{X})(Y_i – \bar{Y})} {\sqrt{\sum_{i=1}^{n} (X_i – \bar{X})^2} \cdot \sqrt{\sum_{i=1}^{n} (Y_i – \bar{Y})^2}}$
Мы должны убедиться, что выполнены определённые условия, прежде чем рассчитывать коэффициент корреляции Пирсона:
- Связь между переменными должна быть линейной.
- Обе переменные должны быть непрерывными и числовыми.
- Не должно быть сильных выбросов.
Набор данных
Набор данных, используемый в этом блоге, — набор данных о зарплате. Он общедоступен на Kaggle и лицензирован по лицензии Creative Commons Zero (CC0 Public Domain). Это означает, что его можно свободно использовать, модифицировать и распространять как в некоммерческих, так и в коммерческих целях без ограничений.
Надеюсь, это дало вам чёткое представление о том, как рассчитывается коэффициент корреляции Пирсона и когда он используется.
Дальнейшее чтение
Если вы хотите увидеть, как работает корреляция, когда связь нелинейна, но всё равно движется в одном направлении, вы можете прочитать моё простое объяснение коэффициента корреляции Спирмена.
Спасибо за чтение!
