Использование случайного леса для прогнозирования цен на аренду

В этой статье я попытался спрогнозировать цены на аренду, используя набор данных об аренде квартир, содержащий цены на аренду в Германии. Набор данных состоит из данных, собранных с одной из крупнейших платформ Германии по недвижимости. Основная цель здесь - изучить и понять данные и использовать полученные знания для построения базовой модели прогнозирования базовой стоимости аренды (известной в Германии как «Kaltmiete»).

Исходный набор данных состоит из 268850 квартир (строк) * 49 функций (столбцов), но сочетание отсутствующих и несбалансированных значений означает, что только 14 функций были полезны для меня в текущем контексте. Столбцы содержат следующую информацию:

  1. regio1: Федеральная земля, в которой расположена квартира.
  2. heatingType: Тип системы отопления, используемой в квартире.
  3. балкон. Колонка, указывающая, есть ли в квартире балкон.
  4. Год постройки: Год постройки квартиры.
  5. hasKitchen: Столбец, указывающий, есть ли в квартире кухня.
  6. подвал: столбец, указывающий, есть ли в квартире подвал.
  7. baseRent: Арендная плата без учета электричества и отопления.
  8. livingSpace: Жилая площадь в квадратных метрах.
  9. Состояние: Состояние квартиры.
  10. лифт: столбец, указывающий, есть ли в квартире лифт.
  11. typeOfFlat: Тип квартиры.
  12. noRooms: Общее количество комнат в квартире.
  13. сад: столбец, указывающий, есть ли у квартиры сад.
  14. regio2: Город, в котором расположена квартира.

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

Поскольку этот набор данных был создан с помощью веб-скрейпинга, он был далеко не чистым. Поэтому одной из проблем было избавление от экстремальных и нулевых значений. Например, было несколько рядов жилой площадью более 60 кв. в диапазоне от 10 до 30 евро, что является явным отклонением. Также было несколько квартир с общим количеством комнат более 100. Исследование после уборки дало следующие результаты:

1.) Городом в Германии с самой высокой средней арендной платой является Мюнхен, что неудивительно, поскольку город хорошо известен своей заведомо высокой стоимостью проживания. Районы в Мюнхене и его окрестностях (обозначенные München_Kreis) также входят в первую десятку. Интересный факт, что Штарнберг, который следует за Франкфуртом на третьем месте, широко известен как самый богатый город в Германии. Я был весьма удивлен, что не нашел в списке Дюссельдорф и Бонн.

2.) Гамбург - федеральная земля с самыми высокими средними ценами на аренду, за ней следуют Берлин и Бавария (Бавария). Самые низкие цены в северо-восточных штатах Саксония-Анхальт и Тюрингия.

3.) Как и должно быть, размер жилой площади и базовая стоимость аренды, кажется, более или менее положительно коррелированы. Небольшие (по размеру) апартаменты с высокими ценами, которые кажутся выбросами, - это апартаменты, расположенные в центре города (центр Берлина, Франкфурт), что объясняет их стоимость.

4.) Наиболее распространенная базовая цена аренды в Германии колеблется в диапазоне от 300 до 400 евро.

5. Центральное отопление, кажется, является наиболее распространенным типом отопительной системы, с достаточной долей вероятности, используемой в немецких домах.

6.) Большинство предлагаемых квартир имеют 3 комнаты и относятся к категории «апартаменты».

Разработка модели:

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

  1. Семь уникальных значений в столбце 'condition' ('well_kept', 'refurbished', 'first_time_use', 'full_renovated', 'mint_condition',
    'first_time_use_after_refurbishment', 'modernized', «договорная»,
    «потребность_ремонта», «спелая_да_ремонта») были разделены на 3 класса: «новые», «старые» и «средние» квартиры. Это было сделано для более четкого разграничения.
  2. Данные в столбцах "балкон", "кухня", "подвал", "лифт" и "сад" были закодированы до 1 или 0 в зависимости от того, значение столбца было верно или неверно.
  3. Переменные с непрерывным значением ‘baseRent’, ‘livingSpace’ и ‘noRooms’ были нормализованы с помощью программы Sklearn MinMaxScaler (). Хотя это необязательный шаг при работе с древовидными алгоритмами, он упрощает интерпретируемость и упрощает сравнение производительности с другими моделями.
  4. Категориальные переменные были закодированы с помощью One-Hot-Encoding, упрощенного с помощью get_dummies pandas.
  5. Столбец «baseRent» был выбран в качестве целевой переменной, а остальные - в качестве переменных-предикторов.
  6. После выполнения описанных выше шагов набор данных был разделен на обучающий набор (70% данных) и набор для тестирования (30% данных) с помощью train_test_split sklearn.

Я выбрал Random Forest для разработки прототипа, поскольку это мощная модель, которая может хорошо работать как с непрерывными, так и с категориальными переменными.

Модель была подогнана с помощью RandomForestRegressor () на обучающей выборке. Используя тестовый набор для проверки работоспособности модели, были получены следующие результаты.

На модель приходится около 83,4% данных в модели, или предсказательная сила модели составляет 0,83 (наилучшее - 1,0), что неплохо, учитывая, что модель была запущена с параметрами по умолчанию и не была настроена. MSE и MAE также находятся на нижней стороне.

Вывод:

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

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