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、涨跌停、停牌、滑点和可成交量限制。
  • [ ] 线上监控应覆盖信号健康、数据质量、执行差异、组合风险和预期差。
  • [ ] 策略复盘应先拆解原因,再决定修数据、降换手、降权、暂停或重建模型。
  • [ ] 复杂模型不能替代严谨的样本外测试和持续监控。

金句总结

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

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