Использование регрессионных моделей машинного обучения и нейронных сетей

Постановка задачи

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

Как энтузиаст данных и начинающий аналитик данных, используя свои недавно приобретенные навыки, приобретенные на курсе General Assembly Data Science Immersive, для моего завершающего проекта, я хотел выяснить следующее:

  1. Мне любопытно узнать, какие особенности HDB влияют на их цену перепродажи.
  2. Я хочу создать простое веб-приложение, которое развертывает мою обученную выбранную модель машинного обучения для считывания невидимых данных, введенных посетителями веб-сайта, и предоставления оценки стоимости. Эта модель будет служить руководством для потенциального посетителя веб-сайта в процессе принятия решения о покупке дома. Тем не менее, я советую им не полагаться на это веб-приложение, а также провести собственную должную осмотрительность при покупке такого дорогого товара.

Будут обучены следующие модели:

  • Модели линейной регрессии: Linear, Lasso, Ridge.
  • Модели на основе дерева: Random Forest, ExtraTrees, XG Boost
  • Нейронные сети с прямой связью: обычная модель, модели с регуляризацией (пакетная нормализация, снижение веса, метод отсева)

Показатель успеха: модель с наименьшей среднеквадратичной ошибкой (RMSE) будет выбрана для развертывания.

Более подробную информацию о проекте можно посмотреть на:

Сбор данных

Набор данных был легко собран с помощью загрузки CSV-файлов с https://data.gov.sg/dataset/resale-flat-prices.

Из загруженных CSV-файлов мы извлекли более 200 000 строк транзакций HDB за 10-летний период с октября 2011 г. по октябрь 2021 г..

Очистка данных

Изучив набор данных, мы видим, что данные были очищены. Единственное, что я сделал, это удалил такие столбцы, как «remaining_lease», что было не очень полезно, поскольку у нас уже есть «lease_commencement_date». Мы также сделали предположение, что будем анализировать только типы квартир HDB, и исключили строки, относящиеся к сделкам с домами с террасами HDB, хотя их было немного.

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

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

1. Географические координаты HDB

Таким образом, используя OneMap API, я удалил географические координаты каждой транзакции HDB, а также координаты близлежащих удобств, таких как станции MRT, начальные школы, средние школы и торговые центры. Я также хотел учесть близость каждого HDB к центральному деловому району и собрал геокоординаты центрального делового района, используя координаты станции MRT Raffles Place в качестве прокси.

Удаление геокоординат близлежащих удобств выполняется аналогичным образом, и коды можно найти в блокноте Jupyter в разделе сбора данных замкового камня.

2. Расстояние (в км) от близлежащих удобств до транзакционных HDB

Часть стоимости HDB может быть определена его близостью к удобствам, тем самым создавая удобство: будь то поездка с детьми в школу, простота доступа к общественному транспорту или покупка предметов первой необходимости.

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

Например, предположим, что мы использовали эту функцию для расчета ближайшей станции MRT в HDB Kallang/Whampoa, функция вернет расстояние, а также имя станции MRT, которое логически будет либо Kallang, Geylang Bahru, либо Boon Keng. . Например, красным флагом будет функция, возвращающая станцию ​​Boon Lay и расстояние до нее. Это позволяет мне быстро проверить работоспособность функции.

3. Колонны с другими функциями

Другие недавно созданные функции включают в себя:

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

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

Я выполнил EDA, используя библиотеки Python (Matplotlib и Seaborn), а также инструменты визуализации данных Tableau. Чтобы статья не была слишком длинной, я хотел бы выделить мои находки в таблице. Однако мои визуализации с использованием Python можно найти здесь.

Вы платите премию, чтобы жить в центре

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

Covid заставил всех захотеть купить дом

На верхнем графике мы сравнили ценовую тенденцию с транзакционным спросом. Мы видим, что в 2013 году произошло общее снижение цен, а также объем транзакций. Это было связано с мерами по охлаждению, введенными правительством путем снижения коэффициента обслуживания ипотечных кредитов, что по существу затруднило получение займа для покупателей. Что интересно, пока цены остаются на прежнем уровне в течение 5–6 лет, сделки снова медленно растут. Затем мы видим резкое падение количества транзакций, когда разразился covid, но сразу же последовал очень резкий отскок к уровням, существовавшим до covid, когда мы вышли из автоматического выключателя с растущими ценами.

