数据分析之特征工程

数据探索和准备

  1. 变量的类型识别
  2. 单变量分析
  3. 多变量分析(变量之间的关系)
  4. 缺失值处理
  5. 异常值处理
  6. 变量转换
  7. 变量创建

变量类型识别

首先展示一个例子: 从以下3点进行识别: - 变量类型(用于预测变量和目标变量) - 数据类型(字符型?数字型?) - 变量类别(离散型?连续型)

单变量分析

在这一阶段,我们将对每个变量进行分析,根据每个变量的类别(离散型?连续型?)将采用不同的分析方法。 ### 连续型变量 对于连续型变量,我们需要理解它的集中趋势(central tendency)和变量的扩展情况(spread of the variable),说简单点就是该变量的分布情况,具体分析的参数见下表: 常用的可视化方法是直方图和箱图: >单变量分析也常常会用来找出缺失值和异常值

离散型变量

对于离散型变量,我们常常使用频率表来理解它的分布,同时在每个类别下的所占的百分比也是我们所应该感兴趣的,所以这里会有两个衡量的尺度:CountCount%, 经常使用的工具是 Bar Chart.当然,根据我本人的经验,这里会用到数据透视表这一工具。

多变量分析

这里的多变量分析一般指双变量分析。双变量分析主要的目的是找出两个变量之间的关系,而这两个变量的变量类别不同,针对其使用的方法和工具也有所不同,以下分情况惊喜考虑。 ### 连续型变量&连续型变量 针对两个都是连续型变量,我们应该通过散点图来进行观测二者之间的关系,通过散点图可以看出两个变量之间的关系是线性的还是非线性的: 散点图虽然可以直观的看到变量之间的关系,但是并没有直观的量化两者之间的关系,这时候我们就需要相关系数: - -1:表示负相关 - 1: 表示正相关 - 0: 表示没有关系

离散型变量&离散型变量

为了寻找离散型变量之间的关系,通常使用的方法

  • Two-way Table:
    在这个表中,会有两个度量值,CountCount%, 该表行表示一个变量会出现在哪些类别中,也就是所属类别的统计,而列表示某一类别所有变量的分布情况。
  • Stacked Colum Chart:
    这个方法其实是Two-way table的可视化
  • 卡方测试
    This test is used to derive the statistical significance of relationship between the variables. Also, it tests whether the evidence in the sample is strong enough to generalize that the relationship for a larger population as well. Chi-square is based on the difference between the expected and observed frequencies in one or more categories in the two-way table. It returns probability for the computed chi-square distribution with the degree of freedom.
    1. 0:表示两个离散变量是相互依赖的
    2. 1:表示两个离散变量相互独立
    3. <0.05:表示变量之间的关系在95%的置信度下是显著的

具体可以参照卡方测试的原理,我也没用过。 ###离散型变量&连续型变量 在探索离散型和连续型变量之间的关系的时候,我们可以为离散变量的每个值绘制箱图,如果离散型变量的某个值所拥有的数据量少,那么就代表这个值没有展示出统计学上的显著度,为了展示显著度,我们需要用到Z-test , T-test , ANOVA.

  • Z-Test/T-Test:
    主要评价两组数据的平均值是否彼此之间不相同。 如果Z的值校,说明两组数据之间的区别是很显著的。
  • ANOVA:
    这个方法可以用来评价多个变量组的平均值的统计学区别,也就是Z-Tets/T-Test的多变量版本。

例子

假设我们想测试5种不同的练习方式所产生的影响。首先,我们雇佣20个人,并且将其分为5个组,每个组4个人,然后每组用某一种特定的练习方式来进行练习。在接下来的几个星期内,他们的体重将会被记录,我们需要知道各种不同的练习方式所产生的效果是否显著不同,我们可以通过对比5组人中的各自的四个人体重来实现。

缺失值处理

为什么需要对缺失值处理?

如上图,如果不对缺失值进行处理的话,得到的结果正好相反,所以对缺失值的处理是很有必要的。 ## 缺失值是如何产生的? 知道缺失值如何产生,有助于从源头上解决这个问题

  1. 数据提取
    在数据提取的过程中,可能因为脚本的错误或者程序的崩溃bug所导致的,解决方法也是显而易见的。
  2. 数据收集
    • 缺失值的产生完全随机:这就意味着对于所有样本,产生缺失值的概率是一样的。
    • 随机缺失:与上一个产生方式不同,该缺失方式针对不同的变量有着不同的缺失概率,也就是针对某种变量,缺失值产生的可能性更大。
    • 缺失与否取决于某个不可观察到的预测变量:也就是某个潜在的变量会影响到这个值是否缺失。
    • 缺失与否取决于缺失值本身:例如:不同收入的人群对于说出自己的收入有着不同的意愿。

处理缺失值

  1. 删除
    • List Wise Deletion: 只要含有缺失值的数据,通常将正航删除,缺点也显而易见,减少了数据量
    • Pair Wise Deletion: 单纯的删除缺失值所在的变量。缺点就是在不同的变量上有着不同的样本数量,不利于程序处理。
  2. 平均值/众数/中位数 填充
    • 一般填充:通常计算该缺失值对应的变量的所有非缺失值的平均值/众数/中位数,从而进行填充。
    • 相似样本填充:利用其他变量与该缺失值所对应的变量的关系进行填充,例如上面的表,分布计算男性的年龄平均值和女性的年龄平均值,然后进行填充。
  3. 预测模型
    通过建立一个预测模型来填充缺失值,在这个方法里,我们将数据集分成两部分:一部分没有缺失值,作为训练集,另一部分有缺失值,作为目标值。对于连续型变量,我们采用回归模型进行预测,对于离散型变量,可以使用分类模型进行分类。当然这里有两个缺陷:
    • 模型预测值通常比起真实值来说更加规矩
    • 如果在训练集对应的数据集中,不存在与缺失值对应的变量有相关关系的变量,那么这个模型本身就是错误的。
  4. KNN 填充
    使用k邻近算法进行填充,使用给定的数据集合,并通过计算距离参数来决定填充值。
    • 优点:
      1. k近邻算法可以预测定性的值和定量的值,也就是对于离散型变量和连续型变量兼容。
      2. 对于缺失值的预测模型的建立不是必须的
      3. 将数据本身的结构/分布考虑进去了。
    • 缺点:
      1. kNN对于数据量大的时候是非常好耗时间的
      2. 在选择k方面很关键

个人觉得,对于缺失值的填充,最重要的是不要改变原是的数据分布,在此前提下可是试试上面说到的方法 # 异常值的检测和处理 ## 什么是异常值 异常值就是相对整体的样例分布来看,异常值通常会远离并且会从整体的样例模式中分散出来。 > Outlier is an observation that appears far away and diverges from an overall pattern in a sample.

异常值有哪些类型

异常值通常有两种类型:单变量多变量, 对于单变量异常值,我们可以通过观察单变量的分布来找出异常值,而对于多变量异常值,通常我们需要观察在多个维度上的联合分布才能找出异常值。

举个例子,如下图,通过对身高和体重可视化(箱图)后发现,两个值本身并不存在异常值(高于1.5*IQR和低于1.5*IOR),而在两个变量同时出现的散点图中,发现在一个具体的平均趋势周围出现了3个异常值。

异常值是如何产生的

  1. 人工出错/非自然的因素
  2. 自然因素
  • 数据实体出错(Data Entry Errors):在数据收集阶段,由于人本身的原因导致数据出错,比如多加了一个零
  • 衡量标准出错(Measurement Errors):衡量指标的问题导致数据出错,例如,现在有10台称重机,9台结果是正确的,1台结果是错误的,但是人们更加倾向于错误的称重机的结果,
  • 实验过程出错(Experimental Error):实验过程出错导致异常值,例如实验的条件控制没有做到位。
  • 目的异常(Intentional Outlier):这种异常通常出现在self-report measures中,数据往往偏向主观,也就是数据的多少往往取决于被试者的态度和意愿。
  • 数据处理过程异常(Data Processing Error): 在数据挖掘过程中出现异常,比如某些操作和控制条件发生错误
  • 样本异常(Sampling error):例如我们想衡量运动员的身高情况,但是我们在数据集里放入几个篮球运动员的数据,导致异常值
  • 自然因素导致异常(Natural Outlier): 非人为异常,例如调查企业收入情况,有些人的收入异常的底,有些异常的高

如何检测异常值

