Понимание нейронных сетей LSTM: нейронные сети LSTM представляют собой тип рекуррентной нейронной сети (RNN), которая превосходно обрабатывает и прогнозирует последовательные данные. В отличие от традиционных нейронных сетей с прямой связью, сети LSTM специально разработаны для захвата долгосрочных зависимостей и закономерностей во входных данных. Это делает их идеальным выбором для моделирования данных временных рядов, таких как исторические цены на аренду.

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

Прогноз аренды дома

Стоимость аренды жилья зависит от многих факторов, таких как:

  1. Количество спален, холла и кухни
  2. размер собственности
  3. пол дома
  4. тип области
  5. район
  6. Город
  7. состояние отделки дома

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

Прогноз арендной платы с использованием Python

1. Я начну задачу прогнозирования арендной платы за дом, импортировав необходимые библиотеки Python и Код и набор данных:

2. Теперь давайте проверим значения Nan:

Как видите, нулевых значений нет.

3. Давайте посмотрим на описательную статистику данных:

Вот краткое объяснение приведенной статистики:

  • BHK (Спальни, Зал, Кухня): количество точек данных, доступных для столбца BHK, равно 4746. Это указывает на количество записей или свойств с информацией о количестве спален, залов и кухонь.
  • Арендная плата: средняя арендная плата за недвижимость в наборе данных составляет примерно 34 993,45. Стандартное отклонение значений арендной платы составляет около 78 106,41, что указывает на отклонение арендной платы от среднего значения. Минимальная арендная плата составляет 1 200, а максимальная арендная плата — 3 500 000.
  • Размер: средний размер недвижимости, выраженный в квадратных футах, составляет примерно 967,49. Стандартное отклонение значений размера составляет около 634,20, что указывает на изменчивость размеров собственности. Наименьший размер недвижимости в наборе данных составляет 10 квадратных футов, а самый большой — 8000 квадратных футов.
  • Ванная комната: Среднее количество ванных комнат в домах составляет примерно 1,97. Стандартное отклонение значений ванных комнат составляет приблизительно 0,88, что указывает на изменчивость количества ванных комнат. Минимальное количество ванных комнат — 1, максимальное — 10.

Эти статистические данные дают представление о распределении и характеристиках BHK, арендной платы, размера и характеристик ванных комнат в наборе данных.

4. Теперь давайте проверим минимальную, медианную, максимальную и среднюю аренду домов:

Как видите, средняя, ​​медиана, максимальная и минимальная рента цен.

5. Теперь посмотрим на арендную плату домов в разных городах по количеству спален, залов и кухонь:

6. Давайте посмотрим, какие типы BHK приносят больший доход или какой тип BHK чаще всего сдается в аренду в городах? :

Как видите, 3-комнатные (зеленые) и 2-комнатные номера приносят больший доход и выбираются большинством клиентов.

7. Теперь посмотрим на арендную плату домов в разных городах по степени оснащенности дома:

8. Теперь посмотрим на аренду домов в разных городах в зависимости от размера дома:

9. Теперь посмотрим на арендную плату домов в разных городах по степени оснащенности дома:

10. Теперь давайте посмотрим на количество сдаваемых домов в разных городах по набору данных:

Я преобразовал df в данные: data = df

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

cities = data["City"].value_counts()

Эта строка вычисляет количество каждого уникального значения в столбце «Город» кадра данных data и сохраняет результат в переменной cities. Это дает нам количество домов, доступных для аренды в каждом городе.

label = cities.index
counts = cities.values

Эти строки извлекают индекс (названия городов) и значения (числа) из переменной cities и сохраняют их в переменных label и counts соответственно. Они будут использоваться в качестве входных данных для круговой диаграммы.

colors = ['gold','lightgreen']

Эта строка определяет цвета, которые будут использоваться для круговой диаграммы. В данном случае это «золотой» и «светло-зеленый».

fig = go.Figure(data=[go.Pie(labels=label, values=counts, hole=0.5)])

Здесь объект go.Pie создается с labels, установленным на label (названия городов), и values, установленным на counts (количество домов). Параметр hole имеет значение 0,5, что создает круговую диаграмму с отверстием в центре. Затем этот объект go.Pie передается в качестве аргумента данных в go.Figure для создания новой фигуры с именем fig.

fig.update_layout(title_text='Number of Houses Available for Rent')

Эта строка устанавливает заголовок рисунка как «Количество домов, доступных для аренды» с использованием метода update_layout из fig.

