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

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

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

Scikit-learn

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

Ключевые особенности scikit-learn:

  1. Удобный интерфейс: Scikit-learn предоставляет последовательный и интуитивно понятный API, позволяющий пользователям применять методы машинного обучения, не теряясь в сложных деталях реализации.
  2. Обширная коллекция алгоритмов: библиотека включает широкий спектр алгоритмов машинного обучения, таких как регрессия, классификация, кластеризация и уменьшение размерности, что делает ее пригодной для различных задач.
  3. Предварительная обработка данных и проектирование признаков: Scikit-learn предоставляет инструменты для обработки пропущенных значений, масштабирования и нормализации данных, кодирования категориальных переменных и методов выбора признаков.
  4. Выбор и оценка модели. Библиотека предлагает утилиты для выбора модели, настройки гиперпараметров и оценки модели с использованием различных показателей производительности.
  5. Полная интеграция с другими библиотеками: Scikit-learn легко интегрируется с другими библиотеками Python, такими как Pandas, Matplotlib и NumPy, расширяя свои возможности для анализа и визуализации данных.
  6. Активное сообщество и документация. Благодаря активному сообществу разработчиков и пользователей scikit-learn предоставляет обширную документацию и поддержку, что делает ее доступной как для начинающих, так и для опытных практиков.

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

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

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

Шаг 1: Предварительная обработка данных

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

  • Обработка пропущенных данных: проверьте пропущенные значения и решите, как с ними обращаться. Вы можете либо удалить строки с отсутствующими значениями, либо заменить их с помощью соответствующих методов.
  • Масштабирование признаков: если независимые переменные имеют разные масштабы, полезно масштабировать их, чтобы убедиться, что они вносят одинаковый вклад в регрессионную модель. Общие методы масштабирования включают стандартизацию (среднее значение = 0, стандартное отклонение = 1) или нормализацию (масштабирование значений до определенного диапазона, например, [0, 1]).
  • Разделение обучения и тестирования: разделите набор данных на обучающий набор и тестовый набор. Обучающий набор используется для подгонки модели, а тестовый набор используется для оценки ее производительности. Типичное соотношение разделения составляет 70–80% для обучения и 20–30% для тестирования.

Шаг 2: Подгонка модели

После предварительной обработки данных мы можем приступить к настройке модели линейной регрессии с помощью scikit-learn. Scikit-learn предоставляет класс LinearRegression, который упрощает подбор моделей линейной регрессии.

Следующие шаги описывают процесс:

  1. Импортируйте необходимые библиотеки:
from sklearn.linear_model import LinearRegression
import numpy as np

2. Создайте независимую переменную (переменные) и зависимую переменную:

X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([2, 4, 6, 8, 10])

3. Создайте экземпляр класса LinearRegression: код pythonCopy

model = LinearRegression()

4. Подгоните модель к данным:

model.fit(X, y)

Шаг 3: Интерпретация коэффициентов После подбора модели мы можем интерпретировать коэффициенты, чтобы понять взаимосвязь между независимыми и зависимыми переменными. Коэффициенты представляют наклон линии регрессии.

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

  • model.coef_: возвращает коэффициенты независимых переменных.
  • model.intercept_: возвращает значение перехвата.

Например, чтобы напечатать коэффициент и значения перехвата:

print("Coefficient:", model.coef_)
print("Intercept:", model.intercept_)

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

Шаг 4: Оценка производительности модели Чтобы оценить производительность модели линейной регрессии, нам нужно оценить, насколько хорошо она предсказывает целевую переменную. Доступны различные показатели оценки, в том числе:

  • Среднеквадратическая ошибка (MSE): измеряет среднеквадратичную разницу между прогнозируемыми и фактическими значениями. Более низкий MSE указывает на лучшую производительность.
  • R-квадрат (R²): представляет долю дисперсии зависимой переменной, которая может быть объяснена независимыми переменными. Он варьируется от 0 до 1, при этом более высокое значение указывает на лучшее соответствие.

