数据质量测试:测试数据有效性和准确性的方法

以下为作者观点,来看看你认同吗?

如果西西弗斯(编者注:希腊神话中的人物)是一个数据分析师或数据科学家,他在山上滚动的巨石将是他的数据质量保障。即使所有获取、处理和建模的工程流程都无懈可击,但在数据管道的任何阶段测试数据质量的能力,以及面对 "Is this OK "的问题,已经够难了。

为什么呢?因为很难定义OK的含义。

图片

传统上,数据质量被分成6个方面。

  • 准确性:一项信息在多大程度上反映了现实?
  • 完备性:它是否满足你对全面性的期望?
  • 连贯性:存储在一个地方的信息与存储在其他地方的相关数据是否一致?
  • 及时性:当你需要时,你的信息是否可用?
  • 有效性:信息是否有特定的格式、类型或大小?它是否遵循业务规则/最佳实践?
  • 完整性:不同的数据集能否被正确地连接起来,以反映一个更大的画面?关系是否被很好地定义和实施?

这些维度是在对设计数据仓库采取广泛的观点时定义的。考虑了所有定义和收集的数据集,它们之间的关系,以及正确服务于组织的能力。

当我们看一个单一的数据集时,我们的质量考虑就比较“狭窄”:

  • 它不需要完整性,因为其他数据集可能会弥补。
  • 一致性和完整性是不相关的,因为其他数据集没有被考虑。
  • 时效性主要取决于工程管道的运作,而不是数据的质量。

在我们的案例中,问一个数据集是否可以,等于问 “它是否有效和准确?”。

在这篇文章中,我将描述有效性测试,分解准确性测试的概念,并回顾现有的测试框架。

验证:元数据测试

元数据是描述数据的信息,而不是数据本身。例如,如果数据是一个表,元数据可能包括模式,例如列的数量,以及每一列中变量的名称和类型。如果数据是在一个文件中,文件格式和其他描述性参数,如版本、配置和压缩类型可能是元数据的一部分。

测试的定义很直接:对元数据的每个值都有一个期望,这个期望来自于组织的最佳实践和它必须遵守的规定。如果你是一个软件工程师,这种类型的测试非常像一段代码的单元测试。就像单元测试覆盖率一样,可能需要一些时间来创建所有这些测试,但达到高测试覆盖率是可能的。

每当元数据改变时,维护测试也是需要的。当然期望值往往有差距,当我们习惯于在改变代码时更新我们的单元测试时,我们必须愿意投入同样的时间和注意力,在我们的模式演变时维护元数据的验证。

数据准确性的三种类型

类型1:入门级的事实核查

我们收集的数据来自于我们周围的现实,因此它的一些属性可以通过与已知记录的比较来验证,例如:

  • 这个地址是真实的吗?
  • 这是一个活跃的网页吗?
  • 我们是否出售这个名字的产品?
  • 对于价格栏,其数值是否为非负值?
  • 对于一个强制性的字段,它不是空的吗?
  • 值来自于一个给定的范围,所以最小和最大是已知的。

获取验证值通常需要查询另一个能够可靠地提供答案的数据集。这个数据集可以是公司内部的,比如人力资源系统中的雇员记录。以及公司外部的来源,如街道、城市、国家注册数据库等。

一旦获得了验证值,测试本身就是一个简单的比较/包含查询,其准确性仅限于所用的外部数据集的准确性。

这个测试验证了数据本身,而不是其元数据。最好是在收集数据的时候尽可能地进行这种验证,以避免准确性问题。例如,如果数据是由一个人填表收集的,数字表格可以只提供有效的选项。由于这并不总是可能的,建议在获取阶段对数值进行验证。

类型2:设置级别健全性

事实核查是测试单一记录中的一个值。当涉及到大数据时,我们需要测试我们拥有的集合的属性。这个集合可能包括来自某个时间段的数据,来自某个操作系统的数据,ETL过程的输出,或者一个模型。不管它的来源是什么,它作为一个集合都有我们想要验证的特征。这些特征是统计学上的,比如说:

  • 数据预计来自于一个给定的分布。
  • 平均数、方差或中位数的值被预期在一个给定的范围内的概率很高。

统计学测试仍然需要你知道预期,但你的预期现在有了不同的形式。

  • 这个数据来自这个分布的概率够高吗?
  • 这一栏的平均值应该在这个范围内,概率为95%。

想象一下,一张保存着扑克游戏中发给玩家的手牌的表格。在这种情况下,可以预先计算出手牌的预期分布。

我们进行的测试将查看持有发牌手数的那一列的数值,并询问,这组数值来自预期分布的概率是多少?

在这个统计测试中,定义通过/失败的参数将必须是概率性的。如果分布是均匀的,概率小于X%,你会得到一个警报。当然,你宁愿手动检查一个被警告的数据集,也不愿意让一个错误连带着进入你的数据管道。

类型3:基于历史的集合级别的正确性

就像统计准确性测试一样,我们要看的是一组记录的属性。只是在这种情况下,我们没有一个现实世界的真相来源可以依赖。我们有数据集本身的历史:同一个数据集随着时间的推移而演变。

