Что такое регрессия?

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

Зависимая переменная — это та, которая прогнозируется или моделируется, а независимые переменные используются для прогнозирования зависимой переменной. Регрессионный анализ может использоваться как для непрерывных, так и для категориальных зависимых переменных и может включать одну или несколько независимых переменных.

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

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

Регрессию можно использовать для прогнозирования, прогнозирования и выявления факторов, влияющих на переменную результата.

Типы регрессионного анализа

Существует несколько типов регрессионного анализа, в том числе:

  1. Линейная регрессия. Линейная регрессия используется для моделирования взаимосвязи между зависимой переменной и одной или несколькими независимыми переменными, где связь предполагается линейной.
  2. Полиномиальная регрессия: тип регрессии, в котором независимая переменная возводится в степень, например квадратичная или кубическая регрессия.
  3. Логистическая регрессия: используется для моделирования вероятности бинарного результата, например "да" или "нет".
  4. Регрессия гребня: метод, используемый для предотвращения переобучения в моделях множественной регрессии путем введения штрафа за большие коэффициенты.
  5. Лассо-регрессия: аналогична гребенчатой ​​регрессии, но использует другую штрафную функцию, которая может привести к тому, что некоторые коэффициенты будут установлены равными нулю.
  6. Регрессия эластичной сети. Регрессия эластичной сети представляет собой комбинацию гребенчатой ​​и лассо-регрессии и используется, когда требуется как регуляризация, так и выбор переменных.
  7. Регрессия временных рядов: используется для анализа данных на основе времени и прогнозирования будущих значений.
  8. Байесовская регрессия: тип регрессии, который включает байесовскую теорию вероятности для прогнозирования зависимой переменной.
  9. Нелинейная регрессия: включает зависимую переменную и одну или несколько независимых переменных, которые имеют нелинейную связь.
  10. Регрессия Пуассона: используется, когда зависимой переменной является количество или скорость. или регрессия Пуассона используется, когда зависимая переменная является числом, а независимые переменные являются непрерывными или категориальными.

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

Линейная регрессия — это статистический метод, используемый для моделирования связи между зависимой переменной и одной или несколькими независимыми переменными. Цель линейной регрессии — найти линейное уравнение, которое лучше всего описывает взаимосвязь между переменными. Это линейное уравнение называется уравнением регрессии и используется для прогнозирования значения зависимой переменной для заданного значения независимой переменной (переменных).

Линейная регрессия — это статистический метод, используемый для моделирования связи между зависимой переменной (обычно обозначаемой «y») и одной или несколькими независимыми переменными (обычно обозначаемой «x»). Предполагается, что взаимосвязь между зависимой переменной и независимой переменной (переменными) является линейной, что означает, что для аппроксимации взаимосвязи можно использовать прямую линию.

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

Линия наилучшего соответствия выражается математическим уравнением в виде:

y = mx + b

Где:

y — зависимая переменная

x — независимая переменная

m — это наклон линии, который представляет изменение y на единицу изменения x.

b — это точка пересечения линии, которая представляет значение y, когда x равен нулю.

Типы линейной регрессии

Существует три основных типа линейной регрессии:

  1. Простая линейная регрессия. Простая линейная регрессия включает одну независимую переменную и одну зависимую переменную. Цель состоит в том, чтобы найти линейную связь между двумя переменными, которую можно использовать для прогнозирования значения зависимой переменной на основе значения независимой переменной.
  2. Множественная линейная регрессия. Множественная линейная регрессия включает две или более независимых переменных и одну зависимую переменную. Цель состоит в том, чтобы найти линейную связь между зависимой переменной и независимыми переменными, которую можно использовать для прогнозирования значения зависимой переменной на основе значений независимых переменных.
  3. Полиномиальная регрессия. Полиномиальная регрессия — это тип линейной регрессии, в котором независимая переменная возводится в степень, большую 1. Это можно использовать для моделирования нелинейных отношений между зависимой и независимой переменной. Полиномиальная регрессия может быть как простой, так и множественной.

Что такое простая линейная регрессия (SLR)?

Простая линейная регрессия — это статистический метод, используемый для моделирования связи между зависимой переменной (обычно обозначаемой буквой "y") и одной независимой переменной (обычно обозначаемой буквой "x"). Связь между зависимой переменной и независимой переменной предполагается линейной, что означает, что для аппроксимации связи можно использовать прямую линию.

Уравнение для простой модели линейной регрессии:

y = mx + b

где y — зависимая переменная, x — независимая переменная, m — наклон линии, а b — точка пересечения с осью y. Наклон линии представляет собой изменение y на единицу изменения x, а точка пересечения y представляет значение y, когда x равен нулю.

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

