SE Apartment Project

Подход к оценке цен на квартиры в Стокгольме с позиций науки о данных

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

Цель этой истории и резюме последней истории.

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

Разделение данных для проверки.

В нашем наборе данных около 14 000 записей, которые отлично подойдут для обучения нашей ML-модели. Для обучения нашей модели нам нужен большой объем данных, так называемые обучающие данные. Но для проверки производительности нашей модели нам также потребуются данные, так называемые, данные проверки . Здесь важен баланс, поскольку, если у нас будет слишком мало строк обучающих данных, наша модель не сможет обучаться на достаточном количестве данных и быть точной. С другой стороны, если у нас недостаточно строк с данными проверки, мы не можем быть уверены в точности нашей модели, когда позже ее протестируем. Примечание. Мы также можем использовать перекрестную проверку, но поскольку у нас достаточно данных, выигрыш будет минимальным.

По этим причинам я решил разделить данные на 3/4, то есть 75% строк идут на обучение, а 25% - на проверку.

Построение модели машинного обучения.

Первым шагом к обучению моей модели машинного обучения (ML) является рассмотрение функций, которые я должен включить, что также важно. Исходя из интуиции и предыдущего знания квартир, я решил выбрать: «Дата », «Размер», «NearbyPOI», «Комнаты», «Широта», и "Долгота". Выбор правильных функций для включения и исключения будет очень важен для производительности нашей модели, поэтому мы вернемся к настройке позже. Но давайте начнем с этого и посмотрим, чем мы закончим.

Как его смоделировать

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

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

Теперь мы обучаем модель с нашими обучающими данными и давайте протестируем ее на проверочных данных.

Хм, не совсем хороший предсказатель цен на квартиры. Это означает, что прогнозы нашей модели будут в среднем на 24% или более 1 000 000 миллионов шведских крон. Мы определенно можем это улучшить. Так как же нам это оптимизировать?

Разработка и оптимизация функций

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

feat_importances = pd.Series(trainedModel.feature_importances_, index=trainFeatures.columns)
feat_importances.nlargest(numOfFeatures).plot(kind='barh')

В конце концов я решил выбрать: "Размер", "Ближайшие точки доступа", "Широта", и "Долгота". потому что они оказали наибольшее влияние на цену, которую вы можете увидеть на графике здесь.

Я не включил Арендную плату, поскольку ситуация, когда мы знаем Арендную плату, но не Цену, или наоборот, не представлялась необходимостью включать.

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

Намного лучше, если наша модель может предсказать цену продажи, в среднем 390 000 шведских крон или 8,4% от фактической цены.

Интересно отметить, что для этой точности мы используем только 4 функции: «Размер», «NearbyPOI», «Широта» и «Долгота», чтобы получить такую ​​точность. точности. Поскольку NearbyPOI, широта и долгота исходят из адреса, на самом деле нам нужны только две функции. Почему это впечатляет? Это означает, что нашей модели для точности требуются только размер квартир и адрес 91,6%.

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

Заключение: превращение данных в идеи.

На данный момент у нас есть чистые и систематизированные данные и ML-модель, которая прогнозирует продажную цену. В заключение этого исследования я хочу подытожить, какие полезные идеи мы получили.

Начнем с реальных данных. Это сводка всех строк данных, которые у нас есть. Помимо прочего, он показывает среднее, стандартное отклонение, максимальное и минимальное значение наших данных для всех 9 функций.

Предполагая, что данные, полученные от Hemnet, характерны для рынка квартир в Стокгольме, мы можем сделать вывод, что для квартир в Стокгольме:

  • Средняя цена составляет 3,9 миллиона шведских крон.
  • Средняя арендная плата составляет 2 800 шведских крон.
  • Среднее количество комнат - 2.

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

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

  • долгота в значительной степени зависит от NearbyPOI. Значение: количество интересных мест поблизости (ресторанов, баров, школ и т. Д., Которые интересны по мнению Yelp) зависит от того, живете ли вы в Западном или Восточном Стокгольме, где на востоке Стокгольма их больше Ближайшие POI.
  • PricePerKvm в два раза зависит от долготы и широты. Это означает, что если вы живете в Восточном Стокгольме, ваша квартира, вероятно, будет дороже.

Конечно, предстоит еще масса подключений, но это были мои личные фавориты.

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

Больше всего меня удивило то, насколько мало влияет количество номеров на цены. Значение:

  • Стоимость квартиры существенно не отличается от того, есть ли в ней дополнительная комната или две. В этом контексте в основном имеет значение размер в квадратных метрах.

Из этого графика мы также можем сделать вывод, что Размер, NearbyPOI, Широта и Долгота - это особенности, которые больше всего влияют на цену. Три из них полностью зависят от местоположения. Значение:

  • Местоположение решает все, и это существенно повлияет на ценообразование.

Чтобы показать, как меняются цены в Стокгольме, я решил показать это визуально.

Как видите, закономерность существует. Самая высокая точка (желтая), как видите, есть координаты в центре Эстермальма.

Ключевые выводы из этого тематического исследования

Для квартир в Стокгольме:

  • Средняя цена составляет 3,9 миллиона шведских крон.
  • Средняя арендная плата составляет 2 800 шведских крон.
  • Среднее количество комнат - 2.
  • количество интересных мест поблизости (ресторанов, баров, школ и т. Д., Которые интересны согласно Yelp) зависит от того, живете ли вы на западе или востоке Стокгольма, где В восточном Стокгольме есть много интересных мест.
  • Если вы живете в восточном Стокгольме, ваша квартира, вероятно, будет дороже.
  • Цена на квартиру незначительно отличается , есть ли в ней дополнительная комната или две, если не прибавляются квадратные метры.

Прочтите предыдущий рассказ здесь:
Сбор и очистка данных с помощью веб-скрейпинга.

Весь исходный код доступен здесь:
https://github.com/gustafvh/Apartment-ML-Predictor-Stockholm_-with-WebScraper-and-Data-Insights