我们可以使用这些历史数据来创建一个数据特征的基线,然后测试今天的新数据集是否与基线一致。

我们可以从历史数据中推断出一些特征的例子。

  • 某一列中数值的期望值和方差。
  • 某一列中数值的分布,如一天中每分钟的事件数量。
  • 寻找数据的特征和它们的预期分布。
  • 预计随着时间的推移,会有一定的季节性,例如黑色星期五的销售高峰,周末的流量较少。
  • 运行异常检测算法,查看特征的历史,看看当前的值是否正常。

学习基线不仅为测试结果增加了概率方面,也为基线值的有效性增加了概率。我们执行与类型2相同的统计测试,但我们对其正确性有一个额外的风险,因为我们所比较的基线只有一定的概率是正确的,因为它是从历史数据中统计推导出来的。

我们还应该进行这个测试吗?如果基线正确的概率足够高,而且你明智地使用了阈值,那么绝对应该。建议你记住,警报系统需要在假阳性和假阴性之间取得平衡。

  • 假阴性:测试失败,而它本应通过。
  • 假阳性:测试通过了,而它应该是失败的。

你应该根据业务需要,以优化所需错误的方式构造你的测试。你会有错误,所以要确保你有你能接受的错误,而且是高概率的。

推荐几个数据质量测试框架工具

Deequ

一个来自AWS实验室的开源工具,可以帮助你定义和维护你的元数据验证。Deequ是一个建立在Apache Spark之上的库,用于定义 “数据的单元测试”,衡量大型数据集的数据质量。Deequ适用于表格数据,例如CSV文件、数据库表格、日志、扁平化的json文件。基本上任何你能装入Spark数据框架的东西。

该项目正在努力发展到上述的准确性测试,但其主要能力是在验证领域内。

Great Expectations

同样专注于验证,这个开源工具允许轻松地集成到你的ETL代码中,并可以测试来自SQL或文件接口的数据。由于它的结构是一个日志系统,它可以通过文档格式使用,并从定义的测试中创建自动文档。它还提供对数据进行剖析,并自动生成测试期间断言的预期。

Torch by Acceldata

Torch允许使用一个基于规则的引擎进行验证。可以根据你自己的领域专业知识和Torch提供的大量规则来定义规则。该系统提供了一些与数据集历史分析有关的能力,但这些都是非常基本的第二类测试。Acceldata为数据管道的可观察性提供了一套更广泛的工具,涵盖了数据质量的6个维度的其他方面,Torch是其模块之一。

OwlDQ

OwlDQ是基于对数据集的动态分析和对预期的自动适应。规则允许对要跟踪的特征进行定义,以及通过/失败的概率,但繁重的数据特征分析则留给了OwlDQ引擎。

MonteCarlo

这是一个无代码的实现可观察性平台。它使用机器学习来推断和学习你的数据是什么样子的,主动识别数据问题,评估其影响,并通过与普通运营系统的集成发出警报。它还可以进行根本原因分析。

Databand

一个管道元数据监控工具,也提供开箱即用的数据质量指标(如数据模式、数据分布、完整性和自定义指标),无需修改代码。

资源分享

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/852149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOs修改应用名称和图标方法

最近在开发Harmony应用,发现修改app.json5下的lable:app_name和icon不生效 后来经过查找,原来还需要更改entry下的src/main/module.json5才行,具体操作路径是: 更改后生效:

一步一步用numpy实现神经网络各种层

1. 首先准备一下数据 if __name__ "__main__":data np.array([[2, 1, 0],[2, 2, 0],[5, 4, 1],[4, 5, 1],[2, 3, 0],[3, 2, 0],[6, 5, 1],[4, 1, 0],[6, 3, 1],[7, 4, 1]])x data[:, :-1]y data[:, -1]for epoch in range(1000):...2. 实现SoftmaxCrossEntropy层…

Vue31-自定义指令:总结

一、自定义函数的陷阱 1-1、自定义函数名 自定义函数名,不能用驼峰式!!! 示例1: 示例2: 1-2、指令回调函数的this 【回顾】: 所有由vue管理的函数,里面的this直接就是vm实例对象。…

Linux发邮件的工具推荐有哪些?如何配置?

Linux发邮件的功能怎么样?Linux系统如何设置服务器? 在Linux操作系统中,有多种工具可供选择用来发送电子邮件,每种工具都有其独特的特点和适用场景。AokSend将介绍几种常用的Linux发邮件工具,并分析它们的优缺点和适用…

Linux Kernel入门到精通系列讲解(QEMU-虚拟化篇) 2.5 Qemu实现RTC设备

1. 概述 上一章节起(5.4小节),我们已经把整个Naruto Pi都跑通了,从BL0到kernel再到Rootfs都通了,目前可以说已经具备学习Linux得基础条件,剩下得都只是添砖加瓦,本小节我们将添加RTC,如果你还没有添加RTC,你可以试试不添加RTC时,Linux的时间戳会很奇怪,加了RTC后,…

Linux部署mysql8.0.28数据库