fig.update_traces(hoverinfo='label+percent', textinfo='value', textfont_size=30,
                  marker=dict(colors=colors, line=dict(color='black', width=3)))

Здесь метод update_traces используется для обновления атрибутов трасс диаграммы (срезов круговой диаграммы). Параметр hoverinfo имеет значение «метка+процент», что означает, что при наведении курсора на срез будет отображаться как метка (название города), так и процент. Параметр textinfo имеет значение «значение», которое отображает количество домов для каждого среза. Параметр textfont_size устанавливает размер шрифта текста равным 30. Параметр marker используется для определения цветов и контура фрагментов.

fig.show()

Наконец, эта строка отображает круговую диаграмму с использованием метода show из fig.

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

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

Приготовьтесь к захватывающему путешествию в мир машинного обучения, где начинается настоящая игра!

Модель прогнозирования арендной платы за дом

12. Теперь я преобразую все категориальные признаки в числовые признаки, которые нам понадобятся для обучения модели прогнозирования арендной платы за дом:

13. Теперь разобью данные на обучающую и тестовую выборки:

14. Теперь давайте обучим модель прогнозирования арендной платы с использованием модели нейронной сети LSTM:

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

  1. from keras.models import Sequential: эта строка импортирует класс Sequential из модуля keras.models. Класс Sequential позволяет построить последовательную модель, накладывая слои друг на друга.
  2. from keras.layers import Dense, LSTM: Эта строка импортирует классы слоев Dense и LSTM из модуля keras.layers. Эти слои будут использоваться для определения архитектуры модели нейронной сети.
  3. model = Sequential(): Эта строка создает экземпляр класса Sequential и присваивает его переменной model. Это будет модель нейронной сети, которую мы будем строить.
  4. model.add(LSTM(128, return_sequences=True, input_shape=(xtrain.shape[1], 1))): Эта строка добавляет в модель слой LSTM. Уровень имеет 128 единиц, return_sequences=True указывает, что слой должен возвращать всю последовательность выходных данных, а input_shape=(xtrain.shape[1], 1) определяет форму входных данных.
  5. model.add(LSTM(64, return_sequences=False)): Эта строка добавляет в модель еще один слой LSTM. Этот слой имеет 64 единицы, и return_sequences=False указывает, что он должен возвращать только последний вывод в последовательности.
  6. model.add(Dense(25)): Эта строка добавляет к модели плотный слой с 25 единицами. Плотные слои — это полностью связанные слои, в которых каждый нейрон связан с каждым нейроном предыдущего слоя.
  7. model.add(Dense(1)): Эта строка добавляет к модели еще один плотный слой с 1 единицей. Этот последний слой выведет прогнозируемое значение арендной платы.
  8. model.summary(): В этой строке выводится сводка архитектуры модели, включая типы и формы слоев, а также общее количество параметров в модели.

Сводка показывает, что модель имеет в общей сложности 117 619 параметров, и все они поддаются обучению. Значения None в столбце выходной формы представляют размер пакета, который не указан в сводке.

Код отвечает за компиляцию и обучение модели нейронной сети для прогнозирования арендной платы за дом с использованием архитектуры LSTM (Long Short-Term Memory).

Разберем код построчно:

  1. model.compile(optimizer='adam', loss='mean_squared_error'): Эта строка компилирует модель, указывая оптимизатор и функцию потерь. Оптимизатор настроен на «адам», который является популярным алгоритмом оптимизации, а функция потерь — «mean_squared_error», которая вычисляет среднеквадратичную разницу между прогнозируемыми и фактическими значениями.
  2. model.fit(xtrain, ytrain, batch_size=1, epochs=21): Эта строка обучает модель, используя обучающие данные. Переменные xtrain и ytrain содержат входные объекты и целевую переменную соответственно. Для batch_size установлено значение 1, что означает, что модель будет обновлять свои веса после обработки каждого отдельного образца. Параметр epochs определяет, сколько раз модель будет повторять весь набор обучающих данных.
  3. Вывод, который вы видите под кодом, представляет собой ход обучения модели за указанное количество эпох. Каждая эпоха показывает потерю (среднеквадратическую ошибку), достигнутую моделью на обучающих данных. Значение потерь уменьшается по мере того, как модель учится делать более точные прогнозы.
  4. Окончательный вывод <keras.callbacks.History at 0x265de781970> указывает на то, что процесс обучения успешно завершен.

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

Заключение:

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

ODSC — Открытая наука о данных

Аналитика Видхья

Аренда дома героя

Центр машинного обучения

model.predict