Решение задачи регрессии: Прогноз потребления газа в США на Python
calendar_today
schedule
4 мин. чтения
visibility1 просмотр
help_outline
Условие задачи
Нажмите для увеличения
lightbulb
Краткий ответ
Представлено решение задачи регрессии для прогнозирования потребления газа в США с использованием Python и библиотек машинного обучения. Включает загрузку данных, построение модели и оценку точности.
check_circle
Подробное решение
Задача:
Задание. Постройте модель регрессии для данных из предыдущей рабочей тетради. Для примера можно взять потребление газа (в миллионах галлонов) в 48 штатах США или набор данных о качестве красного вина:
https://raw.githubusercontent.com/likarajo/petrol_consumption/master/data/petrol_consumption.csv
https://raw.githubusercontent.com/aniruddhachoudhury/Red-Wine-Quality/master/winequality-red.csv
Постройте прогноз. Оцените точность модели.
Решение:
Для решения этой задачи мы будем использовать язык программирования Python и библиотеки для работы с данными и машинным обучением, такие как pandas, numpy, matplotlib и scikit-learn.
Выберем для примера набор данных о потреблении газа.
1. Загрузка данных
Сначала нам нужно загрузить данные из указанного URL.
```python
import pandas as pd
url = "https://raw.githubusercontent.com/likarajo/petrol_consumption/master/data/petrol_consumption.csv"
data = pd.read_csv(url)
# Выведем первые 5 строк данных, чтобы убедиться, что они загружены правильно
print("Первые 5 строк данных:")
print(data.head())
# Выведем информацию о данных, чтобы посмотреть типы столбцов и наличие пропусков
print("\nИнформация о данных:")
data.info()
```
2. Подготовка данных
Для построения модели регрессии нам нужно определить зависимую переменную (то, что мы хотим предсказать) и независимые переменные (признаки, которые мы используем для предсказания). В данном наборе данных, скорее всего, "Petrol_Consumption" (потребление бензина) будет зависимой переменной. Остальные столбцы будут независимыми.
```python
# Определяем зависимую и независимые переменные
X = data.drop('Petrol_Consumption', axis=1) # Независимые переменные (все, кроме 'Petrol_Consumption')
y = data['Petrol_Consumption'] # Зависимая переменная ('Petrol_Consumption')
print("\nНезависимые переменные (X):")
print(X.head())
print("\nЗависимая переменная (y):")
print(y.head())
```
3. Разделение данных на обучающую и тестовую выборки
Чтобы оценить точность модели, мы разделим данные на две части: обучающую выборку (для обучения модели) и тестовую выборку (для проверки ее работы на новых, ранее не виденных данных).
```python
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print(f"\nРазмер обучающей выборки X_train: {X_train.shape}")
print(f"Размер тестовой выборки X_test: {X_test.shape}")
print(f"Размер обучающей выборки y_train: {y_train.shape}")
print(f"Размер тестовой выборки y_test: {y_test.shape}")
```
4. Построение модели регрессии
Для этой задачи мы будем использовать модель линейной регрессии, так как она проста и хорошо подходит для начала.
```python
from sklearn.linear_model import LinearRegression
# Создаем объект модели линейной регрессии
model = LinearRegression()
# Обучаем модель на обучающих данных
model.fit(X_train, y_train)
print("\nМодель линейной регрессии обучена.")
# Выведем коэффициенты модели
print(f"Коэффициенты модели: {model.coef_}")
print(f"Свободный член (intercept): {model.intercept_}")
```
5. Построение прогноза
Теперь, когда модель обучена, мы можем использовать ее для предсказания значений на тестовой выборке.
```python
# Делаем предсказания на тестовой выборке
y_pred = model.predict(X_test)
print("\nПрогноз на тестовой выборке:")
# Выведем первые 10 предсказанных значений и соответствующие им истинные значения
results = pd.DataFrame({'Истинные значения': y_test, 'Предсказанные значения': y_pred})
print(results.head(10))
```
6. Оценка точности модели
Для оценки точности модели регрессии используются различные метрики. Наиболее распространенные:
* Средняя абсолютная ошибка (MAE - Mean Absolute Error)
* Среднеквадратичная ошибка (MSE - Mean Squared Error)
* Корень из среднеквадратичной ошибки (RMSE - Root Mean Squared Error)
* Коэффициент детерминации (R-squared, \(R^2\))
```python
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
import numpy as np
# Рассчитываем метрики
mae = mean_absolute_error(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
r2 = r2_score(y_test, y_pred)
print("\nОценка точности модели:")
print(f"Средняя абсолютная ошибка (MAE): {mae:.2f}")
print(f"Среднеквадратичная ошибка (MSE): {mse:.2f}")
print(f"Корень из среднеквадратичной ошибки (RMSE): {rmse:.2f}")
print(f"Коэффициент детерминации (R-squared): {r2:.2f}")
```
Пояснение метрик:
* MAE: Среднее абсолютное значение ошибок. Чем меньше, тем лучше.
* MSE: Среднее значение квадратов ошибок. Больше штрафует за большие ошибки. Чем меньше, тем лучше.
* RMSE: Корень из MSE. Имеет ту же размерность, что и зависимая переменная, что делает его более интерпретируемым. Чем меньше, тем лучше.
* \(R^2\): Показывает, какую долю дисперсии зависимой переменной объясняет модель. Значение от 0 до 1. Чем ближе к 1, тем лучше модель объясняет данные.
7. Визуализация результатов (необязательно, но полезно)
Можно построить график, чтобы визуально сравнить истинные и предсказанные значения.
```python
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, alpha=0.7)
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', lw=2)
plt.xlabel("Истинные значения потребления газа")
plt.ylabel("Предсказанные значения потребления газа")
plt.title("Сравнение истинных и предсказанных значений")
plt.grid(True)
plt.show()
```
Выводы:
Мы успешно построили модель линейной регрессии для предсказания потребления газа. Оценили ее точность с помощью метрик MAE, MSE, RMSE и \(R^2\). Полученные значения метрик показывают, насколько хорошо модель справляется с задачей предсказания. Например, \(R^2\) близкий к 1 говорит о том, что модель хорошо объясняет изменчивость потребления газа.
Для улучшения модели можно попробовать:
* Использовать другие алгоритмы регрессии (например, случайный лес, градиентный бустинг).
* Провести более глубокий анализ данных (EDA - Exploratory Data Analysis) для выявления зависимостей и выбросов.
* Выполнить отбор признаков (Feature Selection) или создание новых признаков (Feature Engineering).
* Настроить гиперпараметры модели.