Хабрахабр

Прогнозирование продаж недвижимости. Лекция в Яндексе

Успех в проектах по машинному обучению обычно связан не только с умением применять разные библиотеки, но и с пониманием той области, откуда взяты данные. Отличной иллюстрацией этого тезиса стало решение, предложенное командой Алексея Каюченко, Сергея Белова, Александра Дроботова и Алексея Смирнова в конкурсе PIK Digital Day. Они заняли второе место, а спустя пару недель рассказали о своём участии и построенных моделях на очередной ML-тренировке Яндекса.

Алексей Каюченко:
— Добрый день! Мы расскажем о соревновании PIK Digital Day, в котором мы участвовали. Немного о команде. Нас было четыре человека. Все с абсолютно разным бэкграундом, из разных областей. На самом деле, мы на финале познакомились. Команда сформировалась буквально за день до финала. Я расскажу про ход конкурса, организацию работы. Потом выйдет Сережа, он расскажет про данные, а Саша расскажет уже про сабмишен, про финальный ход работы и про то, как мы двигались по лидерборду.

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

Мы там были на местах 50+. Наши места по итогам онлайн-конкурса были даже не в топ-10, и даже не в топ-20. Было очень много команд, состоящих из одного человека, хотя можно было объединяться. На самом финале, то есть офлайн-этапе, было 43 команды. На финале было два конкурса. Около трети команд были больше одного человека. Можно было использовать любые алгоритмы: deep learning, machine learning. Первый конкурс — модель без ограничений. Организатор посчитал, что линейная регрессия тоже достаточно прикладная, поскольку сам конкурс в целом был очень прикладной. Параллельно проходил конкурс на лучшее решение линейной регрессии. То есть ставилась прикладная задачка — нужно было спрогнозировать объем продаж квартир, имея исторические данные за предыдущие 2,5 года с атрибутами.

Двойной приз. Наша команда заняла второе место в конкурсе на лучшую модель без ограничений и первое место в конкурсе на лучшую регрессию.

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

Сергей расскажет больше про данные.

ПИК предоставил нам несколько файлов с данными. Сергей Белов:
— Спасибо. Train состоял примерно из 10 тысяч строк, test — из 2 тысяч. Два основных — train.csv и test.csv, в которых было примерно 50 фич, сгенеренных самим ПИК.

Она содержала данные по продажам. Что предоставляла из себя строка? Было примерно 10 тысяч таких строк. То есть в качестве value (в данном случае — target) у нас были продажи по квадратным метрам для квартир, усредненных по конкретному корпусу. Фичи в сетах, которые нагенерил сам ПИК, приведены на слайде с примерной значимостью, которую мы получили.

Такие фичи, как расстояние квартиры до Кремля или до Транспортного кольца, количество машиномест, — они не очень сильно влияют на продажи. Мне тут помог опыт работы в девелоперских компаниях. ПИК не сгенерил эту фичу, но они предоставили нам три дополнительных файла: flat.csv, status.csv и price.csv. Влияние оказывают класс объекта, спальность, и, что особенно важно, количество квартир в реализации в данный момент. И мы решили взглянуть на flat.csv, поскольку там как раз были данные по количеству квартир, по их статусу.

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

Первым делом мы посмотрели, как между собой соотносятся тесты train set, то есть пересекаются ли области этих данных. Мы начали работать с данными. Да, они пересекаются: и по количеству квартир, и по спальности, и по некой средней этажности.

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

Одна из них представлена здесь. Из файла flat.csv мы сгенерили три фичи. Что это была за фича? Видно, что она имеет достаточно хорошую линейную зависимость, кроме этого проседания. И эта фича очень хорошо работает при низких значениях. Она соответствовала количеству квартир, которые находятся в реализации на данный момент. Но в этих файлах, на самом деле, был заложен некий человеческий фактор, потому что они часто составляются человеком. То есть не может быть больше проданных квартир, чем то количество, которое находится в реализации. Мы прямо видели там точки, которые выбиваются из этого района, потому что они были забиты немножко неправильно.

Модель из GBR и Random Forest без фич давала RMSE 239, а с тремя этими фичами — 184. Пример из scikit-learn.

Саша расскажет про модели, которые мы использовали.

Как ребята уже сказали, мы все разные, пришли из разных сфер, разное образование. Александр Дроботов:
— Пару слов про наш подход. На финальном этапе Леша больше использовал XGBoost от Яндекса (скорее всего, имеется в виду CatBoost — прим. И подходы были у нас разные. ред.), Сережа — библиотеку scikit-learn, я — LightGBM и линейную регрессию.

Для линейной регрессии у нас был блендинг из двух моделей, а для общего конкурса — XGBoost, и мы добавили немножко линейной регрессии. Модели XGBoost, линейная регрессия и Prophet — три варианта, которые показали у нас самый лучший score.

На графике слева по оси X — public RMSE, значение метрики, а по оси Y — значение private score, RMSE. Вот процесс отправки решений и работы команды. Здесь индивидуальные модели каждого из участников. Мы начинали примерно с этих позиций. Наши значения по индивидуальным моделям были примерно такими. Затем, после обмена идеями и создания новых фич, мы начали приближаться к нашему самому лучшему score. Prophet создавал прогноз для накопленных продаж. Самая лучшая индивидуальная модель — XGBoost и Prophet. То есть мы знали, какое количество квартир у нас total, понимали, какое значение историческое, и incremental-значение стремилось к total-значению. Там был такой признак, как start square. Prophet строил прогноз на будущее, выдавал значения в следующих периодах и подавал их в XGBoost.

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

Он показывает не такую высокую корреляцию с линейной регрессией. Изучив обычную матрицу корреляции самых лучших сабмитов, мы увидели следующее: деревья — и это логично — показывали корреляцию, близкую к единице, а самое лучшее дерево давал XGBoost. Именно так мы и получили самое лучшее финальное решение. Мы решили заблендить эти два варианта в пропорции 8 к 2.

Наша команда заняла второе место по моделям без ограничений и первое место по линейным моделям. Это лидерборд с результатами. Разница не очень большая. Что касается score — здесь все значения довольно близкие. У нас все, спасибо! По линейной регрессии уже идет шаг в районе 5.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть