Skip to content

12.6 ML策略评估:为什么线上表现会掉 ​

课前导读 ​

本章目标

适合读者:已经知道训练集、测试集、回测和基础机器学习指标,并希望把研究结果放到真实 A 股交易语境中审视的投资者。

本节重点:你将理解为什么模型上线后常常衰减,如何把预测指标、组合指标、交易成本和线上监控连成一套评估框架。

学习难度:advanced

预计用时:约 40 分钟

很多策略在研究报告里像“尖子生”。

一到真实市场,就变成“普通人”。

这不一定说明研究者造假。

更多时候,是离线环境和线上环境不是同一个考场。

离线回测像在安静教室里做题。

线上交易像在下雨、堵车、有人临时改规则的路上开车。

模型评估要做的事,就是提前估计这条路有多颠簸。


知识正文 ​

1. 类比:餐厅试菜和真实晚高峰 ​

想象一位厨师研发新菜。

试菜时,食材新鲜、厨房安静、客人只有三位熟人。

大家都觉得味道很好。

但真正开业后,晚高峰同时来五十桌。

食材批次不同,服务员忙不过来,外卖骑手催单,顾客口味也更复杂。

这道菜的真实表现可能明显下降。

机器学习策略也是一样。

回测里数据整齐、成交假设稳定、成本参数固定。

实盘里市场风格变化、盘口厚度变化、涨跌停限制、交易延迟、资金规模和投资者行为都会参与进来。

所以,评估不能只看“训练时分数”。

要看模型从研究室走到市场街道后,还剩多少有效性。

2. 术语:离线、样本外、线上和衰减 ​

离线评估,是在历史数据上检验模型。

样本外评估,是把模型放到训练期之后、没有参与调参的数据上检验。

线上评估,是模型真正进入模拟盘、小资金或生产环境后的表现监控。

衰减,是指线上表现低于离线预期。

衰减不是例外。

在金融市场里,它更像默认现象。

因为市场本身会学习、变化和反击。

你发现一个因子后,别人也可能发现。

你买入某些股票后,成交价格会被自己的交易影响。

政策、行业景气、投资者情绪和流动性环境也会改变。

因此,一个成熟的 ML 策略评估,不是问“会不会衰减”。

而是问“衰减多少算正常,衰减到哪里必须暂停”。

3. 线上表现下降的五个常见原因 ​

第一,分布漂移。

模型训练时看到的是过去市场。

上线后面对的是新市场。

A 股的市场风格可能在成长、价值、小盘、红利、周期之间轮动。

如果训练期主要是小盘活跃,模型可能偏爱高弹性股票。

当市场转向低波动高股息时,它的信号就会变弱。

第二,交易成本被低估。

回测可能只扣固定手续费。

真实交易还包括冲击成本、滑点、买卖价差、涨跌停无法成交、停牌和资金容量约束。

高换手模型尤其敏感。

每天换仓很多,看似预测准确,实际利润可能被成本吃掉。

第三,样本外选择不够严格。

如果你反复查看测试集,再根据结果改特征和参数,测试集就不再陌生。

它变成了另一个训练集。

上线后自然会掉。

第四,数据质量和时点差异。

历史数据可能经过修正。

线上数据可能有延迟、缺失、异常跳点或公告解析错误。

财报字段、行业分类、指数成分和 ST 状态如果时点不一致,线上信号会和回测信号不同。

第五,市场容量和拥挤度。

一个小资金回测能买到的价格,不代表大资金也能买到。

当很多人使用类似信号时,买点会提前、卖点会拥挤,收益空间会被压缩。

重要提醒

线上表现下降不一定说明模型完全无效。 关键是把下降拆成可解释部分:市场变化、成本、执行、数据、容量,还是原始信号失效。

4. 从预测指标到组合指标 ​

机器学习模型常先输出预测分数。

预测分数可以评估排序能力。

例如,模型认为 A 股票比 B 股票更有吸引力,之后 A 是否真的表现更好。

量化研究里常用 IC 或 Rank IC 描述这种相关性。

你可以把它理解成“模型打分和未来结果是否同方向”。

但投资者最终关心的不是分数本身。