Несколько факторов могли сыграть роль в недавнем всплеске COVID-19 при перепродаже HDB:

  • Задержки строительства в проектах BTO, отталкивающие потенциальных покупателей BTO на рынок перепродажи, если они не могут ждать. Ожидается, что в наши дни проекты BTO будут завершены до 5 лет или даже дольше!
  • Резкий рост транзакций в 2020 году был вызван низкими процентными ставками, что привело к снижению их ежемесячных ипотечных кредитов.
  • Работа на дому заставляет людей переосмысливать другие дома (возможно, большего размера) и выделять места для домашнего офиса.

На нижней диаграмме показано количество транзакций для каждого города за 10-летний период. Интересно наблюдать, как Punggol и Sengkang были самыми активными в последние годы, что, возможно, свидетельствует о некоторой вероятности апгрейда HDB, поскольку люди продают свои квартиры по завершении минимального периода проживания.

Центральные города неплохо держат ценовую надбавку

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

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

HDB рядом с удобствами были популярны, но вам не обязательно было быть очень близко

Наконец, когда мы смотрим на близость HDB к центральному деловому району и удобствам, больше всего транзакций совершались HDB, которые находились в пределах 10–15 км от центрального делового района. Блоки HDB, которые находились в пределах 400–600 м от станции MRT и торговых центров и 200–400 м от начальных школ, были наиболее транзакционными.

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

Моделирование

Подробнее об этом разделе моделирования можно прочитать в этом Jupyter Notebook.

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

Мы принимаем следующий процесс моделирования ниже, чтобы обучить и выбрать нашу лучшую модель:

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

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

Гиперпараметры всех линейных и древовидных моделей были настроены с помощью GridSearchCV. Таким образом, результаты обучения и тестирования RMSE для всех моделей:

Некоторые заметки о нашем процессе моделирования:

  • Все линейные модели (за исключением базовой линейной модели) работали одинаково и были самыми плохими. Это были простые в обучении модели, но их не рекомендуется использовать для большинства практических приложений, поскольку они чрезмерно упрощают реальные задачи, предполагая линейную зависимость между переменными.
  • Наши нейронные сети работали довольно хорошо и не так долго, как древовидные модели. Все наши нейронные сети имели следующую топологию: 1 входной слой, 4 скрытых слоя и 1 выходной слой. Отметим уникальные особенности нейронных сетей:
  1. Его природа «черного ящика» означала, что мы не сможем извлечь важность признаков для их интерпретации.
  2. Нейронные сети больше подходят для сложных наборов данных, таких как изображения или тексты, поскольку обычно требуют больше данных, чем традиционные алгоритмы машинного обучения.
  3. Эти сети также имеют долю случайности из-за случайной инициализации весов и смещения, случайности в регуляризации. Это означало, что ваш RMSE будет отличаться каждый раз, когда сети перезапускаются.
  • Из всех типов моделей древовидные модели работали лучше всего, а среди древовидных базовых моделей XG Boost обучался быстрее всего.

Почему это может быть так?

Думайте о XG Boost как о серии деревьев, начиная со слабого базового ученика. Он пытается сделать его более сильным учеником, переобучая его на примерах ошибок. Алгоритм XG Boost также был разработан для эффективного сокращения времени вычислений и оптимального использования ресурсов памяти. Кроме того, для настройки доступно несколько гиперпараметров, которые могут повысить производительность модели. С такими чертами также часто можно увидеть, что XG Boost широко используется в мире науки о данных.

Основные характеристики, влияющие на цену перепродажи HDB

Используя XG Boost как лучшую модель, мы изучили важность функции и поняли больше.

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

2. В частности, такие типы квартир, как представительские, 2-комнатные, 3-комнатные и 5-комнатные, попали в топ-5 характеристик. Типы квартир, как правило, коррелируют с площадью квартир и имеют логичный смысл присутствовать в списке.

3. Мы заметили, что в список попали города, расположенные в центральной части Сингапура (за исключением Вудлендса), что играет на восприятии того, что удачно расположенная недвижимость сильно влияет на ее цену.

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

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

Вышеизложенное ответило бы на мой первый вопрос постановки задачи.

Развертывание модели

Это ответит на мой второй вопрос постановки задачи. Чтобы развернуть нашу модель в Интернете, нам нужно собрать воедино несколько вещей:

  1. Создайте файл .py, содержащий ваши коды с инструкциями для вашего веб-приложения (обычно он называется app.py).
  2. HTML-файл шаблона с инструкциями по отображению вашей веб-страницы в Интернете (обычно называется main.html).
  3. Выбранная модель сохраняется в файле pickle — hdb_model.p
  4. Кроме того, поскольку мой набор данных содержал категориальные фиктивные переменные, я создал словарь и также сохранил его в файле рассола — cat_dict.p. Это позволит развернутой модели правильно считывать пользовательские данные для расчета стоимости.

