Evidently 数据质量检测完整指南:三步快速找出缺失值、重复值与异常值
【免费下载链接】evidentlyEvidently is an open-source ML and LLM observability framework. Evaluate, test, and monitor any AI-powered system or data pipeline. From tabular data to Gen AI. 100+ metrics.项目地址: https://gitcode.com/GitHub_Trending/ev/evidently
上周模型的准确率突然掉了,你的第一反应大概率是去重训模型。但真实原因可能更简单:上游数据少了一列,或者某批新数据的取值偏出了正常范围。这类情况下,数据质量检测应该排在调模型之前。Evidently 是一个面向 ML 与 LLM 系统的开源评估与监控框架,内置 100+ 指标,能把你“怀疑数据有问题”这件事,变成一份可复现、可分享的数据质量报告。
下面以“拿到一份 CSV,要确认它能不能进模型”为场景,带你走一遍排查流程。不需要背 API,按顺序做就行。
一、缺失值检测:先定位哪里没数据、有多少
这一节解决“哪些列有空洞、严重程度如何”。
列级排查:缺失个数和占比一次看清
MissingValueCount(column="age")会同时给你两个数:该列缺失值的个数,以及占整列的比例。比例才是关键——3% 的缺失是常规补值问题,40% 的缺失得先问上游为什么没写数。
全表扫描:不指定列也能查
DatasetMissingValueCount把多列的缺失值汇总成一个总数和总占比,适合第一遍摸底。同模块里还有EmptyRowsCount和EmptyColumnsCount:前者抓整行全空的记录,后者抓整列全空的字段——后者往往直接指向某个数据源断了。
这些指标的实现分别在 src/evidently/metrics/column_statistics.py 和 src/evidently/metrics/dataset_statistics.py,想弄清某个数字怎么算出来的,直接看这两个文件。
二、重复值排查:把冗余行和冗余列都找出来
这一节解决“数据是不是重了”。重复本身不会让模型崩,但会让样本权重失真,评估结果也跟着骗人。
重复行:DuplicatedRowCount 给出个数
DuplicatedRowCount统计整表中完全相同的行有多少条。它的默认测试条件是“应当等于 0”,所以报告里这条指标亮红灯,就说明存在重复行,需要回查写入环节是否重放了。
重复列与“伪重复”列:四个数字一起看
DuplicatedColumnsCount:两列取值完全一样的情况;AlmostDuplicatedColumnsCount:两列取值几乎一样、只差一点点的情况;ConstantColumnsCount/AlmostConstantColumnsCount:整列(或 95% 以上)取值恒定的列。
前两个多半是字段设计问题,后两个多半是采集问题。报告里这几个数字并排展示,基本能一眼判断问题出在哪一环。
三、异常值识别:用统计量和取值范围锁定可疑数
这一节解决“哪些数值不可信”。
先看边界:最小值、最大值、均值、标准差
MinValue、MaxValue、MeanValue、StdValue都接受一个column参数,并且每个指标都会附带一张分布图。最大值是均值的几百倍时,不用猜,问题就在图上。
均值和中位数打架时,异常值大概率在
把MeanValue和MedianValue放在同一列上看。分布正常时两者接近;一旦少数极端值把均值拉走,中位数基本不动。两个数差距越大,越说明该列有异常值,值得单独拉出来看原始记录。
用范围直接数出界值:最快的一种做法
OutRangeValueCount(column="age", left=0, right=120)会直接告诉你:有多少行落在 [0, 120] 之外、占比多少。分类列则用OutListValueCount,把“不在白名单里的取值”数出来,专门抓地区码、枚举值突然冒出新类别这类问题。
四、生成数据质量报告:一份 HTML,自带通过与否的判定
这一节产出最终交付物:一份谁打开都看得懂的 HTML 报告。
整个流程就三步:声明指标、跑数据、导出文件。
pip install evidentlyimport pandas as pd from evidently import Report from evidently.metrics import ( MissingValueCount, DuplicatedRowCount, DuplicatedColumnsCount, OutRangeValueCount, MeanValue, MedianValue, ) df = pd.read_csv("your_data.csv") report = Report([ MissingValueCount(column="age"), DuplicatedRowCount(), DuplicatedColumnsCount(), OutRangeValueCount(column="age", left=0, right=120), MeanValue(column="age"), MedianValue(column="age"), ]) snapshot = report.run(df) snapshot.save_html("data_quality_report.html")报告不只是罗列数字。多数指标自带默认测试:重复行数应为 0、缺失值个数应为 0 之类。如果给report.run传第二个参数作为参考数据(比如上一批表现健康的数据),它会自动把当前批次和参考批次做对比,偏差超阈值就标红。想改规则也不用写新类,在指标上加tests参数即可,比如约定“这列缺失率不得高于 1%”。
五、延伸:把一次性排查变成持续监控
这一节回答“下次数据更新之后怎么办”。
报告是可复现的:把 CSV 换成新一天的分区再跑一遍,就得到同一组指标的新快照。定时跑、把快照存下来,数字就变成了趋势线——缺失率是不是在爬升、重复行是不是某一批突然冒出来的,趋势线上一目了然。📈
如果团队已经在用 Grafana,Evidently 的指标结果也可以推送到仪表板里做持续展示,监控形态大致如下:
排查到这里,数据质量检测就从上线前的一次性检查,变成了 ML 模型监控里的日常环节:下次输入数据开始漂移时,你会先于模型效果恶化看到它。
【免费下载链接】evidentlyEvidently is an open-source ML and LLM observability framework. Evaluate, test, and monitor any AI-powered system or data pipeline. From tabular data to Gen AI. 100+ metrics.项目地址: https://gitcode.com/GitHub_Trending/ev/evidently
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考