· 机器学习 ·阅读时长约 10 分钟

机器学习建模流程

一个完整的机器学习项目并不是"选个模型 → 训练 → 完事",而是一条贯穿业务、数据、模型、工程、运营的闭环流水线。工业界普遍遵循的流程可以归纳为下面 10 个阶段。

建模流程数据预处理模型评估工程实践

所属专题:机器学习基础 (ml-basics·03)

机器学习建模流程

一个完整的机器学习项目并不是”选个模型 → 训练 → 完事”,而是一条贯穿业务、数据、模型、工程、运营的闭环流水线。工业界普遍遵循的流程可以归纳为下面 10 个阶段。

全流程总览

① 业务理解 ─┐
            ├──→ ② 数据采集 ──→ ③ 数据探索(EDA) ──→ ④ 数据预处理
            │                                              │
            │                                              ▼
            │                                        ⑤ 特征工程
            │                                              │
            │                                              ▼
            │           ⑦ 模型评估 ←── ⑥ 模型训练 & 选择
            │                │
            │                ▼
            │        ⑧ 超参数调优
            │                │
            │                ▼
            └──→ ⑨ 模型部署 ──→ ⑩ 监控 & 迭代 ──→ (回到 ①)

① 业务理解与问题定义

这是最重要、也最容易被跳过的一步。做得不好,后面所有的技术工作都会走偏。

要回答的问题

  • 业务目标是什么?(提升转化率?降低坏账?减少人工成本?)
  • 这个问题是否适合用机器学习解决?规则系统能不能搞定?
  • 属于什么类型的任务?(分类 / 回归 / 排序 / 聚类 / 生成 …)
  • 成功的评判标准是什么?(业务指标 vs 技术指标)
  • 上线后的决策链路是什么?模型输出如何被使用?
  • 有哪些约束?(延迟、内存、可解释性、公平性、合规性)

产出:项目立项文档、评价指标定义、数据需求清单

常见陷阱

  • 用技术指标(AUC 高)代替业务指标(GMV 提升)
  • 忽略基线(Baseline):不知道当前非 ML 方案能做到什么水平
  • 目标不可度量、不可归因

② 数据采集与理解

数据来源

  • 内部业务数据库(MySQL、Hive、数据仓库)
  • 日志系统(Kafka、埋点日志)
  • 第三方 API / 公开数据集
  • 人工标注、爬虫、合成数据

关注点

  • 数据的时效性(是否与线上一致?有没有穿越 / 数据泄露?)
  • 数据的代表性(样本分布是否覆盖真实场景?)
  • 数据的可获得性(上线时线上能否拿到相同的特征?—— 特征可用性)
  • 数据规模与存储成本
  • 合规性与隐私(GDPR、个保法、脱敏)

产出:原始数据集、数据字典、样本量与分布统计

③ 探索性数据分析(EDA)

在动手建模前,先”看懂”数据

主要工作

类别内容
基本描述样本数、特征数、字段类型、数据规模
单变量分析均值、方差、分位数、分布形态、缺失比例
双变量分析特征与标签的相关性、特征之间的相关性
可视化直方图、箱线图、散点图、热力图
数据质量缺失、异常、重复、不一致、类别不均衡
标签分析类别分布、长尾情况、噪声比例

常用工具:Pandas、Matplotlib、Seaborn、Sweetviz、ydata-profiling

产出:EDA 报告、数据质量问题清单、初步的特征假设

④ 数据预处理(Data Preprocessing)

把”脏”数据变成模型可用的”干净”数据。

4.1 缺失值处理

  • 删除(缺失比例高、样本充足时)
  • 填充:均值 / 中位数 / 众数 / 常数 / 前后值 / 模型预测填充
  • 缺失本身作为一个特征(“是否缺失”)

4.2 异常值处理

  • 统计方法:3σ 原则、IQR
  • 模型方法:Isolation Forest、LOF
  • 处理:删除、截断(Winsorize)、单独建模

4.3 数据类型转换

  • 数值型:类型统一(int / float)
  • 类别型:编码(下面会讲)
  • 时间型:拆分成年/月/日/星期/时段等

4.4 数值特征处理

  • 归一化(Min-Max Scaling):缩放到 [0, 1]
  • 标准化(Z-Score):均值 0、方差 1
  • 对数变换 / Box-Cox:处理偏态分布
  • 分箱(Binning):连续值 → 离散区间

