摘要: 租房的烦恼,相信大家或多或少都有过。独自一人在大都市打拼,找个温暖的小窝实属不易,租个称心又价格公道的房子是件重要的事儿。 本文作者、阿里工程师鹿星,也是众多北漂中的一员。如何从各大租房网的房源里面,找到最称心如意的小窝?今天让鹿星带大家看看数据能不能做出最优选择。

租房的烦恼,相信大家或多或少都有过。独自一人在大都市打拼,找个温暖的小窝实属不易,租个称心又价格公道的房子是件重要的事儿。

本文作者、阿里工程师鹿星,也是众多北漂中的一员。如何从各大租房网的房源里面,找到最称心如意的小窝?今天让鹿星带大家看看数据能不能做出最优选择。文末有代码。

选择困难症

毕业到现在两年多了,一直住的自如合租房,但因为各种原因住处已经换过4次,每次换租都是一件头疼的事。从茫茫房海中找一间中意的房间,实在是一件费时费力的活,对于我这种买东西直奔目的地的人来说,在这么多房间里对比各种房间属性选出最优的根本就是一种折磨(这里不得不说一下自如网的选房功能,列表筛选无法准备知道房间地点,而地图找房功能的筛选项又太少,实在无法满足我的需求),所以我每次都是草草选一个,将就着住。

最近在经历了又一次换租后,我萌生了把自如所有在租的房间数据都爬下来,找出最符合我预期的房间的想法,制作好一套流程以后再要换租的时候就可以无脑操作了。

爬取数据

分析之前需要从自如网上爬数据,我用的是Python的Scrapy爬虫框架,但第一遍采集后发现房间数量要比自如网上能查到的数量少,找了下原因发现是自如的房间列表页中有些房间条目是js动态生成的,因为Scrapy没有js引擎,只能爬取静态页面,这部分数据自然就没采集下来。利用scrapy-splash来提供js渲染服务,最终完整采集到了所有在租的自如房间数据,共7907条。采集到的数据样例如下。每一行是一个json格式的字符串

{"floorTotal": "6", "rooms": "2", "lng": "116.422213", "direction": "南", "floorLoc": "5", "halls": "1", "rentType": "整", "time_unit": "每月", "title": "青年沟2居室", "privateBathroom": "0", "confStatus": "1", "district": "东城", "lat": "39.968073", "area": "64.17", "privateBalcony": "0", "confType": "", "link": "http://www.ziroom.com/z/vr/60563968.html", "confGen": "", "price": "6590", "nearestSubWayDist": "367"}
{"floorTotal": "18", "rooms": "3", "lng": "116.400737", "direction": "西", "floorLoc": "6", "halls": "1", "rentType": "合", "time_unit": "每月", "title": "望陶园小区3居室-02卧", "privateBathroom": "0", "confStatus": "1", "district": "东城", "lat": "39.870957", "area": "10.7", "privateBalcony": "0", "confType": "布丁", "link": "http://www.ziroom.com/z/vr/60570725.html", "confGen": "4.0", "price": "2490", "nearestSubWayDist": "517"}

租金的整体印象

我只关心合租房的数据,再做脏数据过滤,共得到4762条合租房数据。合租房房租的平均值和中位数非常接近,整体数据基本无偏,即低价位和高价位的房间数量差不多。

不同价格的房间数量分布如图1,基本符合正态分布。图 1 合租房不同价格区间的房间数量分布

神秘的最贵房间

从上图可以看到一间房超过了6000元,这勾起了我的好奇心,什么房间能这么贵。这间6290元月租金的房间链接是http://www.ziroom.com/z/vr/60558368.html ,如下图。除了紧邻西单商场其它属性都没什么突出的。去链家上看了一下这个西黄城根45号院,小区均价14.6万元/平米,好吧,似乎明白为啥这屋子这么贵了。

为了膜拜一下这个西黄城根45号院,我又在自如上搜了这个小区的所有在租房间,如下。突然发现好像就这间很贵,而其它房间价格虽然也不算低,但也不像这间这么离谱,有些房间的属性甚至看起来还比这间更好。这个房间总感觉是被自如标错价了,难不成它有什么隐藏属性(住进去每天精神值MAX)。

租金地图

