2019h1深圳二手楼市热度如何?(数据爬取、分析&建模)
一、数据爬取
1.1 多进程爬取2w+深圳已成交二手房数据
具体步骤省略(阅读时可跳过此处,具体内容及代码欢迎查阅&fork:https://www.kesci.com/home/project/5d5e4ca78499bc002c05b75e)
- 注意代码应记录或提示爬取出错的相关信息,以便查询。
- 注意异常处理,以免程序假死或失败。
二、数据分析
2.1 数据清洗与初探
具体步骤省略(阅读时可跳过此处,具体内容及代码欢迎查阅&fork:https://www.kesci.com/home/project/5d5e4ca78499bc002c05b75e)
(1) 数据清洗
- 去除无用字段、提取字段信息、字段数值化等等后,数据集的基本信息如下:
- 在部分数值字段描述中发现异常:
可以发现建成年代最大值存在异常,竟然有二手楼盘是2058年建成!
于是先找到建成年代大于等于2020年的楼盘,如下:
直接查询同名楼盘建成年代众数来填补错误,并检查。
(2) 数据初探
- 数据整体房源分布、成交单价初探:
- 用powermap可视化二手房源位置及区域平均单价:
显然近香港的罗湖区、福田区、南山区成交楼盘最为密集,价格也最高。
- 查看整体数据中,挂牌和成交时间分布直方图:
可以发现2015上半年及之前基本没有挂牌信息,爬取的数据主要集中在2018及2019年。
我们会简单对比2019和2018上半年情况,并着重分析2019h1的房源情况。
2.2 分析深圳2019上半年二手楼市
(1) 2019上半年深圳二手房成交情况总览
- 2019上半年部分数值字段描述:
2019上半年共成交8802套二手房,平均成交价390.658259,平均成交单价5.512047,平均成交周期126.419791,平均建筑面积70.323028。
- 2019h1深圳二手房成交量日历图:
用pyechart作成交量日历图,观察到三、四月成交较多,且周日、周一比较火热。
3.各区成交单价箱型图:
成交单价方面南山区首屈一指,而宝安区已超过了中心区域的罗湖区。
(2) 对比2018/2019上半年楼市,其热度有什么变化?
- 首先提取2018年上半年(1.1~6.30)成交数据,看一下部分字段描述:
2018年上半年,共成交4813个楼盘,而2019h1成交数是8802,两者差别较大。
2018年上半年 浏览、建成年代 略有缺失,套内面积 缺失严重,若需建模需考虑填补或舍去。
- 通过powermap观察2018h1、2019h1二手房成交分布情况差异:
由图可以发现2018上半年缺失龙岗区的成交记录,验证数据后发现确实如此(略)。
所以在和2018h1对比时,2019h1应剔除龙岗区的成交记录。单独讨论2019h1时则使用其全部数据。
- 提取2019年上半年(1.1~6.30)成交数据(除龙岗区),看一下整体描述:
2019年上半年(除龙岗区),共成交6813个楼盘。
浏览、建成年代略有缺失,套内面积缺失严重,若需建模需考虑填补或舍去。
- 对比2018h1和2019h1(除龙岗区):
图1. 楼盘成交周期分布更加平缓,19上半年卖出的房源,挂牌时间往往更久。
图2. 成交楼盘中户型成交倾向由原来70-80平,改为80-90平,意味着成交价格更高。
图3. 成交价、单价等价格相关均有不同程度上涨。
另外,带看量 和 浏览数 明显增加,可能体现了热度的增长,但主要和网站用户量和数据收集情况有关,仅可参考。
简评:
虽然19年上半年房价高企,但大家却倾向于买更大建筑面积楼盘,可见资金仍然比较充足,土豪或加杠杆的人数仍比较多。
另外楼盘平均成交周期增长,可能体现了买家相较过去更为谨慎。
目前来看,2019上半年深圳楼市"似乎"还是相当火热!
(3) 对比2018/2019上半年楼市,加价/减价成交情况有何变化?
- 2019上半年(除龙岗区)成交二手房加减价比例:
从图中了解到加价成交占总体成交5.02%,减价成交占87.42%
- 2018上半年成交二手房加减价比例:
我们再参考一下2018h1的情况,发现18年上半年减价成交占比更少,加价成交占比更多。
- 2018h1/2019h1(除龙岗区)成交加减价情况:
由图可知,2019h1(除龙岗区)加价成交幅度略增,减价成交的幅度增加明显。
另外,2019h1(除龙岗区)的楼盘成交平均要降价15.78万。
- 2019h1各区成交平均降价幅度:
其中南山区、宝安区、龙华区这三个成交量居中的区域,平均降价幅度最大。
另外我们再观察各区域降价情况,南山区这样比较不错的地段,平均降价30万+才能成交。
无论如何,在出价策略长期不变的情况下,可见出价者和求购者的认知存在偏差。
(4) 2019上半年哪类房子比较好卖?(成交数量多)
ps:为缩减篇幅只分析一部分较有价值的属性。
- 2019h1、2018h1建筑面积kde图:
由图可知40平左右小户型和80平左右中户型比较好卖。
- 房屋朝向成交量、成交价、成交单价关系图:
朝向南或北的房子好卖,但同时朝南北却卖得不是很多。
由图或查看数据可知:虽然南北朝向平均单价不高,但可能面积较大,成交总价较高,令人生畏。
- 户型、装修成交情况:
成交数前5的户型中,前三名是"2室1厅1厨1卫",“1室1厅1厨1卫”,“2室2厅1厨1卫”。看来还是主流户型(性价比高)比较好卖呀!
精装房最受欢迎。毛坯成交量最少,查阅数据可知其平均单价倒数第二,但平均总价却最高。
- 区域成交量:
罗湖区、龙岗区二手房最好卖。
- 楼层数分布及楼层位置成交情况:
楼盘总层数为7层或32层左右比较好卖
房屋在中层比较好卖,高层太吓人,底层阳光少,视野窄。
- 是否配电梯及梯户比例成交情况:
这年头都是高楼大厦,没电梯简直难于上青天。其中一梯四户,一梯两户,两梯四户比较好卖。
- 建成年代成交量分布图:
2000~2008左右建成的房子成交量较多
(5) 其他
- WordCloud-楼盘热度:
哪些是热门楼盘?
- 下图是部分字段的相关系数热力图,我们会发现:
(1)成交周期和调价存在弱相关性。
(2)关注数和带看次数有一定相关性,但关注数和带看次数并没有和成交周期形成负相关。
(3)浏览数和关注数没有多大关系,所以这方面数据仅供参考。
(4)有趣的是,浏览数最高达到532127的楼盘,成交周期还是要112天,估计是业主做了推广,但仍没有很快成交。
- tableau仪表盘:
https://public.tableau.com/views/2019_15670928250750/1?:embed=y&:display_count=yes&:origin=viz_share_link
2.3 分析总结
- 通过上面的分析,我们了解到深圳2019h1的二手楼市,同比2018h1,2019h1的房价依然稳中有进,较为火热,但平均成交周期更长,减价成交比例增加,买卖方认知差异拉大,买方更加谨慎。
- 所以如果想卖得更快,早点变现,可以先考察一下自己房子属性如何,如果优势不大则适当减价吧。
- 想起今年的一句流行言论:“2019可能是过去10年最差的一年,但也是未来10年最好的一年。”面对可能出现变局的房地产市场,我们能做的就是持续关注,做好功课,免得决策失误,拍断大腿!
欢迎查阅本篇代码完整版:https://www.kesci.com/home/project/5d5e4ca78499bc002c05b75e
三、数据建模
该部分会省略大量代码,具体内容请查看代码完整版。
3.1 特征选取
(1) 维度拓展(POI内容获取)
通过百度地图api,获取相关经纬度500m,1000m,2000m范围内所需poi数量内容:
(经纬度用于 1.poi数据获取 2.merge原数据集和poi数据集)
(2) 原数据集字段选取
根据3.5中关系热力图的去除对成交单价影响较小字段。
去除缺失较多或可替代的字段。
数据集中交易权属都为商品房,暂时去除;梯户比例种类繁杂且较集中于几种,暂不加入。
(3) 合成建模数据集
3.2 数据预处理&查看
(1) 数据预处理函数构建
分别构建以下数据预处理函数:
- 空值处理函数 - 利用同经纬度楼盘信息填补,若无相关信息则用整体众数填充。
- 异常值查看和处理函数 - 3倍iqr范围异常值去除
- 房屋户型哑变量获取函数
- 房屋朝向哑变量获取函数
- 其他哑变量获取函数
(2) 数据预处理并查看
- 首先对【‘户型结构’,‘建筑类型’,‘建成年代’,‘配备电梯’,‘房权所属’,‘产权年限’】填充空值
- 通过箱型图查看一下最终会保留的连续值字段异常值情况,并处理异常值,此处我们用3倍iqr:
- 房屋户型 哑变量获取
- 房屋朝向 哑变量获取
- 其他哑变量获取 - 【‘所在楼层’,‘户型结构’,‘建筑类型’,‘装修情况’,‘配备电梯’,‘房屋用途’,‘房权所属’】
- 观察之前箱型图字段的分布情况,偏态情况减小:
3.3 训练模型
(1) 数据准备
- 准备训练集、测试集,分别拆分出xtrain,ytrain,xtest,ytest
- 定义k折交叉拆分器 - 用于网格搜索
- 定义回归模型性能查看函数
(2) lasso回归模型
此处用到LassoCV(可自动通过Cross Validation搜索最佳正则系数alpha),性能情况如下:
最佳alpha值: 0.1
train :
mean squared error is: 5866.1306605690725
mean absolute error is: 52.63572482286287
R Squared is: 0.8142003463697659
mean absolute percent error is: 0.15272275854277395
test :
mean squared error is: 6940.790079075325
mean absolute error is: 56.64143852727948
R Squared is: 0.7837884925316358
mean absolute percent error is: 0.16194771064655833
可见mae > 50w+,预测结果不理想。
(3) 随机森林回归模型
定义RandomForestRegressor随机森林回归模型并进行网格搜索,性能情况如下:
最佳alpha值: {‘max_depth’: 10, ‘max_features’: ‘auto’, ‘n_estimators’: 500}
train :
mean squared error is: 1418.8145215140926
mean absolute error is: 24.641916388425237
R Squared is: 0.9550614771616268
mean absolute percent error is: 0.06822412461801346
test :
mean squared error is: 3337.751860311248
mean absolute error is: 35.17980895328542
R Squared is: 0.896026193984911
mean absolute percent error is: 0.09469746708246876
mae降到了30w左右。
(4) xgboost模型
定义xgboost模型并进行网格搜索,性能情况如下:
{‘colsample_bytree’: 0.6, ‘max_depth’: 6, ‘n_estimators’: 1000, ‘reg_alpha’: 0, ‘subsample’: 0.6}
train :
mean squared error is: 159.2255553231461
mean absolute error is: 9.285820319259521
R Squared is: 0.9949568029183222
mean absolute percent error is: 0.028887646995371632
test :
mean squared error is: 1962.5934603322894
mean absolute error is: 24.419883692583003
R Squared is: 0.9388635464015461
mean absolute percent error is: 0.06388880018075778
mae降到了20w+。
(5) 集成调优
-
这里我们首先获取xgboost模型各特征重要程度数值:
-
以重要程度中位数以上选取特征名称:
[‘经度’, ‘纬度’, ‘建筑面积’, ‘建成年代’, ‘楼层数’, ‘地铁站_500m’, ‘地铁站_1000m’, ‘地铁站_2000m’, ‘公交车站_500m’, ‘三甲医院_2000m’, ‘小学_500m’, ‘小学_1000m’, ‘小学_2000m’, ‘室’, ‘厅’, ‘卫’, ‘房屋朝向_南’, ‘房屋朝向_东’, ‘房屋朝向_北’, ‘所在楼层_中楼层’, ‘所在楼层_低楼层’, ‘所在楼层_高楼层’, ‘建筑类型_塔楼’, ‘装修情况_其他’, ‘装修情况_简装’, ‘装修情况_精装’, ‘房权所属_共有’, ‘ensemble_rf’, ‘成交价’] -
原数据集集成随机森林预测结果 并 根据重要特征列表筛选数据集,生成xxtrain,xxtest,yytrain,yytest
-
重新定义xgboost模型并进行网格搜索,性能情况如下:
{‘colsample_bytree’: 0.6, ‘max_depth’: 6, ‘n_estimators’: 1000, ‘reg_alpha’: 0, ‘subsample’: 0.9}
train :
mean squared error is: 89.51619788727905
mean absolute error is: 7.000624772614124
R Squared is: 0.9971662290176454
mean absolute percent error is: 0.022116629050790163
test :
mean squared error is: 1105.3433054824618
mean absolute error is: 19.5376985707211
R Squared is: 0.9654939961043317
mean absolute percent error is: 0.052662943951393294
mae降到了20w以下,总体性能不断提升。
3.4 建模总结
-
本次建模,我们对数据集进行了POI兴趣点数据扩充。
-
使用了lasso回归模型(线性回归)、随机森林回归模型、xgboost模型及基于xgboost的集成学习模型。
-
虽然用于训练的数据集只有8k左右,但模型成交价预测的MAE(平均绝对误差),从50w+最终控制在了20w以内,体现出集成学习的优势。
-
在模型调优方面,特征补充、预处理、参数调优和集成学习等步骤还有很多空间。
-
其中最重要的是 特征补充 和 数据预处理,对预测性能影响很大。
-
另外,扩充数据集也会带来很大帮助。
-
最后,如果真要卖房子,适当提点价,好歹留点讲价空间。