1. 研究目的

房地产的价格是由众多因素交互影响而形成的,是房地产所在地区的自然、经济、社会、行政等因素综合影响的结果。区位因素、房地产质量等是影响房产价格的重要因素。本次分析主要是根据已有数据对房屋的价格进行分析,从而预测房产价格走势,为购房者提供有依据的购房建议。

2. 数据说明及处理

数据来源于https://www.kaggle.com/c/house-prices-advanced-regression-techniques

2.1导入数据

将数据文件放到R当前路径,使用R自带函数read.csv();导入数据。




r语言课程设计房地产 r语言房价分析_r语言课程设计房地产


r语言课程设计房地产 r语言房价分析_r语言课程设计房地产_02


从R的数据统计结果可以看出,本次数据分析的数据集包含1460组数据,一共81个变量,如下图所示(展示一部分特征):


r语言课程设计房地产 r语言房价分析_r语言课程设计房地产_03


r语言课程设计房地产 r语言房价分析_r语言课程设计房地产_04


2.2数据处理

2.2.1缺失值处理

数据分析之前,先对缺失的数据进行统计,分析有缺失值出现的特征对整个分析过程及结果是否有重要的影响。由于数据样本中包含的特征值比较多,所以先将含有缺失值的特征提取提取出来。

结合R中的which与is.na函数,返回含有缺失值的特征所在列位置,并将含有缺失值的特征放到新的数据表missing_data中,利用apply函数计算出missing_data表中各字段含有缺失值的比例。利用VIM包对各特征数据缺失做一个可视化。

R代码:


r语言课程设计房地产 r语言房价分析_kaggle房价预测特征意思_05


由此可知,数据文件中81个特征中一共包含19个中aggr()函数对各特征数据缺失做一个可视化,更直观地观测含缺失值特征的缺失值比例。


r语言课程设计房地产 r语言房价分析_r语言课程设计房地产_06


r语言课程设计房地产 r语言房价分析_数据集_07


接下来就依据各特征缺失值的比例对各特征缺失值进行处理。对缺失值进行快速分类,缺失的数据分为3种类型:

① MCAR:完全随机缺失,指变量是否缺失与它本身的值及其他任何变量的值都无关。

② MAR:随机缺失,指变量的缺失数据与其他观测变量相关,与自身的值无关。

③ MNAR:完全非随机缺失,指变量的缺失数据与其他观测值及自身值都相关。

从以上数据可以看到,有许多特征的缺失值都超过了缺失值比例的最大阈值50%,Alley、PoolQC、MiscFeature这些特征的缺失值比例高达90%,对于这些缺失比例达到50%的特征进行删除处理,即删除Alley、PoolQC、MiscFeature、Fence这4个特征。

由上图可知GarageType、GarageYrBlt、 GarageFinish、GarageQual、 GarageCond应该为相似特征,其缺失值的数量都相同,从特征解释中也可以看到,这些特征都是用来描述房子车库的一些信息,这些信息可以使用完整的数据特征GarageCars,因此对这5个特征也进行删除处理。

对于BsmtExposure 、BsmtQual 、 BsmtCond、BsmtFinType1 、BsmtFinType2这5个特征,从特征值来看,应该也为相似特征,从特征描述可以看到,这些是用来描述地下室的一些特征信息,在关于地下室信息的9个特征中,其中4个是完整的数据信息,已足以表征地下室的特征信息,所以将这5个特征信息也进行删除。

由此含有缺失值的特征就只剩下FireplaceQu、LotFrontage、MasVnrType、MasVnrArea 、Electrical。但从字面、以及特征解释中可以看到MasVnrType、MasVnrArea 有很高的相关性,同属于描述外墙的特征,而且从上图可以看出,它们缺失的实例完全相同,从字面意思来看其对房价的影响不太大,这里我们也做删除处理。

经过分析后,19个含有缺失值的特征目前就只剩下FireplaceQu、LotFrontage、Electrical。而在剩下的三个缺失值当中,FireplaceQu(壁炉质量)跟特征Fireplaces(壁炉数量)相关,当Fireplaces为0时,FireplaceQu(壁炉质量)为缺失值,即FireplaceQu(壁炉质量)特征的缺失值属于随机缺失,因此对此缺失值的填补是无意义的。

由以上分析,19个含有缺失值的特征只有LotFrontage、Electrical需要进行补全。首先把数据集中需要删除的特征进行处理。


r语言课程设计房地产 r语言房价分析_r语言课程设计房地产_08


