Прогноз цен на жилье в США

Prognoz Cen Na Zil E V Ssa



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

В этом руководстве мы увидим, как прогнозировать цены на дома в США с помощью машинного обучения через Python. Сначала мы обсуждаем набор данных, который используем, а затем предварительно обрабатываем данные. После этого мы визуализируем атрибуты, присутствующие в наборе данных, и применяем различные алгоритмы машинного обучения к набору обучающих данных (Сиэтл, Вашингтон, август 2022 г. – декабрь 2022 г.). Наконец, мы завершаем это руководство прогнозированием цен на некоторые дома, присутствующие в тестовом наборе данных. Прежде чем приступить к реализации этого проекта, нам необходимо понять терминологию машинного обучения, которая используется в этом проекте.







Регрессия

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



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



1. Линейная регрессия

Алгоритм линейной регрессии показывает линейную связь между переменными зависимого атрибута (Y) и независимого атрибута (X). Математически мы можем оценить это следующим образом:





И '=' аХ+б

Здесь «a» и «b» — линейные коэффициенты.

В Python функция LinearReгрессия() доступна в модуле «sklearn.linear_model». Посмотрим, как это указать при реализации проекта. Ниже представлена ​​модель с параметрами:



2. Дерево решений

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

В Python DecisionTreeRegressor доступен в модуле «sklearn.tree». Посмотрим, как это указать при реализации проекта. Ниже представлена ​​модель с параметрами:

3. Случайный лес

Случайный лес выполняет те же функции, что и дерево решений. Но для этого требуется Лес (набор деревьев решений) и объединить (среднее значение) все результаты деревьев решений. Например, размер случайного леса равен 3. Таким образом, внутренне создаются три дерева решений, и результат цены дома для первого дерева решений равен 20 000. Результат цены дома для второго дерева решений равен 20 000. И результат цены дома для последнее дерево решений — 10 000. 16 666,666 — окончательный результат ((20 000 + 20 000 + 10 000)/3).

В Python RandomForestRegressor доступен в модуле «sklearn.ensemble». Ниже представлена ​​модель с параметрами. Мы можем указать количество деревьев в параметре «n_estimators». По умолчанию это 100.

Выполнение

Быстро ознакомьтесь с этапами прогнозирования цен на жилье в США. Мы рассматриваем набор данных house_train (файл CSV) с записями за 2016 год (используемый для обучения модели машинного обучения). Затем мы прогнозируем записи цены дома (505), которые присутствуют в файле house_test.

1. Загрузка наборов обучающих и тестовых данных.

Pandas — это доступный модуль Python, который используется для анализа данных. Мы используем этот модуль для загрузки наборов данных в среду Python. Здесь мы используем Google Ко как среда кода. Это доступно бесплатно. Нужен только аккаунт Google.

Сначала нам нужно загрузить файлы с нашего локального компьютера в Colab Env. Загрузите наборы данных из здесь .

# Загрузите файлы house_train.csv и house_test.csv в свой Google Colab.

# один за другим.

от Google. И ДРУГИЕ Импортировать файлы

файлы. загрузить ( )

read_csv() — это функция, которая используется для загрузки данных CSV в переменную. В качестве параметра принимает имя файла.

Импортировать панды

# Загрузите файл house_train.csv в переменную train_data.

поезд_данные '=' панды. read_csv ( 'house_train.csv' )

# Загрузите файл house_test.csv в переменную test_data

test_data '=' панды. read_csv ( 'house_test.csv' )

# Сохраняем test_data в переменную test_data1

test_data1 '=' test_data

Давайте посмотрим количество столбцов и ненулевых записей в каждом столбце. Pandas.DataFrame.info() используется для получения этой информации.

Распечатать ( поезд_данные. Информация ( ) )

Распечатать ( test_data1. Информация ( ) )

Выход:

2. Предварительная обработка данных

В обоих наборах данных столбец «lot_size» содержит значения в квадратных футах и ​​акрах (вы найдете разницу, просмотрев строки в столбце «lot_size_unit’s»). Но формат должен быть в квадратных футах. Итак, нам нужно преобразовать значения в столбце «lot_size» из акров в квадратные футы. Аналогично это нужно сделать и для «test_data1».