最普遍使用的方法是使用可视化的方法来检测异常值,通常的可视化手段包括箱图,直方图,散点图等,有时候我们需要使用一些经验法则:

  • 任何超过-1.5*IQR to 1.5 * IQR这个范围的值均为异常值
  • Use capping methods. Any value which out of range of 5th and 95th percentile can be considered as outlier
  • 数据点中,远离均值三个或者更多的标准差的数据点被认为是异常值
  • 对业务的理解
  • 双变量和多变量的异常值经典的衡量方法是影响程度或者距离因素,比较常用的方法是曼哈顿距离和Cook’D
  • 利用工具所提供的方法来寻找异常值

如何移除异常值

移除方法多与缺失值处理的方法类似,删除所在样本,将其进行转换 , 将其进行归类,把异常值所在的样本分开处理,对异常值进行填充等。

  • 删除观察值:如果错误是人为引起的,那么我们可以简单的直接删除这些观察值
  • 转换和归类(Transforming and binning values):将变量进行转换可以消除异常,对异常值取自然对数可以消除由极大值造成的影响。归类其实也是另一种形式的转换操作。决策树算法可以用来处理异常值,原理在于它可以对异常值进行归类;还有可以为不同的值赋予不同的权重来解决异常值的问题
  • 填充: 类似于缺失值的填充,我们可以将均值,众数,中位数等进行填充,同时,我们也可以构建一个回归模型来对异常值进行预测,并进行填充。
  • 分别对待:如果异常产生的原因是自然因素,那么我们可以将其和正常值进行区别对待,常用的方法是将其分为两组,为每组构建不同的模型,最后将结果进行combine

特征工程的艺术

特征工程的流程

按照上述所讲,首先进行:类型识别,单变量/双变量的分析,缺失值处理,异常值处理。然后可以开始特征工程:

  • 变量转换(Variable Transformation)
  • 变量/特征构建(Variable/ Feature creation)

什么是变量转换(Variable Transform)

在数据建模的过程中,转换意味着利用一个函数将一个值进行转换,例如将一个变量x用它的平方/立方根进行代替,或者也可以求自然对数。总之,转换就是改变一个变量的分布或者是改变和其他变量之间关系的过程。

什么时候该使用变量转换?

  • 当我们想改变一个变量的规模(缩放程度)或者对变量的值进行标准化的时候可以进行转换。也就是说当你的数据有着不同的规模或者范围的时候就应该对数据进行缩放。注意,这里的缩放并不会改变数据的原始分布。
  • 将复杂的非线性关系转换为线性关系。在两个变量之间存在的线性关系比起非线性关系来说,更容易让人理解。转换可以帮助我们将非线性关系转换为线性关系。散点图可以帮助我们找出两个连续型变量之间的关系,这样的转换有助于模型进行预测。求自然对数的转换是当下最常用的转换技术
  • 对称分布比起曲线分布来说更容易让人理解和推断,一些模型技术要求变量是正态分布。所以,无论何时,一旦我们遇见曲线分布,我们就应该使用转换技术来减少曲线程度。如下图所示,对于左图,我们采用平方根或者立方根的形式对数据进行转换,得到右边的图。
  • 变量的转换可以从实现的角度进行考虑,也就是对变量进行分类,比如一堆年龄数据,可以根据要预测的变量和数据的周期性将年龄分为年轻,幼年,老年这种情况,相当于前面提到的Binning技术。

变量转换最常用的方法是什么

  • Logarithm:对一个变量取自然对数,从而减少数据分布的曲线程度。
  • Square/Cube root: 对变量求平方根或者立方根。
  • Binning: 根据对业务的理解对变量进行分类,将连续的变量转换为离散型变量。

什么是特征创建?有啥好处?

特征创建是基于已有的变量重新创造一个新的变量的过程。如下图:

常见新特征的技术有:

  • 创建派生变量(Derived variables):例如在kaggle的Titanic数据集中,年龄存在缺失值,为了预测缺失值,我们可以使用称呼(Master , Mr , Miss , Mrs)来创建新的变量,那么我们如何决定创建什么样子的变量呢?这取决于对业务逻辑的理解。
  • 创建隐含变量(Dummy variables):最常见的应用是将离散变量转换为数字变量,隐含变量也被称作指示变量(Indicator Variable)。 在统计模型中,将离散变量作为预测量是很有用的

参考文献

analyticsvidhya.com–SUNIL RAY

热评文章