Создание функции для прогнозирования цен на недвижимость

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

Этот пост имеет следующую структуру.

  1. Важность функциональной инженерии
  2. Близость крупных городов
  3. Раскрученные города
  4. Данные о температуре
  5. Вывод

01 Важность функциональной инженерии

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

Креативность и доступность данных - «единственные» ограничения, когда дело доходит до создания функций. Решение о том, какие функции реализовать, зависит от конкретной задачи прогнозирования. Наша задача - построить модель прогноза цен на недвижимость. Тогда возникает вопрос: «Какие факторы влияют с наибольшей вероятностью на цену недвижимости, и как мы можем помочь нашей модели лучше это понять?» В итоге мы получили три идеи, которые можно реализовать.

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

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

Последняя переменная - это климат на территории отеля. Испания особенно привлекательна как место для выхода на пенсию из-за своего средиземноморского климата и бесконечного солнечного света. Изменения климата внутри страны также, вероятно, объясняют некоторые различия в ценах.

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

02 Близость к крупным городам

02.1 Мотивация

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

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

02.2 Методология

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

Кроме того, мы различаем типы городов. Жить недалеко от Нью-Йорка может быть лучше (или хуже), чем рядом с городом с населением 50 000 человек. Независимо от влияния на цены этих разных городов, то есть независимо от того, какой эффект сильнее или слабее, мы предполагаем, что эффект различается по величине. Чтобы по-разному влиять на цену, мы различаем города разных размеров. Наши определения соответствуют общепринятой иерархии поселений. Следовательно, мы определяем:

Для создания этой переменной необходимо знать названия городов, а также расположение каждого города с населением более 100 000 человек. Эта информация взята отсюда. Данные выглядят так:

Согласно нашему источнику, мы находим два города с населением более одного миллиона человек, десять городов с населением от 300 до 1 миллиона человек и 76 городов с населением от 100 до 300 тысяч. Чтобы свести тип городских групп к минимуму (средние, большие и мегаполисы), мы также отнесли Мадрид к определению мегаполиса (даже несмотря на то, что он имеет на 200 тыс. Мест обитания больше, чем формальное определение мегаполиса).

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

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

Код для расчета расстояний между двумя местоположениями с учетом информации об их долготе и широте следующий:

def dist_bool(list1, list2, radius):
# Separation of the longitude and latitude data
    lat1, lon1 = list1[0], list1[1]
    lat2, lon2 = list2[0], list2[1]
# Earth radius in km
    R = 6371
#conversion to radians
    d_lat = np.radians(float(lat2)-float(lat1))
    d_lon = np.radians(float(lon2)-float(lon1))
    r_lat1 = np.radians(float(lat1))
    r_lat2 = np.radians(float(lat2))
#haversine formula
    a = np.sin(d_lat/2.) **2 + \
        np.cos(r_lat1) * np.cos(r_lat2) * np.sin(d_lon/2.)**2
# Calculate distance between two points
    haversine = 2 * R * np.arcsin(np.sqrt(a))
# Checking whether it is still within the radius
    within = radius >= haversine
# Returning the results
    return within

02.3 Результаты

Сводная статистика этих двух функций видна ниже. Мы видим, что 8% всех объектов недвижимости находятся в пределах 30 км от мегаполиса. Это разумно, учитывая большое количество небольших городов, которые по сути являются пригородами Мадрида или Барселоны. Кроме того, мы обнаружили, что среднее количество средних городов в радиусе 30 км для всех объектов недвижимости составляет в среднем около двух.

Следует с осторожностью подходить к интерпретации этого результата, учитывая, что в радиусе одного наблюдения было около 26 городов среднего размера. Скорее всего, это относится к городам, расположенным в Мадридском Провансе, где все более мелкие пригороды вокруг Мадрида считаются независимыми городами. Этот факт может изменить статистику.

Вторая переменная - это показатель того, на сколько километров (евклидово расстояние) от объекта находится ближайший город с более чем 100 000 мест обитания.

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

03 Раскрученные города

03.1 Мотивация

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

03.2 Методология

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

# The link where to find all the real estate
url = "https://expatra.com/guides/spain/best-places-to-live-in-spain/"
# Requesting the sites content
page = requests.get(url)
soup = BeautifulSoup(page.content, "html.parser")
# Getting the table with all places in spain
table_html = soup.find_all('li', class_='ez-toc-page-1')
# Getting all the cities
cities = [x.text for x in table_html]
cities = cities[1:-1]
# Changing all city names to lower case
cities = [x.lower() for x in cities]

03.3 Результаты

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

04 Температурные данные

04.1 Мотивация

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

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

04.2 Методология

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

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

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

05 Заключение

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

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

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

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

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

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

Продолжайте читать эту серию статей здесь:

Сквозное машинное обучение для прогнозирования цен на недвижимость

01 Вступление

02 Веб-парсинг данных о недвижимости

03 Обнаружение выбросов в данных о недвижимости

04 Кластеризация данных о недвижимости

05 Создание функций для прогнозирования цен на недвижимость

06 Прогноз цен на недвижимость

07 NLP для прогнозирования цен на недвижимость - Часть 1

08 NLP для прогнозирования цен на недвижимость - Часть 2

09 Заключение