核心要点
定义数据契约(schema):字段、类型、取值范围、可空性、唯一性约束
在管线入口(接入处)校验,尽早拦截脏数据,避免污染下游
加分布检查:监控特征均值/分位数/类别占比,发现数据漂移
保证训练-服务一致:同一套校验与特征逻辑用于离线训练和线上推理
标准回答
一、先给出结论和背景
- 数据契约(Data Contract)= 把数据质量当代码来保障:ML 系统「垃圾进垃圾出」,数据问题往往比模型问题更隐蔽、危害更大,所以要在数据进入管线时就显式校验。
- 结构与值校验:- Schema/类型:列是否存在、类型是否正确。
- 范围:年龄 ∈ [0,120]、概率 ∈ [0,1]。
- 空值/唯一性:关键字段非空、主键唯一、外键有效。
二、拆开关键步骤和判断点
- 分布与漂移:- 监控数值特征的均值/方差/分位数、类别特征的取值占比。
- 与训练期基线对比,超阈值告警,识别 data drift。
- 工具与位置:- 用 Great Expectations、Pandera 等声明式定义「期望」,在管线入口与特征产出处拦截,脏数据直接 fail-fast 而非默默通过。
三、补上落地边界和取舍
- 训练-服务一致性:- 同一套 schema 与特征转换复用于训练和线上,避免 training-serving skew;最好通过 Feature Store 统一管理(Feature Store 架构与实践)。
常见误区
⚠️ 常见踩坑
误区一:容易答偏的地方:只在训练时校验、线上不校验,导致训练-服务特征不一致;或只查 schema 不查分布,漏掉静默的数据漂移。
追问
追问 1:数据校验应该放在管线的哪个位置?
尽量靠前——在原始数据接入处先做一道(fail-fast 拦截脏数据),并在每个关键转换的产出处再做一道(验证转换正确)。越早发现成本越低,避免脏数据污染整个下游训练。
追问 2:怎么检测数据漂移(data drift)?
保存训练期的特征分布作为基线,对线上/新批数据计算同样的统计量(均值、分位数、类别占比),用 PSI、KL 散度或 KS 检验衡量偏移,超阈值告警并触发复查或重训。
🔗 相似问题
同一考点的不同问法,换着练更稳
延伸学习
按主题分类的相关资源,便于系统复习
