量化研究员最熟悉的场景大概是这样的:在Jupyter Notebook里跑出一个回测夏普3.5的策略,兴奋地截图发给老板,然后……就没有然后了。从”Notebook里能跑”到”实盘里能赚钱”,中间隔着一条鸿沟。这条鸿沟的名字叫MLOps。
为什么量化的MLOps比互联网更难#
互联网公司的MLOps已经相对成熟——推荐系统、搜索排序、广告点击率预估,这些场景有成熟的工具链和方法论。但量化交易的MLOps有几个独特的难点:
数据不是静止的。 互联网场景下,用户画像和内容特征是相对稳定的。但金融市场的数据分布是典型的非平稳(Non-stationary)过程——今天有效的因子明天可能就失效了,牛市学到的规律熊市完全不适用。
延迟就是金钱。 推荐系统慢100毫秒,用户可能只是多等半秒。但在高频或日内交易场景,100毫秒的延迟意味着滑点翻倍甚至错失成交机会。MLOps系统需要在模型精度和推理延迟之间做精细的权衡。
错误成本极高。 推荐系统推了个不相关的商品,大不了用户划走。但量化交易系统如果因为一个特征计算的bug导致错误下单,损失可能是真金白银。这意味着需要多层校验和熔断机制。

从Jupyter到生产的五步流水线#
一个成熟的量化MLOps系统通常包含五个核心环节:
第一步:数据管道与特征工程#
这是整个流水线的基石。一个典型的A股量化数据管道需要处理:
- 多源数据接入:行情数据(Tick/分钟/日频)、基本面数据(财报/估值)、另类数据(新闻情绪/龙虎榜/北向资金)、宏观数据(利率/汇率/PMI)
- 数据质量检查:缺失值检测、异常值过滤、复权校验、停牌/ST标记
- 特征存储(Feature Store):所有因子统一存储,保证训练和推理使用完全一致的特征定义
关键原则:训练时怎么算的,推理时必须一模一样。 很多策略在回测中表现很好、实盘却一塌糊涂,根因就在于训练和推理时的特征计算逻辑不一致。
第二步:实验追踪与模型训练#
Notebook里跑实验很容易,但要管理成百上千个实验就需要实验追踪系统:
- 实验注册:每次训练记录超参数、数据切分方式、训练集时间范围
- 指标对比:IC、ICIR、夏普比率、最大回撤、换手率等自动记录和对比
- 模型版本管理:每个上线的模型都有明确的版本号,可以回溯到具体的训练配置和数据集
常用工具包括MLflow、Weights & Biases、DVC等。小团队用MLflow足够,它支持实验追踪、模型注册和简单的模型服务。
第三步:模型评估与回测校验#
在将模型推到生产之前,需要经过严格的评估流程:
- 样本外测试:在完全未参与训练的数据上评估
- 渐进式回测(Walk-forward Backtesting):模拟真实的时间推进过程,每个交易日只用当天之前的数据
- 敏感性分析:测试模型在不同市场环境下的表现(牛市/熊市/震荡市)
- 归因分析:搞清楚模型赚的是什么钱——是风格暴露、行业暴露还是真正的alpha
第四步:模型部署与在线推理#
模型通过评估后,进入部署环节:
- 模型转换与优化:PyTorch模型转ONNX再转TensorRT,减少推理延迟
- 在线特征服务:推理时需要实时计算的特征通过特征服务统一提供
- 多模型并行:生产环境通常同时运行多个模型(不同策略、不同频段),需要统一的调度和管理
- A/B测试框架:新模型上线时先分配小比例资金,逐步放量
第五步:监控与模型漂移检测#
模型上线只是开始,持续的监控才是关键:
- 预测漂移检测:监控模型输出的分布是否发生了显著变化
- 特征漂移检测:监控输入特征的分布是否偏离了训练时的分布
- 实盘vs回测对比:实盘表现是否在回测的预期范围之内
- 自动熔断:当关键指标突破阈值时自动暂停策略

工具选型指南#
对于量化团队来说,工具选型需要平衡功能需求和运维成本:
| 环节 | 推荐工具 | 适用场景 |
|---|---|---|
| 实验追踪 | MLflow / WandB | 团队协作实验管理 |
| 数据版本 | DVC / Quilt | 数据集和特征版本管理 |
| 特征存储 | Feast / Tecton | 在线/离线特征一致性 |
| 模型服务 | Triton / BentoML | 高性能模型推理 |
| 工作流编排 | Airflow / Prefect | 定时训练和批量推理 |
| 监控告警 | Grafana + Prometheus | 实时指标监控 |
对于3-5人的小型量化团队,一个轻量级方案是:MLflow(实验追踪+模型注册)+ DVC(数据版本)+ Airflow(定时任务调度)+ Grafana(监控大盘)。这套组合足以覆盖从研究到生产的全流程,而且全部开源免费。
一个真实的踩坑案例#
某团队开发了一个基于LSTM的日频选股模型,回测表现优异。上线后第一周就亏了3个点。排查后发现两个问题:
特征计算的时间对齐bug。 训练时特征计算使用的是T日收盘后的数据(包含了T日本身的信息),但实盘推理时在T日开盘前调用(没有T日信息)。这个”小小的”时间错位导致了显著的数据泄露(Data Leakage),回测效果是虚假的。
特征存储的精度丢失。 模型训练时用float64计算因子值,但特征存储为了节省空间存成了float32。对于大部分因子这个精度损失无关紧要,但策略中有两个因子的值域很小(0.001量级),精度丢失导致排名完全错乱。
这两个问题都不是模型的问题,而是MLOps工程实践的问题。它们不会出现在任何论文里,但却是实盘中区分赚钱和亏钱的关键。
结语#
量化交易正在从”手工作坊”走向”工业化生产”。MLOps不是锦上添花,而是决定策略能否真正转化为利润的基础设施。对于量化团队来说,投入MLOps建设的时间,最终都会在实盘收益上得到回报——因为少踩一个坑,就是多赚一份钱。