Использование случайного леса для прогнозирования цен на аренду
В этой статье я попытался спрогнозировать цены на аренду, используя набор данных об аренде квартир, содержащий цены на аренду в Германии. Набор данных состоит из данных, собранных с одной из крупнейших платформ Германии по недвижимости. Основная цель здесь - изучить и понять данные и использовать полученные знания для построения базовой модели прогнозирования базовой стоимости аренды (известной в Германии как «Kaltmiete»).
Исходный набор данных состоит из 268850 квартир (строк) * 49 функций (столбцов), но сочетание отсутствующих и несбалансированных значений означает, что только 14 функций были полезны для меня в текущем контексте. Столбцы содержат следующую информацию:
- regio1: Федеральная земля, в которой расположена квартира.
- heatingType: Тип системы отопления, используемой в квартире.
- балкон. Колонка, указывающая, есть ли в квартире балкон.
- Год постройки: Год постройки квартиры.
- hasKitchen: Столбец, указывающий, есть ли в квартире кухня.
- подвал: столбец, указывающий, есть ли в квартире подвал.
- baseRent: Арендная плата без учета электричества и отопления.
- livingSpace: Жилая площадь в квадратных метрах.
- Состояние: Состояние квартиры.
- лифт: столбец, указывающий, есть ли в квартире лифт.
- typeOfFlat: Тип квартиры.
- noRooms: Общее количество комнат в квартире.
- сад: столбец, указывающий, есть ли у квартиры сад.
- regio2: Город, в котором расположена квартира.
Исследовательский анализ данных:
Поскольку этот набор данных был создан с помощью веб-скрейпинга, он был далеко не чистым. Поэтому одной из проблем было избавление от экстремальных и нулевых значений. Например, было несколько рядов жилой площадью более 60 кв. в диапазоне от 10 до 30 евро, что является явным отклонением. Также было несколько квартир с общим количеством комнат более 100. Исследование после уборки дало следующие результаты:
1.) Городом в Германии с самой высокой средней арендной платой является Мюнхен, что неудивительно, поскольку город хорошо известен своей заведомо высокой стоимостью проживания. Районы в Мюнхене и его окрестностях (обозначенные München_Kreis) также входят в первую десятку. Интересный факт, что Штарнберг, который следует за Франкфуртом на третьем месте, широко известен как самый богатый город в Германии. Я был весьма удивлен, что не нашел в списке Дюссельдорф и Бонн.
2.) Гамбург - федеральная земля с самыми высокими средними ценами на аренду, за ней следуют Берлин и Бавария (Бавария). Самые низкие цены в северо-восточных штатах Саксония-Анхальт и Тюрингия.
3.) Как и должно быть, размер жилой площади и базовая стоимость аренды, кажется, более или менее положительно коррелированы. Небольшие (по размеру) апартаменты с высокими ценами, которые кажутся выбросами, - это апартаменты, расположенные в центре города (центр Берлина, Франкфурт), что объясняет их стоимость.
4.) Наиболее распространенная базовая цена аренды в Германии колеблется в диапазоне от 300 до 400 евро.
5. Центральное отопление, кажется, является наиболее распространенным типом отопительной системы, с достаточной долей вероятности, используемой в немецких домах.
6.) Большинство предлагаемых квартир имеют 3 комнаты и относятся к категории «апартаменты».
Разработка модели:
Прежде чем можно будет создать прототип модели, важно преобразовать набор данных. Следующие шаги предварительной обработки были выполнены с набором данных перед загрузкой в модель.
- Семь уникальных значений в столбце 'condition' ('well_kept', 'refurbished', 'first_time_use', 'full_renovated', 'mint_condition',
'first_time_use_after_refurbishment', 'modernized', «договорная»,
«потребность_ремонта», «спелая_да_ремонта») были разделены на 3 класса: «новые», «старые» и «средние» квартиры. Это было сделано для более четкого разграничения. - Данные в столбцах "балкон", "кухня", "подвал", "лифт" и "сад" были закодированы до 1 или 0 в зависимости от того, значение столбца было верно или неверно.
- Переменные с непрерывным значением ‘baseRent’, ‘livingSpace’ и ‘noRooms’ были нормализованы с помощью программы Sklearn MinMaxScaler (). Хотя это необязательный шаг при работе с древовидными алгоритмами, он упрощает интерпретируемость и упрощает сравнение производительности с другими моделями.
- Категориальные переменные были закодированы с помощью One-Hot-Encoding, упрощенного с помощью get_dummies pandas.
- Столбец «baseRent» был выбран в качестве целевой переменной, а остальные - в качестве переменных-предикторов.
- После выполнения описанных выше шагов набор данных был разделен на обучающий набор (70% данных) и набор для тестирования (30% данных) с помощью train_test_split sklearn.
Я выбрал Random Forest для разработки прототипа, поскольку это мощная модель, которая может хорошо работать как с непрерывными, так и с категориальными переменными.
Модель была подогнана с помощью RandomForestRegressor () на обучающей выборке. Используя тестовый набор для проверки работоспособности модели, были получены следующие результаты.
На модель приходится около 83,4% данных в модели, или предсказательная сила модели составляет 0,83 (наилучшее - 1,0), что неплохо, учитывая, что модель была запущена с параметрами по умолчанию и не была настроена. MSE и MAE также находятся на нижней стороне.
Вывод:
Можно ли улучшить эту модель? Да, конечно!. Модель очень далеко не лучшая. Моим первым подходом было бы выполнить настройку гиперпараметров и перекрестную проверку с использованием методов поиска по сетке, чтобы найти идеальные параметры. Во-вторых, исходный набор данных содержал множество столбцов с отсутствующими данными, которые я решил исключить из модели, что означало, что некоторая информация была потеряна. Методы умного вменения, использующие знания предметной области, могут помочь решить эту проблему. Исходный набор данных также содержал столбцы с описанием и описанием квартир. Используя методы НЛП, из этих столбцов можно получить больше информации. Также было бы полезно разработать более сложные функции. Излишне говорить, что я буду использовать эти шаги как подсказки для улучшения характеристик модели.
Я хотел бы услышать ваши отзывы об этом. Если у вас есть какие-либо вопросы или предложения, вы можете связаться со мной. Спасибо за чтение.