Специально для моего краеугольного камня мое приложение было структурировано следующим образом:

webapp/
  |---- model/
           |____ cat_dict.p
           |____ hdb_model.p
  |---- templates/
           |____ main.html 
  |---- app.py
  |---- Procfile
  |---- requirements.txt

Крайне важно, чтобы папка веб-приложения и файлы внутри были сохранены в этой структуре, чтобы развертывание работало. Мы будем использовать Heroku (платформа облачных приложений) для развертывания модели.

Перед загрузкой модели и файлов в Heroku рекомендуется протестировать приложение локально. Чтобы запустить flask на локальном компьютере, убедитесь, что вы находитесь в папке webapp, и выполните команду на своем терминале (подсказка Anaconda для меня):

> set FLASK_APP=app
> flask run

Это запустит ваше приложение локально по адресу http://127.0.0.1:5000/.

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

Личное размышление и ошибка новичка:

Я застрял при развертывании на Heroku из-за ошибки приложения. При проверкеheroku logsс помощью терминала он упомянул об ошибке H14 в Heroku — «нет запущенных веб-процессов». Бесчисленные посещения Stack Overflow в течение нескольких дней не помогли решить эту проблему, и я попытался воспроизвести развертывание и протестировать все возможные решения, предоставленные другими пользователями, но безрезультатно.

Я был настолько уверен, что выполнял уроки именно так, как описано. Наконец, я понял, что мой Procfile был в формате .txt, несмотря на то, что я ранее убедился, что это не так. Я обнаружил, что вы можете правильно удалить расширение файла, только если включите параметр «расширения имени файла» в настройках отображения/скрытия вкладки просмотра в проводнике Windows.

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

Мое живое веб-приложение можно найти здесь — попробуйте!

Заключение

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

Последствия новых мер по охлаждению?

Недавно, в конце октября 2021 года, правительство только что объявило о новой политике по сдерживанию «эффекта лотереи» хорошо расположенных проектов HDB BTO, чтобы сделать государственное жилье более справедливым: модель государственного жилья с преимущественным расположением (PLH). Для проектов PLH это означает более длительный минимальный период владения (10 лет), прежде чем вы сможете выставить свою квартиру на рынок перепродажи. Более жесткие квалификационные требования с потолком дохода (не только на этапе BTO, но и также, когда объект продается на рынке перепродажи) означали ограниченный рыночный пул будущих покупателей для покупателей BTO.

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

Личное мнение: правительство отговаривает население от спекуляций на рынке недвижимости. Тем не менее, я считаю, что политика PLH окажет более существенное влияние на будущие цены перепродажи HDB по сравнению с мерами по охлаждению в декабре 2021 года, которые, как представляется, были более нацелены на рынок частной собственности.

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

Будущая работа

Мы определенно могли бы улучшить наши результаты, переобучившись на более крупном наборе данных вместо исторических данных за 10, может быть, 20 или даже 30 лет. Мы могли бы дополнительно перенастроить наши гиперпараметры, хотя мы должны быть осторожны, чтобы не переусердствовать с наборами данных, что подорвет прогностическую способность модели хорошо генерировать невидимые и новые данные. Мы также могли бы повторить этот проект, но с данными о частной собственности, чтобы обнаружить тенденции и закономерности!

Как новичок в мире науки о данных, я приветствую все отзывы и комментарии, чтобы улучшить себя. Мой 12-недельный учебный курс по науке о данных в General Assembly только открыл мне глаза на безграничные возможности науки о данных и аналитики. Я бы сказал, что буткемп — это только начало пути к данным, и мне предстоит еще многому научиться и закрепить многие имеющиеся знания!

Ссылка

Мой завершающий этап был бы невозможен без поддержки инструктора моего курса: Джире Тан и ассистентов (Райан и Симран) из General Assembly (не спонсируется). Конечно, без моих однокурсников я бы не смог выдержать 12-недельный курс интенсивности.

Кроме того, я искренне хотел бы отдать должное указанным ниже веб-сайтам, которые определенно помогли мне в исследовании этого проекта:







Полезные руководства по Flask и Heroku для начала работы: