取消
搜索历史
热搜词
原创
活动
产业创新
转型理念
ENI专访
当前位置:首页 >文章发布 > 正文
如何从整体视角设计量化的数据质量指标
来源:数据驱动智能  作者: 王建峰 2024-01-09 09:07:56
衡量数据质量并不是一个新领域。数据分析工具已上市十多年,可帮助数据工程师更好地了解数据中的内容以及可能需要修复的内容。

一 整体数据质量评分的必要性

衡量数据质量并不是一个新领域。数据分析工具已上市十多年,可帮助数据工程师更好地了解数据中的内容以及可能需要修复的内容。在数据分析的早期,尽管此类工具可以提供丰富的功能来查看数据集的质量,但回答这些简单的问题并不容易:

该数据集的整体质量如何?

这两个数据集哪个数据质量更好?

该数据集的数据质量与上个月相比如何?

使用单一数据分析工具,也可以通过使用不同的功能从不同的角度查看数据来评估数据集的质量:

您可以使用数据分析器收集的统计信息来确定数据集中检测到的哪些值或格式在每列中应被视为有效或无效。

您可以将每列的域有效性定义为有效值的最小/最大范围,或者将其指向参考值列表。

您可以检测或为每列分配数据类,并搜索与预期数据类不匹配的值。

您可以查看缺失值。

您可以识别候选主键并搜索意外的重复值。

您可以识别表之间的主外键 (PK-FK) 关系,并搜索外键列中的孤立值,这些值在关系的主键上找不到。

您可以定义数据规则来设置对数据的任何重要的附加期望。

此列表仅涵盖信息分析器的数据分析和质量功能可以告诉您的数据内容。尽管每个功能本身都很强大,并且可以为专家提供有趣的单独指标,但它们的结果并不适合回答本文简介中列出的简单问题。其主要原因是,人类不擅长相互比较多维指标,特别是如果这些结果不包含完全相同的指标,或者是根据具有不同行数、列数的不同数据集计算得出的,或者具有不同的数据集。它们应该匹配的约束或规则。

由于数据湖、数据科学、数据治理以及所有这些围绕数据的新型活动的出现,数据目录变得越来越重要,数据质量不仅对专家用户很重要,而且需要让非专家能够理解。这些用户需要以自助服务模式找到具有合适质量的合适数据集。对于这种情况,很明显需要一个更简单的指标来很好地了解数据集的质量水平,而不必查看细节。

\

二 如何设计良好的数据质量评分

鉴于数据质量可以从不同的角度看待并通过不同的指标来衡量,例如我之前列出的几个指标,计算质量分数的公式不一定是显而易见的。为了更好地理解让我们首先看看针对此类分数的要求:

数据质量分数应该简单易懂:在目录中查看大量数据集时,应该可以快速识别高质量或低质量的数据集,而不必查看细节。

数据质量得分不应取决于数据集的行数、列数或约束设置:例如,如果通过分析数据的所有行来计算,大型数据集的数据质量得分应该或多或少相同设置就像在较小的样本上计算一样 - 假设采样足够好以具有统计代表性。

数据质量得分应与其他数据质量得分具有可比性,即使每个得分使用的指标不同或比较的数据集具有不同的行数和列数。

最高分数范围,以便用户可以看到数据集的数据质量与理想水平的差距有多大。

为了定义一个公式,可以将各种数据质量函数计算的不同指标转换为符合这些要求的分数,我们首先需要形式化我们对一般数据质量概念和特别是数据质量分数背后的理解。。

数据质量有多种定义。您可以在维基百科上看到其中的一些。但一个简单的定义可能是:

衡量数据集的数据质量是衡量数据集与对数据的期望的匹配程度。

这意味着数据质量得分只能取决于对数据的期望,而不取决于某些原始结果数量。

这听起来似乎很明显,但这意味着如果我们在某一列中发现大量缺失值,但我们确实期望该列中存在缺失值,或者我们不关心那里的缺失值,那么该列的数据质量得分数据集不应该因为发现缺失值而被降级。

这也意味着,如果我们对数据没有具体的期望,那么无论数据是什么,数据质量得分都应该是最大的。

这些简单明显的事实对于设置指标的架构非常重要。

三 约束的概念和数据质量问题

让我们定义一些在数据质量得分计算中发挥重要作用的概念:

我们对数据的期望就是我们所说的约束。约束可以用不同的形式来表达:

它可以是在列上设置的简单标志,以指示该列中的值不应为空,或应不同,或不应带符号。

它可以是列的域有效性的定义,设置为最终的最小或最大允许值,也可以是指向定义列的可接受域的参考值列表的指针

它可以是分配给列的数据类,它不仅描述列的内容,还可以用于识别不符合列的预期域的值。

它可以是两个数据集之间已识别的关系,设置多个列之间的相关性或功能依赖性。

它可以是表达非平凡类型的约束的数据规则,甚至可能涉及多个表。

只要数据不满足其中一项约束条件,我们就会遇到数据质量问题。

数据质量问题是对数据集的单个单元格、单行、单列或一组列或整个数据集的特定数据质量问题类型的报告。数据质量问题报告的数据质量问题类型取决于数据未满足的约束类型。

可以以一定的频率在列或数据集上检测到数据质量问题。相对频率(以存在质量问题的列/数据集的所有值的百分比计算)就是我们所说的问题的普遍性。

例如,如果数据集有 100 行,并且在标记为必填或不可为空的列中检测到 15 个缺失值,则该列上报告问题类型为“缺失值”的数据质量问题,发生率为15 %。

四 隐式或显式约束以及数据质量问题的置信度概念

除了普遍性之外,数据质量问题也可能与置信度相关。置信度表示所报告的问题是真正问题的概率。

为了更好地理解这个概念,需要了解并非所有对数据设置的约束都是由人类指定或确认的明确约束,我们将此类指定或确认的约束称为显式约束。

如果数据质量仅根据显式约束来衡量,那么我们就不需要置信度的概念,因为所有由人类指定且不受某些数据尊重的约束都会导致数据质量置信度 100% 问题,我们确定问题是一个真正的问题,因为有人指定任何不满足此约束的内容都应被视为数据质量问题。

但如果我们只考虑显式约束,那么所有数据集都会以 100% 的分数开始,直到有人花时间查看它并指定约束。这将导致要么拥有大量具有高质量假象的数据集,要么在一个过程中需要管理员仔细审查每个摄取的数据集,这对于大量导入来说无法很好地扩展。

因此,在数据质量分析期间,系统可能会根据数据中看到的内容尝试猜测一些约束。例如,如果列的大部分数据不为空,或者它们使用相同的格式或具有任何类型的可识别模式(即使某些值不遵循这些模式),那么系统可能会假设存在一个隐式约束并且不满足它的值可能是数据质量问题。

由于隐式约束是系统根据数据中看到的内容推断出来的,因此它与置信度的概念相关联,确定系统对这应该是真实约束的确定程度。

例如,如果某列的 95% 的值是 5 位数字,但 5% 的值具有完全不同的格式,则系统可能(根据设置)假设该列存在隐式约束,即值应为 5数字,置信度为 95%。如果用户查看这个隐式约束并确认它,那么它将成为置信度为 100% 的显式约束。

检测到的质量问题的普遍性和置信度都将用于计算实际质量分数。

五 汇总为统一的质量分数

现在我们已经介绍了在数据质量评分中发挥作用的所有重要概念,让我们通过一个简单的示例了解如何计算数据质量分数:

让我们假设一个包含 3 列和 6 行的简单数据集,并确定以下数据质量问题:

\

已识别的数据质量问题及其置信度:

第 1 行违反了数据规则。由于数据规则是由用户指定的,因此它是一个显式约束,并且该问题的置信度为100%。

第 3 行是重复行,但没有明确的约束表明不应允许重复行。然而,根据数据,分析确定该数据集有 70% 的概率不应出现重复行。=>数据集存在隐式约束,表明70% 的置信度不应存在任何重复记录。

第 2 行和 Col1 列的单元格不满足定义有效域的置信度为 80% 的隐式约束。例如,如果分析确定此列的推断数据类的置信度为 80%,并且该单元格中的值与数据类不匹配,则可能会出现这种情况。