DataFrame.loc[] используется здесь для поиска «lot_size_units» с «acre» и умножения значения, присутствующего в «lot_size», на 43560.

# Преобразование значений лота_размера в акрах в квадратные футы в train_data

поезд_данные. место [ ( поезд_данные [ 'lot_size_units' ] == 'акр' ) , 'объем партии' ] '=' поезд_данные [ 'объем партии' ] * 43560

# Преобразование значений лота_size в акрах в квадратные футы в test_data1

test_data1. место [ ( test_data1 [ 'lot_size_units' ] == 'акр' ) , 'объем партии' ] '=' test_data1 [ 'объем партии' ] * 43560

Распечатать ( поезд_данные. голова ( ) )

Распечатать ( test_data1. голова ( ) )

Выход:

Теперь вы увидите, что все значения в столбце «размер_лота» представляют собой значения в квадратных футах.

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

DataFrame['column_name'].fillna() используется для заполнения пропущенных значений средним значением с помощью функцииmean(). DataFrame['column_name'].mean() передается в качестве параметра функции finna(). Давайте теперь отобразим среднее значение и посмотрим на счет:

# Заполните недостающие значения, присутствующие в столбце lot_size, средним значением существующих значений.

поезд_данные [ 'объем партии' ] '=' поезд_данные [ 'объем партии' ] . чувствовать ( поезд_данные [ 'объем партии' ] . иметь в виду ( ) )

# Отображение среднего значения

Распечатать ( «Среднее значение данных поезда:» , поезд_данные [ 'объем партии' ] . иметь в виду ( ) )

Распечатать ( только ( поезд_данные [ 'объем партии' ] ) )

# Заполните недостающие значения, присутствующие в столбце lot_size, средним значением существующих значений.

test_data1 [ 'объем партии' ] '=' test_data1 [ 'объем партии' ] . чувствовать ( test_data1 [ 'объем партии' ] . иметь в виду ( ) )

# Отображение среднего значения

Распечатать ( «Среднее значение тестовых данных:» , test_data1 [ 'объем партии' ] . иметь в виду ( ) )

Распечатать ( только ( test_data1 [ 'объем партии' ] ) )

Выход:

Отсутствующие значения, присутствующие в столбце «lot_size», набор данных поезда, заменяются средним значением 18789,95194, а отсутствующие значения, присутствующие в столбце «lot_size», набор тестовых данных, заменяются средним значением 8961,0.

3. Очистка данных

При обучении модели есть некоторые ненужные атрибуты, которые не требуются для прогнозирования результата. В нашем случае есть три атрибута: «lot_size_units», «zip_code» и «size_units», которые необходимо удалить из обоих наборов данных. pandas.DataFrame.drop() используется для удаления этих трех столбцов из обоих наборов данных.

поезд_данные '=' поезд_данные. уронить ( [ 'lot_size_units' , 'почтовый индекс' , 'size_units' ] , ось '=' 1 )

test_data1 '=' test_data1. уронить ( [ 'lot_size_units' , 'почтовый индекс' , 'size_units' ] , ось '=' 1 )

Распечатать ( поезд_данные. Информация ( ) )

Распечатать ( test_data1. Информация ( ) )

Выход:

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

4. Визуализация данных

Давайте создадим гистограмму для столбцов данных Train. Функция pandas.DataFrame.hist() используется для создания гистограмм для всех атрибутов.

поезд_данные. история ( размер фигуры '=' ( 4 , 9 ) )

Выход:

Гистограмма генерируется для столбцов «кровати», «ванны», «размер», «lot_size» и «цена» для данных поезда.

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

Импортировать сюжетно. выражать

корр. '=' поезд_данные. корр. ( )

# Постройте коррелированные данные

view_fig '=' сюжетно. выражать . имшоу ( корр. , text_auto '=' Истинный )

# Отображать

view_рис. показывать ( )

Выход:

  1. Кровати 0,2935 коррелируют с ценой, -0,059 коррелируют с размером лота, 0,77 коррелируют с размером и 0,65 коррелируют с ваннами.
  2. Ванны 0,3173 коррелируют с ценой, -0,054 коррелируют с размером лота, 0,667 коррелируют с ваннами и 0,771 коррелируют с кроватями.
  3. Размер 0,444 коррелирует с ценой, -0,044 коррелирует с размером лота, 0,667 коррелирует с размером и 0,652 коррелирует с пластами.

