目录
数据探索和准备的步骤
1.变量识别
2.单变量分析
3.双变量分析
3.1 类别型与类别型
3.2 类别型和连续型
4.处理缺失值
4.1 为什么需要处理缺失值?
4.2 为什么会存在缺失值?
4.3 处理缺失值的方法有那些
5.检测和处理异常值的方法
5.1 异常值的类型有哪些
5.2 异常值产生的原因
5.3 异常值对整个数据集的影响
5.4 怎么检测异常值
5.5 怎么移除异常值
6.特征工程的艺术
6.1 什么是特征工程
6.2 特征工程的步骤?
6.3 什么是变量的转换
6.4 什么时候需要使用变量的转换
6.5 变量转换的一般方法
6.6 产生新特征与其好处
我们需要知道输入数据的质量决定了模型输出的结果,即数据决定了模型的上限。所以我们需要花大量的时间来对数据进行处理,一般来说数据探索、清洗和预处理将占用整个项目周期的70%时间。下面是在建立预测模型的时候,需要知道的关于清洗和预处理数据的步骤
1.变量识别
2.单变量分析
3.双变量分析
4.缺失值处理
5.异常值处理
6.变量转换
7.产生新变量
在实际工作中我们会反复迭代步骤4-7,直到我们得到一个满意的模型
首先需要分清哪个是输入(predictor)变量哪个是输出(Target)变量
在这一阶段,我们将对变量进行一一探索。我们需要去判别变量是类别类型
还是连续类型
,对这两种类型的变量需要分开讨论。
连续型变量:对于连续性数据,我们需要知道数据的中心分布趋势和变量的分布。
类别类型: 对于类别变量,我们一般使用频次表
表示每一个类别的分布情况,也可以使用某一类别的占比。它们的衡量指标分别为count和count%,使用柱形图来可视化分布情况。
双变量分析目的是为了发现变量之间的关系。我们按照预先设定的重要程度来发掘变量之间的关联,可以在类别类型变量
和连续变量
的任意组合上面使用双变量分析方法,这些组合可以是:类别型和类别型、类别型和连续性、连续型和连续型,针对不同的组合使用不同的分析方法。
3.1 连续型和连续型
当两个变量都是连续型的时候时候,我们应该观看他们的散点图(scatter )分布情况,这是一种很实用的方法来发现变量间的关系,根据散点图的形状能够显示(indicates )出变量是线性(linear )关系还是非线性(non-linear )的关系。
散点图只能直观的展示出变量之间的关系,但并不说明化关系的强弱,相关性(Correlation)
能够对这个关系进行量化,相关性是一个大于-1小于1的值。
相关性的计算公式: 相关系数=协方差/两个项目标准差之积
为了发现类别型变量之间的关系,我们可以使用以下方法
堆叠柱状图(stacked column chart):这种方法比双向表更加的直观
其中,A代表观察频数,E代表期望频数,A、E之间的差值就是残差
这种方法是用来衡量变量与变量之间的显著性,同时,它用来检验样本中的信息是否足以概括样本总体的关系。卡方测试是基于期望值与真实值的差异计算得来,它得到的是卡方分布与自由度的概率值。
概率值为0:说明类别变量之间相互独立
概率值为1:说明类别变量之间不独立
概率值小于0.05:说明类别变量之间存在关系的置信区间为95%
具体例子
下面是sklearn计算卡方值:
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
iris = load_iris()
X, y = iris.data, iris.target
chiValues = chi(X,y)
X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
当处理类别型和连续性变量的时候,可以为每一个类别变量绘制箱线图(数据的分散情况:最大值、最小值、中位数、及上下四分位数)
训练集中的缺失值会削弱模型的拟合能力或得到有偏差的模型,这是因为模型没有正确学到变量之间的关系,这会得到错误的预测值或分类
上图是有缺失值的数据集与补全后的数据集,左边的表格是没有对缺失值进行处理,从表中可以推断出男性和女性玩板球的几率相同,但是通过观察右边的表格,可以看得出女性玩半球的概率要高于男性
从上面要给例子我们看出了处理缺失值的重要性,接下来让我们来找到产生缺失值的原因,这些原因主要出现在两个阶段:
manpower
存在缺失值,我们使用其他的非确实只来填充Male
和Femal
的平均值为29.7和25来分别填充male和femal的缺失值异常值是分析师和数据科学家常用的术语,因为它需要密切关注,否则可能导致出现错误的估计。 简单来说,异常点是一个远远超出整个样本总体的观测值,我们来举个例子,我们做客户分析,发现客户的年平均收入是80万美元。 但是,有两个客户的年收入为4美元和420万美元。 这两个客户的年收入远远高于其他人口。 这两个观察将被视为异常值。
异常值可以分为两种类型:单变量和多变量。 刚才我们讨论了单变量异常值的例子。 当我们看到单个变量的分布时,可以找到这些异常值。 多变量异常值是n维空间中的异常值,为了找到它们,我们必须查看多维度的分布情况。
让我们用一个例子来理解这一点。 我们要了解身高和体重之间的关系,下面的例子是身高,体重的单变量和双变量分布。 通过观察箱线图,我们没有找到任何异常值(高于和低于1.5 * IQR)。 然后再看散点图,可以看出有两个样本在一个特定的身高和体重的平均值以下。
无论何时我们遇到异常值,处理这些异常值的理想方法就是找出有这些异常值的原因,那么处理它们的方法将取决于它们发生的原因。 异常值的原因可分为两大类:
让我们更加详细地了解各种异常值:
异常值可以大幅改变数据分析和统计建模的结果,数据集中的异常值会有很多不利影响:
常用的异常值检测方法是将其可视化,有很多异常值可视化的工具例如箱线图
、直方图
、散点图
(在上面我们使用了箱线图和散点图进行了可视化),下面是一些比较赞的异常值探索方法:
三倍标准差
(standard deviation)或更大的数据点被认为是异常值处理异常值的大多数方法和处理缺失值的方法类似,例如删除观测值、转换、将他们合并、将它们视为一个单独的组、估算值和其他的统计方法,下面我们介绍一些常用的方法来处理异常值:
log
会减轻由于极值引起的变化 截至目前,我们已经学习数据探索过程中的缺失值处理、异常值检测和处理,这三个阶段将会使你的原始数据在包含信息能力和准确率上面有所提升,下一步将介绍特征工程
特征工程是从现有数据中提取更多有效信息的一门科学(和艺术),在不增加数据的前提下,如何让现有的数据更有用
例如,你正根据根据日期预测商场的人数,如果你直接使用日期,那么可能不能够从日期中获得有价值的信息,这是因为商场的人数受一个月中的某一天的影响比一星期中的某一天的影响小,而一周中的某一天隐含在日期中,我们需要将这些信息挖掘出来,让我们的模型变得更好。这个从数据中提取有价值的信息的小练习就是特征工程。
特征工程主要分为2步:
在数据建模过程中,变换是指通过函数来替换变量,例如,通过平方/立方根或对数x替换变量x就是一个变换。换句话说,转换是一个改变变量的分布或关系的过程。
下面让我们看一看变量转换有用的情况。
下面是需要进行数据转换的情况:
log
是一种常用的转换方式。 对称的分布要好于倾斜的分布
,因为它容易解释和做出推论,一些建模技术需要变量服从正态分布,所以,当我们有一个偏斜的分布,我们可以进行减少倾斜的变换。 对于向右
倾斜分布,我们取变量的平方/立方根或对数。对于向左
倾斜的分布,我们取变量的平方/立方或指数。 有各种各样的变量转换方法, 如前面所讨论的其中一些包括平方根,立方根,对数,合并,倒数等等。 下面来看看这些方法的细节,突出说明这些转换方法的利弊:
向右倾斜
的分布。这种方法的缺点是,它也不能应用于零值或负值的变量。特征/变量创建是基于现有变量生成新变量/特征的过程。 例如,我们将date(dd-mm-yy)作为数据集中的输入变量,将日期拆分我们可以生成新的变量,如日,月,年,周,工作日,可能与目标变量有更好的关系。 下面这个步骤用于突出变量中的隐藏关系:
有很多产生新变量的方法,下面是一些常用方法: