数据科学项目中的数据准备:年轻家庭主妇的食谱



上一篇文章中,我讨论了基于IBM方法论材料的数据科学项目的结构:其结构,组成的阶段,在每个阶段要解决的任务。 现在,我要概述最耗时的阶段,该阶段可能会占用项目总时间的90%:这是与数据准备相关的阶段-收集,分析和清理。

在该方法的原始描述中,将“数据科学”项目与菜肴的准备工作进行了比较,将分析师与厨师进行了比较。 因此,将数据准备阶段与产品准备阶段进行比较:在分析业务任务阶段决定要准备的菜肴的配方后,我们需要在一个地方找到,收集,清洁和切割食材。 因此,这道菜的味道将取决于这一阶段的执行情况(假设我们猜中了配方,特别是因为在公共领域有很多配方)。 处理配料(即准备数据)始终是一项耗费珠宝且费力的工作:一种变质或未洗的产品-所有工作都被浪费了。

资料收集


收到可能需要的成分清单后,我们将继续搜索数据以解决问题,并形成一个样本,供将来使用。 回想一下为什么需要一个样本:首先,我们在数据准备阶段使用它来了解数据的性质,其次,我们将在模型的开发和配置阶段从中形成测试和训练样本。


当然,我们不会遇到这样的情况,当您面临被严格的NDA 击中的威胁时,您必须了解有关大型项目中数据的某些知识,而您却从闪存驱动器上或作为信件的附件接收到了一位重要客户的数据。 假设您做得很好并且可以访问数据。 在此阶段,有必要准备一个样本,该样本将:

  1. 反映了人口的所有必要属性
  2. 工作很方便,就是不要太大。

在大数据时代,为什么要限制自己的数据量呢? 在社会学上,这通常是不可用的总体人口:当我们研究舆论时,即使在理论上也不可能质疑所有人。 或在医学中,正在对一定数量的实验兔/小鼠/果蝇研究一种新药:研究组中的每个其他对象昂贵,麻烦且困难。 但是,即使实际上我们可以使用全部人口,大数据也需要合适的基础设施来进行计算,其本身的部署成本很高(我们谈论的不是现成的和配置好的基础设施触手可及的情况)。 也就是说,即使理论上可以计算所有数据,通常也会发现它很长,昂贵且通常是为什么,因为如果您准备一个高质量的样本,尽管样本量很小,例如由几千条记录组成,那么您可以不需要所有这些。

创建样本所花费的时间和精力使您可以将更多的时间用于数据挖掘:例如,异常值或丢失的数据可能包含有价值的信息,但是在数百万条记录中却找不到,而在几千条记录中则完全找不到。

如何评估数据的代表性?


为了了解样本的代表性,常识和统计数据对我们很有用。 对于分类数据,我们需要确保在样本中,从业务问题的角度来看,每个重要属性均以与普通人群相同的比例显示。 例如,如果我们在诊所检查患者的数据,并且该问题涉及各个年龄段的人,那么仅包含儿童的样本将不适合我们。 对于历史数据,值得检查的是数据是否覆盖了代表性的时间间隔,在此时间间隔内,正在研究的要素将采用所有可能的值。 例如,如果我们分析对政府机构的申诉,那么一月份第一周的数据很可能不适合我们,因为此时申诉的下降幅度在下降。 对于数字符号,计算基本统计量是有意义的(当然,至少要点统计量:平均值,中位数,变异性,并与一般人群的类似统计量进行比较)。

数据收集问题


我们经常缺少数据。 例如,信息系统发生了变化,旧系统中的数据不可用,或者数据结构不同:使用了新密钥,并且不可能在新旧数据之间建立连接。 当数据由不同所有者拥有时,组织问题也很常见,并且并非每个人都可以配置成花费时间和资源来上载第三方项目。

在这种情况下该怎么办? 有时结果是找到替代品:如果没有新鲜的西红柿,那么罐装的西红柿就会出现。 而且,如果发现胡萝卜全部烂了,则需要去市场购买新的胡萝卜。 因此,很可能在这个阶段我们需要返回到上一个阶段,在该阶段我们分析了业务任务并想知道是否可以以某种方式重新提出该问题:例如,我们无法明确确定哪个版本的在线商店页面更好销售产品(例如,没有足够的销售数据),但是我们可以说用户在哪些页面上花费更多的时间,哪些页面上的失败更少(非常短的浏览会话需要几秒钟)。