而是组合结果。

组合指标包括年化收益、最大回撤、波动率、夏普比率、胜率、换手率、持仓集中度和容量。

预测指标和组合指标可能不一致。

模型排序略有优势,但换手太高,成本后亏损。

模型胜率不高,但盈亏比好,组合仍可能稳健。

模型回测收益高,但集中押注一个行业,风险其实很大。

所以评估要分层。

先看预测有没有统计上的稳定方向。

再看组合能否在交易约束后保留收益。

最后看上线后是否仍在预期范围内波动。

5. A 股策略评估框架 ​

下面这套流程适合审查一个 A 股 ML 策略。

mermaid
graph TD
    A[离线训练与验证] --> B[严格样本外测试]
    B --> C[加入A股交易约束]
    C --> D[模拟盘或影子组合]
    D --> E[小资金试运行]
    E --> F[线上监控与复盘]
    F --> G{是否超出风险边界}
    G --> H[继续观察]
    G --> I[降权或暂停]

离线阶段关注数据清洁、切分方式和泄露审计。

样本外阶段关注模型是否只在陌生时间段仍有效。

交易约束阶段要加入 T+1、涨跌停、停牌、手续费、滑点、买卖价差和成交量限制。

模拟盘阶段不一定真实下单,但要用当天真实可见数据生成信号。

小资金阶段关注执行差异。

线上监控阶段关注衰减是否在预期内。

这条链条越完整,模型分数越不容易变成幻觉。

6. 监控指标:上线后应该看什么 ​

线上监控不是每天盯收益曲线紧张。

它更像给策略安装仪表盘。

至少应关注四类指标。

第一类是信号健康。

包括预测分数分布、信号覆盖率、特征缺失率、极端值比例和每日换手。

如果模型分数突然全部挤在一起,可能说明输入数据异常。

如果缺失率突然升高,可能是数据源或字段口径变化。

第二类是交易执行。

包括计划成交量、实际成交量、平均滑点、未成交比例、涨跌停影响和停牌影响。

在 A 股里,信号正确但买不进去或卖不出来,结果也会变差。

第三类是组合风险。

包括行业暴露、市值暴露、个股集中度、最大回撤、波动率和杠杆使用情况。

模型可能无意中押注某个主题。

主题上涨时很风光,切换时回撤会很快。

第四类是预期差。

把线上收益、换手、成本和回撤与回测预期对比。

如果线上成本长期高于回测假设,就要重新估计策略净收益。

如果线上 Rank IC 连续低于历史低位,就要检查信号是否失效。

7. 简化 Python 示例:看成本如何吞掉优势 ​

下面例子只为说明直觉。

它不是实盘策略。

python
# 每笔交易前的预期收益,单位可以理解为 1 = 1%
expected_alpha = [0.9, 0.7, 0.5, 0.4, 0.3]
turnover = [0.8, 0.9, 1.1, 1.0, 1.2]
cost_per_turnover = 0.4

net_alpha = []
for alpha, change_rate in zip(expected_alpha, turnover):
    cost = change_rate * cost_per_turnover
    net_alpha.append(alpha - cost)

print(net_alpha)

这段代码表达一个简单事实。

模型看起来每天有一点预测优势。

但如果换手很高,交易成本会按换手持续扣除。

当预期收益只有 0.3% 到 0.5%,而真实成本接近或超过这个水平时,策略上线后就很容易“消失”。

很多机器学习模型喜欢频繁改变排序。

这会让组合频繁换仓。

如果评估时只看预测准确率,不看换手和成本,就会高估策略。

8. A 股案例:一个高换手小盘模型 ​

假设某模型在 2019 到 2021 年表现很好。

它偏好短期成交活跃、波动较大、市值较小的股票。

回测显示年化收益很高。

但上线后表现下降。

复盘时发现几个问题。

第一,训练期小盘风格占优,样本外风格切换后信号弱化。

第二,模型每天排序变化大,导致换手过高。

第三,很多目标股票盘口较薄,大资金买入会推高价格。

第四,部分股票涨停时买不进去,跌停时卖不出来。

第五,回测用收盘价成交,但实盘只能在次日或盘中执行。

