EDA与特征工程数据探索与特征工程综合指南
Posted Bigdataxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EDA与特征工程数据探索与特征工程综合指南相关的知识,希望对你有一定的参考价值。
文章目录
前言
本综合指南主要参考《A Comprehensive Guide to Data Exploration》进行编写,用作日常学习。原文中将缺失值插补与异常值处理两大块作为数据探索部分,通过查阅资料及结合数据分析经验,本文将变量识别、单变量分析、双变量分析划为探索性数据分析(EDA) 部分,将缺失值插补、异常值处理、变量转化、特征/变量构造、特征筛选及降维划为特征工程部分。
一、探索性数据分析(EDA)
对于数据挖掘相关任务,数据输入的质量决定了输出的质量。数据探索、清理和准备可能占用总项目时间的70%。在这里花费大量时间和精力是有意义的。
EDA主要包括如下三个部分:变量识别、单变量分析、双变量分析。
1.变量识别
首先,确定预测变量(输入)和目标变量(输出)。接下来,确定变量的数据类型和类别。
示例:- 假设,我们想要预测,学生是否会打板球(参考下面的数据集)。在这里,您需要识别预测变量、目标变量、变量的数据类型和变量的类别。
2.单变量分析
执行单变量分析的方法取决于变量类型是分类类型还是连续类型。下面是分类变量和连续变量的方法和统计度量:
- 连续变量:在连续变量的情况下,需要了解变量的集中趋势和扩散。可通过各种统计指标可视化方法测量,如下所示:
- 分类变量:对于分类变量,将使用频率表来了解每个类别的分布。还可以读取每个类别下值的百分比。可以使用两个指标来衡量它,即针对每个类别的计数和计数百分比。条形图可用作可视化效果。
注意:单变量分析还用于突出显示缺失值和异常值。
3.双变量分析
双变量分析是找出两个变量之间的关系。在预定义的显著性水平上寻找变量之间的关联和分离。我们可以对分类变量和连续变量的任意组合进行双变量分析。组合可以是:分类和分类,分类和连续以及连续和连续。在分析过程中,使用不同的方法来处理这些组合。
- 连续和连续: 在两个连续变量之间进行双变量分析时,应该查看散点图。这是找出两个变量之间关系的好方法。散点图的模式指示变量之间的关系。关系可以是线性的,也可以是非线性的。
散点图显示两个变量之间的关系,但不指示它们之间的关系强度。为了找到关系的强度,我们使用相关性。相关性在 -1 和 +1 之间变化。
相关性公式推导,查看博客协方差,协方差矩阵理论(机器学习)
-
分类和分类: 要找到两个分类变量之间的关系,可以使用以下方法:
-
双向表:可以通过创建计数和计数的双向表来开始分析关系。行表示一个变量的类别,列表示另一个变量的类别。我们显示了行和列类别的每个组合中可用的观测值的计数或计数百分比。
-
堆积柱形图: 这种方法更像是双向表的视觉形式。
-
卡方检验:该检验用于推导变量之间关系的统计显著性。此外,它还测试样本中的证据是否足够强大,可以概括更大人群的关系。卡方基于双向表中一个或多个类别中预期频率和观测频率之间的差异。它返回计算的卡方分布的概率和自由度。
-
-
分类和连续: 在探索分类变量和连续变量之间的关系时,可以为每个级别的分类变量绘制箱形图。如果水平数量较少,则不会显示统计显著性。要查看统计显著性,我们可以执行 Z 检验、T 检验或方差分析。
- Z 检验/ T 检验:-任一检验均值评估两组的均值在统计上是否彼此不同。
如果 Z 的概率很小,则两个平均值的差值更显著。T 检验与 Z 检验非常相似,但在两个类别的观测值数都小于 30 时使用。
- Z 检验/ T 检验:-任一检验均值评估两组的均值在统计上是否彼此不同。
-
方差分析:- 它评估两个以上组的平均值在统计上是否不同。
例:假设,我们要测试五种不同练习的效果。为此,我们招募了20名男性,并为4名男性(5组)分配了一种类型的锻炼。几周后记录它们的体重。我们需要找出这些练习对它们的影响是否显着不同。这可以通过比较 5 组每组 4 名男性的体重来完成。
二、特征工程
- 什么是特征工程:特征工程是从现有数据中提取更多信息的科学,对于原始数据集,没有添加任何新数据,但实际上是使原有的数据更有用。
- 特征工程的过程是什么: 本文将特征工程主要分为五步:
- 缺失值处理
- 异常值处理
- 变量转换
- 变量/特征构造
- 特性筛选及降维
1.缺失值处理
1.为什么需要处理缺失值
训练数据集中缺少数据会降低模型的拟合度,或者可能导致模型有偏差,因为我们没有正确分析行为和与其他变量的关系。它可能导致错误的预测或分类。
请注意上图中的缺失值:在左侧场景中,我们尚未处理缺失值。从这个数据集中推断,男性打板球的机会高于女性。另一方面,如果您查看第二个表格,该表显示了处理缺失值(基于性别)后的数据,我们可以看到与男性相比,女性打板球的机会更高。
2.为什么数据存在缺失值
前文以及论述处理数据集中缺失值的重要性,接下来分析出现缺失值的原因。主要发生在两个阶段:
- 数据提取:提取过程可能存在问题。在这种情况下,我们应该与数据监护人仔细检查数据是否正确。
- 数据收集:这些错误发生在数据收集时,往往较难纠正。它们可以分为四种类型:
- 完全随机丢失:当所有观测值的缺失变量概率相同时,会出现这种情况。例如,收集数据时,采访者有50%的概率不透露收入。
- 随机失踪: 这是随机缺少变量并且缺失比率因其他输入变量的不同值/水平而异的情况。例如:我们正在收集年龄数据,与男性相比,女性的缺失值更高。
- 缺少它取决于未观察到的预测因子:当缺失值不是随机的并且与未观察到的输入变量相关时,会出现这种情况。例如:在医学研究中,如果特定的诊断引起不适,那么退出研究的可能性就会更高。这个缺失值不是随机的,除非我们将“不适”作为所有患者的输入变量。
- 缺少取决于缺失值本身: 在这种情况下,缺失值的概率与缺失值本身直接相关。例如:收入较高或较低的人可能会对他们的收入做出无反应。
3.处理缺失值的方法有哪些?
-
删除:它有两种类型:成列删除和成对删除。
-
在成列删除中,删除缺少任何变量的观察结果。简单性是此方法的主要优点之一,但此方法会降低模型的功效,因为它减少了样本量。
-
在成对删除中,我们对存在感兴趣变量的所有情况进行分析。这种方法的优点是,它可以保留尽可能多的案例可供分析。这种方法的缺点之一是它对不同的变量使用不同的样本量。
-
当缺失数据的性质为“完全随机缺失”时,使用删除方法,否则非随机缺失值可能会使模型输出产生偏差。
-
-
均值/众数/中位数插补:插补是一种用估计值填充缺失值的方法。目标是使用可以在数据集的有效值中识别的已知关系来帮助估计缺失值。均值/众数/中位数插补是最常用的方法之一。它包括用该变量的所有已知值的平均值或中位数(定量属性)或模式(定性属性)替换给定属性的缺失数据。它可以有两种类型:
- 广义插补:在这种情况下,我们计算该变量的所有非缺失值的平均值或中位数,然后将缺失值替换为平均值或中位数。如上表所示,变量“Manpower”缺失,因此我们取“Manpower”(28.33)的所有非缺失值的平均值,然后用它替换缺失值。
- 类似案例归因:在这种情况下,我们分别计算非缺失值的性别“男性”(29.75)和“女性”(25)的平均值,然后根据性别替换缺失值。对于“男性”,我们将用 29.75 替换缺失的人力值,将“女性”替换为 25。
-
预测模型:预测模型是处理缺失数据的复杂方法之一。在这里,创建了一个预测模型来估计将替代缺失数据的值。将数据集分为两组:一组没有变量缺失值,另一组有缺失值。第一个数据集成为模型的训练数据集,第二个具有缺失值的数据集是测试数据集,具有缺失值的变量被视为目标变量。之后创建一个模型来根据训练数据集的其他属性预测目标变量,并填充测试数据集的缺失值。可以使用回归、方差分析、逻辑回归和各种建模技术来执行此操作。这种方法有两个缺点:
- 模型估计值通常比真实值表现更好。
- 如果数据集中的属性与缺失值的属性没有关系,那么模型估计缺失值将不准确。
-
KNN 插补:在这种插补方法中,使用与缺失值的属性最相似的给定数量的属性来插补属性的缺失值。使用距离函数确定两个属性的相似性。它也有一定的优势和劣势。
- 好处:
- k-最近邻可以预测定性和定量属性
- 不需要为每个缺少数据的属性创建预测模型
- 可以轻松处理具有多个缺失值的属性
- 考虑了数据的相关结构
- 坏处:
- KNN 算法在分析大型数据库时非常耗时。它搜索所有数据集以寻找最相似的实例。
- k 值的选择非常关键。较高的 k 值将包括与我们需要的显着不同的属性,而较低的 k 值意味着丢失重要属性。
- 好处:
在处理完缺失值之后,接下来的任务就是处理异常值。
2.异常值检测与处理技术
1.什么是异常值?
离群值是一种观察结果,它看起来很远并且偏离了样本中的整体模式。举个例子,做客户画像时,发现客户的平均年收入是80万美元。但是,有两个客户的年收入分别为 4 美元和 420 万美元。这两个客户的年收入与其他人群差距明显。这两个观察结果将被视为异常值。
2.异常值有哪些类型?
异常值可以有两种类型: 单变量和多变量。上文讨论了单变量离群值的例子。当查看单个变量的分布时,可以找到这些异常值。多变量异常值是 n 维空间中的异常值。为了找到它们,必须查看多维分布。
举个例子,假设我们正在理解身高和体重之间的关系。下面,有身高、体重的单变量和双变量分布。看看箱线图。我们没有任何异常值(高于和低于 1.5*IQR,最常用的方法)。现在看看散点图,在这里,有两个低于和一个高于特定体重和身高分布的异常点。
3.什么导致异常值?
每当我们遇到异常值时,解决它们的理想方法是找出产生这些异常值的原因。处理它们的方法将取决于它们发生的原因。异常值的原因可分为两大类:
- 人工(错误)/非自然
- 自然
- 数据输入错误: 人为错误,例如在数据收集、记录或输入过程中引起的错误,可能会导致数据出现异常值。例如:客户的年收入为 100,000 美元。不小心,数据输入操作员在图中多加了一个零。现在收入变成 1,000,000 美元,增加了 10 倍。显然,与其他人群相比,这将是异常值。
- 测量误差: 这是异常值的最常见来源。这是由于使用的测量仪器出现故障造成的。例如:有 10 台称重机。其中9条正确,1条错误。故障机器上的人测量的体重将高于/低于组中其他人。在有故障的机器上测量的重量可能会导致异常值。
- 实验误差: 异常值的另一个原因是实验误差。例如:在 7 名跑步者的 100 米短跑中,一名跑步者错过了专注于“开始”的呼叫,导致他迟到了。因此,这导致跑步者的跑步时间比其他跑步者多。他的总运行时间可能是一个异常值。
- 故意离群值: 这常见于涉及敏感数据的自我报告措施中。例如:青少年通常会少报他们的饮酒量。他们中只有一小部分会报告实际价值。这里的实际值可能看起来像异常值,因为其余的青少年都在报告消耗量。
- 数据处理错误: 每当我们进行数据挖掘时,我们都会从多个来源提取数据。一些操作或提取错误可能会导致数据集中出现异常值。
- 抽样误差: 比如我们要测量运动员的身高。我们错误地在样本中包含了一些篮球运动员。这种包含很可能会导致数据集中出现异常值。
- 自然误差: 当异常值不是人为的(由于错误)时,它就是自然异常值。
4.异常值对数据集有什么影响?
异常值可以极大地改变数据分析和统计建模的结果。数据集中的异常值有许多不利影响:
- 它增加了误差方差并降低了统计检验的功效
- 如果异常值是非随机分布的,它们会降低正态性
- 他们可能会产生偏差或影响可能具有实质性意义的估计
- 它们还会影响回归、方差分析和其他统计模型假设的基本假设。
为了深入了解影响,让我们举个例子来检查数据集中有和没有异常值的数据集会发生什么。
例子:
具有异常值的数据集具有显著不同的均值和标准差。在第一种情况下,我们会说平均值是 5.45。但有了异常值,平均值飙升至 30。这将完全改变估计。
5.如何检测异常值?
最常用的检测异常值的方法是可视化。我们使用了各种可视化方法,如Box-plot、Histogram、Scatter Plot(上面,我们使用了 box plot 和 scatter plot 进行可视化)。一些分析师还使用各种经验法则来检测异常值。他们之中有一些是:
- 超出 -1.5 x IQR 至 1.5 x IQR 范围的任何值
- 使用封顶方法。任何超出第 5 个和第 95 个百分位数范围的值都可以被视为异常值
- 数据点,偏离平均值三个或更多标准偏差被认为是离群值
- 离群值检测只是对有影响的数据点进行数据检查的特例,它还取决于业务理解
- 双变量和多变量异常值通常使用影响指数或杠杆指数或距离来衡量。Mahalanobis 距离和 Cook’s D 等热门指标经常用于检测异常值。这里推荐一个多变量异常值检测工具包PyOD,之后会专门写一篇文章介绍该工具包。
6.如何去除异常值?
大多数处理异常值的方法类似于缺失值的方法,如删除观察值、转换它们、分箱、将它们视为一个单独的组、插补值等统计方法。在这里,我们将讨论用于处理异常值的常用技术:
-
删除观察值: 如果由于数据输入错误、数据处理错误或异常值数量非常小,可以删除离群值。还可以在两端使用修剪来去除异常值。
-
转换和装箱值: 转换变量也可以消除异常值。值的自然对数减少了由极值引起的变化。分箱也是变量变换的一种形式。对变量进行分箱,决策树算法可以很好地处理异常值。还可以使用为不同的观察值分配权重。
-
插补: 与缺失值插补一样,也可以使用均值、中值、众数等方法插补异常值。在估算值之前,应该分析它是自然异常值还是人为异常值。如果它是人为的,可以使用估算值。除上述方法,还可以使用统计模型来预测异常值的观察值,然后用预测值来估算它。
-
分开处理: 如果有大量异常值,我们应该在统计模型中分开处理。一种方法是将两个组视为两个不同的组,并为两个组构建单独的模型,然后组合输出。
3.变量转换
1.什么是变量转换?
在数据建模中,转换是指用函数替换变量。例如,用平方根/立方根或对数 x 替换变量 x 是一种转换。换句话说,转换是改变变量与其他变量的分布或关系的过程。
2.什么时候应该使用变量转换?
以下是需要进行变量转换的情况:
-
当我们想要更改变量的比例或标准化变量的值以便更好地理解时。如果有不同比例的数据,则此转换是必须的,但此转换不会改变变量分布的形状
-
当我们可以将复杂的非线性关系转化为线性关系时。与非线性或曲线关系相比,变量之间存在线性关系更容易理解。变换帮助我们将非线性关系转化为线性关系。散点图可用于查找两个连续变量之间的关系。这些转换也改进了预测。对数转换是这些情况下常用的转换技术之一。
-
对称分布优于偏态分布,因为它更容易解释和生成推论。一些建模技术需要变量的正态分布。因此,每当我们有偏斜分布时,我们都可以使用减少偏斜度的变换。对于右偏分布,我们取变量的平方/立方根或对数,对于左偏分布,我们取变量的平方/立方或指数。
-
变量变换也是从实现的角度(Human involvement)来完成的。让我们更清楚地了解它。在关于员工绩效的项目之一中,年龄与员工绩效直接相关,即年龄越大,绩效越好。从实施的角度来看,启动基于年龄的计划可能会带来实施挑战。然而,将销售代理分为 30 岁以下、30-45 岁和 45 岁以上三个年龄组,然后为每个组制定三种不同的策略是一种明智的方法。这种分类技术称为变量分箱。
3.变量变换的常用方法有哪些?
有多种方法可用于转换变量。正如上文讨论的,其中一些包括平方根、立方根、对数、合并、倒数等等。让我们通过强调这些转换方法的优缺点来详细了解这些方法。
- 对数:变量的对数是一种常用的变换方法,用于改变变量在分布图上的分布形状。一般用于减小变量的右偏度。但是,它也不能应用于零值或负值。
- 平方根/立方根:变量的平方根和立方根对变量分布有很好的影响。但是,它不如对数变换那么重要。立方根有它自己的优势。它可以应用于包括零在内的负值。平方根可以应用于包括零在内的正值。
- Binning:用于对变量进行分类。它是根据原始值、百分位数或频率执行的。分类技术的决策基于业务理解。例如,我们可以将收入分为三类,即:高收入、平均收入和低收入。 我们还可以根据多个变量的值执行协变量分箱。
4.特征/变量构造
1.什么是特征/变量构造及其好处?
特征/变量构造是基于现有变量生成新变量/特征的过程。例如,我们将 date(dd-mm-yy) 作为数据集中的输入变量。我们可以生成新的变量,如日、月、年、周、工作日,这些变量可能与目标变量有更好的关系。此步骤用于突出显示变量中的隐藏关系:
有多种技术可以创建新特征。让我们看看一些常用的方法:
- 构造派生变量:这是指使用一组函数或不同的方法从现有变量创建新变量。我们通过“泰坦尼克号-Kaggle竞赛”来看。在这个数据集中,变量 age 有缺失值。为了预测缺失值,使用姓名的称呼(Master、Mr、Miss、Mrs)作为新变量。如何决定创建哪个变量?老实说,这取决于分析师对业务的理解、他的好奇心以及他可能对问题的假设集。变量取对数、变量分箱等变量变换方法也可用于创建新变量。
- 构造虚拟变量:虚拟变量最常见的应用之一是将分类变量转换为数值变量。虚拟变量也称为指示变量。在统计模型中将分类变量作为预测变量很有用。分类变量可以取值 0 和 1。让我们取一个变量“性别”。我们可以生成两个变量,即“ Var_Male ”,值为 1(男性)和 0(无男性),“ Var_Female ”,值为 1(女性)和 0(无女性)。我们还可以为具有 n 或 n-1 个虚拟变量的两类以上的分类变量创建虚拟变量。
总结
在数据探索及特征工程上投入的质量和努力可以觉得模型的好坏,在提出改进的模型之前,我们需要多次迭代特征工程。
后续数据探索和特征工程的相关内容,会分别更新在《数据探索》与《特征工程》两个专栏,本文特征工程的第四部分“构造虚拟变量”及第五部分“特征筛选及降维”有单独文章进行论述,特性筛选及降维。
以上是关于EDA与特征工程数据探索与特征工程综合指南的主要内容,如果未能解决你的问题,请参考以下文章
特征工程-EDA(Exploratory Data Analysis)