Моделирование цен на недвижимость

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

API сайта Zillow

Zillow – это бесплатная веб-служба, которая отслеживает цены на недвижимость и с помощью собранной информации дает оценку стоимости других домов. Она анализирует группы похожих домов и на этой основе прогнозирует новое значение. Процедура напоминает ту, которой пользуются оценщики. На рис. 7.5 приведена часть страницы сайта Zillow, на которой показана информация о доме и оценка его стоимости.

Рис. 7.5. Страница сайта zillow.com

На наше счастье, сайт Zillow предоставляет API, позволяющий получить подробную информацию о доме и его оценочную стоимость. Этот API описан на странице http://www.zillow.com/howto/api/APIOverview.htm. Для доступа к API необходим ключ разработчика, который можно бесплатно получить на сайте. Сам API несложен – достаточно включить в URL все параметры поиска, обратиться к сайту с запросом и разобрать полученный в ответ XML-документ, выделив из него такую информацию, как число спален и оценочная стоимость. Создайте новый файл zillow.py и включите в него такой код: import xml.dom.minidom import urllib2

zwskey="X1-ZWz1chwxis15aj_9skq6"

Для разбора XML-документа мы воспользуемся библиотекой minidom. Функция getaddressdata получает на входе адрес и город и создает URL с запросом к Zillow. Затем она разбирает полученный ответ, выделяет из него существенную информацию и возвращает ее в виде кортежа. Добавьте эту функцию в файл zillow.py: def getaddressdata(address,city): escad=address.replace(‘ ‘,’ + ‘)

#       Создаем URL

url=’http://www.zillow.com/webservice/GetDeepSearchResults. htm?’ url+=’zws-id=%s&address=%s&citystatezip=%s’ % (zwskey,escad,city)

#       Разбираем возвращенный XML-документ

doc=xml.dom.minidom.parseString(urllib2.urlopen(url).read( )) code=doc.getElementsByTagName(‘code’)[0].firstChild.data

#       Код 0 означает успех; иначе произошла ошибка if code!=’0′: return None

#       Извлекаем информацию о данной недвижимости try:

zipcode=doc.getElementsByTagName(‘zipcode’)[0].firstChild.data use=doc.getElementsByTagName(‘useCode’)[0].firstChild.data year=doc.getElementsByTagName(‘yearBuilt’)[0].firstChild.data bath=doc.getElementsByTagName(‘bathrooms’)[0].firstChild.data bed=doc.getElementsByTagName(‘bedrooms’)[0].firstChild.data rooms=doc.getElementsByTagName(‘totalRooms’)[0].firstChild.data price=doc.getElementsByTagName(‘amount’)[0].firstChild.data except:

return None

return (zipcode,use,int(year),float(bath),int(bed),int(rooms),price) Возвращенный этой функцией кортеж можно поместить в список в качестве наблюдения, поскольку «результат» – группа цен – находится в конце. Чтобы воспользоваться этой функцией для генерирования всего набора данных, нам необходим список адресов. Можете составить его сами или скачать список случайно сгенерированных адресов для города Кембридж, штат Массачусетс, со страницы http://kiwitobes. com/addresslist.txt.

Добавьте функцию getpricelist, которая читает этот файл и генерирует список данных:

def getpricelist( ): l1=[]

for line in file(‘addresslist.txt’): data=getaddressdata(line.strip( ),’Cambridge,MA’) l1.append(data) return l1

С помощью этих функций можно создать набор данных и построить дерево решений. Сделайте это в интерактивном сеансе:

>>> import zillow

>>> housedata=zillow.getpricelist( ) >>> reload(treepredict)

>>> housetree=treepredict.buildtree(housedata,scoref=treepredict.variance) >>> treepredict.drawtree(housetree,’housetree.jpg’)

На рис. 7.6 изображен созданный в результат файл housetree.jpg.

Рис. 7.6. Дерево решений для цен на дома

Разумеется, если вам нужна только оценка стоимости конкретного дома, то можно просто воспользоваться API сайта Zillow. Но заметьте следующее: вы только что построили модель факторов, принимаемых в расчет при определении цен на недвижимость. Обратите внимание, что в корне дерева оказался параметр bathrooms (число ванных комнат). Это означает, что дисперсия уменьшается больше всего, если разбить набор данных по числу ванных комнат. Решающим фактором при определении цен на дом в Кембридже является то, есть ли в нем три или более ванных комнат (обычно это означает, что речь идет о большом доме на несколько семей).

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

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100