目录 1.基础准备 (1)首先去官网下载二进制安装包 (2)下载好之后上传至服务器 (3)禁用关闭selinux和防火墙 (4)挂载光盘搭建本地yum仓库 2.解压到指定目录 3.检查系统是否安装mariadb 4.安装MySQL数据库 (1)进入MySQL目录 看到‘完毕’就说面mysql已经安装成功了 4.初…

Python数据结构——集合(详细版)

集合是一种可迭代的、无序的、不能包含重复元素的数据结构。与序列相比,序列中的元素是有序的,可以重复出现,而集合中的元素是无序且不能有重复元素。 序列强调的是有序,集合强调的是不重复。当不考虑顺序,且没有重复…

python中的数据分析(juypter)

加载数据后的套路 df.head() df.info() df.describe() 选择部分数据 df[[要选中的列名的列表]] df.loc[,] df.iloc[,] df.query() 增加 df[新列名] [新值] df.insert(loc , column,value ) 删除 df.drop() df.drop_duplicates() axis 0 可以改成1 inplace 修改数据 df…

解决el-table表格拖拽后,只改变了数据,表头没变的问题

先看看是不是你想要解决的问题 拖拽后表头不变的bug修复 这个问题一般是使用v-for对column的数据进行循环的时候,key值绑定的是个index导致的,请看我上篇文章:eleplus对el-table表格进行拖拽(使用sortablejs进行列拖拽和行拖拽):-…

FastAPI操作关系型数据库

FastAPI可以和任何数据库和任意样式的库配合使用,这里看一下使用SQLAlchemy的示例。下面的示例很容易的调整为PostgreSQL,MySQL,SQLite,Oracle等。当前示例中我们使用SQLite ORM对象关系映射 FastAPI可以与任何数据库在任何样式…

eFuse电子保险丝,需要了解的技术干货来啦

热保险丝作为一种基本的电路保护器件,已经成功使用了150多年。热保险丝有效可靠、易用,具有各种不同的数值和版本,能够满足不同的设计目标。然而,对于寻求以极快的速度切断电流的设计人员来说,热保险丝不可避免的缺点就…

联邦学习论文阅读:2018 Federated learning with non-IID data

介绍 这是一篇2018年挂在arXiv上的文章,是一篇针对FL中数据Non-IID的工作。 作者发现,对于高度Non-IID的数据集,FedAvg的准确性下降了55%。 作者提出了可以用权重散度(weight divergence)来解释这种性能下降&#xff…

Redis跳表

Redis跳表 跳表是一种有序数据结构,它通过在每个节点维持多个指向其他节点的指针,从而达到快速访问节点的目的 跳表支持平均O(logN),最坏O(N)复杂度的节点查找,还可以通过顺序性操作…

【SCAU数据挖掘】数据挖掘期末总复习题库简答题及解析——上

1.K-Means 假定我们对A、B、C、D四个样品分别测量两个变量,得到的结果见下表。 样品 变量 X1X2 A 5 3 B -1 1 C 1 -2 D -3 -2 利用K-Means方法将以上的样品聚成两类。为了实施均值法(K-Means)聚类,首先将这些样品随意分成两类(A、B)和(C、…

【星海随笔】ELK优化

ELS 再遇到大的日志文件的时候不会自动进行清理的,我们可以通过 logrotate 转储工具进行操作。 该命令是基于 Cron 实现,由系统执行,当然也可以手动进行执行例如 logrotate -f configfile# more /etc/logrotate.confweekly // 默认每一周执行一次rotate轮转工作 r…

打造专属 Switch 模拟游戏机

文章目录 2种方案Switch版RetroArchLakka系统 整体性能对比:Lakka更优核心是否兼容:并不兼容整合2种方案:共享游戏ROM和配置、资源等文件夹存储空间优化添加模拟器核心Switch版RetroArchLakka 添加游戏添加特殊类型模拟游戏示例(尤…

msf原生shellcode迁移进程后如何获取攻击者ip

msf原生shellcode迁移进程后如何获取攻击者ip仅为ip及端口 木有图,看一下就晓得了 偶尔看到了这个问题,做了一些倒推测试之后得出来的结果 倒推过程 shellcode msf生成一段shellcode,产生的一组16进制数据 msfvenmon -p windows/meterpret…

Ubuntu下使用`sysbench`来测试CPU性能

使用 sysbench 来测试 CPU 性能是一个常见的方法。sysbench 是一个模块化的跨平台基准测试工具,常用于评估系统的各个组件(例如 CPU、内存、I/O 子系统等)的性能。 下面是如何使用 sysbench 来测试 CPU 性能的基本步骤: 1. 安装…

车载电子电气架构 - 智能座舱技术及功能应用

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

论文解读——《I2EDL: Interactive Instruction Error Detection and Localization》

一、研究背景 视觉与语言导航(VLN)是一个AI领域的研究任务,旨在开发能够按照自然语言指令在三维空间中导航到指定位置的智能体。这项任务与人类的日常活动——如按照口头指示到达某个地点——十分相似,对于推动人机交互的自然性和…