Детали данных

«Сред. Area House Age’: Средний возраст домов в одном городе

«Сред. Площадь Количество комнат: среднее количество комнат в домах в одном городе

«Сред. Площадь Количество спален: среднее количество спален в домах в одном городе

«Население области»: Население городского дома находится в

«Цена»: цена, по которой дом был продан.

«Адрес»: Адрес дома

Ознакомьтесь с библиотеками данных и импорта

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

Проверить данные

USAhousing = pd.read_csv('USA_Housing.csv')
USAhousing.head()

USAhousing.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5000 entries, 0 to 4999
Data columns (total 7 columns):
Avg. Area Income                5000 non-null float64
Avg. Area House Age             5000 non-null float64
Avg. Area Number of Rooms       5000 non-null float64
Avg. Area Number of Bedrooms    5000 non-null float64
Area Population                 5000 non-null float64
Price                           5000 non-null float64
Address                         5000 non-null object
dtypes: float64(6), object(1)
memory usage: 273.5+ KB
USAhousing.describe()

USAhousing.columns
Index(['Avg. Area Income', 'Avg. Area House Age', 'Avg. Area Number of Rooms',
       'Avg. Area Number of Bedrooms', 'Area Population', 'Price', 'Address'],
      dtype='object')

Исследовательский анализ данных

sns.pairplot(USAhousing)
<seaborn.axisgrid.PairGrid at 0x211a5415400>

sns.distplot(USAhousing['Price'])
<matplotlib.axes._subplots.AxesSubplot at 0x211a76deba8>

sns.heatmap(USAhousing.corr())
<matplotlib.axes._subplots.AxesSubplot at 0x21197c204a8>

Обучение модели линейной регрессии

Массивы X и Y

X = USAhousing[['Avg. Area Income', 'Avg. Area House Age', 'Avg. Area Number of Rooms',
               'Avg. Area Number of Bedrooms', 'Area Population']]
y = USAhousing['Price']

Тренировочный тестовый сплит

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=101)

Создание и обучение модели Постоянная ссылка

from sklearn.linear_model import LinearRegression
lm = LinearRegression()
lm.fit(X_train,y_train)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)

Оценка модели

# print the intercept
print(lm.intercept_)
-2640159.7968526958
coeff_df = pd.DataFrame(lm.coef_,X.columns,columns=['Coefficient'])
coeff_df

Интерпретация коэффициентов:

  • При фиксированных всех других функциях среднее значение увеличивается на 1 единицу. Районный доход связан с **увеличением на 21,52 доллара США**.
  • При фиксированных всех других функциях среднее значение увеличивается на 1 единицу. Возраст дома в районе связан с **увеличением на 164883,28 доллара США**.
  • При фиксированных всех других функциях среднее значение увеличивается на 1 единицу. Площадь Количество комнат связано с **увеличением на 122 368,67 долларов США**.
  • При фиксированных всех других функциях среднее значение увеличивается на 1 единицу. Площадь Количество спален связано с **увеличением на 2233,80 долларов США**.
  • При фиксированных всех других функциях увеличение населения области на 1 единицу связано с **увеличением на 15,15 долл. США**.

Прогнозы нашей модели

predictions = lm.predict(X_test)
plt.scatter(y_test,predictions)
<matplotlib.collections.PathCollection at 0x211a851e2e8>

Гистограмма остатка

sns.distplot((y_test-predictions),bins=50);

Метрики оценки регрессии

Вот три общих показателя оценки для задач регрессии:

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

1n∑i=1n∣yi−y^i∣\frac 1n\sum_{i=1}^n|y_i-\hat{y}_i|n1​i=1∑n​∣yi​−y^​i ​∣

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

1n∑i=1n(yi−y^i)2\frac 1n\sum_{i=1}^n(y_i-\hat{y}_i)²n1​i=1∑n​(yi​−y^​ я) 2

Среднеквадратическая ошибка (RMSE) – это квадратный корень из среднего квадрата ошибок:

1n∑i=1n(yi−y^i)2\sqrt{\frac 1n\sum_{i=1}^n(y_i-\hat{y}_i)²}n1​i=1∑n​(yi ​−y^​i​)2​

Сравнивая эти показатели:

  • MAE проще всего понять, поскольку это средняя ошибка.
  • MSE более популярен, чем MAE, потому что MSE «наказывает» за большие ошибки, что, как правило, полезно в реальном мире.
  • RMSE даже более популярен, чем MSE, потому что RMSE интерпретируется в единицах «y».

Все это функции потерь, потому что мы хотим минимизировать их.

from sklearn import metrics
print('MAE:', metrics.mean_absolute_error(y_test, predictions))
print('MSE:', metrics.mean_squared_error(y_test, predictions))
print('RMSE:', np.sqrt(metrics.mean_squared_error(y_test, predictions)))
MAE: 82288.22251914945
MSE: 10460958907.208984
RMSE: 102278.829222909