这时不要急着换更复杂的模型。

更专业的做法是分解误差来源。

如果主要是成本问题,先降低换手和容量假设。

如果主要是风格问题,增加风格暴露监控。

如果主要是数据时点问题,修正数据管道。

如果主要是信号失效,再考虑重新建模。

教师视角

评估不是为了证明模型厉害,而是为了发现模型在哪些条件下会变弱。 知道边界,才有资格谈使用。

9. 可执行练习:设计一张线上监控日报 ​

请为一个“每日收盘后选股、次日调仓”的 ML 策略设计日报。

不需要真实数据。

只需要列出你每天要看的字段。

建议包含以下内容。

模块指标你要问的问题
信号分数均值、分位差、覆盖股票数今天模型是否正常输出
数据缺失率、异常值数量、更新时间输入是否可靠
交易换手率、未成交比例、滑点成本是否超过预期
风险行业集中度、市值暴露、个股权重是否变成隐形押注
表现日收益、累计收益、回撤是否偏离历史范围
对比线上与回测成本差、线上与模拟盘差差距来自哪里

练习的关键不是追求表格好看。

而是让每个指标都能触发一个动作。

例如,缺失率异常就暂停信号。

滑点异常就降低交易量。

回撤触线就降权或复核。

Rank IC 连续恶化就进入策略复盘。

10. 评估中的三条底线 ​

第一,不把样本内收益当作投资承诺。

样本内只是模型学习后的成绩单。

它不能代表未来。

第二,不把一次样本外成功当作永久有效。

市场状态会改变。

策略需要持续监控。

第三,不把复杂模型当作成本豁免证。

再聪明的模型也要经过交易成本、成交限制和风险约束。

忽略这些,线上掉落只是时间问题。


交互实验室 ​

场景推演:线上掉了 40%,你先查什么 ​

假设某 A 股 ML 策略回测年化收益为 20%。

模拟盘三个月后,按同样口径估算只剩 12%。

请不要立刻判断“模型失效”。

按顺序回答下面问题。

  1. 模拟盘的数据是否严格按当日可见时间生成?
  2. 实际换手是否高于回测?
  3. 滑点、买卖价差、涨跌停未成交是否高于假设?
  4. 组合是否集中到某个行业或市值风格?
  5. 同期市场风格是否发生变化?
  6. 预测分数分布是否和回测期明显不同?
  7. 如果只看低换手子组合,衰减是否变小?

把答案写成三列。

第一列写“可能原因”。

第二列写“需要的数据”。

第三列写“如果成立,采取什么动作”。

这就是量化开发的线上复盘思维。

评估动作卡片 ​

观察结果可能解释优先动作
收益下降但成本上升执行差异或容量不足重新估计成本,降低换手
Rank IC 下降但成本正常信号弱化或分布漂移检查市场风格,重新验证
缺失率突然升高数据管道异常暂停信号并修复数据
行业集中度升高模型押注主题加入暴露约束或降权
未成交比例升高涨跌停、停牌或流动性不足调整可交易股票池
回撤超过预设边界风险状态变化降权、停止新增、复盘

你可以把这张表放在研究笔记里。

每次策略表现偏离预期时,先按表排查,而不是马上换模型。


核心复盘 ​

知识清单:

  • [ ] ML 策略上线后衰减很常见,评估要提前定义可接受范围。
  • [ ] 分布漂移、交易成本、数据时点、容量和拥挤度都会让线上表现下降。
  • [ ] 预测指标只能说明模型打分质量,不能替代组合收益和风险指标。
  • [ ] A 股评估必须纳入 T+1、涨跌停、停牌、滑点和可成交量限制。
  • [ ] 线上监控应覆盖信号健康、数据质量、执行差异、组合风险和预期差。
  • [ ] 策略复盘应先拆解原因,再决定修数据、降换手、降权、暂停或重建模型。
  • [ ] 复杂模型不能替代严谨的样本外测试和持续监控。

金句总结

模型上线不是毕业典礼,而是开始接受市场每天监考。

本文档仅供学习交流用途,不构成任何投资建议。股市有风险,入市需谨慎。