探索性数据分析


假设已接收到数据,并且可以确信它们反映了总体情况,并且包含对所提出的业务任务的答复。 现在需要对其进行检查,以了解我们手中数据产品的质量以及它们是否适合预期的配方。 假设我们已经采取了一些记录示例,整理出键是什么以及键包含的数据类型:数字,二进制,类别。 之后,您可以开始分别研究每种症状。 研究的主要工具是描述性统计。


中央职位评估


在研究的第一阶段,最好了解每个特征的典型值。 最简单的估计是算术平均值:一个简单且众所周知的指标。 但是,如果数据分散很大,那么平均值将不能告诉我们很多典型值:例如,我们想了解医院的工资水平。 为此,将包括董事在内的所有雇员的薪水加起来,其收入是护士的几倍。 所获得的算术平均值将高于任何雇员(董事除外)的薪水,并且不会告诉我们任何有关典型薪水的信息。 该指标仅适合向卫生部报告,卫生部将自豪地报告加薪。 所获得的值太容易受到极限值的影响。 为了避免异常值(非典型值,极限值)的影响,使用了其他统计数据:中位数,该中位数被计算为排序值中的中心值。

如果数据是二进制或分类的,则应找出哪些值更常见,哪些值不那么常见。 为此,请使用mod:最常用的值或类别。 这尤其有助于理解样品的代表性:例如,我们检查了患者病历的数据,发现⅔卡属于女性。 这会让您想知道采样时是否有错误。 为了显示相对于彼此的类别比率,数据的图形表示非常有用,例如以条形图或饼图的形式。

评估数据变异性


确定样本的典型值后,我们可以查看非典型值-离群值。 辐射可以告诉我们有关数据质量的一些信息:例如,它们可能是错误的迹象:维数混乱,小数位丢失或编码曲线。 他们还谈到数据变化多少,所研究特征的极限值是多少。

接下来,我们可以对数据变化多少进行总体评估。 变异性(也是分散性)表明特征值有多少不同。 测量变异性的一种方法是评估特征与中心值的典型偏差。 显然,平均这些偏差不会给我们太多,因为负偏差会抵消正偏差。 考虑到偏差的绝对值(方差是平方偏差的平均值,标准偏差是方差的平方根),最著名的方差估计是方差和标准偏差。

另一种方法是基于对排序数据的分布的考虑(对于大型数据集,不使用这些度量,因为您必须首先对值进行排序,这本身就很昂贵)。 例如,使用百分位数进行评估(您也可以找到百分位数)。 第N个百分位-这些值使得至少N%的数据采用此值或更大的值。 为了防止异常值敏感,可以从每个端降低值。 公认的变异性度量是第25个百分位数与第75个百分位数之间的差-四分位数范围。

数据分布调查


在使用广义数值特征评估数据之后,我们可以估算数据整体的外观。 使用可视化建模工具-图形可以最方便地完成此操作。

图表最常用的类型是箱形图(或带有胡子的框)和条形图。 一个带有胡须的盒子-一种方便紧凑的选择表示,使您可以在一幅图像上看到几个研究过的特征,因此可以将它们相互比较。 否则,这种图表称为“箱须图”或“箱图”。 这种图表以易于理解的形式显示中位数(或(如果需要,平均值)),下四分位数和上四分位数,样本的最小和最大值以及离群值。 这些框中的几个可以并排绘制,以在视觉上比较一个分布和另一个分布。 它们可以水平和垂直放置。 框的不同部分之间的距离使您可以确定散布程度(散布),数据不对称并确定异常值。


众所周知的直方图也是有用的工具-频率表的可视化,其中频率间隔绘制在X轴上,而数据量绘制在Y轴上。条形图对于研究历史数据也将非常有用:它将帮助您了解记录是如何随时间分布的,以及你能相信他们吗? 使用该图,可以同时识别采样错误和损坏的数据:意外位置中的突发事件或与未来相关的记录的存在可以检测数据格式的问题,例如,样本部分中的混合日期格式。

相关性


在查看了所有变量之后,我们需要了解其中是否还有其他变量。 为此,使用相关系数-一种度量指标,用于度量数值变量之间的相关程度,并采用介于1到-1之间的值。 相关矩阵是一个表,其中行和列是变量。 单元格值是这些变量之间的相关性。 散点图-沿x轴的一个变量的值,沿y轴的-另一个。