4.5 类别特征编码

方法适用场景
Label Encoding有序类别(低 / 中 / 高)
One-Hot类别少、无序
Target/Mean Encoding类别多、树模型
Frequency Encoding类别多,用出现频率替代
Embedding深度学习、超高基数(如用户 ID)

4.6 类别不均衡处理

  • 重采样:过采样(SMOTE)、欠采样
  • 调整类别权重(class_weight)
  • 修改损失函数(Focal Loss)
  • 阈值调整(不是所有场景都要 0.5)

4.7 数据集划分

  • 训练集 / 验证集 / 测试集 常见比例:70/15/15 或 80/10/10
  • 交叉验证:K-Fold、StratifiedKFold、TimeSeriesSplit(时序数据)
  • ⚠️ 严禁数据泄露:任何依赖标签的处理(如目标编码)必须在训练集上 fit,再 transform 到验证/测试集

⑤ 特征工程(Feature Engineering)

Applied machine learning is basically feature engineering.” —— Andrew Ng

好的特征往往比复杂的模型带来更大的提升。

5.1 特征构造

  • 业务特征:基于领域知识组合,如”7 日购买频次”、“客单价 / 收入比”
  • 交叉特征:特征 A × 特征 B(LR/FM 中很重要)
  • 统计特征:分组聚合(如”用户过去 30 天平均消费”)
  • 时序特征:滑动窗口、滞后(Lag)、趋势、周期
  • 文本特征:TF-IDF、词向量、句向量
  • 图像特征:预训练 CNN 提取的中间层特征
  • 图特征:节点度、PageRank、图嵌入

5.2 特征选择

  • 过滤法(Filter):方差过滤、相关系数、卡方检验、互信息
  • 包装法(Wrapper):递归特征消除(RFE)
  • 嵌入法(Embedded):L1 正则(Lasso)、树模型特征重要性
  • 实际经验:树模型可容纳大量冗余特征;线性模型对冗余敏感

5.3 特征降维

  • PCA:线性降维
  • t-SNE / UMAP:非线性降维,用于可视化
  • Autoencoder:非线性降维,可保留复杂结构

产出:可用于建模的特征矩阵 X 和标签 y、特征生产脚本(离线与在线必须一致)

⑥ 模型训练与选择

6.1 建立基线(Baseline)

  • 不要一上来就上 XGBoost 或深度模型
  • 先用最简单的模型(规则、逻辑回归、随机预测)建立参考线
  • 之后每个复杂模型的收益都要与 baseline 对比

6.2 模型候选

根据任务类型选择候选模型:

  • 结构化数据 → 逻辑回归 / GBDT(XGBoost / LightGBM / CatBoost)
  • 图像 → CNN / Vision Transformer
  • 文本 → Transformer / 预训练大模型微调
  • 序列 → LSTM / Transformer
  • 推荐 → 双塔 / DeepFM / DIN

6.3 训练技巧

  • 合适的损失函数(回归 MSE、分类交叉熵、排序 pairwise loss)
  • 合理的 batch size 与学习率
  • 正则化:L1、L2、Dropout、Early Stopping
  • 梯度裁剪(RNN、大模型训练)
  • 混合精度训练(FP16 / BF16 加速)
  • 分布式训练(数据并行 / 模型并行)

6.4 训练过程监控

  • 训练 loss vs 验证 loss 曲线(判断过拟合/欠拟合)
  • 各类指标随 epoch 变化
  • 梯度、权重分布
  • 工具:TensorBoard、Weights & Biases、MLflow

⑦ 模型评估

7.1 离线指标

任务常用指标
二分类准确率、精确率、召回率、F1、AUC-ROC、AUC-PR、KS
多分类Macro/Micro/Weighted F1、混淆矩阵
回归MAE、MSE、RMSE、R²、MAPE
排序/推荐NDCG、MAP、MRR、Hit Rate、Recall@K
生成BLEU、ROUGE、Perplexity、人工评估
目标检测mAP、IoU

7.2 多维度评估

  • 整体表现 vs 分群表现(不同用户群、不同地区、不同时段)
  • 鲁棒性:对噪声、扰动、对抗样本的稳定性
  • 公平性:不同人群的表现差异(Demographic Parity、Equal Opportunity)
  • 可解释性:特征重要性、SHAP、LIME
  • 业务指标模拟:离线模拟上线后的业务影响

7.3 错误分析

