分析伯克利房价

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

这个项目已经被Yika Luo和Shashank Bhargava完成了,他们都是加州伯克利大学的学生。

十一月基本是秋季学期中最长的一个月了。白天变短,下午变冷,伴着秋雨开始落叶(开玩笑,在加利福尼亚州并没有秋天)。对于伯克利大学的大四学生,这是决定未来的最后期限了。大家谈论的都是面试、岗位、薪资这些事。获得工作后,大家又在考虑搬到另一个城市去。

伯克利的房租比捐赠的器官还要贵,而租到公寓比获得器官还要困难,所以很多人毕业后选择了旧金山。大量的高薪(相对)的工作者将旧金山的生活成本推送到了一个不可持续的高水平,这使得搬到一个新城市变成了一个困难的决定。

由于人们在城外寻找房租更合理的住房,旧金山上涨的房租对整个湾区造成了上行压力。像奥克兰、南旧金山和伯克利都出现了明显的租金上涨,与旧金山的房价走势相同。尤其是在伯克利,这对本就紧张的学生住房产生了复合效应,增加了整个城市学生的支出。伯克利有校外住宿的文化。学校的宿舍通常定价过高,学生们都会尽早的搬到自己的公寓。这引起了竞争激烈的公寓需求,从三月一直持续到八月,而高薪工程师给出高标价,并在学生主导房价的传统模式中逐渐占据主导权,这使得情况变得更糟。

我是在夏天开始这个项目的,当时我的一些朋友正在找房子。当时大家都是在Craigslist网站上创建一条信息,如果有符合自己要求的房源发布时,就会收到通知。做了一些准备后,我觉得研究房租趋势会更有趣,因为有大量的可用开源数据。所以,本文的内容是:我对伯克利租赁收集版块和Craigslist的租赁数据进行了分析,并利用两个来源的数据先分析了当前房产情况,再使用一些基本的机器学习工具分析促使房价上涨的原因。

总体房价走势

首先看一个伯克利房价的直方图。数据来自伯克利租赁收集版块,包含了伯克利从2014年开始租用的9143座已入住的公寓。图中显示的是公寓中每间屋子的平均价格与公寓数量的关系(假设所有公寓中的每间屋子平均价格相似)。

1.jpeg

我们可以清晰地看出数据大致呈正态分布,平均值约为1400美元,标准差约为200美元。

但是为了探索房价与时间的关系,这些数据还不够。那么,我们来看一下月份与租赁数量关系的直方图:

2.jpeg

哈,现在更有趣了。每年的五月左右会有一个租赁高峰,与伯克利的校历同步——每一学年在5月结束,学生需要为下一学期的生活做安排。数量一直下降到1月,然后以同样的规律上升。此外,我们注意到2015年的租赁数量明显的高于2014年,尽管趋势相同。

结合以上两个直方图中的信息,我们预计过去两年的总体房价有所上涨,并且5月至8月租金上涨。我们来证实一下:

3.jpeg

正如我们预期的,从5月开始的房租要比11月到1月要高。并且,每年6月或8月房租达到最高峰,这也证明了晚租的学生会对房价很失望,并愿意为不多的剩余住房支付更高的租金的事实。对比2014年至2016年同一个月的房价可以看出总体房价上涨的趋势。

现在,通过学生租房数据我们了解了整个伯克利租金上涨的情况。但是,并没有考虑到城市自身本地变化的影响。为了分析,我做了一张地图,通过地图我们可以知道伯克利不同地区的房租信息,还有距校园距离(假设从校园中各点计算的距离相等)、房屋平均面积(平方英尺)和平均卧室数量的信息。其余信息通过租赁收集版块与Craigslist的数据对比得出。大多数区域会有20%的重叠,所以这部分数据并不能代表这个区域,但可以作为一个有用的参考。

4.jpeg

我们可以看出,不同区域的房价有着明显差异。城市西部的房价最低,但平均面积最小,平均卧室数量也最少,表明一室一厅的公寓比例比其他地区更高。

最北部公寓虽然最大,但是与校园的距离最远。南部的平均租金很高,距离学校最近,它可能是最受欢迎的地区了。北部是最贵的,但是可能由于这里学生居住密度小(大多数工程师都住在北部)。

寻找固有价值

现在我们更好的了解了伯克利的租金价位,我们换一个研究方向,并提出一个更基本的问题:一套公寓的固有价值是多少?

根据经济学的理论,有关公寓的所有信息都包含在当前价格中,那么就没有这样的固有价值:人们愿意支付的价格(实际上也是股票技术分析的中心假设)。这个定义对我们并没有用,所以我提出了一个不同的定义。

一套公寓的固有价值是与其具有相同特征向量的另一所公寓的售价(这里特征是指平方英尺、浴室数量等)。

实际上这就是预测价格的问题!如果我们有一些训练集和一个在这些训练集上训练的机器学习模型,那么模型对给定公寓的价格预测就是这所公寓的固有价值(这里只通过特征对其价格进行估算)。然后,我们可以将公寓的实际价格与固有价值对比,判断是否被高估或低估。

实际上我就是这么做的。前几天,我在Craigslist上抓取了约1500条记录,并做了分析,然后用岭回归(Ridge Regression)模型来预测新发布公寓的价格。

为什么使用岭回归模型?

为什么用岭回归模型?明显的原因就是它的效果最好。在一个十折交叉验证测试中,岭回归给出了约42%的准确度和22%的标准差。我总共仅有7000条记录,这是一个相当小的训练集,其他更复杂的模型处理将会导致过拟合(事实确实如此:我尝试了三层神经网络模型和随机森林模型,效果都很糟糕)。

