Привет, Habr! Сегодня расскажу, как с помощью машинного обучения можно проанализировать рынок недвижимости. На примере Липецка я использовал алгоритм k-средних (KMeans), чтобы провести кластеризацию стоимости квартир. Поделюсь подходом, инструментами и результатами. Поехали! ?
? Почему это важно?
Анализ цен на недвижимость помогает:
выявить ценовые тренды;
принять стратегические решения в сфере недвижимости;
лучше понять рынок, чтобы сделать выгодную сделку.
Кластеризация, в частности, позволяет группировать объекты по стоимости, что даёт больше информации о структуре цен в разных районах города.
? Инструменты
Для анализа я использовал:
Python — основной язык работы.
Pandas и NumPy — для обработки данных.
scikit-learn — для кластеризации.
Folium — для визуализации результатов на карте.
? Подготовка данных
Исходные данные предоставлены агентством недвижимости «Квадрат». Перед кластеризацией выполнены следующие шаги:
Удалены пропуски, выбросы и дубликаты.
С помощью библиотеки Folium, была произведена маркировка объектов на карте, для общего понимания расположенности квартир в каждом районе, демонстрация представлена на рисунке 1.
Так же, была проведена стандартизация данных с помощью библиотеки StandardScaler, которая нужна для того, чтобы привести все числовые переменные к общему масштабу .
? Выбор количества кластеров
Для определения оптимального числа кластеров используется метод локтя:
Суть в этом методе, графическое определение оптимального числа кластеров в методе k-средних (KMeans). Идея заключается в том, чтобы найти точку на графике, где увеличение числа кластеров приводит к заметному уменьшению внутрикластерного расстояния (distortion) или суммы квадратов расстояний между точками и центроидами их кластера (WCSS). График метода локтя, представлен на рисунке 2.
Как видно на рисунке 2, когда мы перешли от пяти до шести кластеров, ошибка перестала существенно уменьшаться. Это объясняет, что выбор количества кластеров равен пяти.
? Кластеризация
Был создан объекта класса модели с использованием пяти кластеров, а также были проведены разные эксперименты с различными гиперпараметрами модели.
? Метрики качества
Выбор конкретных метрик, таких как Silhouette Score (Коэффициент Силуэта) равный 0,375 и индекс Calinski-Harabasz (Индекс Калински-Харабаша) равный 347,1, не является случайным. Эти метрики предоставляют важную информацию о качестве проведенного кластерного анализа. Коэффициент Силуэта отражает меру того, насколько объекты внутри кластера схожи между собой по сравнению с объектами в других кластерах. Значение 0,375 указывает на хорошую структуру кластеров, где объекты внутри кластеров сильно похожи друг на друга.
Индекс Calinski-Harabasz, в свою очередь, оценивает отношение межкластерной дисперсии к внутрикластерной. Значение 347,1 свидетельствует о хорошей компактности кластеров и их четкой отделимости друг от друга.
Исходя из результатов метрики, сложно сделать выводы о правильности модели, так как это в основном зависит от контекста задачи и структуры данных. Для лучшего понимания, стоит визуализировать полученные результаты кластерного анализа. Для этого мы воспользуемся библиотекой Folium, чтобы продемонстрировать результаты на карте OpenStreetMap, представленная на рисунке 3.
? Результаты
На рисунке 3 видно, что результаты кластеризации совпадают с ожиданиями и логикой анализа. Это хороший знак: модель успешно отражает структуру данных и решает поставленную задачу. В итоге получилось 5 кластеров, каждый из которых представляет группу объектов с определёнными ценовыми диапазонами:
Зелёный кластер: бюджетные квартиры (700 тыс. — 3.79 млн руб.).
Оранжевый кластер: квартиры среднего ценового сегмента (1.15 млн — 4.45 млн руб.).
Синий кластер: небольшая группа со стоимостью от 700 тыс. до 4.55 млн руб.
Красный кластер: дорогие квартиры (3.6 млн — 10.9 млн руб.).
Фиолетовый кластер: самый разнородный сегмент (600 тыс. — 5.3 млн руб.).
Для более хорошего понимания результатов кластеров, представлены в виде диаграммы на рисунке 4.
? Заключение
Анализ показал, что кластеры 0, 1, 2 и 4 логично отражают структуру цен на рынке недвижимости Липецка. Однако кластер 3 выделяется, так как включает дорогие объекты, среди которых могут быть как элитные новостройки, так и дома премиум-класса.
Чёрные маркеры на карте обозначают центроиды кластеров, что дополнительно подтверждает корректность распределения.
Стоит отметить, что количество объектов в каждом кластере варьируется. Это обусловлено спецификой рынка: плотностью застройки, характеристиками районов и другими локальными факторами. Подобные различия подчёркивают сложность анализа недвижимости, но также открывают новые возможности для более глубокого понимания структуры рынка.
Комментарии (14)
krammnic
02.12.2024 20:16Раскрыли бы хоть что elbow method на самом деле вообще не очень хорошая штука...
IT_Crow Автор
02.12.2024 20:16Спасибо за ваш комментарий!
Вы правы, метод "локтя" (elbow method) действительно имеет свои ограничения. Он основан на визуальной интерпретации графика, что делает его менее точным по сравнению с другими методами.
Однако в рамках данной задачи он был выбран по нескольким причинам:
Во-первых, простота и наглядность. Метод "локтя" подходит для предварительного анализа, так как его результаты легко интерпретировать даже для аудитории, не знакомой с машинным обучением.
Во-вторых, характер данных. Для сегментации цен на вторичное жильё в Липецке график явно демонстрировал оптимальное число кластеров, что сделало его использование оправданным в этом контексте.Если у вас есть предложения по альтернативным методам (например, анализ "gap statistics" или использование оценки "Davies-Bouldin index"), буду рад услышать ваше мнение!
krammnic
02.12.2024 20:16Ну наверное сошлюсь на: https://arxiv.org/abs/2212.12189
VRC, BIC и gap statistics, который вы уже назвали заходял неплохо. Но в общем случае проблема оптимального k не решена
DanilaX
02.12.2024 20:16Почему вы примеры кода не показали ?
IT_Crow Автор
02.12.2024 20:16Эта статья была нацелена на демонстрацию результатов исследования, а не на практическую часть с кодом. Моя цель заключалась в том, чтобы показать подход, логику анализа и интерпретацию результатов, сохраняя текст доступным для широкой аудитории.
Если вас интересуют технические детали или примеры кода, я готов поделиться ими отдельно. Возможно, стоит опубликовать дополнительный материал с подробным разбором шагов, включая код и обработку данных. Если это будет интересно читателям, я с удовольствием это сделаю!
Fardeadok
02.12.2024 20:16Какойто пиар курсовой работы
IT_Crow Автор
02.12.2024 20:16Понимаю, почему у вас могло возникнуть такое впечатление — стиль статьи действительно напоминает классическую структуру: задача, методы, результаты, выводы. Но цель была не «пиариться», а поделиться результатами анализа, которые, на мой взгляд, могут быть полезны для понимания структуры цен на рынке недвижимости.
AlexanderPohozhalov
02.12.2024 20:16Лет 6-8 назад тоже увлекался нейронными сетями для оценки недвижимости и прогнозирования её стоимости на примере г. Барнаула, там модель нейроимитатора сложнее была, т.е. отдельно рассматривались нейронные сети по типу недвижимости, площади, этажу, типу стен, расположению в городе, которые и давали итоговую оценку для новых объектов
Скажу одно, стоимость недвижимости всегда зависит в основном от площади, поэтому целесообразно сначала разбить выборку на кластеры по площади (студии, 1-комнатные, 2-комнатные и т.д.), а потом уже работать с нейронными сетями в каждом кластереНу и вообще там уравнение линейной регрессии по площади будет примерно на 90% обеспечивать достоверный расчет, возможно, нет смысла с нейронными сетями вообще возиться
Даже пару скринов нашел...
IT_Crow Автор
02.12.2024 20:16Вы правы, площадь — это один из ключевых факторов, влияющих на стоимость недвижимости. Однако задача, поставленная в этом анализе, отличалась от прогнозирования цены.
Моя цель была в том, чтобы выделить ценовые сегменты (кластеры), опираясь только на стоимость. Это позволило выявить основные группы объектов, отражающие структуру рынка. После проведения кластерного анализа я действительно изучал дополнительные переменные (площадь, этаж, район и т.д.) через корреляционный анализ, чтобы лучше понять природу полученных кластеров. Однако результаты этого этапа не вошли в данную статью, чтобы не перегружать её.
Разбиение по площади, которое вы предлагаете, — это интересный подход, особенно если целью было бы углубить сегментацию. Однако в моём случае изначальное разделение только по стоимости было продиктовано желанием исследовать ценовые категории, не привязываясь к другим характеристикам.
Что касается нейронных сетей: согласен, их применение для прогнозирования цены может быть избыточным, если доминирующий фактор, такой как площадь, уже покрывается линейной моделью. Но здесь задача была другой — изучить распределение цен, а не делать предсказания.
sergeiosipoff
Автор, вам не приходило в голову, что прежде чем решать задачу, её нужно сформулировать? Ответ на какой бизнес-вопрос вы пытались найти? Подозреваю, что на никакой
kompilainenn2
Может вся статья - это результат этого самого "машинного обучения"?
IT_Crow Автор
Спасибо за ваше внимание к статье и за желание уточнить детали. Однако ваш комментарий, похоже, основывается на недопонимании цели статьи.
Основная задача, описанная в статье, — анализ структуры цен на вторичное жильё в Липецке с помощью кластеризации. Это позволяет выделить ценовые сегменты, которые могут быть полезны как для конечных покупателей, так и для участников рынка недвижимости.
Да, я не ставил задачу ответа на конкретный "бизнес-вопрос" — потому что целью исследования было выявление закономерностей в данных. Такой подход часто используется на этапах предварительного анализа (EDA, exploratory data analysis), чтобы лучше понять структуру и особенности рынка.
Если говорить о применимости результатов, то данный анализ помогает определить, какие ценовые сегменты существуют в городе.
Если у вас есть идеи, как дополнить или расширить анализ, я буду рад услышать их. Однако голословные обвинения вроде "на никакой" только затрудняют конструктивное обсуждение.
sergeiosipoff
Если вы пытаетесь найти ценовые сегменты, то смотрите только на цену. Зачем вам другие параметры? Когда вы получили результаты "ценового сегментирования", вас не смутило, что ваши сегменты совершенно негоммогенны по цене? А то, что все сегменты пересекаются по цене не смутило? Какая вообще интерпретация может быть у ваших сегментов?
IT_Crow Автор
Я действительно проводил кластеризацию только по стоимости, с целью выделения ценовых сегментов на рынке недвижимости. Пересечение ценовых диапазонов между сегментами — это нормальное явление, которое может возникать в реальных данных, особенно на таком сложном рынке, как рынок недвижимости, где множество факторов может влиять на цену. Это пересечение показывает, что границы между ценовыми сегментами не всегда могут быть чёткими, и это вполне отражает специфику рынка.