Математические формулы простой линейной регрессии (SLR)

Среднее значение генеральной совокупности, представленное символом μ (mu), представляет собой среднее значение всех наблюдений в генеральной совокупности.

Формула среднего значения населения:

где 𝑥𝑖 — 𝑖𝑡ℎ элемент в наборе, а 𝑁 — количество элементов в наборе.

Выборочное среднее, представленное символом x̄ (x-bar), представляет собой среднее значение выборки наблюдений, взятых из совокупности. Формула выборочного среднего:

где x представляет отдельные наблюдения, ∑ (сигма) означает сумму всех значений x, а n — количество наблюдений в выборке.

Стандартное отклонение – это показатель разброса данных относительно среднего значения.

Он рассчитывается по формуле (стандартное отклонение генеральной совокупности):

где 𝜇 - среднее значение населения.

Формула (примерное стандартное отклонение):

где 𝑥¯ — выборочное среднее.

Примечание. Дисперсия определяется как среднее квадратов отклонений от среднего значения.

Формула уравнения линии регрессии методом наименьших квадратов для простой линейной регрессии:

где 𝑦 — зависимая переменная, 𝑥 — независимая переменная, 𝑏0 — точка пересечения с осью y, а 𝑏1 — наклон линии регрессии.

Формула наклона линии регрессии методом наименьших квадратов:

где 𝑛 — количество точек данных, 𝑥𝑖 и 𝑦𝑖 — 𝑖-е значения независимой и зависимой переменных, 𝑥¯ и 𝑦¯ — средние значения независимой и зависимой переменных соответственно.

Формула для пересечения линии регрессии методом наименьших квадратов:

где 𝑏1 — наклон линии регрессии наименьших квадратов, а 𝑥¯ и 𝑦¯ — средние значения независимых и зависимых переменных соответственно.

Формула для остатка или ошибки для 𝑖-й точки данных:

где 𝑦𝑖 — наблюдаемое значение зависимой переменной для 𝑖-й точки данных, а 𝑦𝑖^ — прогнозируемое значение зависимой переменной на основе линии регрессии наименьших квадратов.

Формула общей суммы квадратов (TSS):

где 𝑛 — количество точек данных, 𝑦𝑖 — 𝑖-е значение зависимой переменной, а 𝑦¯ — среднее значение зависимой переменной.

Формула для остаточной суммы квадратов (RSS) выглядит следующим образом:

где 𝑛 — количество точек данных, 𝑦𝑖 — наблюдаемое значение зависимой переменной для 𝑖-й точки данных, а 𝑦𝑖^ — прогнозируемое значение зависимой переменной на основе линии регрессии наименьших квадратов.

Формула для коэффициента детерминации или R-квадрата:

где RSS — остаточная сумма квадратов, а TSS — общая сумма квадратов.

Уравнение для прогнозирования значения зависимой переменной 𝑦 с использованием простой модели линейной регрессии с одной независимой переменной 𝑥 задается следующим образом:

где:

𝑦̂ — прогнозируемое значение зависимой переменной 𝑦. 𝑏0 — член точки пересечения (или постоянный) линии регрессии. 𝑏1 — наклон (или коэффициент) независимой переменной 𝑥. Чтобы найти значения точки пересечения и наклона, которые лучше всего соответствуют данным, мы используем метод наименьших квадратов, чтобы минимизировать сумму квадратов ошибок между наблюдаемыми значениями 𝑦 и прогнозируемыми значениями 𝑦̂.

Реализация простой линейной регрессии (SLR)

import numpy as np

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
class SimpleLinearRegression:
    def __init__(self):
        self.slope_ = None
        self.intercept_ = None
        self.residual_ = None
        self.RSS = None
        self.TSS = None
        self.r2score_ = None
        
    def fit(self, x, y):
        # Calculate the mean of the input (x) and output data (y)
        x_mean = np.mean(x)
        y_mean = np.mean(y)
        
        # Calculate the terms needed for the slope (b1) and intercept (bo) of the regression line 
        numerator = np.sum((x - x_mean) * (y - y_mean))
        denominator = np.sum((x - x_mean) ** 2)

        # Calculate the slope (b1) and intercept (bo) of the regression line (regression equation)
        self.slope_ = numerator / denominator
        self.intercept_ = y_mean - self.slope_ * x_mean
        
        y_pred = self.intercept_ + self.slope_ * x
        self.residual_ = y - y_pred
        
        self.RSS = np.sum(self.residual_ ** 2)
        self.TSS = np.sum((y - y_mean) ** 2)
        self.r2score_ = 1 - (self.RSS / self.TSS)
        
    def predict(self, x):
        return self.intercept_ + self.slope_ * x
d = {'x': [1, 2, 3, 4, 5], 'y': [0.9, 2.5, 3.6, 3.5, 4.6]}

print(type(d))
print(d.keys())

# <class 'dict'>
# dict_keys(['x', 'y'])
df = pd.DataFrame(data=d)

print(type(df))
print(df.columns)
print(df.ndim)
print(df.shape)
print(df.dtypes)

# <class 'pandas.core.frame.DataFrame'>
# Index(['x', 'y'], dtype='object')
# 2
# (5, 2)
# x      int64
# y    float64
# dtype: object
df

  x y
0 1 0.9
1 2 2.5
2 3 3.6
3 4 3.5
4 5 4.6
X = df.iloc[:, :1].values    # input  or feature or independent variable 
y = df.iloc[:, -1].values    # output or target  or dependent variable 
print(type(X))
print(X.ndim)
print(X.shape)

print(type(y))
print(y.ndim)
print(y.shape)

# <class 'numpy.ndarray'>
# 2
# (5, 1)
# <class 'numpy.ndarray'>
# 1
# (5,)
X

array([[1],
       [2],
       [3],
       [4],
       [5]], dtype=int64)
y
# array([0.9, 2.5, 3.6, 3.5, 4.6])
x = X.flatten()
x
# array([1, 2, 3, 4, 5], dtype=int64)
print(x.ndim)
print(x.shape)

# 1
# (5,)
model = SimpleLinearRegression()
model.fit(x, y)
pred = model.predict(x)
print(f"Simple linear equation: y = {model.intercept_:.2f} + {model.slope_:.2f}x")
print(f"Slope: {model.slope_:.2f}")
print(f"Intercept: {model.intercept_:.2f}")
print(f"Residual: {model.residual_}")
print(f"Residual sum of squares (RSS): {model.RSS:.2f}")
print(f"Total sum of squares (TSS): {model.TSS:.2f}")
print(f"Coefficient of determination (R^2): {model.r2score_:.2f}")

# Simple linear equation: y = 0.50 + 0.84x
# Slope: 0.84
# Intercept: 0.50
# Residual: [-0.44  0.32  0.58 -0.36 -0.1 ]
# Residual sum of squares (RSS): 0.77
# Total sum of squares (TSS): 7.83
# Coefficient of determination (R^2): 0.90

print(y)
# array([0.9, 2.5, 3.6, 3.5, 4.6])

print(pred)
# array([1.34, 2.18, 3.02, 3.86, 4.7 ])

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

# Plot the observed values and the regression line
plt.scatter(x, y, label='Observed values')
plt.plot(x, pred, color='red', marker='o', label='Regression line')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

Scikit-Learn

from sklearn.linear_model import LinearRegression
reg_model = LinearRegression().fit(X, y)
y_pred = reg_model.predict(X)
print(f"Simple linear equation: y = {reg_model.intercept_:.2f} + {reg_model.coef_[0]:.2f}x")
print(f"Slope: {reg_model.coef_}")
print(f"Intercept: {reg_model.intercept_:.2f}")
print(f"Residual: {y - y_pred}")
print(f"Coefficient of determination (R^2): {reg_model.score(X, y):.2f}")

# # Simple linear equation: y = 0.50 + 0.84x
# Slope: [0.84]
# Intercept: 0.50
# Residual: [-0.44  0.32  0.58 -0.36 -0.1 ]
# Coefficient of determination (R^2): 0.90

y
# array([0.9, 2.5, 3.6, 3.5, 4.6])
y_pred
# array([1.34, 2.18, 3.02, 3.86, 4.7 ])
# create a scatterplot of the observed values
sns.scatterplot(x=x, y=y, color='blue', label='Observed')

# add a lineplot of the predicted values
sns.lineplot(x=x, y=y_pred, markers=True, marker='o', color='red', label='Predicted')

# set labels and title
plt.xlabel('x')
plt.ylabel('y')
plt.title('Observed vs. Predicted Values')

# show the plot
plt.show()

# Create a plot with observed and predicted values
fig = px.scatter(x=x, y=y, labels={'x': 'x', 'y': 'y'})
fig.add_trace(px.scatter(x=x, y=y_pred, labels={'x': 'x', 'y': 'y_pred'}).data[0])
fig.add_trace(px.line(x=x, y=y_pred, labels={'x': 'x', 'y': 'y_pred'}).data[0])

# Set plot title and axis labels
fig.update_layout(title='Observed and Predicted Values in Simple Linear Regression',
                  xaxis_title='x',
                  yaxis_title='y')

# Show the plot
fig.show()

from sklearn.metrics import r2_score
print(f"Coefficient of determination (R^2): {r2_score(y, y_pred):.2f}")
# Coefficient of determination (R^2): 0.90

Формула для остаточной суммы квадратов (RSS) выглядит следующим образом:

где 𝑛 — количество точек данных, 𝑦𝑖 — наблюдаемое значение зависимой переменной для 𝑖-й точки данных, а 𝑦𝑖^ — прогнозируемое значение зависимой переменной на основе линии регрессии наименьших квадратов.

Формула для коэффициента детерминации, или 𝑅2, выглядит следующим образом:

где 𝑒𝑖 — невязка для 𝑖-й точки данных, 𝑦𝑖 — наблюдаемое значение зависимой переменной для 𝑖-й точки данных, а 𝑦¯ — среднее значение зависимой переменной.

Вот формулы для некоторых распространенных показателей регрессии:

Средняя абсолютная ошибка (MAE):

Среднеквадратическая ошибка (MSE):

Среднеквадратичная ошибка (RMSE):

Коэффициент детерминации (R-квадрат, 𝑅2):

Статсмодели

import statsmodels.api as sm

x = np.array([1, 2, 3, 4, 5])
y = np.array([0.9, 2.5, 3.6, 3.5, 4.6])

x = sm.add_constant(x)

lin_model = sm.OLS(y, x).fit()
predictions = lin_model.predict(x)

print(predictions)
# array([1.34, 2.18, 3.02, 3.86, 4.7 ])

print("R-squared:", lin_model.rsquared)
# R-squared: 0.9013796627491057

lin_model.summary()

Примечания.
[1] Стандартные ошибки предполагают, что ковариационная матрица ошибок указана правильно.

# Generate some sample data
np.random.seed(1)
x = np.random.normal(size=10)
y = 2 * x + np.random.normal(size=10)

# Fit a simple linear regression model
model = sm.OLS(y, sm.add_constant(x)).fit()

# Get the predicted values
y_pred = model.predict(sm.add_constant(x))

# Plot the observed and predicted values
fig, ax = plt.subplots()
ax.scatter(x, y, label='Observed')
ax.plot(x, y_pred, color='red', label='Predicted')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title('Observed vs. Predicted Values')
ax.legend()
plt.show()

# Print the model summary
print(model.summary())

Statsmodels – это библиотека Python, предоставляющая различные инструменты для статистического анализа, включая линейную регрессию. Одним из наиболее часто используемых методов линейной регрессии является метод наименьших квадратов (OLS), который оценивает параметры модели линейной регрессии путем минимизации суммы квадратов ошибок между наблюдаемыми значениями и прогнозируемыми значениями.

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

  1. Информация о модели. Сводка начинается с предоставления основной информации о модели, включая зависимую переменную (y) и независимые переменные (x), количество наблюдений в наборе данных и метод, использованный для оценки. модель.
  2. Статистика соответствия модели. В этом разделе сводки представлены различные статистические данные, которые определяют, насколько хорошо модель соответствует данным. К ним относятся значение R-квадрата, которое представляет долю вариации зависимой переменной, которая объясняется независимыми переменными; F-статистика, которая проверяет, является ли модель в целом статистически значимой; и логарифмическое правдоподобие, которое является мерой того, насколько хорошо модель предсказывает наблюдаемые данные.
  3. Коэффициенты. В этом разделе сводки представлена ​​информация об оценочных коэффициентах независимых переменных в модели. Он включает в себя сами оценки коэффициентов, стандартные ошибки оценок, t-статистику и связанные с ней p-значения для проверки того, является ли коэффициент статистически значимым, а также доверительные интервалы для оценок коэффициентов.
  4. Остатки. Остатки — это разница между наблюдаемыми значениями зависимой переменной и значениями, предсказанными моделью. В этом разделе сводки представлены различные статистические данные и диагностические графики, которые помогают оценить качество прогнозов модели. Это включает в себя среднее значение остатков, стандартное отклонение остатков и различные графические отображения остатков, такие как гистограмма, график ядерной плотности и график Q-Q.
  5. Диагностика модели. В этом разделе сводки представлены диагностические тесты для оценки предположений модели. Эти тесты проверяют нарушения предположений о линейности, нормальности, гомоскедастичности и независимости от ошибок. Наиболее распространенными диагностическими тестами являются тест Бреуша-Пагана на гетероскедастичность и тест Харка-Бера на нормальность ошибок.

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

Исходный код: https://github.com/rizwan-ai/SLR

Удачного обучения :)