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 系统评估监控框架,它的数据质量检测模块能帮你在一次运行中扫出缺失值、重复行列和异常值,并通过三步操作生成可视化报告。下面的流程适合刚接触它的新手直接照做。
从一次"翻车"说起
昨晚批处理跑完 200 万行,今早模型效果突然跳水——排查半天才发现关键字段有 8% 是空的,还有两列数据完全重复。这类问题靠人肉抽查很难发现,你需要的是一轮固定流程:每次数据进来,先自动扫一遍质量。
Evidently 就是干这个的:它是面向 ML 模型和 LLM 应用的开源评估与监控框架,数据质量检测是其中最基础的一块能力——输入一张 pandas 表,输出带统计值、分布图和通过/失败判断的报告。
三类问题,一张表看懂能查什么
Evidently 把质量检查拆成一个个"指标"(Metric),你按需组合就行。缺失值、重复值、异常值这三类常见问题,对应的指标大致是这些:
| 问题类型 | 可用指标 | 你会得到什么 |
|---|---|---|
| 缺失值 | MissingValueCount、DatasetMissingValueCount | 每列缺失数与缺失占比,以及全表缺失总量 |
| 重复值 | DuplicatedRowCount、DuplicatedColumnsCount、AlmostDuplicatedColumnsCount、ConstantColumnsCount | 完全重复的行数、重复列数、近似重复列数、恒值列数 |
| 异常值 | MinValue/MaxValue/MeanValue/StdValue/QuantileValue、OutRangeValueCount | 每列完整统计量 + 分布图,或"超出合理范围"的值有多少 |
说明两点:
- 重复值检查不止"完全一样"这一种。
AlmostDuplicatedColumnsCount能抓出几乎重复的列(通常意味着特征冗余),ConstantColumnsCount能抓出整列只有一个取值的列。 - 异常值没有一键"异常点"指标,而是靠统计量帮你定位:中位数和 25/75 分位数拉开得很大,或者
OutRangeValueCount(指定范围外的值)数量偏高,都说明该列值得细看。
这些指标分别实现在 src/evidently/metrics/column_statistics.py 和 src/evidently/metrics/dataset_statistics.py,想深入可以看源码,但日常使用不需要碰它们。
最小可运行检测脚本:准备数据、配置检测、出报告
整条流水线只有三步,代码如下(中文注释版):
import pandas as pd from evidently import Report from evidently.presets import DataSummaryPreset # 第一步:准备数据(换成你自己的表) df = pd.read_csv("your_data.csv") # 第二步:配置检测。DataSummaryPreset 一键打包了 # 全表统计(行数、重复行列、缺失总量)+ 每列统计(缺失数、min/max/均值/分位数等) report = Report([DataSummaryPreset()]) # 第三步:运行并生成报告 snapshot = report.run(df) snapshot.save_html("data_quality_report.html")跑完后用浏览器打开data_quality_report.html,每个指标都有当前值、分布图,以及默认的通过/失败判断(比如"重复行数应为 0",不满足就标红)。
想只看某几列,把预设改成DataSummaryPreset(columns=["age", "city"])即可;想看单列详细统计,也可以单独用ValueStats(column="age")。
进阶:自定义规则、对比参考数据和接入监控
- 自定义检测规则:每个指标都支持
tests参数,用业务语言写判断条件。例如给缺失值设上限:DatasetStats(dataset_missing_value_count_tests=lt(100)),超过 100 个缺失就判失败。规则细节可以参考 src/evidently/presets/dataset_stats.py。 - 和参考数据对比:
report.run(current, reference)传两张表,报告会自动做并列对比,还能顺手检测数据漂移(分布变了没有),适合"上线前 vs 上线后"这类场景。 - 接进日常监控:检测结果可以定时跑、存下来看趋势,也可以推到 Grafana 之类的看板里,配合告警用。Evidently 官方示例里就有现成的 Grafana 数据漂移仪表板(见 examples/grafana/):
- 接入工作流:把上面那段脚本放进 CI 或批处理任务,数据一进库就自动质检,失败即拦截,就能把"翻车"挡在生产之前。
什么时候该用它
给你一份简单的自检清单,满足任意一条就值得跑一轮 Evidently 检测:
- 数据来自外部采集、第三方接口或用户上传,来源不可控
- 表结构近期改过,字段有增删
- 模型效果突然变差,但代码没动过
- 需要给数据交接方(下游团队、合作方)留一份可核查的质量凭证
- 同一份数据被多个模型/任务复用,坏数据影响面大
反过来,如果你只是临时看一眼小样本,df.describe()加df.duplicated().sum()就够了,不用上完整报告。数据质量检查的关键不在工具多复杂,而在于它是否变成了一道固定的流程——这一步 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
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考