介绍
数据探索是没有捷径可言的,如果你想凭借机器学习方法来解决所有的数据问题,请相信我你一定会失败的。在很多时候我们的工作内容是在试图提高模型的准确率,在这种情况下,数据探索技术可能会给你带来意想不到的结果。
这篇文章主要是介绍数据分析的潜在技术,为了更好的理解某些复杂的概念,本文将穿插一些小例子,最终目的是培养我们在动手建模之前,知道如何对数据进行探索和分析。
目录
1.数据探索和准备的步骤
2.处理缺失值
- 为什么缺失值需要处理
- 为什么数据有缺失值
- 处理缺失值的方法有那些
3.检测和处理异常值的方法
- 什么是异常值
- 异常值的类型有哪些
- 异常值产生的原因
- 异常值对整个数据集的影响
- 怎么检测异常值
- 怎么移除异常值
4.特征工程的艺术
- 什么是特征工程
- 特征工程的步骤
- 什么是变量的转换
- 什么时候需要使用变量的转换
- 变量转换的一般方法
- 产生新特征与其好处
1.数据探索和准备的步骤
我们需要知道输入数据的质量决定了模型输出的结果,即数据决定了模型的上限。所以我们需要花大量的时间来对数据进行处理,一般来说数据探索、清洗和预处理将占用整个项目周期的70%时间。下面是在建立预测模型的时候,需要知道的关于清洗和预处理数据的步骤
1.变量识别
2.单变量分析
3.双变量分析
4.缺失值处理
5.异常值处理
6.变量转换
7.产生新变量
在实际工作中我们会反复迭代步骤4-7,直到我们得到一个满意的模型
变量识别
首先需要分清哪个是输入(predictor)变量哪个是输出(Target)变量,然后鉴别数据类型和变量的类别,下面通过一些小练习来理解这一步骤。
在下面图中,这些变量被分为不同的类别
单变量分析
在这一阶段,我们将对变量进行一一探索。我们需要去判别变量是类别类型
还是连续类型
,对这两种类型的变量需要分开讨论。
连续型变量:对于连续性数据,我们需要知道数据的中心分布趋势和变量的分布。下面是一些统计指标
注意:在进行单变量分析的时候,我们通常会凸显出异常值或缺失值。在下文中我们会探索如何处理缺失值和异常值
类别类型: 对于类别变量,我们一般使用频次表
表示每一个类别的分布情况,也可以使用某一类别的占比。它们的衡量指标分别为count和count%,使用柱形图来可视化分布情况。
双变量分析
双变量分析目的是为了发现变量之间的关系。我们按照预先设定的重要程度来发掘变量之间的关联,可以在类别类型变量
和连续变量
的任意组合上面使用双变量分析方法,这些组合可以是:类别型和类别型、类别型和连续性、连续型和连续型,针对不同的组合使用不同的分析方法。
下面是不同组合的详解:
连续型和连续型:当两个变量都是连续型的时候时候,我们应该观看他们的散点图(scatter )分布情况,这是一种很实用的方法来发现变量间的关系,根据散点图的形状能够显示(indicates )出变量是线性(linear )关系还是非线性(non-linear )的关系。
散点图只能直观的展示出变量之间的关系,但并不说明化关系的强弱,相关性(Correlation)
能够对这个关系进行量化,相关性是一个大于-1小于1的值。
- -1:强负线性相关
- +1:强正线性相关
- 0:不相关
相关性的计算公式:
下面是一个使用python的numpy计算相关系数矩阵的列子,可以看出X和Y的相关系数约为0.65为正相关
类别型与类别型:为了发现类别型变量之间的关系,我们可以使用以下方法
- 双向表(two-way table):我们可以通过建立count和count% 的双向表来分析变量之间的关系,行和列分别表示一个变量,每一个(row,column)为count或者count%的值
-
卡方测试(Chi-Square Test):这种方法是用来衡量变量与变量之间的显著性,同时,它用来检验样本中的信息是否足以概括样本总体的关系。卡方测试是基于期望值与真实值的差异计算得来,它得到的是卡方分布与自由度的概率值。
概率值为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)
类别型和连续型:当处理类别型和连续性变量的时候,可以为每一个类别变量绘制箱线图
2.处理缺失值
为什么需要处理缺失值?
训练集中的缺失值会削弱模型的拟合能力或得到有偏差的模型,这是因为模型没有正确学到变量之间的关系,这会得到错误的预测值或分类
上图是有缺失值的数据集与补全后的数据集,左边的表格是没有对缺失值进行处理,从表中可以推断出男性和女性玩板球的几率相同,但是通过观察右边的表格,可以看得出女性玩半球的概率要高于男性
为什么会存在缺失值?
从上面要给例子我们看出了处理缺失值的重要性,接下来让我们来找到产生缺失值的原因,这些原因主要出现在两个阶段:
- 1.数据提取:在数据提取阶段可能会出现差错,在这种情况下,我们应该用重新查看正确的数据,一些哈希程序能够确保数据是正确的,在提取数据阶段出现的错误比较容易发现并且也容易纠正。
- 2.数据收集:数据收集阶段出现的错误相对来说 比较难修正,主要分为以下4类:
- 完全随机丢失:这种情形对于所有观察结果,丢失变量的概率是相同的。 例如:数据收集过程的受访者决定在抛出一个公平的硬币之后,他们将宣布他们的收入。 如果为正面,受访者宣布他/她的收入,反之亦然。 这里每个观察值具有相同的缺失值的机会。
- 随机丢失:这种情形是变量的值随机丢失并且丢失的比率因其他输入变量的不同值/级别而变化。 例如:我们收集的年龄时,女性的数据的缺失率相对男性来说较高。
- 不可预测因子导致缺失:这种情形数据并不是随机缺失,而是受一切潜在的因子影响,例如:在医学研究中,如果一个特定的诊断导致病人不舒适,那么这项研究就很有可能被抛弃。这个缺失值并不是随机发生,而是依赖于“不舒适”这一潜在的因子
- 取决自身的缺失:这种情形是发生缺失的概率受缺失值本身影响,例如:收入较高和较低的人不愿意提供自己的收入。
处理缺失值的方法有那些
- 1.删除:有两种方法 List Wise Deletion 和Pair Wise Deletion
- 在List Wise Deletion方法中,我们删除掉所有有缺失值的样本,该方法的有点主要是简单,但由于该方法减少了样本的大小,会导致模型的拟合能力下降。
- 在Pair Wise Deletion方法中,对所有我们感兴趣的样本进行分析,该方法的有点是保留了更多的样本用来分析,这种方法的缺点是针对不同的变量使用了大小不同的样本集。
- 当缺失数据的性质为“完全丢失随机”时,则将对样本进行删除,否则非随机缺失值可能会让模型的输出产生偏离。
- 2.均值/模型/中值填充(imputation):填充是一种用估计值来补填缺失值的方法,目标是利用从有效数据集中识别的关系来帮助评估缺失值,均值/模型/中值填充方法是最常用的方法之一,它通过对包括该变量的所有已知值的平均值或中值(定量属性)或模型(定性属性)进行分析来替换给定属性的丢失数据,可以分为两种类型:
- 一般填补:通过计算该变量下所有非缺失值的平均值或中值来补全缺失值,像上一表中
manpower
存在缺失值,我们使用其他的非确实只来填充 - 相似样本填充:这种情况通过分别计算
Male
和Femal
的平均值为29.7和25来分别填充male和femal的缺失值
- 一般填补:通过计算该变量下所有非缺失值的平均值或中值来补全缺失值,像上一表中
- 3.预测模型:预测模型是处理丢失数据的复杂方法之一,通过建立预测模型来填补缺失值,这种情况下我们把数据集分为两份,一份是没有缺失值的一份有缺失值的。第一份数据集就是训练集第二份就是测试集,而缺失的变量就是预测目标。下一步根据训练集的其他变量来训练模型,填充缺失值。可以使用回归、分类等方法来完成填充,有两个缺点
- 1 预测出来的值往往更加”规范“
- 2 如果变量之间不存在关系,那么得到的缺失值将不准确
- KNN填充方法:这种方法是利用与该样本最相似样本的值来填充,使用距离指标来代表相似,该方法的优缺点:
- 优点
- KNN能定量和定性的填充
- 不需要为缺少数据的每个属性创建预测模型
- 对于存在多个缺失值的样本也容易填充
- 数据的相关结构被考虑在内
- 缺点
- KNN非常耗时,因为它需要遍历整个数据集
- K值的选择,K过大会引入无关的因素,K较小将丢失一些重要的特征
处理过缺失值之后,下一步就要处理异常点,通常我们倾向忽略异常点的影响,然而这是一个不好的方法,异常点会让我们的数据产生倾斜并影响准确率
3.检测和处理异常值的方法
异常值是分析师和数据科学家常用的术语,因为它需要密切关注,否则可能导致出现错误的估计。 简单来说,异常点是一个远远超出整个样本总体的观测值,我们来举个例子,我们做客户分析,发现客户的年平均收入是80万美元。 但是,有两个客户的年收入为4美元和420万美元。 这两个客户的年收入远远高于其他人口。 这两个观察将被视为异常值。
异常值的类型有哪些
异常值可以分为两种类型:单变量和多变量。 刚才我们讨论了单变量异常值的例子。 当我们看到单个变量的分布时,可以找到这些异常值。 多变量异常值是n维空间中的异常值,为了找到它们,我们必须查看多维度的分布情况。
让我们用一个例子来理解这一点。 我们要了解身高和体重之间的关系,下面的例子是身高,体重的单变量和双变量分布。 通过观察箱线图,我们没有找到任何异常值(高于和低于1.5 * IQR)。 然后再看散点图,可以看出有两个样本在一个特定的身高和体重的平均值以下。
异常值产生的原因
无论何时我们遇到异常值,处理这些异常值的理想方法就是找出有这些异常值的原因,那么处理它们的方法将取决于它们发生的原因。 异常值的原因可分为两大类:
- 人为/非自然
- 自然
让我们更加详细地了解各种异常值:
- 数据输入误差:在数据收集,输入的记录或输入过程中引起人为错误可能导致数据中的异常值。 例如:客户的年收入是10万美元。 数据录入人员多加了一个零。现在的收入是100万美元,是原来的10倍。 显然,这个样本与其他的人口相比将是异常值。
- 测量误差:这是异常值最常见的来源, 当使用的测量仪器出现故障时就会引起这种情况。 例如:有10台称重机, 其中9台是正常的,1台是有故障,此机器上的测量的重量将比组中的其他结果要高/低。 因此在故障机器上测量的重量可能导致异常值。
- 实验误差:实验误差也会导致出现异常值,例如:在7名运动员再100米冲刺中,有一名选手错过了发令枪起跑晚了。因此,这使运动员的跑步时间比其他运动员更长,他的总时间可能是一个异常值。
- 有意造成的异常值:这通常发生在一些涉及敏感数据的报告中。 例如:青少年通常会报告他们消费的酒精量,他们可能只会上报比真实结果要小的值。
- 数据处理造成的误差:可能再操作或数据提取的过程中造成异常值
- 采样误差:例如,我们要测量运动员的身高,而我们在样本中包括几名篮球运动员, 这种就可能会导致数据集中出现异常值。
异常值对整个数据集的影响
异常值可以大幅改变数据分析和统计建模的结果,数据集中的异常值会有很多不利影响:
- 增加错误方差,降低模型的拟合能力
- 如果异常值是非随机分布的,它们可以降低正态性
- 与真实值可能存在偏差
- 它们也可以影响回归,方差分析等统计模型假设的基本假设。
为了更加深刻的理解异常值的影响,下面举一个例子对有/无异常值的数据集进行对比,观察会出现什么情况:
Example
如上图所示,具有异常值的数据集,具有显著不同的平均值和标准偏差。 在无异常值的情况下平均值是5.45。 但随着异常值的加入平均值上升到30,这将彻底改变估计。
怎么检测异常值
常用的异常值检测方法是将其可视化,有很多异常值可视化的工具例如箱线图
、直方图
、散点图
(在上面我们使用了箱线图和散点图进行了可视化),下面是一些比较赞的异常值探索方法:
- 箱线图不在-1.5*IQR和1.5IQR的样本点
- 使用封顶方法, 在第5和第95百分位数范围之外的任何值都可以被认为是异常值
- 对于距离平均值为
三倍标准差
(standard deviation)或更大的数据点被认为是异常值 - 异常值只是有影响的数据点进行检测的特殊情况,它的选择也取决于对业务的理解
- 二维或多维的异常通过测量距离的方法来进行判断,例如:马氏距离( Mahalanobis’ distance )
怎么移除异常值
处理异常值的大多数方法和处理缺失值的方法类似,例如删除观测值、转换、将他们合并、将它们视为一个单独的组、估算值和其他的统计方法,下面我们介绍一些常用的方法来处理异常值:
- 删除观察值:如果是由输入误差、数据处理误差或者异常值很小,我们可以直接将它们删除
- 转换:数据转换可以消除异常值,对数据取对数
log
会减轻由于极值引起的变化
- 填充:像处理缺失值那样,我们可以对异常点进行修改,使用平均值、中值或其他的一些填补方法。在填补之前我们需要分析异常值是自然的异常值还是人为造成的。如果是人为造成的那就可以进行填充,也可以使用预测模型来填充。
- 区别对待“:如果存在大量的异常值,我们应该在统计模型中分别对待它们, 其中一个方法将它们分为两个不同的组并为两组建立单个模型,然后再将其输出合并。
截至目前,我们已经学习数据探索过程中的缺失值处理、异常值检测和处理,这三个阶段将会使你的原始数据在包含信息能力和准确率上面有所提升,下一步将介绍特征工程
4.特征工程的艺术
什么是特征工程
特征工程是从现有数据中提取更多有效信息的一门科学(和艺术),在不增加数据的前提下,如何让现有的数据更有用
例如,你正根据根据日期预测商场的人数,如果你直接使用日期,那么可能不能够从日期中获得有价值的信息,这是因为商场的人数受一个月中的某一天的影响比一星期中的某一天的影响小,而一周中的某一天隐含在日期中,我们需要将这些信息挖掘出来,让我们的模型变得更好。这个从数据中提取有价值的信息的小练习就是特征工程。
特征工程的步骤?
特征工程主要分为2步:
- 变量的转换
- 变量/特征的创建
这两个步骤虽然字少,但是在数据挖掘中至关重要,对模型的能力有着重大的影响,下面就详细介绍这两个步骤:
什么是变量的转换
在数据建模过程中,变换是指通过函数来替换变量,例如,通过平方/立方根或对数x替换变量x就是一个变换。换句话说,转换是一个改变变量的分布或关系的过程。
下面让我们看一看变量转换有用的情况。
什么时候需要使用变量的转换
下面是需要进行数据转换的情况:
- 当我们想改变一个变量的
比例
或标准化一个变量的值,以便更好的理解。 如果的数据具有不同的缩放比例(scale),那么这个转换是必须的并且这个转换并不会更改变量分布。 - 当我们将数据从复杂的非线性关系转化为线性关系时,与非线性或弯曲关系相比,变量之间存在线性关系更容易理解, 转换有助于我们将非线性关系转换为线性关系。 散点图常被用来查找两个连续变量之间的关系,通这些转换也可以改善预测的结果。
log
是一种常用的转换方式。
对称的分布要好于倾斜的分布
,因为它容易解释和做出推论,一些建模技术需要变量服从正态分布,所以,当我们有一个偏斜的分布,我们可以进行减少倾斜的变换。 对于向右
倾斜分布,我们取变量的平方/立方根或对数。对于向左
倾斜的分布,我们取变量的平方/立方或指数。
- 从实施者的角度进行变量转换,就员工的绩效来说,我发现年龄与绩效有关,年龄越大表现越好。从实现的角度来说基于年龄的程序可能挑战较大,但是我们可以将年龄分成不同的组,例如小于30,30-45,45以上。然后为每一个组制定不同的策略,这种方法被成为变量的分组。
变量转换的一般方法
有各种各样的变量转换方法, 如前面所讨论的其中一些包括平方根,立方根,对数,合并,倒数等等。 下面来看看这些方法的细节,突出说明这些转换方法的利弊:
- log:**对变量取对数,常被用来在分布图上更改变量分布形状。 它通常用于
向右倾斜
的分布。这种方法的缺点是,它也不能应用于零值或负值的变量。 - 平方/立方根:变量的平方根和立方根具有对变量分布有波形的影响。但它并没有对数变换那么重要。 立方根变换有自己的优势, 它可以应用于负值包括零。平方根可以应用于包括零的正值。
- 分箱(离散):常被用来对变量进行分类,它可以基于原始值、百分比或频率等对变量进行转换,具体需要基于具体的业务,例如,我们可以将收入分为三类:高,中,低。 我们还可以根据多个变量对变量进行分箱。
产生新特征与其好处
特征/变量创建是基于现有变量生成新变量/特征的过程。 例如,我们将date(dd-mm-yy)作为数据集中的输入变量,将日期拆分我们可以生成新的变量,如日,月,年,周,工作日,可能与目标变量有更好的关系。 下面这个步骤用于突出变量中的隐藏关系:
有很多产生新变量的方法,下面是一些常用方法:
- 创建派生变量:是指使用一组函数或不同方法从现有变量创建新的变量。在某个数据集中年龄缺少值, 为了预测缺失的价值,我们以名称的称呼(Master,Mr,Miss,Mrs)作为新变量。 我们如何决定要创建的变量? 老实说,这取决于分析师对业务的理解,他的好奇心以及他对这个问题的一套假设。 诸如对变量取对数、分箱和其他变量变换方法等方法也可用于创建新变量。
- 创建哑变量:哑变量方法是将类别型变量转化为数值型,下面是一个例子,来表示性别
上面的这些只是数据探索过程方法中的冰山一角,前期对数据探索的工作量直接影响着模型结果的好坏。完