Яка адекватна ціна квартири? Сьогодні спробуємо це визначити для Львова з допомогою методів лінійної регресії.
Дані взято з сайту dom.ria.ua, де є можливість конвертації даних в форматі таблиць Excel, які можна перетворити в .csv файли. Оскільки при перетворенні інформація неповна, то вибираємо лише такі дані як ціна, адреса (у деяких об'єктах вказано номер будинку), загальна площа, житлова площа, площа кухні, кількість кімнат, поверховість будинку та поверх, на якому розташована квартира. Детальніше про збір та підготовку даних тут.
Після очищення даних маємо дані про 776 об'єктів.
Ціна квартир:Після очищення даних маємо дані про 776 об'єктів.
Однокімнатні | Двокімнатні | Трикімнатні | |
---|---|---|---|
1 | Min. : 18000 | Min. : 25000 | Min. : 45000 |
2 | 1st Qu.: 35000 | 1st Qu.: 51250 | 1st Qu.: 65000 |
3 | Median : 40000 | Median : 62000 | Median : 77000 |
4 | Mean : 43623 | Mean : 66281 | Mean : 91338 |
5 | 3rd Qu.: 48000 | 3rd Qu.: 77012 | 3rd Qu.:105000 |
6 | Max. :380000 | Max. :180000 | Max. :427200 |
Площа:
Однокімнатні | Двокімнатні | Трикімнатні | |
---|---|---|---|
1 | Min. :20.00 | Min. : 33.00 | Min. : 48.00 |
2 | 1st Qu.:30.00 | 1st Qu.: 46.00 | 1st Qu.: 64.40 |
3 | Median :37.00 | Median : 53.00 | Median : 70.00 |
4 | Mean :36.78 | Mean : 56.08 | Mean : 77.32 |
5 | 3rd Qu.:42.00 | 3rd Qu.: 65.00 | 3rd Qu.: 87.00 |
6 | Max. :63.00 | Max. :162.30 | Max. :204.10 |
75% наявних на ринку нерухомості однокімнатних квартир має площу 30 - 42 кв.м, двокімнатних 46 - 65 кв.м., трикімнатних 64.40 - 87 кв.м.
Побудова моделі
Від чого залежить ціна?
В першу чергу, ціна квартири мала б залежати від загального метражу:
Дійсно, бачимо лінійну залежність (при збільшенні площі зростає і ціна). Особливо тісний взаємозв'язок приплощі квартир до 100 кв.м. та ціні до 100 тис. у.о. (далі йде покращений сегмент нерухомості, де визначальними стають інші фактори)
Площа кухні може виступати як індикатор типу квартири:
Тут більший розкид даних, але при площі до 18 кв.м. лінійна залежність теж виражена (хоча й слабше ніж при у випадку загальної площі).
Поверх та кількість поверхів у будівлі істотного впливу на ціну не мають:
Також, вплив на ціну повинна мати відстань до центру. Такої інформації сайт не надає, але знаючи адресу, її можна визначити використовуючи сервіси геокодінгу (Google Geocoding API).
Спочатку знайдемо координати об'єктів (в R можна використати пакет ggmap) та подивимось, чи є сенс шукати відстань:
Чим більша площа круга, тим більша ціна квартири, бачимо що при наближенні до центру площа кругів зростає. Отже, шукаємо відстань від центру (візьмемо в його якості площу Ринок) до кожного об'єкта. Для цього використовуємо функцію mapdist.
Так як функція використовує Google Geocoding API і має ліміт запитів, бажано зменшити цю кількість, тобто рахувати відстань лише для унікальних адрес, а також провести додаткову перевірку даних на наявність помилок у назвах вулиць.
Дана відстань є дещо умовною, оскільки не для всіх об'єктів вказані номери будинків і в такому випадку обрахунок ведеться від середини вулиці.
Побудуємо графік залежності ціни від відстані:
Сама по собі відстань теж не має визначального значення, але як видно із точок нанесених на карту у взаємодії з іншими факторами - має вплив.Протестуємо різні моделі лінійної регресії:
1. Залежність ціни від метражу квартири:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2506.22 2362.70 -1.061 0.289
Загальна.площа 1226.61 34.87 35.181 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 27280 on 776 degrees of freedom
Multiple R-squared: 0.6146, Adjusted R-squared: 0.6141
F-statistic: 1238 on 1 and 776 DF, p-value: < 2.2e-16
Ціна = 1226.6 * Загальна площа - 2506.22
Тобто при збільшенні загальної площі а 1 кв. м. ціна зростає на 1226.6 у.о.
2. Залежність ціни від всіх наявних факторів: загальної площі, житлової площі, площі кухні, поверху, кількості поверхів у будинку, та відстані до центру міста.
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7573.6 3670.0 2.064 0.03938 *
Кімнат -152.0 962.2 -0.158 0.87453
Поверх -408.1 480.0 -0.850 0.39548
Кількість.поверхів -571.0 449.8 -1.269 0.20469
Загальна.площа 997.4 110.3 9.046 < 2e-16 ***
Житлова.площа 218.2 131.7 1.657 0.09787 .
Кухня 882.9 337.9 2.613 0.00916 **
km -1891.0 419.5 -4.507 7.59e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 26420 on 770 degrees of freedom
Multiple R-squared: 0.6414, Adjusted R-squared: 0.6382
F-statistic: 196.8 on 7 and 770 DF, p-value: < 2.2e-16
Модель пояснює вже 64.14 % даних.
Статистично значимими є лише Загальна площа, Площа кухні та Відстань.
Формула ціни квартири наступна:
Ціна = -152 * Кімнат - 408* Поверх - 571* Кількість поверхів + 997 * Загальна площа(кв.м) + 218* Житлова площа(кв.м) + 882*Кухня(кв.м) -1891*Відстань до центру(км) + 7573.6.
Ціна метра квадратного загальної площі 997.4 у.о., кожен кілометр відстані до центру здешевлює квартиру на 1891 у.о.
Тут є нюанс - якщо будувати лінійну регресію даних, які між собою теж є залежними (це називається мультиколінеарністю), можемо отримати неправильну модель. Тому потрібно перевірити наші дані на наявність мультиколінеарності:
> cor(result)
Ціна Кімнат Поверх Кількість.поверхів Загальна.площа Житлова.площа Кухня km
Ціна 1.00000000 0.43321225 -0.037350713 -0.108448339 0.783986698 0.740139414 0.50859919 -0.20971676
Кімнат 0.43321225 1.00000000 0.052143270 -0.017640886 0.569052994 0.573413923 0.15621039 -0.04058194
Поверх -0.03735071 0.05214327 1.000000000 0.638519358 0.061522818 -0.009003004 0.05401902 0.28314707
Кількість.поверхів -0.10844834 -0.01764089 0.638519358 1.000000000 0.001428621 -0.105987820 0.04533394 0.43979990
Загальна.площа 0.78398670 0.56905299 0.061522818 0.001428621 1.000000000 0.920141866 0.59738005 -0.08794712
Житлова.площа 0.74013941 0.57341392 -0.009003004 -0.105987820 0.920141866 1.000000000 0.43502611 -0.14046088
Кухня 0.50859919 0.15621039 0.054019024 0.045333938 0.597380051 0.435026105 1.00000000 -0.08064636
km -0.20971676 -0.04058194 0.283147067 0.439799896 -0.087947119 -0.140460879 -0.08064636 1.00000000
Цілком очікувано має залежність між кількістю поверхів у будинки та номер поверху, на якому розташована квартира (коефіцієнт 0.638), а також загальної площі і житлової площі та кухні (0.92 і 0.597 відповідно). Можливі варіанти в цій ситуації - звести параметри, які корелюють до спільної змінної, або обрати один з них.
Зробити зведення можна за допомогою різних технік(наприклад Методу головних компонент), але в нашому випадку площа кухні та житлова площа є підмножинами загальної площі, тому для побудови моделі залишимо лише загальну площу. Обрати між змінними "Поверх" та "Кількість поверхів" складніше. Тому побудуємо обидві моделі і подивимось, яка дає кращий результат.
3. Залежність ціни від загальної площі, кількості кімнат, кількості поверхів та відстані від центру:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 12299.89 3217.16 3.823 0.000142 ***
Загальна.площа 1227.86 41.39 29.668 < 2e-16 ***
Кімнат -670.81 925.20 -0.725 0.468645
km -1997.43 419.20 -4.765 2.26e-06 ***
Кількість.поверхів -870.89 355.65 -2.449 0.014558 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 26510 on 773 degrees of freedom
Multiple R-squared: 0.6376, Adjusted R-squared: 0.6357
F-statistic: 340 on 4 and 773 DF, p-value: < 2.2e-16
Модель пояснює 63.76% даних, кількість кімнат не є статистично значимим показником.4. Залежність ціни від загальної площі, кількості кімнат, поверху та відстані від центру:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 10697.95 3028.79 3.532 0.000437 ***
Загальна.площа 1228.06 41.45 29.629 < 2e-16 ***
Кімнат -564.88 925.75 -0.610 0.541916
km -2206.44 393.27 -5.611 2.81e-08 ***
Поверх -829.86 386.80 -2.145 0.032229 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 26530 on 773 degrees of freedom
Multiple R-squared: 0.637, Adjusted R-squared: 0.6351
F-statistic: 339.1 on 4 and 773 DF, p-value: < 2.2e-16
Тут також кількість кімнат статистично незначима. Кількість пояснених даних 63.7%.Отже, будуємо кінцеву модель. В якості предікторів викристаємо лише статистично значимі змінні, які не корелюють між собою.
Це: Загальна площа, Відстань до центру та Кількість поверхів у будівлі.
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 11835.00 3151.65 3.755 0.000186 ***
Загальна.площа 1210.79 34.03 35.578 < 2e-16 ***
km -2004.70 418.95 -4.785 2.05e-06 ***
Кількість.поверхів -862.98 355.38 -2.428 0.015395 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 26500 on 774 degrees of freedom
Multiple R-squared: 0.6374, Adjusted R-squared: 0.636
F-statistic: 453.5 on 3 and 774 DF, p-value: < 2.2e-16
Ціна = 1210.79 * Загальна.площа -2004.70*км - 862.98* Кількість.поверхів + 11835;
Отже, кожен кв.м. площа збільшує ціну на 1210 у.о., кожен кілометр відстані здешевлює на 2004 у.о, тобто квартира, яка знаходиться в межах 5 кілометрів від центру (година пішки) буде коштуват на 10 тисяч у.о. дешевше ніж в центрі (за однакових інших умов).
Тестуємо:
Візьмемо інше джрело даних.
Наприклад, сайт http://www.real-estate.lviv.ua/
Вашингтона Дж. вул., Львів, Сихівський район
Продаж квартири: 519 545 грн
Ціна $: 65 000
1 кімнатна квартира
S загальна: 48 кв.м
S житлова : 24 кв.м
S кухні: 11 кв.м
Поверх: 2
Поверхів: 6
Згідно нашої моделі ціна 52360 у.о., крім того це квартира у новобудові з ремонтом та меблями. Дану ціну можна вважати адекватною.
Залізнична вул., Львів, Залізничний район
Продаж квартири: 319 720 грн
Ціна $: 40 000
2 кімнатна квартира
S загальна: 40 кв.м
S житлова : 32 кв.м
S кухні: 8 кв.м
Поверх: 1
Поверхів: 2
Згідно моделі ціна 52127 у. о. Крім того, стан квартири зазначений як відмінний. Тому дану пропозицію можна вважати цікавою.
Хорватська вул., Львів, Шевченківський район
Продаж квартири: 455 601 грн
Ціна $: 57 000
2 кімнатна квартира
S загальна: 59 кв.м
S житлова : 46 кв.м
S кухні: 7.5 кв.м
Поверх: 4
Поверхів: 4
Згідно моделі, дана квартира може коштувати 76053 у.о. Тобто пропозиція недооцінена на 20 000 у.о.
Бачимо, що модель не визначає точні значення. Але дозволяє мати приблизне уявлення про необхідні суми для придбання житла. Побудуємо графік залежності реальної та прогнозованої цін:
Бачимо, що згідно нашої моделі,є квартири значно недооцінені та значно переоцінені. Тому при купівлі квартири є сенс звернути увагу на недооцінені об'єкти.
Отже, застосовуючи метод лінійної регресії побудували модель визначення ціни квартири у Львові. Вона дозволяє визначити базову ціну квартири з врахуванням загальної площі житла, кількості поверхів у будинку та відстані від центру. Зрозуміло, що ця сума буде мінятись в залежності від житлового стану, віку будинку, матеріалу стін, наявності поблизу парків. Тому дану модель можна покращити, якщо додати всі ці параметри.
Зрозуміло, що на 100% точну модель прогнозу ціни побудувати неможливо, оскільки є ще параметри, які також впливають на ціну (неадекватні сусіди, неузгоджені перепланування і т. д.).
круто :)
ВідповістиВидалитиА там хіба всюди лінійна регресія? Бо на деяких графіках я явно спостеріг криву. Чи я чогось не зрозумів…
ВідповістиВидалитиА там точно всюди лінійна регресія? Бо якби крива - то уже множинною вважається. Чи я чогось не зрозумів?
ВідповістиВидалитиЛінійна залежність лише ціна - загальний метраж та ціна - площа кухні (при умові що площа кухні < 20 кв.м.)
ВідповістиВидалитиЦікава стаття! А чи можливо десь завантажити ваші дані?
ВідповістиВидалитиДані збирались ще у 2012 році у такий спосіб: http://energyfirefox.blogspot.com/2013/01/python.html
ВидалитиСам датасет, на жаль, не зберігся.