【Python数据分析实战项目】之 住房月租金预测大数据赛分析|详解

竞赛界面

注:图片源于http://www.dcjingsai.com

完整源代码及训练测试集数据请使劲戳 ☛☛ https://github.com/Juuuusper/Housing-Rent-Prediction

—— —— ——  懒惰分界线 —— —— ——

小白第一次分享该类型,? 请多指教\( ̄︶ ̄*\))

—— —— ——  懒惰分界线 —— —— ——

Table of Contents

【Python数据分析实战项目】之 住房月租金预测大数据赛分析|详解

完整源代码及训练测试集数据请使劲戳 ☛☛ https://github.com/Juuuusper/Housing-Rent-Prediction

1.项目任务

1.1数据来源

1.2分析目的

1.3分析问题

2.项目步骤

2.1导入包

2.2数据读取

2.3数据处理

2.3.1 数据探索(EDA)

2.3.2 数据清洗

2.3.3 特征工程

2.4模型选择

2.4.1 LightGBM

2.4.2 XGBOOST

2.4.3 Meta-model Stacking

2.5 模型比较

3.结果分析


1.项目任务

1.1数据来源

  1. 本项目使用DC竞赛住房月租金预测大数据赛上提供的提供脱敏处理后的真实租房市场数据集进行分析
  2. 数据为某地4个月的房屋租赁价格以及房屋的基本信息。训练集为前3个月采集的数据,共196539条;测试集为第4个月采集的数据,相对于训练集,增加了“id”字段,为房屋的唯一id,且无“月租金”字段,其它字段与训练集相同,共56279条。
  3. 本项目对该数据集中的train及test两个csv数据文件进行分析
  4. 该数据集下载地址为:http://www.dcjingsai.com/

1.2分析目的

利用有月租金标签的历史数据建立不同模型,实现基于房屋基本信息的住房月租金预测,为该城市租房市场提供客观衡量标准。

1.3分析问题

本项目将以训练集数据作为样本训练模型,利用不同模型根据预测集数据进行租金预测,根据结果误差对不同模型性能进行比较,希望确定适用于住房月租金预测的模型,为我国的房地产行业带来一定程度的借鉴参考意义。

2.项目步骤

2.1导入包

 

2.2数据读取

为了方便查阅,本项目使用魔法命令(以%开始)将matplotlib图表直接嵌入在Notebook之中

用Pandas包的 read_csv()函数分别将文件train.csv和test.csv读入至对应的DataFrame变量中

 

显示trains的前5行数据

 

查看trains维度(形状)

查看trains的统计性描述信息

显示test的前10行数据

查看test维度(形状)

查看test的统计性描述信息

训练集测试集合并

2.3数据处理

2.3.1 数据探索(EDA)

1.用直方图画出每个变量,进行初步探索

其中连续变量有:小区名、距离、位置、租金、小区房屋出租数量、地铁站、总楼层,其余为离散变量。

同时发现,“租金”数值分布具有明显偏态,因此将在之后对其纠偏。

2.关联程度分析

对不同影响住房价格因素与房价的关联程度进行分析,通过关联图分析关联程度

用条形图可视化定性分析不同影响住房价格因素与房价的关联程度

用箱线图可视化定性分析不同楼层与卧室数与房价的分布

用箱线图可视化定性分析不同厅与卫数与房价的分布

绘制租房数量和价格的联合图,分析关联程度

绘制距离和价格的联合图,分析关联程度

绘制位置和价格的联合图,分析关联程度

计算各因素与价格的皮尔森系数定量分析相关程度

2.3.2 数据清洗

原始数据中含19个属性变量,且训练集和测试集数据特征不完全相同。因此先将训练集“租金”列以及测试集“id”列单独提出,保存,再将两个数据集合并,得到17个房屋特征。

1. 处理离群点

尝试分别画出17个房屋特征与“租金”的散点图。初步观察发现,“房屋面积”与“租金”的图中存在离群点,因此删去离群点

                                  

                                   a)删除前                                            b)删除后

2. 纠偏

在数据探查时发现“租金”数据具有明显偏态,对其进行纠偏

对数据进行空缺值统计,得到空缺比例如下:

3. 处理缺失值

对缺失值按照如下方法填补:

(1) “装修方式”以0填补,代表无装修

(2) “居住状态”空缺值众多,根据含义将其转化为0-1序列,0代表无人居住(空缺),1代表有人居住(非空缺),用于表示是否居住

(3) “出租方式”空缺值众多,且原数值含义不明,因此删除该列
(4) “地铁线”、“地铁站”、“距离”三列表示房屋附近地铁情况,根据数据类型不同,以“-1”填补前两列代表无地铁站、地铁线,以“2”填补距离列代表距离无限大(原数值已归一化)

(5)小区房屋出租数量含少量空缺,用平均值填补

(6) “位置”、“区”空缺值较少,且为类别型变量,以众数填补。