房间价格在地图上的分布如图2。红色表示大于3000元/月的房间,绿色表示2000-3000元/月的房间,紫色表示小于2000元/月的房间。颜色越深表示同一个位置重叠有越多房屋,可见总体上北京北边比南边贵,东边比西边贵。而要想租到月租2000以下的房间,就得考虑去往五环之外了。图 2 合租房价格在地图上的分布

谁最重要?

接下来看一下自如对房间定价时考虑的因素主次。使用随机森林算法对房间每月租金进行预测,选取如下14个特征:房间面积、自如配置版本(1.0,2.0等)、配置类型(布丁、拿铁等)、朝向、房间所在楼层、房间所在楼的总楼层、离最近地铁站的距离、是否有独立阳台、是否有独立卫生间、几室、几厅、所在北京区县、相对天安门的方位角、与天安门的距离。对其中的自如配置版本、配置类型、朝向、所在北京区县这四个类别特征使用One-Hot Encoding进行编码,最终扩展为41个特征。使用2/3的数据训练模型,1/3的数据进行测试,在测试集上得到拟合优度R2=0.86,不同特征对租金的影响程度Top10如下:

可见所在方位、房间面积大小、交通方便程度、有没有独卫是影响房间租金的主要因素。话说以前我还一直觉得房间加上朝南的属性会更贵,现在看来好像是我的错觉?

终极目标

最后,回到本次分析的终极目标,找出最符合我预期的房间。我需要做的就是综合我自己的关注属性值对房间进行排序,我最关心的房间属性是[房间面积,房间租金,到公司的距离],这里我使用的是灰度关联分析法对房间进行打分,详细计算过程网上都有,这里我就不再罗列了。

首先我过滤掉属性值超出我心理预期范围的房间,将价格大于等于2200元/月,面积小于等于8m2的房间过滤掉。过滤后的数据集中选5条数据如下:

对这三个属性值无量纲化,这里我使用的是离差标准化,如下。标准化后x_i^,的取值范围为[0,1]。后数据如下:

然后设定最优序列,最理想的状态当然是房间面积最大,租金最小,到公司距离最近了。因此最优序列为[1,0,0],计算每个属性与最优序列相应属性之间的关联系数如下:由于我对不同属性的关注程度不同,因此这里需要设定每个属性的权重,权重值使用目标优化矩阵确定。因此房间面积权重为1/6,房间租金权重为1/3,到公司的距离权重为1/2,则每个房间的关联系数=房间面积关联系数/6+房间租金关联系数/3+到公司的距离关联系数/2,计算结果如下:

计算出所有房间的关联系数,从大到小排列后取Top10如下:

这下可以挑选房间的范围就大大缩小了,以后要是再租房感觉烦恼少好多。当然由于自如网上房间信息变动较快,随时都会有人下定,这套流程还得随租随用,不然筛选出房间后过个两三天再看,说不定房间早就被别人抢了。

来源:阿里技术

原文链接:https://yq.aliyun.com/articles/159509