此外,还有一些原因。我使用这个模型是为了获取固有价值,而不是预测标价,所以我想要容易地了解影响最终价格的各个特征的数值,并保证固有价值不被模型的复杂性掩盖。例如,神经网络模型使分析固有价值变得相当困难,因为它掩盖了创建预测的信息组合的方式。与之对比,回归模型相当清晰:它使用线性代数为每个特征分配权重,并做了向量内积运算来生成每个预测。

特征

我在模型中使用的特征是:平方英尺、卧室数量、浴室数量、与校园距离(距离使用包围伯克利校园的边界盒子最近的边计算得出)、图片数量、描述中去重后的单词数和已发布天数。

决定价格最主要的因素是什么?

下面是模型中各个特征的权重:

1.jpeg

如何理解呢?例如,每增加一个浴室,标价就会增加约441美元。每增加一平方英尺,标价就会增加80美分。然而,与校园距离每增加一英里,标价会减少约82美元。这和前面地图中的数据基本符合。南部区域的租金比最南部的标价要贵约100美元,而与校园平均多出1.5英里。

可以注意到卧室的权重不太正常,因为具有卧室数量的房源数据很少。这也由于伯克利有少量高价的工作室房源(没有卧室)。最主要的原因是预测所基于的数据集太小。我计划在一个月内使用cron任务计划每天进行一次数据抓取,只要获取到新数据我就会更新本文。

为了进一步研究距离与价格的关系,我又创建了一个地图,地图显示了以校园为中心径向扩展的同心环的平均价格,大致可以认为同一同心环中公寓与校园距离都是相等的。

2.jpeg

正如我们看到的,有一个普遍的价格下降趋势,但实际并不是都是这样。一些外环的价格可能会比内环更高。这主要由于距离学校越远的公寓可能平均面积更大,更有可能含有多个浴室,这些因素比距离的影响更大(我们可以在权重表中查到)。

现在,我们选择一个任意的公寓,并找出它的固有价值,比如这个:

WechatIMG92.jpeg

我们对每个特征进行计算,并乘以对应的权重,然后汇总,得出预测价格为2507.84967859,这与标价相当接近(截图中只显示了部分信息)。然后,根据模型的预测,房价被低估,所以我们可以考虑租下它。

具体的房源特征

我们再讨论下特征。前几个特征很明显:卧室、浴室、平方英尺和与校园的距离。但后三个有点特殊:图片数量、描述中去重后的单词数和已发布天数。

发布信息中每增加一张图片,标价就会增加37美元。但这也解释的通:有更多的图片,表明对自己的公寓更有信心,所以租金更可能高(同时,租金低的房主并不想上传图片来展示公寓便宜的原因)。类似地,描述中每增加一个单词,标价就会上涨50美分,原因也很直观:房东相信自己的公寓更适合居住,所以使用更多的描述来证明。

而且,发布时间每增加一天价格就会高出8美元。这是人为影响的结果:越便宜的房源越抢手,所以只有贵的房源才长时间保留。

如何寻找价格被低估的公寓

我们已经阐述了关于固有价值的想法,创建了计算固有价值的模型,并了解了模型运行的方式与原因,终于我们可以解决这篇文章的根本动机了:如何找到Craigslist上价格低估的公寓?简单地说,如何捡到便宜?

从我们的分析中可以看出,发布时间是其价格的主要部分。如我们预料的,越便宜的房源越抢手。所以,下手要快!要经常的查看Craigslist,或者最好写个脚本抓取Craigslist,并返回有用的数据,确保尽早看到每一条发布信息。

寻找图片和描述较少的数据。虽然这些房源中很多质量都不太好,但不代表所有。以我的经验,有一些不懂如何招租的房东发布高质量的公寓(下一个任务就是找到他们)时,描述会很短并且有很多拼写错误,图片质量也不高,不足够吸引人。但是,价格会更低,公寓本身性价比也不错。

时间也是关键。我们知道,伯克利的房价在11月要比5月或8月便宜得多。如果能在低峰期使用上述方式来寻找房源,可以有一个更合算的交易。伯克利的租赁市场对季节变化很敏感,因为大部分租户为学生,他们对租房日期有着严格的需求,所以时间确实很重要。

根据我们了解的信息,最理想的交易策略是从11月开始不断检查Craigslist,寻找超出格式好、描述完整范围内的发布信息。换句话说,我的建议可以归结为从不懂如何出租的房东那里租用,他们不知道推动交易、形成引导的原因,这是一个好主意,在整个资本主义历史中也是这样。

代码

我们所有的代码都在Github上,下面是一个有点混乱的导航:

Craigslist的数据抓取代码在/Scraper/CragislistScraper中,生成的图表使用的是/Data/Raw/VisualizeRentCollectionData.ipynb。预测和回归代码为/Server/listingPrediction.py。地图使用的是谷歌地图。/Server/listings.json转存的是来自Craigslist的数据,/Server/training_data.csv是这些数据的向量化版本。而租赁版块数据为/Data/Raw/rent_collection_board.csv/Data/Raw/rent_collection_board_avg_ppr.csv

(请无视混杂在一起的下划线命名法语与驼峰命名法)


英文原文:http://aakashjapi.com/housing-prices-in-berkeley/
译者:爱生活没道理
 

2月15日11:00到13:00网站停机维护,13:00前恢复