利用创新特征工程和高级回归技术预测房价

你能想象一所房子可以用79个解释变量来描述吗?这些变量几乎涵盖了住宅的各个方面? 如果是这样的话, 那么房屋销售价格的预测有多准确呢, 用最先进的机器学习技术? 从目前的技术水平发展到进一步的改进,会出现哪些新的挑战? ... 这些是一些令人兴奋的问题和机会,我们有,并需要在这个项目中找到/给出答案. 具体来说,我们主要关注的是

  • 开发创造性和有效的特色工程方案
  • 探索和开发高级回归技术的潜力,如随机森林(RF), 梯度升压机(GBM)和模型堆垛, 等.

数据集

该项目起源于一个 Kaggle上的房价预测竞争,其中使用的数据集是爱荷华州艾姆斯的住宅住宅销售价格. 对于赌博10大排行网站集, 它提供了1460个房屋的信息, 每个房子被描述成79个变量. 共有23个名义变量, 23个顺序变量(总共46个分类变量), 33个数值变量. 测试集包含1459个室内记录.

数据绿豆

将这样一个高维数据集加载到工作空间并使其为分析做好准备不是一项简单的任务. 我们遇到的一个特殊困难是:许多分类变量只有“NA”作为其有效关卡/值之一, 这意味着一个类别特征e.g. 壁炉, 房子里没有吗, 但这与数据缺失无关, 在数据集中NA通常是什么意思. 正确处理那些假阳性/“伪造”NA值, 我们需要首先导入完整的数据集“as-is”与默认的NA查找过滤器禁用, 然后, 识别并将所有误报的NAs重命名为一个不具误导性的名称, e.g. “没有”. 然后,剩下NA的真值/真值,接下来我们可以进行适当的imputations.

除了, 另一个复杂性是:我们需要从一个单独的TXT文件中读取所有指定的数据类型和所有变量的分类级别/值的信息, 然后, 可以使用相应的预先指定的数据类型和分类级别正确地转换每个特征变量(只要适用).

在那之后, 我们检查了缺失的数据集, 并对每个对应变量的缺失值进行了适当的归并, 分别. 我们跟着的 建议使用正确的方法 将缺失的数据分别输入赌博10大排行网站集和测试集.

数据分析

我们对每个变量进行了详细的数据分析,以及它们各自与预计房价的相关性. 第一个, 房屋销售价格经过对数变换(实际上是对数(1+x)),使其分布更符合正态分布.

数值变量, 下图是与房价相关度最高的前6个数值特征的散点图. 我们可以看到,前五种情况,都有非常清晰和强烈的线性关系.

我们还检查了所有数值变量之间的相互关系. 高相关系数(≥0.5 or ≤ -0.4)划线如下. 这让我们对那些高度相关的数字变量对/组应用主成分分析(PCA)有了一些有用的见解, 消除它们之间的多重共线性, 希望最终能带来更好的模型预测性能. 这将是未来有希望的工作方向之一.

对于顺序类别特征变量, 它们与房价的相关系数排序如下. 在这里,我们可以看到,有些与房屋销售价格有很强的相关性,如.g. 整体质量、外观质量、地下室质量等. 而其他一些可能是非常弱/低相关性,如Lot Shape, 栅栏质量, 和总体状况, 等. 稍后我们将在功能工程中展示这一点, 我们挑选了相关度最高的7个顺序特征,并将它们转换成数值变量,去掉一些相关度最低的变量, 这两种方法都有助于提高模型的预测性能.

对于名义范畴变量, 下面的方框图显示了不同分类水平/值的房价范围变化.  我们可以看到,对于两个类别变量,i.e. 社区和外部类型,房屋销售价格可能会有很大的不同的水平/价值. 这一结果也暗示了这些特征可能对房屋销售价格有强烈的影响.

 

 

 

工程特性