第 2 列已设置显式约束,指示该列中的所有值都应该不同,但分析发现其中有 20% 的重复值。这会导致数据质量问题,置信度为 100%,普遍率为 20%。

除此之外,第 4 行中第 2 列的值缺失,并且存在置信度 90% 的隐式约束,即该列中不应出现缺失值。

最后,第 5 行/第 3 列的单元格似乎是该列的异常值,置信度为 60%。离群值始终是隐式约束,因为没有硬性规则定义值何时为离群值。

1.单独数据质量评分

请注意,单个单元格、列或行可能存在多个数据质量问题,并且如果可能的话,不应重复计算该问题:如果单个值违反其预期数据类和预期格式,则不应重复计算该问题列或数据集的数据质量分数,因为只有一个值无效,无论该值有多少问题。

基于此,可以将数据集的单个单元格的分数计算为该值完全没有问题的概率。这可以计算为 100% 减去在行上检测到的每个问题的置信度的乘积。为了说明这一点:例如,如果我们有 90% 的信心认为单元格上存在问题,则这些值不存在问题的概率为 100–90=10%。如果问题的置信度为 100%(对于明确的约束),则该值没有问题的概率为 100–100=0%。

如果一个单元格有2个问题,一个置信度80%,另一个置信度60%,那么第一个问题不真实的概率是100%-80%=20%,第二个问题不真实的概率是100%-60%=40%,而根据概率定律,没有一个问题是真实的且单元没有数据质量问题的概率仅为20%乘以40%=8%。

现在请记住,我在本文开头提到过,也可以针对完整的行、完整的列或完整的数据集报告数据质量问题。我们需要将这些问题的影响分配到单元格的分数上。

对于针对完整行报告的问题,这很容易,因为如果该行无效,我们可以假设该行的所有值都无效。

conf(pb[row])在此表示为正在测量的单元格的行报告的一行级别数据质量问题的置信度。

然而,为完整列报告的问题需要通过使用问题的普遍性在该列的所有值之间平均分配。普遍性告诉我们,n%的值受到该问题的影响,尽管我们不确切知道哪些值有问题,哪些没有。因此,每个值的分数都会降低一个系数,该系数等于流行率乘以问题真实性的置信度。

conf(pb[col])表示为正在测量的单元格的列报告的一个列级数据质量问题的置信度,prev(pb[col])表示其普遍性 — 列中存在该问题的值的百分比。

2.列的数据质量得分

前面的公式为计算数据集中每个单独单元格标准化在 0% 到 100% 之间的数据质量得分奠定了基础。基于此,计算任何列的数据质量分数变得像计算该列的每个值的数据质量分数的平均值一样简单。

3.行数据质量得分

同样,可以通过对为该行的每个单元格计算的分数求平均来计算数据集的任何行的分数。

数据集的数据质量得分

然后,计算数据集的数据质量分数就像计算每列分数的平均值或每行分数的平均值一样简单。

请注意,这也与计算所有单元格分数的平均值相同。由于公式的对称性,所有这些计算都会返回相同的结果,这使得它很优雅。

例子:

让我们将这些公式应用到之前的具体示例中:

\

使用前面的公式,您可以计算每个单元格以及每列或每行的质量分数,并对单元格分数、列分数或行分数进行平均,您将返回相同的结果 (55%)表示数据集的数据质量得分。

然后,报告可以向下钻取任何列或行,并显示有关其数据质量分数的更多详细信息,哪一行或哪列使数据集分数降级最多,等等……这种向下钻取的功能对于数据清理操作非常有用。

综述

我们已经看到为什么每个数据集有一个统一的标准化数据质量评分很重要,以便非数据质量专家也可以使用。我们已经看到,即使在具有不同结构或约束的数据集需要相互比较的重要情况下,这样的数据质量评分也应该满足哪些要求才能发挥作用。

免责声明:本文系网络转载,版权归原作者所有。本文所用图片、文字如涉及作品版权问题,请联系删除!本文内容为原作者观点,并不代表本网站观点。
编辑:乔帅臣
活动 直播间  | CIO智行社

分享到微信 ×

打开微信,点击底部的“发现”,
使用“扫一扫”即可将网页分享至朋友圈。