了解数据的最佳实践、技术和工具
介绍
探索性数据分析(EDA)是每个数据科学项目开始时需要进行的最重要的任务。
实质上,它涉及彻底检查和描述数据,以找到其潜在的特征、可能的异常和隐藏的模式和关系。
这种对数据的理解最终将指导您的机器学习管道的以下步骤,从数据预处理到模型构建和结果分析。
EDA的过程基本上包括三个主要任务:
- 第一步:数据集概述和描述性统计
- 第二步:特征评估和可视化
- 第三步:数据质量评估
正如您可能已经猜到的那样,每个任务都可能涉及相当广泛的分析,这将使您像疯子一样切片、打印和绘制pandas数据框。
除非您选择适合工作的正确工具。
在本文中,我们将深入探讨有效EDA过程的每个步骤,并讨论为什么您应该将“ydata-profiling”作为您掌握EDA的一站式商店。
为了演示最佳实践并调查见解,我们将使用成年人人口普查收入数据集,该数据集可以在Kaggle或UCI存储库(许可证:CC0:公共领域)上免费使用。
第一步:数据概览和描述性统计
当我们首次接触未知数据集时,会立即产生一个自动的想法:我正在处理什么?
我们需要深入了解我们的数据,以便在未来的机器学习任务中高效地处理它
作为一个经验法则,我们传统上通过相对观察数据来开始对数据进行表征,比如观测次数、特征数量和类型、整体缺失率和重复观测百分比。
通过一些pandas操作和正确的速查表,我们最终可以用一些简短的代码片段打印出上述信息:
数据集概述:成年人人口普查数据集。观测数量、特征数量、特征类型、重复行和缺失值。作者片段。
总的来说,输出格式并不理想… 如果您熟悉pandas,您也将知道开始EDA过程的标准操作方式——df.describe()
:
然而,这仅考虑了数字特征。我们可以使用df.describe(include ='object')
打印有关分类特征的一些其他信息(计数、唯一值、模式、频率),但简单检查现有类别将涉及一些更冗长的内容:
数据集概述:成年人人口普查数据集。打印数据中每个分类特征的现有类别及其相应的频率。作者片段。
然而,我们可以使用一行代码完成这个任务——以及所有随后的EDA任务!,使用“ydata-profiling”:
成年人人口普查数据集的分析报告,使用ydata-profiling。作者片段。
以上代码生成了数据的完整分析报告,我们可以使用它来进一步推动我们的EDA过程,而无需编写任何其他代码!
我们将在以下各节中介绍报告的各个部分。关于数据的总体特征,我们要查找的所有信息都包含在概述部分中:
我们可以看到,我们的数据集包含15个特征和32561个观测值,有23个重复记录,总体缺失率为0.9%。此外,数据集已被正确识别为表格数据集,而且相当异质,同时呈现出数值和分类特征。对于时间序列数据,由于其具有时间依赖性和不同类型的模式,ydata-profiling
将在报告中合并其他统计和分析。
在进行更复杂的分析之前,我们可以进一步查看原始数据和现有的重复记录,以便对特征有一个整体了解:
从数据样本的简要预览中,我们可以立即看到,尽管整体缺失数据的百分比很低,但是某些特征可能会受到更严重的影响。我们还可以确定某些特征有相当数量的类别和值为0(或至少有大量0值)的特征。
关于重复行,发现“重复”观测结果并不奇怪,因为大多数特征表示多个人可能同时“适合”其中。但是,也许“数据异常”是这些观测结果共享相同的年龄
值(这是可能的)以及完全相同的fnlwgt
,考虑到呈现的值,这似乎更难以置信。因此,需要进行进一步的分析,但我们应该最好稍后删除这些重复项。
总体而言,数据概述可能是一个简单的分析,但是它对于我们定义管道中的即将到来的任务具有极大的影响。
步骤2:特征评估和可视化
在查看整体数据描述后,我们需要放大数据集的特征,以便了解其各自的属性- 单变量分析 -以及它们之间的相互作用和关系- 多变量分析 。
这两个任务都严重依赖于研究充分的统计和可视化,这些必须根据手头的特征类型(例如,数字,分类)定制,以及我们要分解的行为(例如,交互,相关性)。
让我们看看每个任务的最佳实践。
单变量分析
分析每个特征的个体特征至关重要,因为它将帮助我们决定它们的分析相关性和它们可能需要进行的数据准备类型以实现最佳结果。
例如,我们可能会发现值极其超出范围,可能涉及不一致或异常值。我们可能需要标准化数字数据或对分类特征执行独热编码,这取决于现有类别的数量。如果我们打算使用的机器学习算法期望特定分布(通常是高斯分布),则我们可能需要执行其他数据准备来处理被移动或偏斜的数字特征。
因此,最佳实践要求对个人属性进行彻底的调查,例如描述性统计和数据分布。
这些将突出显示需要后续任务的异常值删除,标准化,标签编码,数据插补,数据增强和其他类型的预处理。
让我们更详细地调查 race
和 capital.gain
。我们能立即发现什么?
对于 “capital.gain评估是直接的:
考虑到数据分布,我们可能会质疑该特征是否对我们的分析有任何价值,因为91.7%的值为“0”。
分析“race稍微复杂一些:
除了White
之外,其他种族的代表性明显不足。这引起了两个主要问题:
- 一个是机器学习算法普遍忽视较少表示概念的倾向,即小不相交问题,从而导致学习性能降低;
- 另一个问题在某种程度上是由此问题派生的:因为我们正在处理一个敏感特征,这种“忽视倾向”可能会产生直接与偏见和公平问题相关的后果。这绝对不是我们想要蔓延到我们的模型中的东西。
考虑到这一点,也许我们应该考虑在代表性不足的类别上执行数据增强,并考虑使用公平感知度量来评估模型,以检查与race
值相关的性能差异。
当我们讨论数据质量最佳实践(步骤3)时,我们将详细说明需要解决的其他数据特征。这个例子只是展示了通过评估每个单独特征的属性,我们可以获得多少见解。
最后,需要注意的是,如前所述,不同的特征类型需要不同的统计和可视化策略:
- 数值特征通常包括均值、标准偏差、偏度、峰度和其他分位数统计信息,并且最好使用直方图图表示;
- 分类特征通常使用模式、中位数和频率表进行描述,并使用条形图进行类别分析。
使用一般的pandas操作进行这样详细的分析会很麻烦,但幸运的是,ydata-profiling
已经将所有这些功能都构建到了 ProfileReport
中,以方便我们使用:在代码片段中没有添加任何额外的代码!
多元分析
对于多元分析,最佳实践主要关注两个策略:分析特征之间的交互作用和分析它们的相关性。
分析交互作用
交互作用让我们直观地探索每对特征的行为方式,即一个特征的值如何与另一个特征的值相关联。
例如,它们可能会表现出正或负的关系,这取决于一个特征值的增加是否与另一个特征值的增加或减少相关。
ydata-profiling:Profiling Report-Interactions。作者提供的图片。
以age
和hours.per.week
之间的交互作用为例,我们可以看到绝大多数的工作人员的标准工作时间为40小时。然而,在30至45岁之间有一些“忙碌的蜜蜂”在工作超过这个时间(高达60或甚至65小时)。20多岁的人不太可能过度工作,并且可能在某些周有更轻松的工作时间表。
分析相关性
与交互作用类似,相关性让我们分析特征之间的关系。然而,它们“赋予其一个值”,使我们更容易确定该关系的“强度”。
这种“力量”是由相关系数来衡量的,并且可以通过数字方式(例如检查相关矩阵)或使用热力图来分析,它使用颜色和阴影来视觉突出有趣的模式:
ydata-profiling:分析报告 – 热力图和相关矩阵。作者的录屏。
关于我们的数据集,请注意教育和教育编号之间的相关性。实际上,它们持有相同的信息,而教育编号只是对教育值进行分箱处理。
另一个引起注意的模式是性别和关系之间的相关性,尽管不是非常有信息量:查看两个特征的值,我们会发现这些特征很可能相关,因为男性和女性分别对应于丈夫和妻子。
这些类型的冗余可能会被检查,以确定是否可以从分析中删除其中一些特征(例如,婚姻状况
也与关系
和性别
有关;原生国家
和种族
等等)。
ydata-profiling:分析报告 – 相关性。作者的图片。
然而,有一些其他相关性也很突出,这些可能对我们的分析有趣。
例如,性别
和职业
之间的相关性,或性别
和每周工作小时数
之间的相关性。
最后,收入和其余特征之间的相关性真正具有信息量,特别是在我们试图制定分类问题的映射时。了解哪些特征与我们的目标类最相关可以帮助我们识别最具区分性的特征,并找到可能影响我们的模型的数据泄漏者。
从热图中可以看出,婚姻状况
或关系
是最重要的预测因子之一,而fnlwgt
似乎对结果没有太大影响。
类似于数据描述符和可视化,交互和相关性也需要关注手头的特征类型。
换句话说,不同的组合将用不同的相关系数来衡量。默认情况下,ydata-profiling
在auto
上运行相关性,这意味着:
- 数值与数值之间的相关性使用Spearman的等级相关系数来衡量;
- 分类与分类之间的相关性使用Cramer’s V来衡量;
- 数值与分类之间的相关性也使用Cramer’s V,其中数值特征首先被离散化;
如果您想检查其他相关系数(例如Pearson,Kendall,Phi),您可以轻松配置报告参数。
步骤3:数据质量评估
随着我们走向以数据为中心的AI开发范式,掌握数据中可能出现的复杂因素是至关重要的。
所谓“复杂因素”,是指在数据收集或处理过程中可能出现的错误,或者是数据固有的特征,仅仅是数据本身性质的反映。
这些包括缺失数据、不平衡数据、常数值、重复值、高度相关或冗余特征、嘈杂数据等等。
数据质量问题:错误和数据固有特征。作者的图片。
在项目开始时(并在开发过程中持续监控),发现这些数据质量问题至关重要。
如果在模型构建阶段之前没有识别和解决它们,它们可能会危及整个机器学习流程以及可能从中得出的后续分析和结论。
如果没有自动化流程,识别和解决这些问题的能力将完全留给进行EDA分析的人的个人经验和专业知识,这显然是不理想的。此外,考虑到高维数据集,这是一种巨大的负担!
这是ydata-profiling
最受欢迎的功能之一,它可以自动生成数据质量警报:
ydata-profiling:分析报告-数据质量警报。作者:图片。
概要至少输出5种不同类型的数据质量问题,即重复
,高相关性
,不平衡
,缺失
和零
。
事实上,在步骤2中我们已经发现了一些问题:race
是一个高度不平衡的特征,而capital.gain
主要由0填充。我们还看到了education
和education.num
之间以及relationship
和sex
之间的紧密相关性。
分析缺失数据模式
在考虑全面的警报范围内,ydata-profiling
在分析缺失数据模式方面尤其有帮助。
由于缺失数据在现实世界的领域中非常常见,可能会完全影响某些分类器的应用或严重地影响它们的预测,因此另一个最佳实践是仔细分析缺失数据百分比和我们的特征可能显示的行为:
ydata-profiling:分析报告-分析缺失值。作者:screencast。
从数据警报部分,我们已经知道workclass
,occupation
和native.country
有缺失观察值。 热图进一步告诉我们在occupation
和workclass
中存在直接关系的缺失模式:当一个特征值缺失时,另一个特征值也将缺失。
关键见解:数据配置超越了EDA!
到目前为止,我们一直在讨论组成彻底EDA过程的任务以及如何评估数据质量问题和特征 – 我们可以称之为数据配置的过程 – 绝对是最佳实践。
然而,重要的是要澄清数据配置超越了EDA。虽然我们通常将EDA定义为在开发任何类型的数据管道之前的探索性交互式步骤,但数据配置是一个迭代过程,应在数据预处理和模型构建的每个步骤中都发生。
结论
有效的EDA为成功的机器学习流程打下了基础。
就像对数据进行诊断一样,学习有关它包含的一切信息——它的属性、关系、问题——以便您以最佳方式解决它们。
这也是我们启发阶段的开始:EDA将引发问题和假设,计划验证或在途中拒绝。
在整篇文章中,我们介绍了三个主要的基本步骤,将指导您进行有效的EDA,并讨论了拥有一流工具ydata-profiling
的影响-它指引我们朝着正确的方向,节省了大量时间和精力负担。
希望这个指南可以帮助您掌握“玩转数据侦探”的艺术,一如既往,非常感谢您的反馈、问题和建议。请让我知道您希望我写些什么其他主题,或者更好的是,来参加数据中心人工智能社区,让我们一起合作吧!
Miriam Santos专注于教育数据科学和机器学习社区如何从原始、肮脏、“糟糕”或不完美的数据中转变为智能、高质量的数据,使机器学习分类器能够在多个行业(金融科技、医疗保健和制药、电信和零售)中绘制准确可靠的推论。
原文。已获得授权转载。