Scikit-learn предоставляет удобные функции для расчета этих показателей. Например:

from sklearn.metrics import mean_squared_error, r2_score

# Make predictions on the training data
y_pred = model.predict(X)

# Calculate mean squared error
mse = mean_squared_error(y, y_pred)
print("Mean Squared Error:", mse)

# Calculate R-squared
r2 = r2_score(y, y_pred)
print("R-squared:", r2)

Меньшая среднеквадратическая ошибка и более высокое значение R-квадрата указывают на лучшую модель.

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

Полный пример кода:

from sklearn.linear_model import LinearRegression
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score

# Create sample data
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([2, 4, 6, 8, 10])

# Create and fit the linear regression model
model = LinearRegression()
model.fit(X, y)

# Print the coefficient and intercept
print("Coefficient:", model.coef_)
print("Intercept:", model.intercept_)

# Predict using the model
X_test = np.array([6]).reshape(-1, 1)
y_pred = model.predict(X_test)
print("Predicted value:", y_pred)

# Make predictions on the training data
y_pred = model.predict(X)

# Calculate mean squared error
mse = mean_squared_error(y, y_pred)
print("Mean Squared Error:", mse)

# Calculate R-squared
r2 = r2_score(y, y_pred)
print("R-squared:", r2)

Нелинейная регрессия и полиномиальная регрессия

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

В этом разделе мы рассмотрим, как применять полиномиальную регрессию с помощью scikit-learn. Мы рассмотрим этапы создания полиномиальных функций, подгонки модели и визуализации результатов.

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

Scikit-learn предоставляет класс PolynomialFeatures для создания полиномиальных функций. Параметр степени определяет максимальную степень генерируемых полиномиальных признаков.

Следующие шаги описывают процесс:

  1. Импортируйте необходимые библиотеки:
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import numpy as np

2. Создайте независимую переменную (переменные) и зависимую переменную:

X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([2, 6, 10, 15, 20])

3. Создайте полиномиальные функции:

poly_features = PolynomialFeatures(degree=2)
X_poly = poly_features.fit_transform(X)

Массив X_poly будет содержать исходные функции, а также дополнительные полиномиальные функции до указанной степени.

Шаг 2: Подгонка модели полиномиальной регрессии После создания полиномиальных функций мы можем приступить к подгонке модели полиномиальной регрессии, используя класс LinearRegression scikit-learn.

Следующие шаги описывают процесс:

  1. Создайте экземпляр класса LinearRegression:
model = LinearRegression()

2. Подгоните модель к полиномиальным признакам:

model.fit(X_poly, y)

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

Следующие шаги описывают процесс:

  1. Импортируйте необходимые библиотеки:
import matplotlib.pyplot as plt

2. Сгенерируйте диапазон значений в диапазоне исходных данных:

X_range = np.linspace(X.min(), X.max(), 100).reshape(-1, 1)

3. Преобразуйте значения диапазона в полиномиальные функции:

X_range_poly = poly_features.transform(X_range)

4. Предсказать значения зависимой переменной, используя полиномиальные признаки:

y_pred = model.predict(X_range_poly)

5. Постройте исходные точки данных и подобранную кривую:

plt.scatter(X, y, color='blue', label='Actual Data')
plt.plot(X_range, y_pred, color='red', label='Polynomial Regression')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Polynomial Regression')
plt.legend()
plt.show()

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

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

Образец кода:

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt

# Create sample data
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([2, 6, 10, 15, 20])

# Create polynomial features
poly_features = PolynomialFeatures(degree=2)
X_poly = poly_features.fit_transform(X)

# Fit the polynomial regression model
model = LinearRegression()
model.fit(X_poly, y)

