说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。
1.项目背景
房地产不仅是国民经济的支柱产业,更和民生问题密不可分,随着房产越炒越热,人们对于房价的关注度也持续变高,因此能够较为精准地对房价进行预测也变得越来越有意义。房价作为多指标影响因子,不仅受时间,区域的影响,房屋年龄、附近地理条件、人文、交通等等因素也同样会对房价产生不同程度的影响。本项目提出一种基于集成学习的房价预测模型:LightGBM回归模型,使用LGBMRegressor算法。
2.数据获取
本次建模数据来源于网络(本项目撰写人整理而成),数据项统计如下:
编号 |
变量名称 |
描述 |
1 |
MSSubClass |
销售中涉及的住房类型 |
2 |
MSZoning |
销售的一般分区分类 |
3 |
LotFrontage |
与房子相连的街道线性脚 |
4 |
LotArea |
平方英尺的地段大小 |
5 |
Street |
进入房子的道路类型 |
6 |
Alley |
进入房子的胡同类型 |
7 |
LotShape |
房子的一般形状 |
8 |
LandContour |
房子的平整性 |
…… |
||
9 |
SalePrice |
销售价格 目标变量 |
上述表格罗列了部分属性进行展示。
数据详情如下(部分展示):
3.数据预处理
真实数据中可能包含了大量的缺失值和噪音数据或人工录入错误导致有异常点存在,非常不利于算法模型的训练。数据清洗的结果是对各种脏数据进行对应方式的处理,得到标准的、干净的、连续的数据,提供给数据统计、数据挖掘等使用。数据预处理通常包含数据清洗、归约、聚合、转换、抽样等方式,数据预处理质量决定了后续数据分析挖掘及建模工作的精度和泛化价值。以下简要介绍数据预处理工作中主要的预处理方法:
3.1 用Pandas工具查看数据
使用Pandas工具的head()方法查看前五行数据:
从上图可以看到,总共有81个字段:特征变量79个,其中Id只是一个索引,建模时我们要去掉它;另外,此数据集中有很多缺失数据。
关键代码:
3.2计算每个特征缺失值的百分比
使用Pandas工具的isna() mean()方法计算每个特征缺失数据的百分比:计算出数据缺失超过50%的特征变量:
从上图可以看到,总共有5个特征变量数据缺失超过80%,接下来本项目中将会删掉这些特征变量,不参与后面的建模。
关键代码:
3.3区分数值型特征和分类型特征
通过Pandas工具的select_dtypes()方法来选择区分数值型特征和分类型特征,分类型特征需要进行相应的处理,以满足机器建模的需要。
分类型特征如下:
数值型特征如下:
关键代码如下:
3.4特征变量空值情况统计
通过上图可以看到,一些字段存在空值:针对
'BsmtQual','BsmtCond','BsmtExposure','BsmtFinType1','BsmtFinType2','GarageType','GarageFinish','GarageQual','FireplaceQu','GarageCond' 这些字段用”None”值填充。
针对'MSZoning', 'Utilities', 'Exterior1st', 'Exterior2nd', 'MasVnrType', 'Electrical', 'KitchenQual','Functional', 'SaleType' 这些字段用本数据项最频繁的数值进行填充。
关键代码如下:
4.探索性数据分析
4.1 Utilities特征分布分析
用Pandas工具的value_counts().plot()方法进行统计绘图,输出结果如下:
图形化展示如下:
从上面两个图中可以看到,分类为AllPub的有1459条,分类为NoSeWa的有1条,数据偏差非常大。
4.2 Street特征分布分析
从上面两个图中可以看到,分类为Pave的有1454条,分类为Grvl的有6条,数据偏差非常大。
4.3 Condition2特征分布分析
从上面两个图中可以看到,分类为Norm的有1445条,为其它类型的非常少,数据偏差非常大。
4.4 RoofMatl特征分布分析
从上面两个图中可以看到,分类为CompShg的有1434条,为其它类型的非常少,数据偏差非常大。
4.5 Heating特征分布分析
从上面两个图中可以看到,分类为GasA的有1428条,为其它类型的非常少,数据偏差非常大。
4.6 房屋年龄的描述性统计分析
首先通过YrSold和YearBuilt构造出房屋的年龄,然后通过Pandas工具的describe()方法进行描述性统计分析:
从上图可以看到房屋年龄最小不到1年,最大136年,平均年龄在36年左右。
4.7构造 TotalBsmtBath TotalBath TotalSA特征
通过Pandas工具的head()方法进行查看如下:
4.8分类特征的处理
特征的处理分为两类:一种是有序的特征,针对这种特征直接进行数值的映射;另一种是编码类别特征,针对这种特征进行One Hot编码处理;处理结果如下:
5.特征工程
5.1 建立特征数据和标签数据
SalePrice为标签数据,除 SalePrice之外的为特征数据。关键代码如下:
5.2 数据集拆分
训练集拆分,分为训练集和验证集,70%训练集和30%验证集。关键代码如下:
6.构建lightgbm回归模型
主要使用LGBMRegressor算法,用于目标回归。
6.1模型参数
编号 |
模型名称 |
参数 |
1 |
Lightgbm回归模型 |
objective='regression' |
2 |
num_leaves=4 |
|
3 |
learning_rate=0.01 |
|
4 |
n_estimators=12000 |
|
5 |
max_bin=200 |
|
6 |
bagging_fraction=0.75 |
|
7 |
bagging_freq=5 |
|
8 |
bagging_seed=7 |
|
9 |
feature_fraction=0.4 |
关键代码如下:
7.模型评估
7.1评估指标及结果
评估指标主要包括可解释方差值、平均绝对误差、均方误差、R方值等等。
模型名称 |
指标名称 |
指标值 |
测试集 |
||
Lightgbm回归模型 |
可解释方差值 |
0.89 |
平均绝对误差 |
15732.75 |
|
均方误差 |
750967526.17 |
|
R方 |
0.89 |
从上表可以看出,R方为89% 可解释方差值为89%,lightgbm回归模型比较优秀,效果非常好。
关键代码如下:
7.2 模型特征重要性
由于特征比较多,选取前20个特征进行绘图展示:
从上图可以看到特征变量对此模型的重要性依次为:TotalSA、LotArea、1stFlrSF、GarageArea、TotalBsmtSF、GrLivArea、BsmtFinSF1、BsmtUnfSF、LotFrontage、OpenPorchSF、MasVnrArea、GarageYrBlt等等。
7.3 真实值与预测值对比图
从上图可以看出真实值和预测值波动基本一致,模型拟合效果非常棒。
8.结论与展望
综上所述,本文采用了lightgbm回归模型,最终证明了我们提出的模型效果良好。可用于日常金融中房屋销售价格的预测。
# 本次机器学习项目实战所需的资料,项目资源如下: # 项目说明: # 获取方式一: # 项目实战合集导航: https://docs.qq.com/sheet/DTVd0Y2NNQUlWcmd6?tab=BB08J2 # 获取方式二: 链接:https://pan.baidu.com/s/1em73VZMHvXAazD70tr4xKw 提取码:22n6