5. Подготовка модели

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

цель '=' поезд_данные [ 'цена' ]

поезд_данные '=' поезд_данные. уронить ( [ 'цена' ] , ось '=' 1 )

Распечатать ( поезд_данные. Информация ( ) )

Распечатать ( test_data1. Информация ( ) )

Выход:

Теперь есть четыре независимых атрибута (кровати, ванны, размер и размер_лота), а зависимым атрибутом, зависящим от этих четырех атрибутов, является цена.

6. Обучение модели

Сначала мы применяем алгоритм RandomForestRegressor. Импортируйте его из пакета «sklearn.ensemble». Это техника ансамбля.

  1. Создайте модель из RandomForestRegressor(). Мы не передаем никаких параметров в эту модель. Итак, количество деревьев решений по умолчанию равно 100.
  2. Используйте метод fit(), чтобы подогнать модель. Требуется два параметра. Первый параметр — это зависимые атрибуты, а второй параметр — метка/цель класса.
  3. Используйте метод Score(), чтобы увидеть точность модели. Он также принимает те же параметры, что и метод fit().
от научился ансамбль Импортировать Случайный лесной регрессор

# Определим модель

модель1 '=' Случайный лесной регрессор ( )

# Подогнать модель

модель1. соответствовать ( поезд_данные , цель )

# Точность модели

Распечатать ( модель1. счет ( поезд_данные , цель ) * 100 )

Выход:

86.08400889419033

7. Проверьте модель и сохраните результаты.

Это последний шаг, на котором нам нужно спрогнозировать результат и сохранить его.

  1. Метод Predict() используется для прогнозирования тестовых данных. Он используется с моделью и принимает вложенный список значений/DataFrame.
  2. Используйте метод to_csv() для сохранения результатов в файл CSV.
  3. Загрузите файл из среды Python (Google Colab).
# Прогнозируем test_data1 с помощью модели model1.

test_data [ 'Цена' ] '=' модель1. предсказывать ( test_data1 )

# Сохраняем test_data в test_results.csv

test_data. to_csv ( 'test_results.csv' )

# Загрузите этот файл с Colab

файлы. скачать ( 'test_results.csv' )

Выход:

Покажем 20 записей из 505 записей. Вы можете видеть, что столбец «Цена» содержит прогнозируемые значения для каждого дома.

Другие модели

Давайте спрогнозируем дома, используя DecisionTreeRegressor. Вы можете импортировать его из модуля «sklearn.tree».

от научился дерево Импортировать РешениеДеревоРегрессор

# Определим модель

модель2 '=' РешениеДеревоРегрессор ( )

# Подогнать модель

модель2. соответствовать ( поезд_данные , цель )

# Точность модели

Распечатать ( модель2. счет ( поезд_данные , цель ) * 100 )

# Прогнозируем test_data1 с помощью модели model1.

test_data [ 'Цена' ] '=' модель2. предсказывать ( test_data1 )

# Сохраняем test_data в test_results.csv

test_data. to_csv ( 'test_results.csv' )

# Загрузите этот файл с Colab

файлы. скачать ( 'test_results.csv' )

Выход:

99.94183165335028

Прогнозируемый результат вы можете увидеть здесь:

Давайте спрогнозируем дома, используя LinearrEгрессию. Импортируйте модель из модуля «sklearn.linear_model».

от научился линейная_модель Импортировать Линейная регрессия

# Определим модель

модель3 '=' Линейная регрессия ( )

# Подогнать модель

модель3. соответствовать ( поезд_данные , цель )

# Прогнозируем test_data1 с помощью модели model1.

test_data [ 'Цена' ] '=' модель3. предсказывать ( test_data1 )

# Сохраняем test_data в test_results.csv

test_data. to_csv ( 'test_results.csv' )

# Загрузите этот файл с Colab

файлы. скачать ( 'test_results.csv' )

Прогнозируемый результат вы можете увидеть здесь:

Заключение

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