# Predict using the model
X_range = np.linspace(X.min(), X.max(), 100).reshape(-1, 1)
X_range_poly = poly_features.transform(X_range)
y_pred = model.predict(X_range_poly)
print("Predicted value:", y_pred)

plt.scatter(X, y, color='blue', label='Actual Data')
plt.plot(X_range, y_pred, color='red', label='Polynomial Regression')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Polynomial Regression')
plt.legend()
plt.show()

Прогнозировать Акции Цены

Теперь мы будем использовать библиотеку yfinance для извлечения исторических данных о ценах на акции и применим линейную регрессию и полиномиальную регрессию с использованием scikit-learn для прогнозирования будущих цен на акции. Это даст нам представление о потенциальном использовании регрессионного анализа для прогнозирования цен на акции.

Для начала нам нужно установить библиотеку yfinance, если она еще не установлена. Вы можете установить его, выполнив следующую команду:

pip install yfinance

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

import yfinance as yf

# Specify the stock symbol and time period
stock_symbol = "AAPL"
start_date = "2022-01-01"
end_date = "2022-12-31"

# Fetch historical stock price data using yfinance
data = yf.download(stock_symbol, start=start_date, end=end_date)

# Print the fetched data
print(data)

Приведенный выше код импортирует библиотеку yfinance как yf. Затем мы указываем символ акции (в данном случае «AAPL») и даты начала и окончания для данных, которые мы хотим получить. Вызывая функцию yf.download и передавая символ акции и диапазон дат, мы извлекаем исторические данные о цене акций и сохраняем их в переменной данных.

Теперь, когда у нас есть исторические данные о ценах на акции, мы можем приступить к применению линейной регрессии и полиномиальной регрессии для прогнозирования будущих цен на акции. Для этой цели мы будем использовать классы LinearRegression и PolynomialFeatures scikit-learn.

import yfinance as yf
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
import numpy as np

# Fetch historical stock price data using yfinance
stock_symbol = "AAPL"
start_date = "2022-01-01"
end_date = "2022-12-31"
data = yf.download(stock_symbol, start=start_date, end=end_date)

# Extract the 'Close' price as the dependent variable (y)
y = data['Close'].values

# Create an array of sequential numbers as the independent variable (x)
x = np.arange(len(data)).reshape(-1, 1)

# Linear Regression
linear_model = LinearRegression()
linear_model.fit(x, y)

# Polynomial Regression
poly_features = PolynomialFeatures(degree=3)
x_poly = poly_features.fit_transform(x)
poly_model = LinearRegression()
poly_model.fit(x_poly, y)

# Predicting stock prices
x_future = np.arange(len(data), len(data) + 10).reshape(-1, 1)
linear_pred = linear_model.predict(x_future)
poly_pred = poly_model.predict(poly_features.transform(x_future))

print("Linear Regression Predictions:", linear_pred)
print("Polynomial Regression Predictions:", poly_pred)

В приведенном выше коде мы сначала импортируем классы LinearRegression и PolynomialFeatures из scikit-learn. Затем мы извлекаем цену закрытия из полученных данных и присваиваем ее зависимой переменной y. Для независимой переменной x мы создаем массив последовательных чисел, представляющих периоды времени.

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

Наконец, мы прогнозируем цены акций на следующие 10 периодов времени, используя как модель линейной регрессии, так и модель полиномиальной регрессии. Прогнозируемые значения хранятся в переменных linear_pred и poly_pred соответственно. Мы распечатываем эти прогнозы в демонстрационных целях.

В этом блоге мы рассмотрели основы scikit-learn, его значение в области машинного обучения и его интеграцию с другими мощными библиотеками Python. Python в сочетании с scikit-learn, Pandas, Matplotlib и NumPy обеспечивает надежную экосистему для анализа данных и приложений машинного обучения. Продолжая свое путешествие в области машинного обучения, не забывайте исследовать, экспериментировать и расширять свои знания, чтобы раскрыть весь потенциал Python и scikit-learn.

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

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

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .