Кодирование сезонности для улучшения наших моделей оценки недвижимости

Nov 29 2022
Введение В компании Homebound команда машинного обучения и ценообразования отвечает за разработку и поддержку Автоматизированной модели оценки (АВМ) для точного прогнозирования стоимости недвижимости. Названная здесь моделью оценки дома (HVM), такие характеристики, как размер дома, вид на недвижимость, близость к основным дорогам и многое другое, используются для оценки стоимости недвижимости.
Домашняя недвижимость в Санта-Роза!

Введение

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

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

Кодирование сезонности

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

Ежемесячно

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

Рисунок 1: Линейное представление кодирования сезонности в виде ежемесячных признаков (категориальных и порядковых).

ведро

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

Рисунок 2: Линейное представление кодирования сезонности в виде сегментированных групп (квартальных и сезонных).

Циклический

Хотя представление времени как по месяцам, так и по сегментам помогает интерпретировать и представлять сезонность как характеристики модели, они затрудняют отражение циклического характера времени и сезонов. Альтернативный способ уловить этот сезонный цикл — преобразовать годовые даты в двухмерное синусоидальное и косинусоидальное пространство признаков. Это делается путем нормализации числового дня года к значению от 0 до 1, преобразования этих значений между интервалами синуса и косинуса 0 и 2π, а затем получения синуса и косинуса этих значений (вспомните единичный круг из тригонометрии). ). Затем каждый день в году представляется уникальной парой значений синуса и косинуса, которая образует круг, как показано на рисунке ниже.

Рисунок 3: Циклическое представление времени, где каждый день в году представлен уникальной парой значений синуса и косинуса. Ближайшие моменты времени более похожи визуально (градиент цвета) и численно.

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

Рисунок 4: Циклическое представление времени, где два дня в году представлены уникальным значением косинуса. Каждое значение косинуса представляет N дней от 1 января до тех пор, пока значения не сойдутся в июле. Ближайшие моменты времени более похожи визуально (градиент цвета) и численно.

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

Оценка экспериментов

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

Таблица 1. Результаты подъема модели для каждого обсуждаемого представления сезонных признаков

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

Если вы не знаете, как кодировать сезонность для своих проектов, попробуйте эти методы, и вы будете удивлены тем, что работает!

Следующие шаги и будущая работа

Как упоминалось ранее, одной из основных задач нашей команды является помощь команде андеррайтеров Homebound в предоставлении быстрых, точных и справедливых предложений потенциальным клиентам Homebound. Предоставление большей объяснимости прогнозам HVM — это один из способов улучшить партнерские отношения между нашими командами. Хотя включение двумерных циклических признаков отлично повысило производительность модели, оно несколько снизило интерпретируемость модели.

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

Реализация Python

В этом разделе основное внимание будет уделено реализации различных функций сезонности, описанных выше, в Python.

Мы начинаем с импорта пакетов, необходимых для создания фиктивного фрейма данных Pandas, содержащего даты за последние три года (2019–2021 гг.), из которых можно извлечь признаки сезонности.

# import packages
import pandas as pd
import numpy as np

# create dummy dataframe of dates over the past 3 years (2019-2021)
df = pd.DataFrame()
df['date'] = pd.Series(pd.date_range('2019', periods=1096, freq='D'))

# extract month number for ordinal representation of months
df['month_ordinal'] = df['date'].dt.month

# extract month name for categorical representation of months
df['month_categorical'] = df['date'].dt.month_name()

# extract quarters for bucketed representation of time
# note: the last two characters are removed to keep the quarter without year
df['quarter'] = df['date'].dt.to_period('Q').astype('str').str[-2:]

# create list of desired month number to group mapping 
seasons = ['Winter', 'Winter', 'Spring', 'Spring', 'Spring', 'Summer',
          'Summer', 'Summer', 'Fall', 'Fall', 'Fall', 'Winter']

# map month number (1-12) to desired group (list created above)
season_month_map = dict(zip(range(1,len(seasons)+1), seasons))

# map extracted month number (month_ordinal) to desired group
df['season'] = df['month_ordinal'].apply(lambda x: season_month_map[x])

# extract day of year from date
df['day_of_year'] = df['date'].dt.dayofyear

# create cyclic sine and cosine normalized representation of time using extracted day of year
# note: divide by 366 to normalize & account for leap years (max number of days in a year)
# note: using just cos_date feature is equivalent to the one-dimnesional feature described
df['sin_date'] = np.sin(2 * np.pi * df['day_of_year']/366)
df['cos_date'] = np.cos(2 * np.pi * df['day_of_year']/366)

Таблица 2: Примеры строк признаков сезонности, извлеченных из первого числа каждого месяца в 2021 году.

Домашние нанимают! Хотите работать в Homebound? Посетите нашу страницу вакансий !

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

использованная литература

[1] Арай, Виктория. «Лучшее время года для покупки дома». Rocket Mortgage , 1 ноября 2022 г.,https://www.rocketmortgage.com/learn/best-time-of-year-to-buy-a-house.

[2] Бескон, Пьер-Луи. «Циклическое кодирование функций, пора!», На пути к науке о данных , 8 июня 2020 г.,https://towardsdatascience.com/cyclical-features-encoding-its-about-time-ce23581845ca.

[3] Хоппер. «Искусственный интеллект в путешествиях, часть 2: представление циклических и географических особенностей». Medium — Life at Hopper , 27 апреля 2018 г.,https:///life-at-hopper/ai-in-travel-part-2-representing-cyclic-and-geographic-features-4ada33dd0b22.