2.3.3 特征工程

特征工程指的是把原始数据转变为模型的训练数据的过程,它的目的就是获取更好的训练数据特征,使得机器学习模型逼近这个上限。特征工程能使得模型的性能得到提升,有时甚至在简单的模型上也能取得不错的效果。

根据原特征的含义,我们在原特征的基础上通过特征转换构建出了新的特征用于之后的模型训练与数值预测,具体方法如下:

a. 居室总数 = 卧室数量 + 厅的数量 + 卫的数量。为了避免四个变量线性相关,因此删除厅的数量。

b. 居室比例:卧室数量/厅的数量、卧室数量/卫的数量、厅的数量/卫的数量

c. 房屋朝向:由于房屋面积非数字且包含多个方向,因此将房屋面积转换成8个哑变量,分别代表房屋是否有东、西、南、北、东北、东南、西北、西南八个朝向

d. 平均租金:分别按照小区名、区、位置对房屋进行分组,求分组租金平均值,对应小区名、区、位置产生新的三个平均租金列

由于部分变量为类别型变量,因此将这类变量转换为字符串类型。再将预处理后的总数据集拆分成训练集和测试集,用于模型训练和预测。

2.4模型选择

我们需要根据17个特征值对住房月租金进行预测。这是一个回归问题。本文中我们先后尝试了以下几种不同的模型用于训练与预测,并选择了几种效果较优的模型进行模型融合,得到最终模型。

2.4.1 LightGBM

2.4.2 XGBOOST

2.4.3 Meta-model Stacking

Stacking是一种分层模型集成框架,通过元分类器或元回归聚合多个分类或回归模型。基础层次模型(level model)基于完整的训练集进行训练,然后元模型基于基础层次模型的输出进行训练。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为训练集进行再训练,从而得到完整的Stacking模型。

Meta-model Stacking算法:

1、将整个训练集分解成两个不相交的集合(这里是train和.holdout)。

2、在第一部分(train)上训练几个基本模型。

3、在第二个部分(holdout)上测试这些基本模型。

4、使用(3)中的预测(称为 out-of-fold 预测)作为输入,并将正确的标签(目标变量)作为输出来训练更高层次的学习模型称为元模型。

前三个步骤是迭代完成的。例如,如果我们采取5倍的fold,我们首先将训练数据分成5次。然后我们会做5次迭代。在每次迭代中,我们训练每个基础模型4倍,并预测剩余的fold(holdout fold)。

2.5 模型比较

算法通过计算预测值和真实房租月租金的均方根误差来衡量回归模型的优劣。均方根误差越小,说明回归模型越好。均方根误差计算公式如下:

式中  n—样本数;—预测月租金;X—实际月租金;

我们将训练集数据带入不同模型,得到预测结果并与原目标数据(租金)进行对比,计算出RMSE:

从结果可以看出模型预测效果: GBoost>xgboost>lightGMB> Enet\LASSO

于是选择GBoost、xgboost、lightGMB三个模型通过stacking算法进行融合,得到优化结果。

最后通过对单个模型计算RMSE,得到:LightGBM_RMSE为0.0372589;XGBoost_RMSE为0.1997769.

3.结果分析

本文将影响房价的因素指标作为输入变量,运用LightNGB和XGBoost两个模型进行建模,将预测结果和实际结果进行比较,然后再考虑调整输入变量的个数等特征工程和模型参数对模型进行优化,再次建模,得到新的预测结果。最后将多个模型的结果进行比较,得出结论,并对预测结果的实际意义进行解读。通过比较LightGBM模型和XGBoost序列模型的预测结果之间的误差,我们可以发现,LightGBM模型的预测结果误差最小,而XGBoost模型的预测结果误差较大,说明在房价的拟合上,LightGBM模型优于XGBoost模型。

从各个模型的预测结果和实际结果显示,房价依然呈上升趋势,我们应该认识到,对于一个稳定发展的经济体,房价的平稳上升是一个正常的现象,只要房价的增长幅度能和 GDP 的增长以及人民收入水平的提高保持基本的相同,那么可以认为房地产行业在一个合理的范围内运行,房价水平是人民可以承受的,但是当前我国房价显然远远高于我国的人民收入水平,普通工薪阶层往往要倾尽几代人的积蓄才能买房,使得人们必须减少日常消费来缩减开支,造成市场消费需求量的下降,经济体系过于依赖房地产行业,将导致整体消费不足,影响实体经济的健康发展,更多的年轻人因为无力支付高额的房价而选择离开一线城市,并且高额的房价也是导致一线城市生活成本上升的一个主要因素,这样的不利因素之下,越来越多的年轻人将不会选择留在一线城市发展,这将导致一线城市难以持续发展。

因此,我国政府也在一直致力于控制房价的过快上涨,以维持国民经济的健康运行,可以看出我国政府还是十分关注民生问题的。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