目录
摘要
客观来说,房价受到诸多因素的制约,正因如此,房价预测仍然是数据分析中一个非常经典且具有挑战性的问题.本文针对房价数据冗余,在实际场景中很难确定重要特征,提出了一种创新的数据预处理方式,并通过双模型迭代拟合的方式进行数据预测.首先从数据意义、数据形式和数据关联性三个方面进行初始数据预处理,然后根据数据选择适合的模型进行训练.在传统机器学习中,Random Forest和XGBoost是两种常用的方法.RF模型通过其Bagging 过程,能够准确地评判“冗余”特征,而XGB模型在提高预测效果的同时,也囿于其泛化能力下降,无法稳定地反映特征重要性.因此,本文利用RF模型处理冗余数据,并使用XGB模型对新数据集进行拟合提高预测效果.本文在Kaggle竞赛的数据集("House Prices—Advanced Regression Techniques")上进行了实验,测试结果显示,XGB回归模型最终的回归精度R2为87%,而单独的RF模型或XGB模型的R2分别为79.2%和78.7%.实验证明,该数据预测方法能够明显提高房价预测效果.同时,为充分体现模型拟合效果和预测能力,将“房价”改为具有“高”和“低”两类的离散变量,最终预测结果的精确度为93%,召回率为93%.
关键词:房价预测;机器学习;XGBoost;Random Forest;模型迭代回归
中图分类号:F299 文献标识码:A DOI:10.19907/j.0490-6756.2022.037001
1 介绍
随着全球人口增长,工业化和城市化进程中,住房问题逐渐成为一个非常重要的社会经济问题。对住房的需求,对良好生活环境的需求,以及对住房基础设施的需求都在增加。同样,由于这些住房需求持续存在,导致房价市场不断增长,房屋供应商希望尽可能满足这些需求,以提高住房的预期价格,从而实现利润最大化。自21世纪以来,房价不仅是任何国家的任何地区的关键问题,也受到很多因素的影响。因此,当我们作为房东唯一能改变的是自己的房子时,我们很难确定影响住房维护计划价格的最有效的住房特征。
撇开国家房价宏观调控政策等诸多因素不谈,我们从房屋状况和周边环境出发,从大量的房屋数据中提取有用的信息,更准确地预测房价。在机器学习领域,房价预测问题是一个经典问题。然而,使用机器学习方法预测的房价并不能满足房东的实际需求,换句话说,保证单一的预测精度并不能为用户提供足够的建议来改善他们的住房,从而提高房价。
例如,
(1)我们使用机器学习预测的结果如何帮助最终用户?事实上,机器学习预测结果并不友好。用户需要的应该是改进机器学习预测结果的方法,而不是预测结果本身.
(2)我们期望机器学习能够计算预测过程中的特征重要性,并根据特征重要性过滤出对预测结果足够重要的特征。我们能否通过特征滤波获得更有效的数据集来提高预测效果?我们能合理解释这些特征对房价的影响吗?
(3)当用户想要翻新房屋时,可以优化哪些可变房屋功能以最大限度地提高房屋价格?
本研究致力于通过部署用于房价预测的算法机器学习来解决上述所有问题。通过数据处理、优化算法和特征滤波,提高预测精度,增强预测效果。本文的目的是通过特征过滤获得一个高精度的模型,并解释重要特征对住房收益的影响,完成从基于机器学习预测房价到改进房价的过渡。
因此,基于机器学习,我们需要的不仅是预测房价,但是更重要的时,能够通过研究理论层面的数据来建立一个面向用户的系统,这个系统可以在提升房价问题方面提供实际帮助给用户。我们尝试使用机器学习完成以下的目标:(1)建立高精确度的模型。(2)通过模型计算特征重要性。(3)使得结果易于理解并且给用户提供建议。
为了完成这些目标,我们研究了多种机器学习算法和相关技术。下面是我们方法的一些简单描述:
(1)为了获得高精度的模型,我们使用两种机器学习方式。首先,我们使用随机森林进行回归,并且获取随机森林回归的特征重要性。然后我们基于重要性对特征进行滤波创建一个新的数据集。最后我们建立了XGBoost模型进行回归,并且使用它来预测房价。
(2) 得到高可靠性的回归模型之后,然后,我们将房价标记为高或低,并使用具有选定特征的xgboost分类器提供至少92%准确度的预测模型。
(3)最后,我们根据分类模型,通过特征重要性解释了每个特征对房价类别的影响,并为用户提供了升级房价的建议.
2.相关工作
人们已经做了许多预测房价的尝试,例如一些算法机器学习:支持向量机,各种聚类,以及基于树的学习系统,以及类脑机器学习,例如多种类型的神经网络。以下部分包括相关文献综述、相关研究方法和使用的相关技术。
2.1 文献综述
当面临一个数据分析问题时,我们通常想到两个问题来调查,“什么”和“怎么”:为了调查这个问题我们需要收集什么样子的数据,以及怎样分析我们收集的数据。
房价机器学习模型的数据:在数据分析领域我们坚信数据收集和预处理是最重要和最耗时间的部分。在模型分析过程中,我们可以通过更换模型或是模型的参数改变模型的结果,但是如果数据集本身不怎么好,这种提升效果就很小。因此,我们讨论一下机器学习模型应该用什么数据的问题。
(1)在前面的研究中,当分析房价预测数据时,由于存在太多的不确定性,分析往往局限于某一地区,因此提出了一个预测房地产价格的模型,该模型可以在任何地区普遍使用,几乎没有微调。该模型反映了一些区位因素,如公共/交通设施(办公室,大学,超市以及交通设施),在预测房地产价格时对给定区域的房价有重大影响。
(2)在一项研究中,买家感兴趣的房屋特征也被用作房价预测的数据集。本文作者使用线性回归、森林回归和增强回归来拟合该数据集,并提高预测精度。
(3)在以往的研究中,人们提出用享乐方法来分析影响房屋价值的因素,其中认为房屋价格受位置质量和类型质量的影响很大。
(4)与使用单一模型进行房价预测相比,作者在研究中使用特征价格模型和人工神经网络进行比较,不仅证实了房屋特征与房价不存在线性关系,而且还证明了除了环境属性等因素外,房屋特征本身可以显著影响房价.
房价预测的机器学习模型:在之前的研究中,各种机器学习方法都被用于房价预测。我们整合了利用多种/组合机器学习算法进行房价预测的论文,并利用这些相关研究的结果确定哪些模型可以用于我们的研究。
(1)本案例应用了四种先进的回归技术,由于决策树超出了本研究收集的数据集,因此作者使用线性回归、套索回归进行房价预测,使用R2分数评估模型,并调整R2分数以表明新术语是否提高了模型的准确性。研究结果表明,线性回归模型的预测效果最好。
(2)在之前的研究中,使用了四种机器学习算法,C4.5,RIPPER,朴素贝叶斯和adaboost,来构建用于比较实验的房价预测模型。实验结果表明,RIPPER算法模型的预测效果最好,平均测试误差为0.2488,而adaboost方法的平均测试误差也达到了0.257
(3)类似大脑的机器学习模型(例如,神经网络)通常用于难以拟合的数据集(例如,不均衡数据集)。有人试图用这种方法来研究房价预测。在本研究中,采用支持向量机(SVM)、前馈人工神经网络(MLP)和广义回归神经网络(GRNN)建立了三种不同的模型,并选择平均绝对百分比误差(MAPE)作为误差度量。结果表明,MLP凭借在租赁列表MAPE9.3%和售房列表MAPE14.9%的成绩成为表现性能最好的方法。
(4)一项研究提供了用于房价预测的多元线性回归模型、前馈神经网络模型和XGBoost模型的性能。研究发现,线性回归模型表达不足,前馈神经网络不稳定,训练成本高。相反,基于树的模型在房价预测方面表现相对较好。结果表明,XGBoost作为基于树的模型的集成学习算法,它优于传统回归模型,其平均训练误差为0.0178。
2.2 研究方法
机器学习模型已广泛应用于房价预测领域,基于树的机器学习模型(例如随机森林)在处理大多数房价数据时具有良好的预测性能,但由于数据特征的数量不确定,它们很容易过度或不足,导致模型的泛化能力低。同时,大多数研究集中于如何提高预测性能,而忽略了预测结果的用户友好性,换句话说,从理论到实际应用没有很好的过渡,用户应该能够从结果中了解如何提高他们的房价。
在本研究中,我们致力于解决上述研究差距。研究方法流程见图1。
在本研究中,我们使用了来自kaggle竞赛网站的数据集(House Prices-Advanced Regression Techniques)。RF模型和XGBoost模型用于房价预测和特征选择,并比较其预测性能并解释原因 .
研究方法分为提高房价预测绩效和解释房价预测结果。我们使用随机森林全模型进行房价预测,并根据从模型中获得的特征的重要性进行特征过滤。然后我们使用一个新的模型XGBoost来提高房价预测性能。这是chen提出的一种基于决策树的集成机器学习算法。合理的特征约简也会增强模型的泛化能力。另一方面,我们对两个模型进行了比较,解释了模型原理,解释了预测结果和特征的重要性,并为使用提供了合理有效的建议,以提高房价。
3. 特征重要性和准确性改进
3.1 特征工程
数据处理被认为是数据分析过程的核心和耗时部分,包括数据观察、数据过滤、数据格式标准化等。在本节中,我们将详细介绍对数据集执行的数据预处理步骤(“房价高级回归技术”)。
3.1.1 数据描述
该数据集总共有1460个样本,每个样本有80个特征。这些特征中的一些用于测量房屋本身,另一些用于记录房屋周围的环境
总体数据:(1)预测标签:1460*1。(2)特征矩阵:1460*80
数据类型包括:(1)3个浮点64。(2) 35个int64型。(3) 43个对象型(离散字符串类型)。
首先,房屋特征包括连续特征和分类特征两种类型。连续特征的数据类型是float64,而分类特征的数据形式更为复杂,包括int64和离散字符串类型。
3.1.2 数据清洗
(1) 特征删除。在预处理数据时,我们应该知道数据的来源并理解特征的含义。因为在建模之前,通常可以确定删除一些数据,而不会丢失任何信息。
(a)标记数据&相同信息的数据
“id”列只是用来标记每间房子,所以这个功能似乎对我们的建模没有帮助.“year build”和“year remod add”专栏似乎为我们提供了相同的信息“year-buildt”用于记录原始施工日期,“yearRemodAdd”表示如果没有改造或添加,则与施工日期相同的改造日期。因此,我们可以删除“Id”和“year build”。
(b) “稀疏”数据。
我们用太多与“稀疏”数据相同的值来调用该特性,并且我们仍然需要根据该特性的含义来确定它可以删除还是不可以删除。在下面的总示例中,我们列出了一些具有90%以上相同计算值的功能。
(i) 具有太多重复值的特征。“street”、“alley”、“utilities”、“landslope”等.
(ii)NaN值过多的特征。‘PoolQC’,'MiscFeature'.
虽然当实例通常具有相同的特征值时,特殊值会对房价产生重大影响,但我们认为,当它们通常一致时(我们甚至可以将特殊值称为“离群值”),上述两种特征不能成为拟合房价的关键,因此我们没有保留这些“稀疏”数据的特征。
(2) 缺少值。我们将缺失值分为两类,一部分是缺失值,另一部分来自人类记录。我们分别讨论这两个缺失值的处理。
(a) 人工记录值为“NaN”。有许多人工记录为“NA”的类别特征值,用于表示类别“无”。例如,“车库质量”表示车库质量,其缺失值“NA”表示没有车库的房屋,但此类记录被模型视为缺失值。因此,我们将这些类别的缺失值替换为“无”。
(b)MCAR缺少值。由于数据分布简单等原因,我们选择使用一些常见的缺失值插补方法。对于连续特征,我们使用均值填充空值,对于类别特征,我们用最频繁的类来填充缺失的值。
(3)数据转换
(a)分类特征。有许多编码方法可用,但我们只考虑硬编码和一种热编码。硬编码将类别特征映射到数字值,这与类别的数量相一致。由于其独特的一位有效编码特性,热编码通常用于离散和无序数据。
事实上,我们的数据中有许多分类特征具有明确的顺序关系,例如。,在“外部质量”栏(“评估外部材料的质量”)中,我们有五个值代表五个质量级别:“优秀”、“良好”、“一般/典型”、“中等”、“差”。
此外,硬编码可以有效地缓冲数字类别对值的影响,例如,'MSSub类的列中有一个由值190表示的类,这对模型一定有很大的影响,硬编码可以将其编码为16,从而减少影响。
最后,由于数据集中有许多类别的离散特征,我们没有足够的空间来存储如此巨大的稀疏数据,例如,“第二外部”有17个类别,这意味着我们需要17列以上的稀疏矩阵来替换这一特征。因此,我们最终选择使用硬编码,因为我们编码的是特性而不是目标,所以我们在“scikit-learn”包中使用ordinalecnoder。
(b) 连续特征。连续的特征也是多维度的,显然,这些特征的规模和价值的大小是不同的(例如,‘bedroomAbvGr’记录的是高于地面的卧室数量,而‘1stFlrSF’记录了一楼的平方英尺),那么它们对房价的影响程度是不同的。通过标准化,可以使不同的特征具有相同的规模。
我们使用“scikit-learn”包中的standardscaler,使用以下公式,将数据分布标准化为平均值为0、方差为1的分布。
其中是特征均值,是特征方程。
顺便说一句,尽管决策树模型不需要规范化,但由于xgboost的渐进推进特性,我们仍然对连续特征进行了规范化.
3.1.3 响应变量归一化
当我们在数据准备过程中专注于清理特征变量时,我们通常会忽略响应变量。在基于树的机器学习预测中,我们不希望处理响应变量。这是因为对响应变量进行一些预处理(如standardscaler)会导致数据失真和无法理解的预测(例如,负房价预测).
虽然处理响应变量可能会带来数据分析问题,但我们仍然需要对响应变量的数据分布做出判断。因为如果响应变量数据不是正态分布的,它会影响回归分析的结果(最明显的是线性回归)。通常有许多统计检验,如Konogorov-Smirnov检验(K-S检验)、Shapiro-Wilk检验(S-W检验)和拟合优度检验。在我们的研究中,使用绘制频率分布直方图的方法来测试数据分布,以使可能的后续数据转换更加方便。
在图2中,通过绘图发现响应变量的分布右偏,这对预测精度有很大影响。即使对于基于树的模型,这些响应变量也会影响回归分析的结果。
右偏分布意味着数据的平均值大于复数,换句话说,存在一些特别大的值,我们需要最小化数据之间的差距。所以我们选择使用对数变换,公式如下
为了处理响应变量,图3给出了转换后的响应变量数据的分布。
3.1.4 特征相关性
在数据编码和规范化之后,我们需要考虑最后一个问题,即特征相关性。当基于相关性测量数据时,如果一个特征与标签的关系很强,而与其他特征的相关性很低,则通常认为该特征是好的。这是因为当用于拟合模型时,具有高相关性的特征可能会产生许多统计问题(例如,多元线性、信息冗余等),从而导致拟合不良。
在相关系数介于-1到1之间(负数为负相关,正数为正相关)的情况下,我们将一对特征定义为高度超过0.7,并删除其中一个特征与休止变量的相关性。
(1)连续特征
对于连续特性,由于我们之前已经通过归一化将它们转换为正态分布,并且我们更关心它们之间的线性关系,因此我们使用皮尔逊相关系数来评估这些特征, 公式如下:
代表特征a和b之间的皮尔逊相关系数,E(ab)是a和b之间的互相关;σ为标准差。
通过计算皮尔逊相关系数,表1列出了绝对值大于0.7的特征,这些特征被认为是高度相关的。
现在,我们需要决定要删除哪些功能,以及在表2中给出了上述特征与响应变量“SalePrice”的Pearson相关系数。
从表1和表2, 我们决定保留“YearBuild”和“TotalBsmtSF”列。
(2)类别特征。
在评估类别特征相关性时,我们对具有连续类别(住房状况评级等)的特征感兴趣,因为无序类别变量之间没有明确的关系。因此,我们使用Kendall相关系数来评估有序分类特征之间的相关程度。以下是Kendall关联系数的公式.
指特征X1 和X2之间的Kendall相关系数; p1表示构成有序集的有序对;dΔ(p1,p2) 表示p1 和p2之间的对称差距离(例如,p是[a,b],[a,c],[b,c]表示有序集[a,b,c];dΔ是[b,c]的长度,[c,b]表示p{[a,b],[a,c],[b,c]和p{[a,b]、[a,c]和[c,b]的长度);N表示有序集的长度(通常具有相同长度的有序集的特征可能被认为是相关的)。
通过计算Kendall相关系数,表3列出了绝对值大于0.7的特征,这些特征被认为是高度相关的。
在计算上述特征与响应变量“SalePrice”之间的相关系数时,我们不使用Kendall相关系数。“SalePrice”是一个正态分布的连续列,而上述特征是离散的,没有标准化,因此,我们选择使用斯皮尔曼相关系数。以下是斯皮尔曼关联系数公式.
(5)
斯皮尔曼相关系数的计算方法与方程式相同(3), 除了是在a和b都被秩转换为介于1N(ar和br)之外,N是样本数。使用了所谓的分数排名,这意味着在关系的情况下分配平均排名。
然后我们使用Spearman相关系数来决定应该保留哪些特征,并在表4中给出了表3中与响应变量“SalePrice”相关特征的Spearman相关系数。
因此,从表3和表4, 我们决定放弃“Exterior1st”和“GarageQual”特征。
3.2 随机森林回归
随机森林是树预测因子的组合,因此每棵树都取决于独立采样的随机向量的值,并且对于森林中的所有树具有相同的分布。简单地说,随机森林利用装袋的思想来创建合理的随机性,并将多个CART决策树弱学习者组合起来,得到各自的预测结果,并通过积分使最终结果具有高精度和泛化性能。对于分类问题,使用投票法获得最终类别作为输出,对于回归问题,使用聚合(例如取算术平均值等)获得最终预测作为模型输出。
图4提供了使用随机森林进行数据分析的流程。完成建模后,将获得特征重要性,以便进行后续特征选择。
3.2.1 数据预处理
作为我们之前的模型,随机森林主要用于探索数据,在这种情况下,数据的总体信息是未知的。因此,RF模型中使用的数据应由上述特征工程进行处理以使其有效。
(1)数据预处理过程分为连续变量处理和离散变量处理:
(a) 连续变量处理。
从图5, 我们可以看到连续列中有缺失值,我们使用SimpleImputer以计算平均值的策略估计缺失值,然后通过StandardScaler对所有连续数据进行归一化,以满足正态分布。
(b) 离散变量处理
在图中6, 由于分类变量有两种类型的缺失值,即人工记录的“NaN”和MCAR缺失值,我们选择SimpleImputer的两种策略,即用最频繁项和常数项“None”进行插补。然后我们使用“dtype=np.int”的OrdinalEncoder将离散值编码为整数。
(2)在将数据处理为ML模型的合法形式后,我们通过理解每个特性本身的含义(在3.1.2(1)Feature Dropping中提到),定义“稀疏”数据并计算相关系数,流程如图7所示。
然后我们提供一个新的数据集Datanew来拟合模型。表5 中给出了特征的数量、Datanew的样本大小和响应变量的转换。
(3) 在Bagging的每一轮随机抽样中,未抽样的训练集的一部分称为Out of Bag(简称OOB)。事实上,Bagging中OOB的最佳样本量总是20%或40%,这使得组合模型表现出良好的整体性能。这些OOB不参与训练集模型的拟合,因此可以用来检查模型的泛化能力。同样,我们将Datanew随机分为训练集和验证集,比率为7∶3, 用于拟合模型的训练集和用于评估模型拟合的验证集。
3.2.2 建模
完成数据工程后,建模实际上非常简单。当我们的数据足够好时,预测也不会很差。数据中的信息
是有限制的,我们建立模型并调整参数以接近该限制。
首先,我们拟合了回归模型,并用以下四个更重要的参数建立了整个随机森林结构
(1)‘n_estimators’:用替换抽样从原始数据集生成的子数据集的数量,即决策树的数量
(2)‘max_features:单个决策树上随机林中允许的最大功能数。它有多种可用选项
(3)‘max_samples’:可以用于在每次迭代中构造树的最大随机样本数
(4)‘criteria:用于确定节点是否继续拆分的计算方法,即性能评估标准。
我们使用交叉验证来设置参数,并且由于最佳参数未知,因此有两个基于交叉验证的参数搜索方法是派生的,即网格搜索和随机搜索。网格搜索在指定的参数范围内按步骤依次调整参数,并使用调整后的参数训练学习者在所有参数的验证集中以最高的精度找到参数。随机搜索实际上使用与网格搜索相同的方法,但它用参数空间中的随机抽样代替了网格搜索的参数网格搜索。我们的数据质量相对较好,因此建模中要设置的参数数量较少,数据集较小,因此选择了网格搜索。表6中给出了模型的最佳参数。
3.2.3 回归效果评价
对于回归模型,有许多评价指标,如用于反映预测值误差实际情况的平均绝对误差(MAE)和可以评价数据变化程度的均方误差(MSE)。MSE值越小,模型越能描述实验数据。
由于我们将结果预测为log(“SalePrice”),因此可以通过exp(“销售价格”)查看预测的房价。当我们通过上述两种形式的响应变量评估模型时,MAE和MSE的值都会发生显著变化。为了满足我们对预测结果的要求,我们选择使用R2用于评估回归模型的决定系数,以下是公式(6) 对于R2 决定系数:
(6)
其中y为实际值;是相应的预测值;是实际值y的平均值。
从公式中可以看出,分母被理解为原始数据的离散度,分子是预测数据与原始数据之间的误差,二者的除法可以消除原始数据离散度的影响。实际上,“决定系数”描述了数据变化的拟合优度。理论值范围(-∞,1],正常值范围为[0,1](负决定系数意味着预测比取平均值更为无效)。R2越接近1,模型对响应变量的解释能力越强。
我们使用的随机森林模型的R2为85%。
3.2.4 特征重要性
集成学习模型的一个特点是可以输出特征重要性,这有助于我们过滤特征,从而使模型更加健壮。在随机森林中进行特征重要性评估的思想是确定每个特征对随机森林中每个树的贡献程度,然后取平均值,最后比较特征之间的贡献大小,其中关于贡献的计算可以是杂质或袋外数据错误(OOB错误)。
(1) 基于OOB错误。
对于一棵树,包外数据错误扫描反映了学习者的泛化能力。当我们计算特征X的重要性时,我们计算了它的OOBerror1然后将噪声干扰添加到X特征,以计算OOBerror2此时,假设有N棵树,那么X特性的重要性是1/N×∑(OO错误2-OO错误1).
该值之所以能够表明该功能的重要性,是因为如果在添加随机噪声(即OOBerror)后,行李外数据精度大幅降低2上升),表明该特征对样本的预测结果有很大影响,这反过来表明其重要性相对较高。
(2)基于杂质。决策树中的每个节点都由一个特征分割,可以使用杂质来识别节点,也就是说,在训练决策树时,可以计算特征减少了多少树的杂质。对于决策树森林,可以计算每个特征平均减少了多少杂质,并使用其杂质平均减少量作为特征重要性的基础。对于回归模型,我们使用的杂质为MSE(均方误差)
(7)
其中y为实际值;是相应的预测值。
我们计算randomforest特征重要性,以便为随后的XGBoost模型提供更好的数据集,因此我们选择使用基于杂质的特征重要性,这更方便,以识别更重要的特征。表7提供了根据随机森林计算的前五个重要特征的重要性.
3.3 XGBoost 回归
XGBoost是一个用于树提升的可扩展机器学习系统。boosting是一种迭代算法,其中每次迭代都根据前一次迭代的预测结果对样本进行加权,随着迭代的继续,误差变小,模型的偏差减小。简言之,XGBoost使用这种思想,通过使用基于上次树拟合的残差(上次预测与真实结果之间的差异)拟合的架构固定模型来减少偏差。我们使用XGBoost模型拟合由上述随机森林模型创建的新数据集,以改进预测。图8 提供了使用XGBoost进行数据分析的流程。我们将在完成建模后分析特征重要性。
3.3.1 新数据集构建
从随机森林的特征重要性可以看出,“OverallQual”特征比其他特征更重要,这主要是因为我们选择使用基于杂质的特征重要性评估。在基于杂质减少的特征选择中,当选择一个特征时,与之相关的其他特征的重要性会降低,因为当选择该特征时,它们可以减少的杂质会被删除。“OverallQual”意味着“对房子的所有材料和饰面进行评级”。显然,与“OveralQual”相关的特征会很多,因此,尽管其他功能的重要性似乎很低,但我们仍然选择前30个最重要的功能来形成新的数据集,表8提供了用于XGBoost的数据集的结构。
3.3.2建模
当我们使用XGBoost回归变量建模时,我们还需要设置一些重要的超参数
(1)‘n_estimators:与“num_boosting_rounds”相同,这意味着提升迭代的次数,即生成了多少基本模型
(2)‘max_depth':此值是用于避免过度拟合的树的最大深度
(3)‘“learning_rate”:与“eta”相同。增压过程中使用的收缩阶段,以防止过度装配
(4)‘objective’:该参数定义了需要最小化的损失函数。
同样,我们使用GridSearchCV来寻找最佳参数。表9中给出了模型的最佳参数。
3.3.3 回归效果评估
在回归预测方面,XGboost模型优于Random Forest模型,详情见表10.
3.3.4特征重要性
XGBoost回归模型并不像Random Forest那样计算特征的重要性。总的来说,重要性是用特征得分占特征总得分的比例表示的,公式如下(8).
(8)
其中score是每个特征重要性得分的列表;sum(score)是指总的特征得分和。我们可以看到,这种计算能够避免特征相互作用的问题,并迫使一些特征变得不那么重要。但是,我们再次面临另一个问题,用什么来表示特征重要性得分。下面给出了三种常用的方法
(1)权重:一个特性用于在所有树中分割数据的次数
(2)cover:该功能用于的所有拆分的平均覆盖率。功能的total_cover是该功能拆分的样本总数,因此cover是total_cower/weight
(3)增益:该功能用于的所有拆分的平均增益。total_gain表示一个功能在所有树中的节点教学拆分带来的总增益,因此增益是total_gain/weight。在大多数情况下,增益是解释每个功能重要性的最相关属性,因此,我们还选择使用增益来反映特征重要性。下面是XGBoost模型的增益计算公式
(9).
其中表示左节点拆分后的得分;表示拆分后右侧节点得分;表示节点未拆分时可以获得的分数;是由于分裂而使树结构更复杂的惩罚项.
为了细化,用于近似XGBoost损失函数的二阶泰勒展开式有两个系数,最后一个损失函数的一阶和二阶梯度统计量,表示为gi和hi。最后一个损失函数表示在我们训练当前树时已知gi和hi。假设IL和IR是拆分后左右节点的实例集。例如,以及。表11提供了XGBoost回归函数前十个重要特征的基于增益的特征重要性。
3.3.5特征分析
很明显,XGB回归模型的特征重要性等级与RF回归模型的非常不同
在RF回归模型中。作为最重要的功能,“总体质量”占据了所有其他功能的主导地位。其原因与RF模型中计算功能重要性的方式有关。如前所述,在根据杂质对功能重要性进行排名时,需要注意几点。
(1) 基于减少杂质的特征重要性将倾向于选择类别更多的特征(此类特征更可能出现在决策树的节点中)。
(2)当存在相关特征时,选择第一个特征后,与特征相关的其他特征的重要性变低(因为它们可以减少的杂质已被以前的特征去除)。在XGB回归模型中,增益不仅用于评估特征的重要性,但也用于预修剪策略(仅当分割后增益大于0时才进行分割)。这样的计算避免了RF回归模型中遇到的问题,还允许对特征重要性进行定量描述。在R2分数为87%的XGB回归模型中,最重要的特征是车库信息,
(a) “车库汽车”:车库容量的大小。
(b)“车库类型”:7类车库的位置。
这似乎是合理的,因为购房者总是考虑停车的便利性。预计房屋评估在很大程度上会影响房屋价格.
(a) “BsmtQual”:使用6个类评估基础的高度。
(b) “整体质量”:用10个等级对房子的整体材料和装修进行评级。
但目前,这些是影响房价的“属性”,房东很难改变它们。因此,我找到了一些可变的特征,并将其记录下来,以帮助日后提高行动能力,
(a) “ExterQual”:用5类评估外部材料的质量。
(b) “外部粘结”:用5类评估外部材料的现状。
(c) “BsmtFinType1”:7类基层完工区域的等级。
(d) “BsmtFinSF1”:类型1成品平方英尺
4 从解释到行动
通过创建新数据集并使用XGBoost模型,我们成功地改进了房价预测,同时获得可以解释为影响房价的数据和特征的信息。现在我们从研究转向理论,解释为什么XGBoost回归模型在算法原理方面更好。然后我们将理论转向实际应用。如前所述,房东最想要的不是预测他们的房子售价,但是为了了解他们的房子在整个房价市场中的位置,以及他们如何提高房价水平。因此,我们将回归问题转化为解决现实世界问题的分类问题。
4.1理论解释
我们已经引入了随机森林,使用Bagging(bootstrap aggregating)方法来构建多个决策树模型,并将它们结合起来以获得强大的学习者,现在有一些数学推论在某些情况下提供了随机森林的收敛性。也正是由于收敛性,当随机森林足够大时,模型的损失函数的值将不再改变。我们已经更深入地研究了XGBoost的原理,并且我们更感兴趣的是为什么XGBooest比random forest表现得更好。
4.1.1 XGBoost
与Random Forest中使用的Bagging思想不同,训练集在Boosting的每次迭代中都不会改变,只有学习者中每个样本的权重会根据上一次迭代的拟合结果而改变。
梯度提升树使用这种思想在每次迭代中通过减少损失函数loss(F(x),y)优化模型。XGBoost改进了梯度增强树,从而显著提高了预测性能。
(1)梯度增强决策树(GBDT)正在为新的基础模型(以前加性模型的负梯度)找到一个新的拟合标签,例如,如前所述,使用新模型拟合先前模型拟合的残差。xgboost正在为新的基础模型寻找一个新的目标函数(关于新基础模型的目标函数的二阶泰勒展开)。
(2) XGBoost在目标函数中添加了一个针对树结构复杂性的惩罚项,以避免过度拟合,并便于模型获得较低的方差。
(3)......
在下文中,我们详细描述了XGBoost算法的原理。
(a)首先,我们使用提升的思想多次拟合一组数据。在第一次拟合中,我们得到作为响应变量y的预测,但由于拟合不好,为了提高效果,我们将作为新的y,并重新拟合数据。第i个样本的最终预测值为:
(10)
其中,Xi表示第i个样本的特征;F是我们使用的树的空间;表示(k-1)迭代后第i个样本的最终预测值。
(b)
此处省略一万字(XGBoost的原理介绍)
4.1.2 XGBoost与随机森林的比较
使用大数定理可以使随机森林模型收敛。这意味着当树的数量足够大时,随机森林的目标函数值将不再改变。由于其随机性和打包的基本思想,随机森林侧重于减少方差,这使得模型更具概括性,但更不准确。相反,增强使模型在迭代过程中拟合得越来越好,但在减少偏差时忽略了过度拟合的问题,即模型的泛化程度更低,更准确。XGBoost添加了一个模型复杂性惩罚项,以避免在提高精度的同时过度拟合。这就是XGBooster模型比Random Forest模型性能更好的原因。
4.2 可操作性
如前所述,我们将回归问题转换为分类问题,改进了拟合度,同时允许预测处理实际问题。
4.2.1 变更响应变量
我们根据“销售价格”的中位数将响应变量分为“高房价”(1类)和“低房价”(0类),图9提供了数据分布转换。我们在这里使用中间值作为“高房价”和“低房价”之间的阈值是为了确保良好的匹配。中间值意味着我们将获得更适合传统监督学习的平衡数据(如果数据不平衡,则模型在学习过程中可能偏向于大样本,适合大样本,但不适合小样本
4.2.2 建模
(1) 调整参数。我选择了四个参数来优化XGboost分类器,‘eval_metric’表示评估函数,用于评估训练后模型的有效性。
表12给出了我们使用GridSearchCV计算的最佳参数。
(2)重置阈值。当我们使用XGB分类器进行二进制预测时,该模型实际上使用logistic回归来预测分类概率,并将概率大于阈值(默认值为0.5)的样本分类为class1,将概率小于阈值的样本归类为class0。我们可以重置阈值,以确保模型的准确度和召回率都达到最佳。图10为XGBoost分类器。
(3) 预测效果。这个XGBoost分类模型的准确度为93%,调用率为93%。表13给出了模型拟合程度的详细信息。其中“f1score”是准确度和召回率的回调平均值,“support”是每个分类中的样本数
同时,表14给出了模型的混淆矩阵
4.2.3特征重要性
图11提供了XGBoost分类器基于FScore的特征重要性。这些特征在重要性上的分布似乎更平均,不受其他特征的影响。建议:从图11和表11,我们发现了一些重要且可变的特征:
(a)“BsmtUnfSF”:基面面积的未完工平方英尺
(b)“BsmtFinType1”:基面的完工面积评级
(c)“BsmtFinSF1”:类型1完工平方英尺,
(d)“WoodDeckSF”:木甲板面积,单位为平方英尺
(e)“MasVnrArea”:砌体单板面积,单位:平方英尺。
从这些特征来看,很明显,房东需要通过更多地使用木甲板和砖石饰面来改善房屋的基础和外观,以获得更高的价格。
5 结论与展望
目前有很多研究使用机器学习进行房价预测用于比较不同ML模型的性能或仅用于预测房价,没有实际用途。在我们的研究中,将两个ML模型(Random Forest和XGBoost)组合在一起以优化数据拟合。在本研究中,房屋数据(房价-高级回归技术)是通过Kaggle竞赛网站获得的,并进行了完整的数据分析。数据集在数据预处理中通过数据汇编进行清理,特征相关系数等。然后,使用随机森林模型初步探索数据信息。并根据特征的重要性过滤特征,以消除冗余并使用较少的信息。然后,我们可以为XGBoost模型提供一个具有增强泛化潜力的数据集。
在拟合了XGBoos回归模型后,我们成功地将R2分数从85%提高到87%。同时,通过检验XGBoost的原理,解释了XGBoost的优势。最后,将回归问题转化为一个分类问题,为房东提供一些提高房价水平的建议。在最终的XGBoost分类器中,我们得到了一个准确率为93%的分类模型,调用率为93%.
本文仍有很大的改进空间,
(1)首先,在完成ML分类器学习后,我们只根据特征重要性向用户提供了不够清晰的建议,
我们需要查看这些特性在数据中的分布情况,并给出更具体的建议。
(2)我们的建议只是总体的,不能用于单个用户。该系统能够预测房价水平,同时提供有针对性的建议。
(3)对分类问题的研究太少。在本研究中,我们只使用二进制分类(两个类)对数据进行分类。我们需要细化类别并建立多类别模型。
(4)由于当类的数量变得很大时,可能会得到不平衡的数据集,因为可能有一些类只有很少的样本,我们必须继续研究机器学习算法,以找到解决劣质数据集的方法。
上述工作可以继续改善从理论研究到实际应用的转变过程,使系统能够复制更多类型的数据,并为用户提供更人性化的功能,以解决实际问题。因此,呼吁的内容是我们未来工作的关键。