【数据挖掘】公寓住房月租金预测

一、项目任务

1、数据来源

该数据及是是一个预测公寓租金竞赛数据,数据来自Kaggle。

通过在互联网上发布的公寓信息,如:房间布局、数量、文字描述、照片、价格等,预测公寓租金。公寓均位于纽约市。

数据为预测公寓租金竞赛数据:http://dataju.cn/Dataju/web/datasetInstanceDetail/337

2、分析目的

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

3、分析问题

本项目将以训练集数据作为样本训练模型,利用不同模型根据预测集数据进行租金预测,根据结果误差对不同模型性能进行比较,希望确定适用于住房月租金预测的模型,

为我国的房地产行业带来一定程度的借鉴参考意义。

二、项目分析

1、数据读取

看一下训练数据train.csv

train_data.describe()

再看一下测试数据test.csv

test_data.describe()

2、数据探索(EDA)

偏度值:可以用来度量随机变量概率分布的不对称性。

峰度值:可以用来度量随机变量概率分布的陡峭程度。

(1)查看租金分布曲线,画出曲线分布图和租金散点图

首先观察租金数据,可以看到此数据是符合正态分布的,但是偏度值过大,我们发现了一条大尾巴,“租金”数值分布具有明显偏态,因此将在之后对其纠偏。

(2)查看公寓各个属性的数据直方图

接下来再看一看一些比较重要的属性对结果的影响

直方图是为了表明数据分布情况。通俗地说就是哪一块数据所占比例或者出现次数较高,哪一块出现概率低,下图是18个属性所出现的情况

其中连续变量有:小区名(Cname)、小区房屋出租数量(rent_quantity)、总楼层(total_floors)、位置(position)、地铁站(subway_station)、距离(distance)、租金(rent),其余为离散变量。

(3)对于离散型变量,我们用boxplot来表示(箱图)

离散变量有:时间(time)、层数(floor)、房屋面积(space)、房屋状态(state)、卧室数(bedroom_num)、客厅数(hall_num)、厕所数(toilet_num)、

出租方式(rent_style)、区(area)、地铁线(subway_line)、装修状况(decoration_situation)。

卧室数与租金的箱图

客厅数与租金的箱图

厕所数与租金的箱图

区(area)与地铁线(subway_line)的箱图

(4)关联程度分析

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

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

(4)查看缺失数据

3、数据清理

由于数据可能是不完全的、有噪声的、随机的,有复杂的数据结构,就要对数据进行初步的整理,清洗不完全的数据,做初步的描述分析,选择与数据挖掘有关的变量,或者转变变量。

(1)离群点处理

此图为房屋面积与租金之间的关系散点图,按照常理,面积越大的房屋,租金会相对较高,但是有几个点明显偏离,故需要删除离群点

删除面积大于0.2的数据,再删除面积大于0.125租金小于20的数据

(2)纠偏

原始的数据情况:

正态分布变换:后面的尾巴过长,需要进行纠偏(数据对数变换)

(3)处理缺失值

查看一下缺失值,total为缺失数,ratio为缺失比例。

 

对于缺失数据过大的属性,可以选择舍弃,对于缺失较小的属性数据可以进行填补:

(1) 缺失过大的数据直接删除(decoration situation、state、rent_style)

all_data.drop(['decoration situation'], axis=1, inplace=True)
all_data.drop(['state'], axis=1, inplace=True)
all_data.drop(['rent_style'], axis=1, inplace=True)


(2) “地铁线”、“地铁站”、“距离”三列表示房屋附近地铁情况,根据数据类型不同,以“1”填补距离列代表距离无限大,以“0”填补前两列代表无地铁站、地铁线

all_data["distance"]=all_data["distance"].fillna(1)
all_data["subway_line"]=all_data["subway_line"].fillna(0)
all_data["subway_station"]=all_data["subway_station"].fillna(0)

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

mean_val = all_data["rent_quantity"].mean()
all_data["rent_quantity"] = all_data["rent_quantity"].fillna(mean_val)

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

mode_area = all_data["area"].mode()
mode_position = all_data["position"].mode()
all_data["area"] = all_data["area"].fillna(int(mode_area))
all_data["position"] = all_data["position"].fillna(int(mode_position))

处理后的结果

4、特征工程

特征工程指的是把原始数据转变为模型的训练数据的过程,它的目的就是获取更好的训练数据特征,使得机器学习模型逼近这个上限。

特征工程能使得模型的性能得到提升,有时甚至在简单的模型上也能取得不错的效果。

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

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

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

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

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

 

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

5、模型选择

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

(1)LightGBM

(2)XGBoost

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

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

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

6、结果分析

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

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

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值