美文网首页特征工程
基于python的全面数据探索(house prices)

基于python的全面数据探索(house prices)

作者: 快乐的小飞熊 | 来源:发表于2017-05-07 18:41 被阅读0次
    总体思路:

    理解问题:查看每个变量并且根据他们的意义和对问题的重要性进行哲学分析。
    单因素研究:只关注因变量(SalePrice)并且进行更深入的了解。
    多因素研究:分析因变量和自变量之间的关系。
    基础清洗:清洗数据集并且对缺失数据,异常值和分类数据进行一些处理。
    检验假设:检查数据是否和多元分析方法的假设达到一致。

    1、准备工作:预期与验证

    为了理解数据,我们观察每个变量并且尝试去理解每一个变量的意义以及这个变量和目标问题的关系,虽然这个过程是耗时的,但是给我们感知数据。

    为了分析熟悉数据,我们可以用下面的列来创建excel电子表格。
    (1)变量:变量名
    (2)类型:变量类型的标识。一般有两种可能的值:数值型和类别型。数值型意味着变量是数字,类别型意味着变量值是类别。
    (3)划分:变量分块的标识。根据变量的意义分成不同的段。也就是有哪几方面的特征。
    (4)预期:我们可以预测变量对房价的影响,我们可以用高、中、低来作为房价的可能预期值。
    (5)总结:快速浏览一遍数据之后,总结一下特征的重要性
    (6)注释:给一些能想到的注释。

    虽然‘类型’和‘划分’仅仅用于未来预测的参考,比如F1上不去,我改优化哪方面的特征等,但是‘预期’这一列很重要,它给我们第六感去判断哪个特征更重要。为了确定预期列,我们需要仔细阅读特征描述文档,并且问自己:
    (1)当我们买房子会不会考虑这个特征?
    (2)这个特征的重要性怎么样?
    (3)这类信息在别的特征中是否表述过?

    当我们做完上面的事情以后,我们可以过滤电子表格,并且仔细观察那些高预期、我们自己认为重要的特征。然后,直奔主题,我们可以绘制这些我们认为重要的变量和saleprice之间的关系散点图,并且在结论这一栏给出我们预期的重要性。

    经历上面的过程,得到了结论,总结出了下面四个特征有很重要的作用:OverallQual、YearBuilt、TotalBsmtSF、GrLivArea。但是根据散点图判断,是有局限性的,因为和我们的认知违背,我们认为location是最重要的特征,如果用箱形图,可能会有不同的结论。

    2.首先:分析单变量SalePrice

    SalePrice是我们是去预测的值。
    (1)描述统计结论,比如说均值、最值、中值、分位数、样本数。



    最小值不是一个非零的值,没有一看一起就很异常的数据。最值都在可以接受的合理范围内。
    (2)绘制直方图

    用seaborn绘图,得出结论:
    -偏离正态分布
    -数据正偏
    -有峰值

    数据偏度和峰度度量:


    偏度(Skewness)是描述某变量取值分布对称性的统计量。如果偏度=0,和正态分布的偏度相同;Skewness>0,长尾巴拖在右边;Skewness<0,长尾巴拖在左边,Skewness越大,分布形态偏移程度越大。

    峰度(Kurtosis)是描述某变量所有取值分布形态陡缓程度的统计量。它是和正态分布相比较的:Kurtosis=0,与正态分布的陡缓程度相同;Kurtosis>0,比正态分布的高峰更加陡峭;反之亦然。

    3.与数值类型的关系

    (1)grlivarea/saleprice的散点图绘制
    首先观察一下saleprice和数值型变量grlivarea之间的关系。我们还是可以观察到整体的趋势的,随着grlivarea的增大,saleprice有变高的趋势。存在线性关系!


    (2)totalbsmtsf/saleprice的散点图绘制

    通过观察TotalBsmtSF和SalePrice之间有线性关系或者指数关系,当TotalBsmtSF=0的时候,TotalBsmtSF对SalePrice没有影响。

    4.与类别类型的关系

    (1)overallqual/saleprice的箱形图
    这里有一个问题,为什么我们不用散点图了呢?那么先画一个散点图看下效果。如下图:


    可见也是有相互关系的,如果用箱形图表示的话,会更加清晰:

    (2)YearBuilt/saleprice的箱形图
    两个变量之间的关系没有很强的趋势性,但是可以看出建筑时间较短的房屋价格更高。

    总结:

    (1)GrLivArea和 TotalBsmtSF与SalePrice似乎线性相关,并且都是正相关。 对于 TotalBsmtSF,线性关系的斜率十分的高。
    (2)OverallQual和 YearBuilt与 SalePrice也有关系。OverallQual的相关性更强, 箱型图显示了随着整体质量的增长,房价的增长趋势。

    我们只分析了四个变量,但是还有许多其他变量我们也应该分析,这里的技巧在于选择正确的特征,选择哪些特征(特征选择)而不是定义它们之间的复杂关系(特征工程),它们之间的复杂关系可以通过模型学习。

    5 客观分析

    上面的分析过于主观,我们应该更客观的去分析。
    主要有三方面的分析:
    -相关矩阵热图
    -SalePrice相关矩阵热图
    -最相关变量之间的散点图

    (1)相关矩阵热图


    热图是观察特征和特征、特征和label之间关系的一种快速的方式。首先,最吸引注意的是两个红色方块。第一处指向TotalBsmtSF和1stFlrSF这两个变量,第二处指向Garage相关的变量。这两块显示了TotalBsmtSF和1stFlrSF的相关性、GarageCar和GarageArea的相关性很大。事实上,这种关联性很强,暗示它们存在多重共线性。我们能够推断当变量间具有多重共线性,那么它们给出的信息也基本上是一样的。Heatmaps恰恰可以检测多重共线性的情况并决定选择哪些特征,所以是一个非常重要的工具。

    另外观察特征和SalePrice之间的关系,可以看到GrLivArea、TotalBsmtSF、OverallQual,也看到了一些其他的变量应该纳入我们考虑。

    (2)SalePrice相关矩阵热图
    筛选与SalePrice相关性强的特征,重点观察。



    从图中可以看出:

    (a)'OverallQual', 'GrLivArea' 以及 'TotalBsmtSF' 与 'SalePrice'有很强的相关性。
    (b)'GarageCars' 和 'GarageArea' 也是相关性比较强的变量. 车库中存储的车的数量是由车库的面积决定的,它们就像双胞胎,所以不需要专门区分'GarageCars' 和 'GarageArea' ,所以我们只需要其中的一个变量。这里我们选择了'GarageCars'因为它与'SalePrice' 的相关性更高一些。
    (c) 'TotalBsmtSF' 和 '1stFloor' 与上述情况相同,我们选择 'TotalBsmtSF' 。
    (d)'FullBath'几乎不需要考虑。
    (e)'TotRmsAbvGrd' 和 'GrLivArea'也是变量中的双胞胎。
    (f)'YearBuilt' 和 'SalePrice'相关性似乎不强。

    (3)SalePrice和相关变量的散点图

    尽管我们已经知道了一些主要特征,这一丰富的散点图给了我们一个关于变量关系的合理想法。

    其中,'TotalBsmtSF' 和 'GrLiveArea'之间的散点图是很有意思的。我们可以看出这幅图中,一些点组成了线,就像边界一样。大部分点都分布在那条线下面,这也是可以解释的。地下室面积和地上居住面积可以相等,但是一般情况下不会希望有一个比地上居住面积还大的地下室。

    'SalePrice' 和'YearBuilt' 之间的散点图也值得我们思考。在“点云”的底部,我们可以观察到一个几乎呈指数函数的分布。我们也可以看到“点云”的上端也基本呈同样的分布趋势。并且可以注意到,近几年的点有超过这个上端的趋势。

    4.缺失数据

    关于缺失数据需要思考的重要问题:
    (1)这一缺失数据的普遍性如何?
    (2)缺失数据是随机的还是有律可循?

    这些问题的答案是很重要的,因为缺失数据意味着样本大小的缩减,这会阻止我们的分析进程。除此之外,以实质性的角度来说,我们需要保证对缺失数据的处理不会出现偏离或隐藏任何难以忽视的真相。

    下面对各个特征缺失值的情况进行统计:

    (1)当超过15%的数据都缺失的时候,我们应该删掉相关变量且假设该变量并不存在。根据这一条,一系列变量都应该删掉,例如'PoolQC', 'MiscFeature', 'Alley'等等,这些变量都不是很重要,因为他们基本都不是我们买房子时会考虑的因素。

    (2)'GarageX' 变量群的缺失数据量都相同,由于关于车库的最重要的信息都可以由'GarageCars' 表达,并且这些数据只占缺失数据的5%,我们也会删除上述的'GarageX' 变量群。同样的逻辑也适用于 'BsmtX' 变量群。

    (3)对于 'MasVnrArea' 和 'MasVnrType',我们可以认为这些因素并不重要。除此之外,他们和'YearBuilt' 以及 'OverallQual'都有很强的关联性,而这两个变量我们已经考虑过了。所以删除 'MasVnrArea'和 'MasVnrType'并不会丢失信息。

    (4)最后,由于'Electrical'中只有一个损失的观察值,所以我们删除这个观察值,但是保留这一变量。

    总结:处理空值,我们删掉所有有较多空值的特征,除了特征Electrical,因为只有一个缺失值,所以删除含该空值的样本即可。

    5.异常值处理

    异常值也是我们应该注意的东西。因为异常值能明显的影响我们的模型,并且是一个有价值的信息来源,帮助我们对特定行为有更多的见解。异常值是一个复杂的主题,并且值得研究。在这里,我们将用SalePrice的标准差和一系列的散点来进行快速分析。

    (1)单因素分析
    这里的关键在于如何建立阈值,定义一个观察值为异常值。
    我们对数据进行正态化,意味着把数据值转换成均值为0,方差为1的数据。


    进行正态化后,可以看出:
    低范围的值都比较相似并且在0附近分布。
    高范围的值离0很远,并且7点几的值远在正常范围之外。

    现在看,我们不把任何值作为异常值,但是我们应该注意这两个大于7的值。

    (2)双变量分析

    这是之前GrLivArea和SalePrice关系散点图:
    (1)有两个离群的'GrLivArea' 值很高的数据,我们可以推测出现这种情况的原因。或许他们代表了农业地区,也就解释了低价。 这两个点很明显不能代表典型样例,所以我们将它们定义为异常值并删除。

    (2)图中顶部的两个点是七点几的观测值,他们虽然看起来像特殊情况,但是他们依然符合整体趋势,所以我们将其保留下来。

    删除异常点:

    核心部分

    核心部分

    “房价”到底是谁?

    这个问题的答案,需要我们验证根据数据基础进行多元分析的假设。

    我们已经进行了数据清洗,并且发现了“SalePrice”的很多信息,现在我们要更进一步理解‘SalePrice’如何遵循统计假设,可以让我们应用多元技术。

    应该测量4个假设量:
    (1)正态性:它的重要在于很多统计检验是基于正态分布的,在房价预测的问题中,我们只检查了单变量的正态性。但是单变量正态性不能确保多变量的正态性,但是会其帮助作用。
    (2)同方差性:假设在预测变量的范围因变量表现出同等水平的方差
    (3)线性:通过观察散点图,看是否为线性关系,如果不是,需要数据转换,但是大多数情况下都是满足线性关系的。
    (4)相关错误缺失

    正态性:

    应主要关注以下两点:
    直方图 - 峰度和偏度。
    正态概率图 - 数据分布应紧密跟随代表正态分布的对角线。

    首先,观察SalePrice的分布曲线和正态概率图,我们和正态曲线相比,有偏移,并且峰度大,而且概率图偏离对角线,所以,SalePrice并不是正态的。但是,信息没有丢失,简单的数据变换就可以解决这个问题,为了防止正偏,log变换作用很好。

    从图中可以看出:
    显示出了偏度
    大量为0的观察值(没有地下室的房屋)
    含0的数据无法进行对数变换,可用log(x+1)

    同方差性:

    最好的测量两个变量的同方差性的方法就是图像。
    偏离同方差的特点是:散点呈锥形或者钻石型。

    未进行log变换前,明显是锥形,偏离同方差性。



    log变换后

    这就是正态化的作用,我们仅仅需要保证特征的正态化,就能解决同方差的问题。

    6.虚拟变量

    对类别变量进行虚拟编码:


    结论

    整个方案中,我们使用了很多《多元数据分析》中提出的方法。我们对变量进行了哲学分析,不仅对'SalePrice'进行了单独分析,还结合了相关程度最高的变量进行分析。我们处理了缺失数据和异常值,我们验证了一些基础统计假设,并且将类别变量转换为虚拟变量。

    但问题还没有结束,我们还需要预测房价的变化趋势,房价预测是否适合线性回归正则化的方法?是否适合组合方法?或者一些其他的方法?这篇文章解决了数据预处理的问题,预处理后,我们选择正确的模型算法进行拟合。

    参考文章:
    详解Kaggle房价预测竞赛优胜方案

    相关文章

      网友评论

        本文标题:基于python的全面数据探索(house prices)

        本文链接:https://www.haomeiwen.com/subject/daadtxtx.html