配音

Course 1:ML 系统设计

课程简介

ML 项目范围定义、性能指标选择、基线建立。

🎬 本课程视频:MLOps Production — 机器学习工程生产实践


一、ML 系统设计概述

1.1 从模型到系统

在学术界,机器学习研究的焦点是模型——更好的架构、更优的算法、更高的准确率。但在工业界,模型只是整个 ML 系统的一部分。一个成功的 ML 系统需要数据管道、特征工程、模型训练、部署、监控、持续学习等多个环节协同工作。

ML 系统设计(ML System Design)关注的是如何构建可靠、可扩展、可维护的端到端机器学习系统。

1.2 ML 系统的典型架构

一个完整的 ML 系统包括以下组件:

  1. 数据管道:数据收集、清洗、标注、存储、版本化
  2. 特征工程:特征提取、变换、存储、服务
  3. 训练流水线:模型选择、超参数调优、实验追踪
  4. 模型注册:模型版本管理、元数据存储
  5. 部署服务:模型上线、API 封装、负载均衡
  6. 监控告警:数据漂移检测、性能监控、异常告警
  7. 持续学习:自动重训练、A/B 测试、模型更新

1.3 问题定义

ML 系统设计的第一步是清晰地定义问题。这包括:

业务目标 → ML 问题:将业务需求转化为机器学习问题。

输入输出定义
- 输入是什么?(用户画像、行为日志、时序特征)
- 输出是什么?(流失概率 0-1)
- 预测频率?(每天、每小时、实时)

成功指标
- 离线指标:准确率、精确率、召回率、AUC
- 在线指标:用户留存率、转化率、收入

1.4 问题类型的判断

不是所有问题都需要 ML。判断是否适合用 ML:

适合 ML 的特征 不适合 ML 的特征
有大量数据 数据极少
模式复杂但存在 有简单确定的规则
特征与目标相关 特征与目标无关
可接受一定误差 需要 100% 精确
环境相对稳定 环境剧烈变化

二、基线与评估框架

2.1 为什么要做基线

基线(Baseline)是评估 ML 模型效果的基准。没有基线,你无法判断模型是否真的有改进。

基线的类型:
- 简单规则基线:规则匹配、启发式方法
- 线性模型基线:逻辑回归、线性回归
- 人类表现基线:领域专家的判断
- 现有系统基线:当前生产系统的表现
- 开源 SOTA:当前最佳模型的表现

2.2 评估框架

数据集划分
- 训练集(Train):用于模型训练
- 验证集(Validation/Dev):用于模型选择和调参
- 测试集(Test):用于最终评估

在时间序列场景中,必须按时间划分——不能使用未来的数据预测过去。

交叉验证
- K-Fold 交叉验证:将数据分成 K 份,轮流用 K-1 份训练、1 份验证
- 适用于数据量较小的情况
- 时间序列中应使用 Forward-Chaining(前向链)

from sklearn.model_selection import TimeSeriesSplit

tscv = TimeSeriesSplit(n_splits=5)
for train_idx, test_idx in tscv.split(X):
    X_train, X_test = X[train_idx], X[test_idx]
    y_train, y_test = y[train_idx], y[test_idx]
    model.fit(X_train, y_train)
    score = model.score(X_test, y_test)

2.3 评估指标的选取

分类问题
- 准确率(Accuracy):正确预测的比例
- 精确率(Precision):预测为正类中真正为正类的比例
- 召回率(Recall):真实为正类中被正确预测的比例
- F1 分数:精确率和召回率的调和平均
- AUC-ROC:模型排序能力的综合指标

回归问题
- MSE(均方误差):预测误差的平方均值
- MAE(平均绝对误差):预测误差的绝对值均值
- R²:模型解释的方差比例

选择指标的指导原则:选择与业务目标直接对齐的指标。
- 垃圾邮件检测:高精确率比高召回率更重要(误删正常邮件比漏收垃圾邮件更糟糕)
- 疾病筛查:高召回率优先(宁可误诊也不能漏诊)

2.4 误差分析

当模型表现不够好时,系统性的误差分析比随机尝试更有效:

  1. 收集错误预测的样本
  2. 对错误进行分类(如"噪声数据"、"特征缺失"、"边界案例")
  3. 统计各类错误的比例
  4. 优先解决占比最大的错误类型
def error_analysis(model, X_val, y_val):
    y_pred = model.predict(X_val)
    errors = X_val[y_pred != y_val]
    error_labels = y_val[y_pred != y_val]
    # 分析错误的模式和类型
    # 统计各错误类别的占比

2.5 人类水平表现

将模型表现与人类水平表现(Human-Level Performance, HLP)对比,可以帮助判断还存在多少改进空间:

偏差/方差诊断:
- 训练误差 >> HLP → 高偏差(欠拟合)
- 训练误差 ≈ HLP 但验证误差 >> 训练误差 → 高方差(过拟合)

三、项目规划与管理

3.1 ML 项目的生命周期

  1. 范围确定(Scoping):定义问题、设定目标、评估可行性
  2. 数据准备(Data):收集、标注、清洗、验证数据
  3. 模型开发(Modeling):选择模型、特征工程、调参、评估
  4. 部署(Deployment):模型上线、A/B 测试、监控
  5. 维护(Maintenance):持续监控、重训练、更新

3.2 MVP 心态

