用 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+ 指标,一次 Report 就能把数据质量检测里的缺失值、重复值、异常值全部过一遍。
Evidently 是什么:给 ML 数据做体检的工具
一句话定位:Evidently 帮你给数据和模型做"体检"。它不只是评估一次,而是可以周期性地在生产上反复跑同一套检查,跟踪数据质量随时间的变化,这也是它作为 ML 监控工具的核心价值。思路很直接:把"数据是不是出问题了"这个模糊问题,拆成一组可度量的指标,每个指标还自带默认的通过/失败规则。
五分钟跑通第一次数据体检
安装步骤
pip install evidently # 或者从源码安装 git clone https://gitcode.com/GitHub_Trending/ev/evidently生成第一份数据质量报告
第一次跑不用配置任何东西,用预设拼一个 Report,run 之后存成 HTML:
import pandas as pd from evidently import Report from evidently.presets import DataSummaryPreset df = pd.read_csv("train.csv") snapshot = Report([DataSummaryPreset()]).run(df) snapshot.save_html("data_quality_report.html")打开生成的 HTML,每个字段的行数、缺失数、分布一目了然。之后你可以把预设换成单个指标做深度排查,也可以在run()里传入参考数据集做漂移对比。
三类数据问题逐个排查
缺失值:哪些字段在漏数据
现象长什么样:某字段偶尔出现空值,或整列突然全是 NaN。模型如果默认把缺失填 0,会悄悄"毒化"预测结果。
Evidently 怎么查:DatasetMissingValueCount看全表的缺失总数和缺失占比,MissingValueCount(column="...")逐列下钻。检测逻辑在 src/evidently/metrics/column_statistics.py,默认测试规则是"缺失数等于 0"。
结果怎么读:重点看两个数——绝对数量和占比。占比低(比如 1% 以下)的文本字段缺失可以忽略;但关键数值特征占比突然抬升,多半是上游数据源出了问题,对比参考数据集能立刻看出来。
重复值:数据集里有多少"双胞胎"
现象长什么样:数据里出现完全相同的行,样本被重复计数,统计指标失真,严重时模型会"背题"。
Evidently 怎么查:DuplicatedRowCount统计完全重复的行数,DuplicatedColumnsCount统计和其他列完全相同的列——后者通常意味着 ETL 环节复制粘贴或 join 写错了。实现都在 src/evidently/metrics/dataset_statistics.py。
结果怎么读:默认规则是"两者都应为 0"。重复行数从 0 变成非 0,优先怀疑采集重复或管道重跑;发现重复列更省事,能直接定位是哪个字段被错误复制。
异常值:如何揪出离群点
现象长什么样:一个极端值是其他数据的百倍,训练后指标整体被带偏。
Evidently 怎么查:column_statistics 模块里的MaxValue、MinValue、QuantileValue、StdValue帮你锁定各列的极值与分位数;OutRangeValueCount则直接数出落在你定义合理区间之外的值有多少。
结果怎么读:先看最大值和中位数的量级差,例如最大值是 median 的一千倍,就需要分箱或对数变换。OutRangeValueCount的结果越偏离预期,越应该怀疑采集错误而不是真实业务波动。
报告与可视化:把数据质量摆到台面上
HTML 报告适合留档和分享:snapshot.save_html()生成独立页面,浏览器直接打开,贴进周报或事故复盘都很方便。
持续监控可以接 Grafana:定时批量计算指标、写入数据库,再搭一块面板实时盯。仓库里的 examples/grafana/ 给了完整示例:
数据质量从"偶尔看一眼"变成"异常自动报警",才是 ML 监控真正的价值所在。
进阶:自定义检测规则
内置的 100+ 指标覆盖大多数场景,但"金额字段不能为负""单批数据缺失率不能超过 5%"这类业务规则,往往需要自己写。参照 src/evidently/metrics/data_quality.py 里的实现即可,模式统一:一个指标类加一组测试条件,读懂一个就能照葫芦画瓢写一个。
上手建议
- 从一张真实表开始:先别追求功能全,用
DataSummaryPreset跑通你手头的一个真实业务数据集。 - 留一份参考集:和一份"历史上正常"的数据对比,数据质量检测的价值会翻倍。
- 阈值按业务校准:默认测试规则只是起点,关键字段的上下限要按业务容忍度调整。
- 把报告挂上仪表板:一次性 HTML 用来复盘,持续监控才能拦住下一次事故。
先查数据,再怀疑模型——这个顺序别搞反。Evidently 把"数据好像不太对"变成了可检查的数字,下一步很简单:拿一份你手上的真实数据,把第一份 Report 跑出来。
【免费下载链接】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),仅供参考