Course 1:数据管理策略
课程简介
数据收集、标注、清洗与版本管理的最佳实践。
🎬 本课程视频:MLOps Production — 机器学习工程生产实践
一、数据策略的重要性
1.1 数据是 ML 系统的基石
在工业级 ML 系统中,数据的重要性不亚于模型。Andrew Ng 提出"以数据为中心的人工智能"(Data-Centric AI)理念——与其花时间调模型超参数,不如花时间提升数据质量。
数据质量问题的典型表现:
- 标注错误导致模型学习错误模式
- 类别不平衡导致模型倾向于多数类
- 数据漂移导致模型在生产环境中性能下降
- 特征缺失或不一致导致推理失败
1.2 数据策略的框架
一个完整的数据策略包括:
1. 数据收集策略:收集什么数据、从哪里收集、收集多少
2. 数据标注策略:谁来标注、如何标注、如何保证质量
3. 数据清洗策略:如何处理缺失值、异常值、重复值
4. 数据版本化策略:如何追踪数据变更、回滚到旧版本
5. 数据治理策略:数据安全、隐私合规、访问控制
二、数据收集
2.1 数据来源
第一方数据:系统自身产生的数据
- 用户行为日志(点击、浏览、购买)
- 传感器数据(IoT 设备、监控摄像头)
- 交易记录(订单、支付)
第二方数据:合作伙伴提供的数据
- 社交平台 API 数据
- 第三方支付数据
- 广告平台数据
第三方数据:公开或购买的数据
- 开源数据集
- 公共数据(天气、交通、经济指标)
- 数据市场购买
2.2 数据量估算
需要多少数据?取决于:
- 问题的复杂度:人脸识别需要百万级,线性回归可能只需要几百
- 模型复杂度:深度模型需要更多数据
- 特征维度:高维数据需要更多样本
- 期望精度:精度要求越高,需要数据越多
经验法则:
- 对于线性模型,$m \approx 10n$(10 倍特征数)
- 对于深度学习,$m \approx 10^4 - 10^8$
- 对数据质量要求高时,优先提升质量而非数量
2.3 数据收集的常见陷阱
- 采样偏差:只收集了部分场景的数据
- 标签泄露:特征中包含了未来的信息
- 数据时效性:旧数据不能代表当前分布
- 用户隐私:收集了不必要或违规的个人数据
三、数据标注
3.1 标注策略
内部标注:由团队内部专家标注
- 优点:质量可控、领域知识准确
- 缺点:成本高、扩展性差
众包标注:通过平台(如 Amazon Mechanical Turk)外包
- 优点:成本低、可大规模扩展
- 缺点:质量不稳定、需要质量控制
主动学习:模型自动选择最有价值的样本请求标注
- 核心思想:标注不确定度高的样本比确定度高的样本更有价值
- 可以减少 50-90% 的标注量
def active_learning(model, unlabeled_pool, budget=100):
labeled = []
for _ in range(budget):
# 选择不确定性最高的样本
probs = model.predict_proba(unlabeled_pool)
uncertainty = 1 - np.max(probs, axis=1)
query_idx = np.argmax(uncertainty)
# 请求标注(模拟)
label = oracle_label(unlabeled_pool[query_idx])
labeled.append((unlabeled_pool[query_idx], label))
model.fit(*zip(*labeled))
3.2 标注质量控制
- 多人标注:每个样本由多人标注,投票或取平均
- 黄金标准样本:插入已知正确标签的样本,检测标注者质量
- 标注者一致性:计算标注者间的 Cohen's Kappa 系数
- 定期校准:对标注者进行培训和校准
3.3 处理标注不一致
不同标注者对同一标准可能有不同理解:
- 多数投票:取最常见的标注
- 专家仲裁:由最资深的专家做最终决定
- 概率标注:保留标注的概率分布(而非硬标签)
- 迭代优化:发现不一致-讨论-更新标注指南
四、数据清洗
4.1 缺失值处理
- 删除:删除缺失率过高的特征或样本
- 均值/中位数填充:适用于数值型特征
- 众数填充:适用于类别型特征
- 模型预测:用其他特征预测缺失值
- 标记缺失:将缺失值作为一个类别
4.2 异常值处理
检测方法:
- Z-Score:$|z| > 3$ 视为异常
- IQR 方法:低于 Q1-1.5IQR 或高于 Q3+1.5IQR 视为异常
- 领域知识:根据业务规则判定
处理方法:
- 删除异常样本
- 用上下界截断(Winsorization)
- 保留但做标记
4.3 重复数据
问题:重复数据导致模型偏向重复样本。
解决方案:
- 完全去重:删除所有重复样本
- 部分去重:保留一条,记录重复次数作为权重
- 模糊匹配:对近似的样本做相似度检测
五、数据版本化
5.1 为什么要版本化
数据会随着时间变化——新数据加入、标注修正、清洗规则更新。没有版本化,你会遇到以下问题:
- 训练出的模型不可复现
- 不同团队成员使用不同版本的数据
- 数据回滚困难
5.2 数据版本化工具
- DVC(Data Version Control):类似 Git 的数据版本控制
- LakeFS:基于对象存储的 Git 式数据版本控制
- MLflow:追踪数据集版本和模型实验
# DVC 基本用法
dvc init
dvc add data/raw/
git add data/raw.dvc
git commit -m "Add raw dataset v1.0"
dvc push
5.3 数据谱系(Data Lineage)
数据谱系追踪数据的来源、变换过程和使用情况:
- 数据从哪来?(原始来源)
- 经过了什么变换?(ETL 流程)
- 用在了哪个模型训练?(下游消费)
完整的谱系记录让问题排查和审计变得简单。
六、数据治理与合规
6.1 数据安全
- 数据加密(存储和传输)
- 访问控制(谁可以读/写数据)
- 审计日志(谁在什么时候访问了什么数据)
6.2 隐私合规
- GDPR(欧盟通用数据保护条例)
- 个人信息保护法(中国)
- CCPA(加州消费者隐私法案)
合规要求包括:数据最小化、匿名化、用户删除权、数据出境限制等。
七、总结
- 数据质量比模型复杂度更重要——以数据为中心的 AI 理念
- 数据收集需要考虑偏差、时效性、隐私
- 数据标注需要质量控制,主动学习可以减少标注成本
- 数据清洗处理缺失值、异常值、重复值
- 数据版本化保证实验的可复现性
- 数据治理确保安全和合规
八、数据工程基础设施
8.1 数据湖与数据仓库
数据湖(Data Lake):存储原始格式数据的集中式存储系统。
- 存储所有类型的数据(结构化、半结构化、非结构化)
- Schema-on-read:读取时再定义数据结构
- 工具:Amazon S3、Azure Data Lake、Apache Hadoop HDFS
数据仓库(Data Warehouse):为分析优化的结构化数据存储。
- Schema-on-write:写入时已定义好数据结构
- 支持高效的分析查询
- 工具:Snowflake、BigQuery、Redshift、ClickHouse
ML 团队通常同时使用两者:数据湖存储原始数据,数据仓库存储清洗后用于分析的特征数据。
8.2 数据管道架构模式
Lambda 架构:同时使用批处理和流处理。
- 批处理层(Batch Layer):处理全量历史数据,生成准确的视图
- 速度层(Speed Layer):处理实时数据,提供低延迟视图
- 服务层(Serving Layer):合并批处理和流处理的结果
Kappa 架构:仅使用流处理,简化架构。
- 所有数据被视为流
- 通过重放流来处理历史数据
- 适合数据量适中、对实时性要求高的场景
8.3 数据测试
数据管道应该有自动化测试覆盖:
- 数据量测试:每日数据量是否在预期范围内
- 计数值唯一性测试:主键是否有重复
- 引用完整性测试:外键是否存在对应记录
- 格式测试:字段格式是否符合规范
- 自定义业务规则测试:根据业务规则验证数据合理性
数据标注的质量控制体系
在大规模数据标注中,质量控制是一个系统工程,需要从多个层面入手。首先是标注人员的管理——标注者需要经过严格的培训和考核,通过测试题后方可参与正式标注。在标注过程中,定期插入"黄金标准"题(已知正确答案的样本)来检测标注质量,如果标注者的正确率低于阈值(如 95%),需要暂停其标注工作并进行再培训。
其次是标注流程的设计。对于主观性较强的标注任务(如情感分析),通常采用多数投票机制——每个样本由 3-5 个标注者独立标注,取多数结果作为最终标签。标注者间的一致性水平用 Cohen's Kappa 系数或 Fleiss' Kappa 系数来衡量。一般而言,Kappa 值在 0.8 以上表示标注质量优秀,0.6-0.8 表示良好,低于 0.6 则需要重新审视标注指南。
数据清洗中的另一个常见问题是标签噪声——一些训练样本的标签可能是错误的。研究发现,当标签噪声比例在 10% 以下时,大多数 ML 模型尚能容忍;但当噪声超过 20% 时,模型性能会显著下降。清洗标签噪声的常用方法包括:使用置信学习(Confident Learning)自动识别可能标注错误的样本、使用模型预测与人工标签的一致性来检测异常。
数据标注的效率提升
在数据标注中,主动学习(Active Learning)是一种可以有效减少标注工作量的方法。其核心思想是:并不是所有未标注样本都能提供相同的价值——模型最不确定的样本(即预测置信度接近 0.5 的样本)包含最多的信息量。主动学习系统选择最有价值的样本交给标注者,其他样本则保留。研究表明,主动学习可以在保持模型性能的前提下,减少 50-80% 的标注量。主动学习的常见策略包括:不确定性采样(选择预测概率最接近 0.5 的样本)、委员会查询(用多个模型投票最不一致的样本)、以及期望模型变化(选择最可能改变当前模型参数的样本)。
合成数据与数据增强
在标注数据不足的情况下,合成数据和数据增强是两种有效的解决方案。合成数据是通过程序生成的、模拟真实数据分布的人工数据。GAN(生成对抗网络)可以生成高质量的合成图像数据。在自动驾驶领域,合成数据被广泛用于训练极端场景(如行人突然横穿马路)下的感知模型——这些场景在真实世界中极难收集。数据增强则是在不改变语义的前提下对现有数据进行变换——图像领域的翻转、旋转、裁剪、颜色抖动,文本领域的同义词替换、回译(翻译成另一种语言再翻译回来),都是常见的数据增强方法。数据增强可以显著提高模型的泛化能力和鲁棒性。
总结来说,数据管理是 ML 项目的基石。没有高质量的数据,再强大的模型也无法发挥作用。系统化的数据收集、标注、清洗和版本化管理,是每个 ML 团队必须建立的核心能力。在投入大量精力调优模型之前,请确保数据基础设施已经完善。
延伸阅读
- 📺 B 站播放列表:MLOps Production — 机器学习工程生产实践
- 📚 更多学习资源,请访问 deeplearning.ai 官网