如何解决租房烦恼? 阿里工程师写了一套神奇的代码相关推荐

  1. 如何解决租房烦恼?阿里工程师写了一套神奇的代码

    租房的烦恼,相信大家或多或少都有过.独自一人在大都市打拼,找个温暖的小窝实属不易,租个称心又价格公道的房子是件重要的事儿. 本文作者.阿里工程师鹿星,也是众多北漂中的一员.如何从各大租房网的房源里面, ...

  2. 阿里工程师谈,什么是好的代码?

    作者|马飞翔(泽畔) 出品|阿里巴巴新零售淘系技术部 导读:我们每天都与代码打交道,但当被问道什么是好的代码时,很多人可能会先愣一下,然后给出的回答要么比较空泛,要么比较散,没办法简单明了地概括出来. ...

  3. 阿里工程师谈,什么是好的代码

    导读:我们每天都与代码打交道,但当被问道什么是好的代码时,很多人可能会先愣一下,然后给出的回答要么比较空泛,要么比较散,没办法简单明了地概括出来.显然,这个问题并没有唯一的标准答案,谁都可以谈论自己的 ...

  4. Flutter路由管理代码这么长长长长长,阿里工程师怎么高效解决?(实用)

    背景: 在flutter的业务开发过程中,flutter侧会逐渐丰富自己的路由管理.一个轻量的路由管理本质上是页面标识(或页面路径)与页面实例的映射.本文基于dart注解提供了一个轻量路由管理方案.  ...

  5. 阿里工程师如何叫外卖?99%的人猜不到

    阿里妹导读:为了解决订餐的烦恼,来自高德的阿里工程师勤硕,用技术做了一个非常好玩的事情,希望能给你带来一些启发,让我们一起快乐工作.认真生活. 情景重现 "啪啪啪-",在一阵急促的 ...

  6. 1月4日云栖精选夜读:阿里工程师如何叫外卖?99%的人猜不到

    摘要: 为了解决订餐的烦恼,来自高德的阿里工程师勤硕,用技术做了一个非常好玩的事情,希望能给你带来一些启发,让我们一起快乐工作.认真生活. 为了解决订餐的烦恼,来自高德的阿里工程师勤硕,用技术做了一个 ...

  7. 亚马逊光缆被挖?——阿里工程师讲解支付宝如何架构设计数据中心

    文: 周瑜 校对:李二 全文2500字,建议阅读时长7分钟 点击右上角关注我们,每天都能收到有趣的推文哦. 亚马逊光缆被挖?--阿里工程师讲解支付宝如何架构设计数据中心 昨天科技圈最火的新闻应该是&q ...

  8. 《阿里工程师的自我修养》笔记

    对标行业精英,有太多值得学习的地方.当你觉得写了2年3年代码技术还是停滞不前的时候,是时候多学习下优秀的人的经验了. 以下是近日读<阿里工程师的自我修养>的笔记,有些概念性的东西是需要结合 ...

  9. 从业十余年的阿里工程师告诉你,敏捷开发的核心是什么?

    [数据猿导读] 工程师如何在控制性和创造性中找到平衡点?生产的严谨和创造的不严谨性怎么解决?来自阿里IoT事业部,具有超过10年无线通信行业从事技术研发工作的陶震,为您解答 作者 | 陶震 官网 | ...

最新文章

  1. 1057 Stack (30 分)【难度: 中 / 知识点: 树状数组 STL】
  2. 设置tomcat自动启动的相关脚本
  3. 美国0封伊朗已经6天了,伊石油出口真归零了吗?
  4. 软件测试之软件测试方法
  5. 【堆栈溢出】堆栈溢出_liangchaoxi的IT博客_新浪博客
  6. [论文写作-词汇] 这么多特别,该用哪个?special especial specific particular peculiar exceptional extraordinary
  7. 《人生七年》纪录片-个体心理学中的自卑与超越角度解读
  8. android-keystool
  9. 基于JSP的高校考试排座管理系统
  10. 兰博基尼推出全新混动超跑Revuelto
  11. 华为HCNA路由与交换eNSP实战(3)缺省路由
  12. EasyPusher安卓Android手机直播推送之RTSP流媒体协议流程
  13. 线上 2022 Apache IoTDB 物联网生态大会 | 倒计时2天!各方祝福温暖满满~
  14. 波尔原子模型:一段令人愉悦的历史
  15. java-php-python-ssm基于动漫论坛系统计算机毕业设计
  16. 驾驶员模拟考试系统mysql_2021驾驶员理论在线模拟考试系统
  17. 村庄规划中的GIS应用之地形分析
  18. 混沌相空间重构中求时延和嵌入维的matlab代码
  19. 多丽体质特膳,专为特殊人群精制的配方食物
  20. 【工业互联网】海尔集团数字科技赵光:工业互联网垂直行业的落地实践

热门文章

  1. 键盘鼠标是计算机标准输入输出设备,微型计算机输入输出设备之键盘和鼠标(ppt 32页).ppt...
  2. 支持大S,你一定要幸福!
  3. 梦幻西游 WSG 文件格式分析
  4. blender UV基础
  5. BOSS管账深度融合钉能力,打破业财数据壁垒实现数据互通
  6. 【大数据分析1】大数据基础理论
  7. 字符串数组大写小写互相转换
  8. 华为手机无线投屏到win10笔记本电脑
  9. 中文地址 识别 切分
  10. NDN命名网络工作机制和优点