根据数据分析结果, 再加上对房地产的良好直觉或常识, 我们按照以下步骤进行了我们的第一组特征工程步骤:

  • 确定了7个顺序变量与房屋销售价格非常高的相关性, 把它们转换成数值变量.
  • 增加了一个“总平方英尺”变量作为地下室总平方英尺的总和, 第一和第二层的平方英尺.
  • 去掉了一些零方差或接近零方差的分类变量(i.e. 几乎都是相同的分类价值/级别).
  • 正确处理与时间相关的变量.g. 车库年建,年建,年售,月售,以更好地适应回归.

它们背后的主要思想/逻辑是:

  • 尽可能减少分类变量的数量, 由于在常规的多元线性回归模型中,每个分类变量都需要转换成多个虚拟变量(a.k.a. 普通最小二乘(OLS)模型和正则线性回归模型.g. 脊, 套索, 和ElasticNet, 这将大大增加变量的总数,并变得非常低效的预测.
  • 基于领域知识添加新的有前途的特征变量.
  • 去除预测值很低的普通变量.
  • 根据需要适当调整变量,以确保它们的值或类型非常适合回归的目的, i.e. 有助于准确预测目标变量的值.

寻求更多的特征工程可能性, 我们发现并使用的一种有效方法是借助R中的Caret包进行特征重要度分析和特征选择, 并将结果应用到实际的建模过程中,在Python中使用Sklearn进行特征选择.

具体地说, 我们首先在R中对赌博10大排行网站数据进行RF模型拟合, 并收集各变量的特征重要信息. 然后,使用 插入符号的递归特征消除(RFE)函数, 我们将所有的特征变量从最重要的到最不重要的排序, 并通过一次去掉5个变量进行特征的逆向选择, 并比较它们的交叉验证(CV)预测性能. 像这样, 我们可以找到给出最小RMSE(均方根误差)预测误差的最优特征集. 结果图如下所示, 哪个显示了去掉10个最不重要的变量会给出最好的均方根误差性能.

作为另一种替代方法,我们然后插入两个新的噪声变量到特征集,i.e. 一个标准N (0,1)高斯分布噪声变量, 一个标准[0,1]均匀分布噪声变量, 并再次运行RF检查特征的重要性. 这里的目的是看看所有实际特征变量的重要性看起来如何与两个噪声变量的重要性水平相比,作为良好的重要性指标/标记, 这样的变量的重要性水平低于那些噪声变量, 被认为是好的/有前途的候选人不重要的特性被删除.

在实践中, 我们发现,插入两个不同分布的噪声变量如上所述是非常有用/重要的,因为:具有不同的射频模型调谐参数, e.g. 在拆分树的每一步中随机选择的特征变量的数量(用插入符号表示为“mtry”), 两者的实际排名和相对位置可能是动态变化的. E.g. 对于一个mtry值, 高斯噪声变量的重要程度可能远高于均匀噪声变量, 哪一个是最不重要的, 因此在最底部,  但是对于另一个mtry值, 均匀噪声变量的重要程度可能比高斯噪声变量的重要程度高, 两者都远离底层. 因此, 我们发现使用两个不同分布的噪声变量可以很好地筛选出不重要的特征变量. 以这种方式, 除了之前从向后特征选择中选择的10个变量之外,我们还确定了另一组9个变量.

这两组变量将成为下一个模型调优和选择过程中测试的候选变量集. 请注意,对于基于非参数决策树的模型,如RF和GBM,是这样的 不需要转换分类变量 转化成二进制虚拟变量. 特别是, R中的插入符号, 一个分类变量的级别总数小于一个限制(i.e. 53), RF模型可以直接将这些分类变量作为回归的输入, 而对于Python中的Sklearn, 我们仍然需要使用LabelEncoding将分类级别随机映射为数值,将一个分类变量转换为一个具有多个值的数值变量. 然而,两者肯定会产生比虚拟变量转换更好的建模性能.

不幸的是, 我们一开始并没有意识到这一点, 用不同的特征变量集赌博10大排行网站不同的模型会增加额外的实现工作, 在项目有限的时间框架内,我们不能做什么. So, 在我们的模型调整和选择过程中, 我们仍然将所有剩余的分类变量转换为虚拟变量作为输入, 这不可避免地将变量的总数从79增加到218. 我们将这一方向作为今后需要进一步改进的工作之一.

模型调整、选择和叠加

我们使用原始赌博10大排行网站集的80%到20%分割,用于实际的本地赌博10大排行网站集和测试集, 分别. 对线性模型, 我们用普通的OLS模型进行了尝试和测试, 以及脊的正则线性模型, 套索, 和ElasticNet. 对于非线性模型,我们尝试了RF和GBM. 模型调优, 采用基于CV函数的Sklearn网格搜索方法寻找最优超参数值. 此外, 对GBM模型进行了优化,该模型比其他模型包含更多的超参数, 而不是纯粹依赖于详尽的网格搜索,没有任何人类的监督/交互, 我们找到并有效地采用了一种合理的方法 将网格搜索与适当的手动调整相结合.

对于单模型选择,我们发现 性能最好的单模型是ElasticNet,其最佳调谐超参数是 α= 0.1833, l1_ratio=0.015,意味着更接近岭的l2标准. 结果表明,它只使用了总特征变量的32%.

对于模型叠加,我们使用典型的 Kaggle的平均模型堆积范式,最后测试并选择堆叠最佳调谐的ElasticNet, RF和GBM模型. 在局部试验数据集上,虽然堆叠模型的预测精度略低于最佳的单一ElasticNet模型, 当实际上传到Kaggle进行更大的测试集(1459行)测试时, 无论是ElasticNet模型还是GBM模型,堆叠模型的最终Kaggle得分均优于单一最佳调谐模型. 因此,在我们的实验中, 堆叠模型表现最好.

我们测试了特征选择的思想,即去掉所选的低重要性变量的两个候选集, 一次一个. 结果表明,这种下降总是能提高OLS所有线性模型的预测精度, 脊, 套索, 和ElasticNet. 为“绿带运动”, 性能略有下降, 但在重新调整超参数之后, 它的性能也比以前有所提高. 除了射频, 即使在模型重新调整之后, 性能仍比特性下降前稍差. 尽管如此,根据我们的测试, 所选特征的下降也总是会提高整体的堆叠模型性能. 因此,这个结果证实了我们的特征选择方法的有效性.

所有测试模型对本地测试集最终实现的模型性能如下所示.

从最佳调谐GBM和RF模型中收集的前30个重要特征结果如下所示. 因为他们的学习行为不同, 所得到的特征重要度结果也不同. 而GBM的特征重要性在不同的特征之间分布更为均匀, 与此形成鲜明对比的是, 射频特征的重要性更多地集中在少数高度重要的特征上.

最后, 最终堆叠模型在局部测试集上的性能图如下所示. 我们可以看到,在恒方差上,模型表现得相当好,没有太多严重的违规问题, 正常, 和独立的错误, 等. 注意,qqplot的开始和结束部分不太适合正态分布. 我们认为这或多或少是因为我们没有仔细检查和删除数据中的一些离群值. 这也被标记为未来的改进工作.

结论及未来方向

这个项目真的是一个很好的学习经验, 这能让我们深入构建机器学习模型的整个过程来解决现实世界中的实际回归问题吗, 从一开始的数据分析开始, 清洁, 准备, 等. 直到最后的模型堆积、评估和交付. 我们感动了, 认为在, 并最终解决或获得了许多重大或次要的实际问题的有用知识/理解, 这是一个非常有益的过程. 最后,我们都同意并意识到: 工程特性 是否经常是最终模型性能的最关键部分或区分因素之一.

由于时间有限, 我们意识到但没有时间去尝试许多有趣的/有前途的方向/想法, 总结如下,供以后参考.

  • 尝试其他先进的模型:XGBoost, SVR等. 和调整与贝叶斯优化器
  • 对于基于树的模型(H2O RF等),不需要将分类变量转换为虚拟变量.)
  • 尝试为不同的模型使用不同的特征选择:i.e. 只对线性模型去除特征,而不是基于树的非线性模型
  • 尝试更多的预处理选择,如BoxCox变换,PCA等. 对主成分分析, 我们可以使用所有数值变量之间的互相关结果, 正如前面所示的, 找出高度相关的变量组, 只对他们进行主成分分析.
  • 异常值检查和删除
  • 聚类分析生成新的有用的类别特征
  • 特征选择:尝试其他先进的算法.g. 遗传算法和模拟退火算法由R - Caret封装而成.