现在数据集data1中只包含LotFrontage、Electrical这2个含有缺失值的特征需要补全,由上文中的分析可以知道,LotFrontage含有4个缺失值,且该特征为连续性数据,故直接利用该字段的均值进行插补即可。Electrical含有43个缺失值,利用多重插补的随机森林方法将数据补全。

补全LotFrontage特征:


r语言课程设计房地产 r语言房价分析_缺失值_09


补全Electrical特征:


r语言课程设计房地产 r语言房价分析_r语言课程设计房地产_10


r语言课程设计房地产 r语言房价分析_kaggle房价预测特征意思_11


至此,数据集data1中所有的缺失值已经填补完成产生新数据集data2,接下来将对data2数据集的64个特征进行分析。

2.2.2数据可视化

由于data2中的特征数据类型不同,在分析各特征与SalePrice之间的关系之前,先将数据集中的字符串型和数值型分开。cdata存放data2中的字符型变量数据,ndata存放data2中的数值型变量数据。


r语言课程设计房地产 r语言房价分析_kaggle房价预测特征意思_12


分别用条形图和折线图对字符型特征变量及连续性特征变量进行可视化,研究各特征的分布情况:


r语言课程设计房地产 r语言房价分析_kaggle房价预测特征意思_13


字符型变量条形统计图(展示一部分):


r语言课程设计房地产 r语言房价分析_数据集_14


r语言课程设计房地产 r语言房价分析_数据集_15


r语言课程设计房地产 r语言房价分析_r语言课程设计房地产_16


数值型变量密度图(展示一部分):


r语言课程设计房地产 r语言房价分析_数据集_17


r语言课程设计房地产 r语言房价分析_r语言课程设计房地产_18


2.2.3相关性分析

由2.2.2中的各特征的分布情况来看,有个别特征的分布高度相似,由此作一个相关分析,若高度相关则可以减少分析的特征参数。


r语言课程设计房地产 r语言房价分析_r语言课程设计房地产_19


r语言课程设计房地产 r语言房价分析_数据_20


由此图,可以得到相关性高的特征,剔除其中之一进行分析即可,在后期的样本数据采集中,也可以减少工作量。在本文中,因为GarageCars与 GarageArea高度相关,所以剔除GarageArea特征开始建模。


r语言课程设计房地产 r语言房价分析_缺失值_21


2.2.4异常值处理

从2.2.2中的条形图和密度图中可以看到,原始的数据并不是标准的正态分布,可能是受到了异常值的影响,所以需要处理将样本中的异常数据进行删除处理。同时也可能与样本数据量不多有关,在后期的房价预测中应采集更多的房价样本进行预测。

在字符型特征变量中,由于Neighborhood与房价(SalePrice)关联程度较大,利用ggplot作箱线图,监测该特征变量是否出现异常值。在数值型变量中,房价(SalePrice)与地面居住面积(GrLivArea)、地下室面积(TotalBsmtSF)关联程度较大,利用ggplot作散点图进行监测。


r语言课程设计房地产 r语言房价分析_数据集_22


r语言课程设计房地产 r语言房价分析_kaggle房价预测特征意思_23


r语言课程设计房地产 r语言房价分析_缺失值_24


r语言课程设计房地产 r语言房价分析_数据_25


从箱线图可以看出,BrkSide和OldTown以及SWISU地区附近有便宜的房子,而NridgHt和NoRidge有几个高价异常值,从散点图中可以看到存在明显的离群点,用相应特征样本均值替换。


r语言课程设计房地产 r语言房价分析_kaggle房价预测特征意思_26


2.2.5 Box_Cox变换

根据各特征的分布图易得数据的偏度都比较大,并且曲线比较复杂,这里使用Box_Cox进行转换,使数据线性化,近似于正态分布 ,从而能够按照机器学习的特性进行学习。首先对各数值型特征进行偏度计算。


r语言课程设计房地产 r语言房价分析_数据集_27


r语言课程设计房地产 r语言房价分析_数据集_28


2.3 模型建立


r语言课程设计房地产 r语言房价分析_r语言课程设计房地产_29


r语言课程设计房地产 r语言房价分析_r语言课程设计房地产_30


r语言课程设计房地产 r语言房价分析_缺失值_31


建立的随机森林模型在训练数据集中解释率接近90%,从直方图中可以看出,预测结果与实际的房屋售价有一定的契合度,模型的特征重要性图也很直观地反应了与房屋售价相关的较重要的指标,可以为购房和卖房的提供参考。