比”看指标”更重要 —— 拿出错分样本逐个看,找到系统性错误。

⑧ 超参数调优

8.1 调优策略

  • 网格搜索(Grid Search):小规模参数空间
  • 随机搜索(Random Search):中等规模
  • 贝叶斯优化(Optuna、Hyperopt):昂贵评估、复杂空间
  • 进化算法 / 强化学习 NAS:搜索神经网络结构

8.2 调参顺序(经验)

  1. 学习率(最敏感)
  2. 模型容量(层数 / 宽度 / 深度)
  3. 正则化强度
  4. 优化器与调度策略
  5. Batch size

8.3 注意事项

  • 验证集上调参,测试集只用于最终评估
  • 避免过度调参 → 过拟合验证集
  • 记录每次实验(种子、数据版本、代码版本、参数、结果) → 实验管理

⑨ 模型部署(Deployment)

9.1 部署形式

形式场景
批处理(Batch)离线打分(每日跑一次)
实时服务(Online)REST/gRPC 服务,毫秒级响应
流式(Streaming)Flink / Kafka Streams
边缘部署(Edge)手机、IoT、浏览器(TFLite、ONNX、CoreML)

9.2 工程化关注点

  • 训练-推理一致性:预处理逻辑、特征生产在训练和线上必须一致
  • 特征平台(Feature Store):如 Feast,保证离线/在线特征对齐
  • 模型格式:Pickle、SavedModel、ONNX、TorchScript
  • 性能优化:量化(INT8)、剪枝、蒸馏、批推理、缓存
  • A/B 测试:小流量放量、灰度发布
  • 回滚机制:模型出问题能快速切回旧版本

9.3 常见服务化框架

TensorFlow Serving、TorchServe、Triton Inference Server、BentoML、FastAPI + 自封装

⑩ 监控与迭代

模型上线不是终点,而是MLOps 闭环的起点。

10.1 监控维度

维度指标
模型性能线上 AUC / 准确率、业务指标
数据分布漂移(Data Drift)PSI、KS、KL 散度
概念漂移(Concept Drift)标签 & 特征关系随时间变化
系统健康QPS、延迟、错误率、资源占用
公平性/合规分群表现、可疑输出

10.2 触发再训练的信号

  • 模型指标下降超过阈值
  • 特征分布漂移显著
  • 业务场景发生变化
  • 新数据到达(定时再训练)

10.3 MLOps 工具链

环节工具
实验管理MLflow、Weights & Biases、Neptune
数据/模型版本DVC、LakeFS、MLflow Model Registry
流水线编排Airflow、Kubeflow、Prefect
特征平台Feast、Tecton
部署与服务Seldon、KServe、BentoML
监控Evidently、WhyLabs、Arize

各阶段时间占比(工业界经验)

业务理解 + 数据 + 特征工程   ████████████████████████████████████████  70-80%
模型训练 + 调参             ████████                                   10-15%
部署 + 监控                 ████████                                   10-15%

结论建模只占很小一部分,绝大部分时间在数据和工程上。

关键原则(避坑指南)

  1. 先有 Baseline,再谈优化:没有基线就没有对比。
  2. 警惕数据泄露(Data Leakage):任何”未来信息”进入训练都会导致线上崩盘。
  3. 训练/线上一致性:预处理、特征、时区、缺失填充……必须完全一致。
  4. 能用简单模型解决就别上复杂模型:可维护性、可解释性、成本都更好。
  5. 业务指标 > 技术指标:AUC 提升 0.01 不等于业务收益。
  6. 实验可复现:固定随机种子、版本控制数据/代码/模型。
  7. 上线不是终点:数据在变、用户在变、模型必然衰减。
  8. 错误分析比盯指标更有价值:真正的洞察来自看错分样本。

一图流总结

阶段核心问题主要产出
① 业务理解要解决什么?如何衡量成功?项目立项、指标定义
② 数据采集数据从哪来?够不够?原始数据集
③ EDA数据长什么样?质量如何?EDA 报告
④ 预处理如何变干净?干净的数据集
⑤ 特征工程如何变有用?特征矩阵 X, y
⑥ 模型训练选什么模型?如何训?训练好的模型
⑦ 评估好不好?哪里不好?评估报告
⑧ 调优能不能更好?最优模型
⑨ 部署怎么用起来?线上服务
⑩ 监控迭代还行不行?该更新了吗?监控看板、新版本

评论