ML 项目不应追求一开始就完美。采用 MVP(最小可行产品)策略:
1. 用最简单的模型尽快搭建端到端流水线
2. 部署到生产环境收集反馈
3. 基于实际数据逐步改进

3.3 技术债务

ML 系统有特殊的技术债务:
- 隐式耦合:模型与数据、超参数、基础设施紧密耦合
- 反馈回路:模型的预测影响用户行为,用户行为又影响模型
- 不可复现性:数据漂移、随机种子、依赖版本变化
- 配置债务:超参数、特征配置、流水线配置日益复杂

四、总结

  1. ML 系统设计关注从模型到系统的全链路
  2. 基线为模型改进提供参照标准
  3. 评估框架包括数据集划分、指标选择和误差分析
  4. 人类水平表现是偏差-方差诊断的重要参考
  5. ML 项目应从 MVP 开始,渐进式迭代

五、ML 项目案例:智能客服系统

5.1 问题定义

业务目标:提升客服效率,降低人工成本

ML 问题转化
1. 意图识别——用户问题属于哪一类(查询订单、退换货、投诉等)
2. 自动回复——对常见问题给出标准答案
3. 智能路由——将复杂问题分配给合适的客服人员

成功指标
- 自动解决率(Deflection Rate):用户问题被 AI 自动解决的比例
- 客户满意度(CSAT):用户对客服体验的评分
- 平均处理时间:从用户提问到问题解决的时间

5.2 MVP 方案设计

第一阶段:
- 用 TF-IDF + 逻辑回归做意图识别
- 建立常见问题与标准答案的匹配库
- 人工客服兜底所有无法自动解决的问题

第二阶段:
- 引入 BERT 等预训练模型提升意图识别准确率
- 建立对话管理模块,支持多轮对话
- 引入主动学习机制,持续从人工客服对话中学习

5.3 评估框架

意图 样本数 基线准确率 模型准确率 是否可自动回复
查询订单 5000 80% 92%
退换货 3000 70% 85% 是(需人工审核)
投诉 1000 50% 65% 否(需人工介入)
其他 2000 30% 40%

通过这种按意图的切片评估,我们可以确定哪些意图可以自动化、哪些需要人工介入,制定合理的业务规则。

5.4 项目经验教训

  1. 数据标注标准化的挑战:不同标注者对"投诉"和"售后"的界定不同,需要反复对齐标注标准
  2. 长尾问题处理:20% 的意图占据了 80% 的问题——对高频意图重点优化
  3. 用户表达多样性:同样的问题可能有上百种表达方式——数据增强和同义词扩展有帮助
  4. 冷启动问题:新业务上线时缺乏对话数据——从规则系统起步,逐步过渡到 ML 系统

ML 项目的生命周期管理

一个完整的 ML 项目通常经历以下生命周期阶段:问题定义、数据收集与准备、模型开发、模型评估、部署、监控与维护。每个阶段都有特定的挑战和最佳实践。在问题定义阶段,最关键的任务是将业务问题转化为 ML 问题——这包括定义预测目标(例如"预测用户是否会流失")、选择适当的评估指标(精确率、召回率、AUC 或业务指标如留存率)、以及建立合理的基线。

基线系统的建立尤为重要。一个好的基线可以帮助团队判断 ML 模型是否真正带来了价值。常见的基线包括:简单的启发式规则(如"预测上个月的均值")、简单的线性模型、或者已有的商业规则系统。在深度学习项目中,一个常见的陷阱是投入大量资源构建复杂模型,却发现简单的逻辑回归模型就达到了相近的效果。好的基线可以在项目早期就给出现实的期望。

ML 项目的风险因素

ML 项目与常规软件项目的风险模式有很大不同。数据可行性是最大的风险——项目进行到一半时发现数据质量不足以支持模型训练是常见的问题。为此,在正式投入模型开发前应进行数据可行性研究:(1) 数据是否可用(是否有足够的标注数据?数据获取是否合法合规?);(2) 数据质量是否足够(缺失率、噪声水平、标注一致性);(3) 数据中是否存在足够的预测信号(做一个简单的模型看看是否比基线好)。基础设施风险同样重要——如果没有合适的 GPU 资源、模型部署平台和数据管道工具,即使开发出好的模型也无法上线。建议在项目早期就明确基础设施需求和预算。

项目成功的关键要素

从众多 ML 项目的成败经验中,我们可以总结出几个关键要素。第一是明确的产品目标——ML 模型不是最终产品,它是实现产品功能的手段。最好的 ML 团队不是那些做出了最准确模型的团队,而是那些用 ML 解决了真实业务问题的团队。第二是快速迭代的能力——能够快速从想法到模型到评估到改进的能力,比一开始就追求完美模型重要得多。第三是跨学科协作——ML 项目需要数据工程师、ML 工程师、产品经理和领域专家的紧密配合。任何一方的缺失都可能导致项目失败。

沟通与期望管理

ML 项目成功的一个常被忽视的因素是——与利益相关者的沟通和期望管理。非技术背景的利益相关者往往对 ML 有不符合实际的期望(比如认为 AI 可以完美解决一切问题)。作为 ML 工程师,你需要帮助他们理解 ML 的能力边界:模型不会 100% 正确、需要持续维护、第一版可能只是略好于简单基线。

延伸阅读