(所有的代码、数据和演示等. 载于 GitHub.)

关于作者

华杨

华春莹参加了纽约DSA为期12周的数据科学赌博10大排行网站营,这是一次非常棒的经历. 非常感谢!
View all posts by 华杨 >

丹尼尔·康(Donghyun)

丹尼尔(东贤)获得了博士学位. D. 韩国成均馆大学电子工程(无线通信系统). 自2002年以来, 他曾担任三星电子无线通信系统设计工程师, 他在哪里被认出来的...
View all posts by 丹尼尔·康(Donghyun) >

凯文·黄

凯文拥有约克大学(CUNY)市场营销学士学位,过去4年在微软有4年亚太网红营销经验. 从他的工作经验中得出了一些...
View all posts by 凯文·黄 >

哲杨

嗨,我的名字是杨哲. 我在罗格斯大学获得了金融分析师硕士学位. 我喜欢挑战和解决难题. 我曾经是T3贸易公司的一名交易员. 在我工作期间...
View all posts by 哲杨 >

忆南向江

Yinan毕业于上海金融大学,获得会计学学士学位 & 南加州大学经济学和经济学硕士学位. 之前数据科学, 他曾担任主要金融机构的股票分析师和数据分析师...
View all posts by 忆南向江 >

相关文章

留下你的评论

