4.7 机器学习项目实战流程
一个真实的机器学习项目,写代码训练模型只是其中一小步。CRISP-DM(Cross-Industry Standard Process for Data Mining,跨行业数据挖掘标准流程)是业界最广泛采用的 ML 项目框架,诞生于 1999 年,至今(2026 年)仍然是所有数据科学项目的默认方法论 1。
CRISP-DM 的核心哲学是:ML 项目不是一条从 A 到 B 的直线,而是一个不断回到前面步骤修正假设的循环。你建完模型发现在测试集上效果不行,不是从”训练模型”这个步骤重新开始,而是可能要回到”理解数据”甚至”理解业务”去调整——因为问题很可能出在前面,不在模型上。
打个比方:ML 项目像装修房子。不是画完设计图就按图施工永远不改了——施工过程中发现墙不能拆、水管位置不对、插座预留不够,你随时要改设计图,甚至重新考虑装修预算。CRISP-DM 的六个阶段之间就是这种来回修正的关系。
六阶段详解
阶段一:理解业务(Business Understanding)
这一步不写一行代码,但它是全流程中最重要的环节——方向错了,后面的所有努力都是浪费时间。
核心问题:
- 你到底要解决什么问题?是预测客户会不会流失?还是识别欺诈交易?
- 成功的标准是什么?准确率达到 90%?还是把误报率降到 5% 以下?
- 这个模型的预测结果会被怎么使用?是自动执行决策(如拦截交易),还是给人做参考(如推荐评分)?
如果业务目标没定义清楚,整个项目会陷入”掉包调参 -> 效果不好 -> 换模型 -> 还是不好 -> 重新调参”的死循环。很多”模型效果差”的根因不在模型,在一开始就没想清楚要解决什么问题。
阶段二:理解数据(Data Understanding)
拿到数据后不要立刻训练模型。先花时间了解你手上有什么。这一步叫 EDA(Exploratory Data Analysis,探索性数据分析)2。
要查的内容:
- 数据长什么样?有多少行、多少列?每列是什么类型(数字、文本、类别)?
- 缺失值多少?某些列是否 90% 都是空的?
- 分布合理吗?比如”年龄”列里有没有出现 200 岁的数据?“收入”列里有没有负数?
- 目标变量(你要预测的那个)的分布均衡吗?如果”欺诈交易”只占 0.1%,那你需要用特殊方法处理类别不平衡。
新手最常犯的错误就是跳过这一步。不理解数据就建模,就像不知道地图就上路——你可以开得很快,但方向可能是错的。
阶段三:准备数据(Data Preparation)
这一步在所有 ML 项目中耗时最长——通常占整个项目时间的 60-70%。内容包括 3:
- 缺失值处理:填充(用均值、中位数或模型预测)或直接删除。不是所有缺失值都可以随便填——“用户没有填收入”这个信息本身可能也是一个信号。
- 异常值处理:把明显离谱的数据修正或剔除。但注意——有些异常值是你要检测的目标(欺诈交易本身在金额上可能就是异常的),不能一概删除。
- 特征编码:把文本类别(如”北京/上海/广州”)转成数字。连续值通常做标准化或归一化。树模型(决策树、随机森林、XGBoost)不要求特征缩放,但线性模型和神经网络需要。
- 特征工程:从原始数据中创造新特征。比如从完整的日期时间里提取”星期几”和”小时”,从地址里提取”城市”。好的特征工程比调参更能提升模型效果 4。
阶段四:建模(Modeling)
终于到了”调包训练模型”的环节,但这一步比很多人以为的要快——因为前面的数据准备工作才是最耗时的。
建模的关键原则:
- 先建 baseline(基线模型)。用最简单的模型(如线性回归、决策树)跑一遍,得到一个”最低分数线”。这比你想象的重要——你改了半天复杂模型,发现效果还不如最简单的线性回归,说明你的复杂模型方向有问题。
- 再逐步提升。在 baseline 的基础上,依次尝试更复杂的模型(随机森林、XGBoost 等),每次只改一个变量,确认效果确实提升再做下一步。
- 记录每一次实验。用了什么参数、什么特征、什么模型、训练误差和验证误差分别是多少。不记录的话,一周后你就忘了哪个实验效果好、为什么好。MLflow、Weights & Biases 是常用的实验跟踪工具。
如果数据是表格(CSV、数据库表),先试 XGBoost。在表格数据上,XGBoost 在 2026 年仍然经常打败深度学习,而且训练快几十倍 5。如果数据是图像或文本,那必须用深度学习——传统 ML 方法处理不了非结构化数据 6。
阶段五:评估(Evaluation)
模型训练完了,但不代表它可以上线。评估要回答两个问题:
- 技术层面:模型在没见过的数据上表现如何?
- 业务层面:这个水平的性能够不够用?上线后的收益大于成本吗?
技术层面的评估要用测试集——训练时模型完全没见过的那部分数据。不要用训练集或验证集来评估——前者会导致你高估效果(过拟合),后者因为你用验证集反复调参,实际上也间接”见过”了 7。
评估指标的选择取决于业务场景:
- 分类任务不能只看准确率。在欺诈检测、疾病筛查这类极度不平衡的场景(正例只占不到 1%),模型即使永远预测”正常”,准确率也有 99% 以上——但毫无价值。要用查准率(Precision)、查全率(Recall)、F1 分数和 AUC-ROC。
- 回归任务看 MSE 或 MAE,但要结合业务背景。房价预测误差 5000 元算好算坏?这取决于你的业务需求——如果用来报税,可能要求极高精度;如果只是给购房者参考价,5000 元的误差完全可以接受。
阶段六:部署和监控(Deployment and Monitoring)
模型上线不是终点,而是新周期的起点。上线后需要持续监控 8:
- 数据漂移(Data Drift):生产环境的数据分布和训练数据不一致了。比如训练时用的是 2023 年的用户数据,2026 年的用户行为模式已经变了——模型的预测开始不准。用 KS 检验(Kolmogorov-Smirnov Test)或 PSI(Population Stability Index)来量化漂移程度。
- 模型衰退(Model Decay):即使输入数据没变,但现实世界本身变了。模型预测的准确率随时间逐步下降。为每个上线模型设定性能预警阈值(如 AUC 下降 > 5%),超过阈值自动触发重训练。
- 定期重训练:根据业务节奏设定重训练频率。快节奏业务(如推荐系统)可能每天重训,慢节奏业务(如信用评估模型)可能每月甚至每季度更新。
时间分配
基于真实项目的经验,一个典型 ML 项目的时间分配如下 9:
| 阶段 | 时间占比 | 说明 |
|---|---|---|
| 理解业务 | 5-10% | 但方向错了全部作废,时间再紧也不该省这一步 |
| 理解和准备数据 | 60-70% | 数据清洗 + 特征工程 = ML 项目中最耗时、影响最大的部分 |
| 建模 | 15-20% | 调包训练很快,但调参和验证需要反复实验 |
| 评估 | 5-10% | 被严重低估——评估不只是跑一个指标,要理解模型在哪些子场景表现差 |
| 部署和监控 | 5-10% | 部署本身可能很快,但长期监控和迭代才是真正的成本 |
新手最常见的误区:70% 的时间花在调参和换模型上,数据只用了 30% 的时间粗粗看过——完全反了。
常见陷阱
- 跳过 EDA 直接建模。 数据里有一个特征 99% 的值都一样,那这个特征对模型几乎没有帮助。数据里某列全是缺失值但你没发现,模型也在”学着”——这个问题你不看数据就不会知道。
- 没有 baseline。 一头扎进 XGBoost 或深度学习,调了一周参数,结果还不如最简单的线性回归。如果你不知道”最简单方案”能拿什么成绩,你就不知道复杂方案到底带来了多少提升。
- 只优化模型,不优化数据。 费劲换模型提升 1%,不如回去认真做特征工程可能提升 10%。数据决定了模型效果的上限,模型只是逼近这个上限。
- 测试集泄露。 在建模的某个步骤不小心用到了测试集的信息(比如用整个数据集做了归一化,而不是只在训练集上计算均值和标准差)。这会让测试集评估结果虚高——你以为模型很好,实际只是一场”提前看了答案”的假考试。
- 上线后就不管了。 模型上线三个月后效果严重下滑,但没人监控——等业务方发现问题时,已经损失了三个月。监控和告警不是可选项。
上一节:4.6 2026年:经典ML vs 深度学习的选型 | 下一节:章首
注释
-
Shearer, “The CRISP-DM model: The New Blueprint for Data Mining”, Journal of Data Warehousing, 2000 ↩
-
Tukey, “Exploratory Data Analysis”, Addison-Wesley, 1977 ↩
-
详细实现见 第5章 · 模型评估与特征工程 ↩
-
Domingos, “A Few Useful Things to Know About Machine Learning”, Communications of the ACM, 2012 ↩
-
Grinsztajn, Oyallon & Varoquaux, “Why do tree-based models still outperform deep learning on tabular data?”, NeurIPS, 2022 ↩
-
Google, “Rules of Machine Learning: Best Practices for ML Engineering”, 2020 ↩