数据清理


在检查了数据之后,需要对其进行清理并可能进行转换。 在这一阶段,我们必须得到以下问题的答案:我们如何准备数据以尽可能高效地使用数据? 我们需要清除错误的数据,处理缺失的记录,删除重复项,并确保所有内容的格式正确。 同样在此阶段,我们定义了一组功能,将在这些功能上进一步构建机器学习。 该阶段的执行质量将确定数据中的信号对于机器学习算法是否可区分。 如果我们正在处理文本,则可能需要其他步骤才能将非结构化数据转换为适合在模型中使用的一组属性。 数据准备是下一步构建的基础。 与烹饪过程一样,只有一种变质或未剥皮的食材会破坏整道菜。 处理数据时任何粗心大意都可能导致该模型无法显示出良好的结果,并且必须退后几步。


删除不需要的条目


最早的数据清除操作之一是删除不必要的记录。 它包括两个步骤:删除重复或错误的条目。 在研究异常值和非典型值时,我们在前一阶段发现了错误的值。 我们可以从各种来源收到相似的数据,以获得重复的数据。

结构误差校正


在很多情况下,相同的类别可以使用不同的名称(更糟的是,当不同的类别使用相同的名称时):例如,在莫斯科政府的公开数据中,施工数据每季度显示一次,但当年的总量以年份为单位,而在一些记录被指定为第四季度。 在这种情况下,我们将还原正确的类别值(如果可能)。

如果必须使用文本数据,则至少需要执行以下操作:删除空格,删除所有格式,对齐大小写,更正拼写错误。

离群值去除


对于机器学习任务,样本中的数据不应包含异常值,并且应尽可能标准化,因此必须删除单位限制值。

缺少数据管理


处理丢失的数据是清理数据中最困难的步骤之一。 通常,对于大多数算法而言,缺少一部分数据是一个问题,因此您要么不必使用缺少一部分数据的记录,要么尝试根据有关数据性质的任何假设来还原丢失的记录。 同时,我们了解到填补数据空白(无论我们的处理方式多么复杂)并不是在添加新信息,而只是添加了一个拐杖,可以让您更有效地利用其余信息。 两种方法都不那么火,因为无论如何我们都会丢失信息。 但是,缺乏数据本身可能就是一个信号。 例如,我们检查了加油数据,缺少传感器数据可能是违规的明显迹象。

在处理分类数据时,最好的办法是将此类数据标记为“缺失”。 实际上,此步骤涉及添加新的分类数据类。 一种类似的方法是处理数字类型的缺失数据:您需要以某种方式标记缺失的数据,例如,将缺失的数据替换为零。 但是您需要记住,零并不总是适合。 例如,我们的数据是计数器读数,并且不能将读数的缺失与数据值中的实零混淆。

数据清理工具


通常,数据清洗不是一次性事件;很可能我们将不得不向样品中添加新数据,而这又必须通过已开发的清洗程序进行。 为了优化流程,最好使用专门的应用程序(当然,除了Excel'I,它也可能很有用),例如:

  • Talend Data Preparation是一个免费的桌面应用程序,具有可视界面,可简化和自动化数据清理任务:它允许您构建自定义数据处理管道。 您可以在Talend中使用各种数据源,包括csv文件或Excel数据。
  • OpenRefine 该工具以前称为Google Refine或Freebase Gridworks。 现在,OpenRefine是一个流行的桌面应用程序,用于清理和转换数据格式。
  • Trifacta Wrangler-一个允许您处理复杂数据类型的桌面应用程序,对于探索性数据分析也很有用。 它不需要特殊的用户培训。

好吧,当然,数据清理管道可以用任何方便的编程语言来实现-从Python到Scala,主要是处理花费了可接受的时间。


最后...


清理并转换数据后,结果可能证明数据还不够,因此,如果您必须返回到从该阶段获取数据的步骤,为选择添加更多值或寻找新的数据源,这是正常的。 这很正常。


结论


是的,准备数据不是一件容易的事,有时甚至是痛苦的事,但是在启动模型时,在此阶段花费的精力将返回一百倍:在某些情况下,即使简单的模型也可以快速显示出出色的结果,并且如果它们可以使用良好的数据就需要进行最少的校准。

希望本文对您有所帮助。

PS:用于插图的产品并未受到损害,但已用于预定目的!

Source: https://habr.com/ru/post/zh-CN470650/


All Articles