没有发现评论.

按类别查看帖子


我们最近的热门文章


按标签查看帖子

# python # trainwithnycdsa 2019 airbnb 亚历克斯Baransky 校友 校友面试 校友的评论 校友关注 校友的故事 校友 API 应用程序 艺术家 aws 美丽的汤 最好的赌博10大排行网站营 2019年最佳数据科学 最佳数据科学赌博10大排行网站营 2020年最佳数据科学赌博10大排行网站营 最好的排名 大数据 书推出 赌博10大排行网站营 赌博10大排行网站营的校友 赌博10大排行网站营准备 加州 癌症研究 顶石 职业生涯 职业生涯的一天 citibike 聚类 编码 课程演示 课程报告 D3.js data 数据分析师 数据科学 赌博10大排行网站 数据科学赌博10大排行网站营 数据科学工作 数据科学评论 数据科学家 数据科学家的工作 数据可视化 深度学习 演示日 折扣 dplyr 雇主网络 工程特性 金融 财务数据的科学 “绿带运动” 获得工作 ggplot2 googleVis Hadoop 希格斯玻色子 招聘 招聘合作伙伴活动 招聘合作伙伴 行业专家 老师的博客 教师面试 工作 就业安置 工作 Jon Krohn 摩根大通(JP Morgan Chase) Kaggle Kickstarter 套索回归 导致数据Scienctist 导致数据科学家 传单 线性回归 逻辑回归 机器学习 地图 matplotlib 医学研究 满足团队 meetup 网络 神经网络 神经网络 新课程 nlp 纽约 纽约数据科学 赌博10大排行网站 纽约市公开的数据 纽约DSA 纽约DSA校友 在线 在线赌博10大排行网站营 在线培训 开放数据 画家 熊猫 兼职 投资发展 预测 Prework 编程 普华永道 python Python数据分析 python机器学习 python scrapy python web抓取 python webscraping Python车间 R R数据分析 R语言 R编程 R闪亮的 r工作室 R可视化 R车间 R-bloggers 随机森林 排名 建议 推荐系统 回归 远程 远程数据科学赌博10大排行网站营 Scrapy scrapy可视化 seaborn 情绪分析 闪亮的 闪亮的仪表板 火花 特殊的 特别的夏天 体育 统计数据 流媒体 学生面试 学生展示 支持向量机 Switchup 团队 TensorFlow 证明 tf-idf 顶级数据科学赌博10大排行网站营 推特 可视化 网页抓取 周末的课程 会发生什么 词云 word2vec XGBoost yelp