вівторок, 11 грудня 2012 р.

Скільки коштує квартира у Львові?


Яка адекватна ціна квартири? Сьогодні спробуємо це визначити для Львова з допомогою методів лінійної регресії.
Дані взято з сайту dom.ria.ua, де є можливість конвертації даних в форматі таблиць Excel, які можна перетворити в .csv файли. Оскільки при перетворенні інформація неповна, то вибираємо лише такі  дані як ціна, адреса (у деяких об'єктах вказано номер будинку), загальна площа, житлова площа, площа кухні, кількість кімнат, поверховість будинку та поверх, на якому розташована квартира. Детальніше про збір та підготовку даних тут.
Після очищення даних маємо дані про 776 об'єктів.


Ціна квартир:


ОднокімнатніДвокімнатніТрикімнатні
1Min. : 18000 Min. : 25000 Min. : 45000
21st Qu.: 35000 1st Qu.: 51250 1st Qu.: 65000
3Median : 40000 Median : 62000 Median : 77000
4Mean : 43623 Mean : 66281 Mean : 91338
53rd Qu.: 48000 3rd Qu.: 77012 3rd Qu.:105000
6Max. :380000 Max. :180000 Max. :427200


Тобто, 75% однокімнатних квартир коштують від 35 до 48 тис. у. о., 75% двокімнатних - від 51 до 77 тис. у.о, а 75 % трикімнатних від 65 до 105 тис. у.о.

Площа:



ОднокімнатніДвокімнатніТрикімнатні
1Min. :20.00 Min. : 33.00 Min. : 48.00
21st Qu.:30.00 1st Qu.: 46.00 1st Qu.: 64.40
3Median :37.00 Median : 53.00 Median : 70.00
4Mean :36.78 Mean : 56.08 Mean : 77.32
53rd Qu.:42.00 3rd Qu.: 65.00 3rd Qu.: 87.00
6Max. :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% точну модель прогнозу ціни побудувати неможливо, оскільки є ще параметри, які також впливають на ціну (неадекватні сусіди, неузгоджені перепланування і т. д.).

7 коментарів:

  1. А там хіба всюди лінійна регресія? Бо на деяких графіках я явно спостеріг криву. Чи я чогось не зрозумів…

    ВідповістиВидалити
  2. А там точно всюди лінійна регресія? Бо якби крива - то уже множинною вважається. Чи я чогось не зрозумів?

    ВідповістиВидалити
  3. Лінійна залежність лише ціна - загальний метраж та ціна - площа кухні (при умові що площа кухні < 20 кв.м.)

    ВідповістиВидалити
  4. Цікава стаття! А чи можливо десь завантажити ваші дані?

    ВідповістиВидалити
    Відповіді
    1. Дані збирались ще у 2012 році у такий спосіб: http://energyfirefox.blogspot.com/2013/01/python.html
      Сам датасет, на жаль, не зберігся.

      Видалити