# FDE 读 Chip Huyen 的 ML 书，从第 3 章读起

> 书中最犀利的一句是坏的训练数据算法救不了，这几乎就是 FDE 的工作描述，而有四章讲的正是应对之道。

原文: https://fdetimes.net/zh/books-courses/designing-machine-learning-systems-fde-guide/

这是一本讲机器学习的书，但书中最让人记得住的一句话却是：算法救不了你。如果训练数据很差，算法不可能表现良好。对前线部署工程师（FDE）来说，这句话几乎就是岗位描述。

这本书是 Chip Huyen 的 *Designing Machine Learning Systems*，2022 年由 O'Reilly 出版。它源自 Chip Huyen 在斯坦福大学讲授的 CS 329S 课程，这门课的目标是为开发真实世界中运行的 ML 系统提供一套迭代式框架。

不必从第一页读起。FDE 在客户现场通常要解决四件事：接入客户的数据，拿到足够好的训练数据，避免模型过时，以及回答基础设施该自建还是采购。第 3、4、9、10 章恰好对应这四件事。

## 为什么一本“整体视角”的书适合 FDE？

作者在本书介绍页中称，这本书以整体视角设计 ML 系统。从如何处理、构建训练数据，到选用哪些特征，每个决策都要放到整个系统的目标下衡量，而不是孤立地考虑。

本书官方 GitHub 仓库开篇就指出，ML 系统既复杂又各不相同，目标是构建可靠、可扩展、可维护的系统。FDE 的工作正是围绕这种“各不相同”展开：每个客户都有自己的数据类型和约束，因此系统思维比任何调参技巧都更有价值。

## 数据格式是对客户的承诺

第 3 章“数据工程基础”（Data Engineering Fundamentals）有一句话值得抄下来：对于结构化数据，写入数据的代码必须假定数据的结构。所以在集成客户数据时，选择存储格式不是小事，而是你的系统与对方系统之间的约定。

这一章还区分了两条路径。批量处理的数据产生静态特征；通过实时传输流动的数据，通常由流计算引擎处理，产生动态特征。

设想一家配送公司想预测哪些订单会被取消。“买家每月平均下单数”变化缓慢，每晚从导出文件重新计算一次就够了，这是批处理特征。“买家在过去 10 分钟内修改地址的次数”如果等到第二天早上再算就毫无意义，这是流处理特征。

最好在第一周就养成这样给特征分类的习惯，因为答案决定了你提出什么样的架构。如果所有重要特征都是批处理特征，可能暂时不必碰流处理基础设施。

## 95% 的准确率可能什么都没抓到

第 4 章“训练数据”（Training Data）指出，训练数据的质量决定模型表现，再巧妙的算法也无法弥补。它还点出一个令人不安的事实：在真实数据中，类别不平衡是常态，而不是例外。

算一笔小账。假设客户交来 1,000 笔交易，其中 950 笔正常，50 笔是欺诈。一个偷懒的模型把所有交易都预测为“正常”，1,000 次里对 950 次，准确率 95%，但 50 笔欺诈一笔也没抓到。

这个 95% 放在演示幻灯片上很好看，可客户请你来，恰恰是为了那 50 笔欺诈。因此在第一次工作会议上，先要标签分布，再讨论用什么模型；汇报结果时按类别分别给出，而不是只给一个数字。

**要点:** 在 95/5 分布的数据上，一个什么都没学到的模型也能拿到 95% 的准确率。

## 真正的工作从演示之后开始

第 9 章讨论持续学习和生产环境测试，认为这是 ML 特有的问题，但主要需要靠基础设施来解决。作者还反驳了“流处理又难又贵”的担忧：流处理技术已经相当成熟。

第 10 章讲 MLOps 的基础设施与工具，称 ML 平台是一个新兴团队。搭建基础设施时，自建还是采购的问题困扰着工程经理和 CTO，书中也承认，ML 平台应包含什么，目前仍没有共识。

这个空白正是 FDE 能发声的地方，因为你最先亲眼看到客户缺什么。一页基于客户实际情况写成的自建与采购分析，往往比任何通用架构图都更有说服力。

## 遇到什么情况，该翻哪一章？

读一遍不够，这四章的价值在于项目卡住时知道该回到哪一页。下表是一份建议清单，可以贴在工位旁。

| 项目遇到的情况 | 翻到第几章 | 立即要做的事 |
|---|---|---|
| 客户发来从老系统导出的数据 | 3 | 写下写入数据的代码所假定的结构，先定格式再搭数据管道 |
| 部分特征需要按分钟更新 | 3 | 静态特征走批处理，把需要流处理的动态特征单独分出来 |
| 演示模型看起来不错，但客户发现它判断出错 | 4 | 统计标签分布，按类别汇报结果 |
| 上线后模型需要频繁更新 | 9 | 把它当作基础设施问题，不要因为看起来又难又贵就否定流处理 |
| CTO 问该自建还是采购 | 10 | 基于客户实际情况写一页自建与采购分析 |

## 什么阅读顺序能最快进入 FDE 工作状态？

比较合理的顺序是第 3、4、9、10 章，其余章节等项目需要时再回头读。打开书之前，先浏览 [github.com/chiphuyen/dmls-book](https://github.com/chiphuyen/dmls-book) 上的各章摘要，心里有张地图。

作者的书籍页面在 [huyenchip.com/books](https://huyenchip.com/books/)，课程资料在 [stanford-cs329s.github.io](https://stanford-cs329s.github.io/)。如果你做后端或数据工作、熟悉数据管道，这四章会自然接上你已有的经验。

读 FDE 岗位描述时，可以试着把每条要求归入这四章：数据和训练数据相关的要求对应第 3、4 章；模型运维和基础设施相关的要求对应第 9、10 章。

在简历上，一个同时包含批处理和流处理特征的小项目，再附上你如何发现并处理类别不平衡的说明，比一句“熟悉机器学习”更有分量。

读完这四章，算法水平未必会提高多少。但你会更早向客户问出对的问题，对 FDE 来说，这才是真正的优势。

**本周动手试试:**

- 阅读 chiphuyen/dmls-book 仓库中的各章摘要，然后精读书中第 3 章和第 4 章。
- 找一个用过的分类数据集，统计标签分布，算出一个始终预测多数类的模型能达到多少准确率。
- 为公司的某个 ML 基础设施组件（例如流处理）写一页自建与采购分析，假设要向客户的 CTO 汇报。

## 信源

- [Books – Chip Huyen](https://huyenchip.com/books/)

- [chiphuyen/dmls-book: Designing Machine Learning Systems (GitHub)](https://github.com/chiphuyen/dmls-book)

- [Designing Machine Learning Systems – chapter summaries (dmls-book)](https://github.com/chiphuyen/dmls-book/blob/main/summary.md)

- [CS 329S: Machine Learning Systems Design (Stanford)](https://stanford-cs329s.github.io/)
