vault backup: 2026-05-20 16:17:05
This commit is contained in:
@@ -0,0 +1,207 @@
|
||||
好的,我把从项目启动到现在的全部版本迭代、核心发现和关键转折点,按时间线梳理清楚。
|
||||
|
||||
---
|
||||
|
||||
# 网格交易选股模型 — 全版本历史总结
|
||||
|
||||
## 第一阶段:原型搭建(v1.0 ~ v3.6)
|
||||
|
||||
### v1.0:从零开始
|
||||
**核心目标**:验证“用机器学习预测网格匹配次数”是否可行。
|
||||
|
||||
**做了什么**:
|
||||
- 用 180 天沪深主板个股历史数据,按 [1,2,...,11] 元网格模拟交易
|
||||
- 计算每只股票在历史区间内的网格成交次数作为标签
|
||||
- 用随机森林(RandomForestRegressor)训练,预测“未来 60 天匹配次数”
|
||||
- 在 278 只股票上做了初步验证
|
||||
|
||||
**关键发现**:机器学习预测网格匹配次数是可行的。但 278 只股票的样本量太小,模型泛化能力有限。
|
||||
|
||||
---
|
||||
|
||||
### v2.0 ~ v2.1.1:扩大规模 + 引入市值因子
|
||||
**核心目标**:从 278 只扩展到全市场 1404 只,验证策略在全市场是否成立。
|
||||
|
||||
**做了什么**:
|
||||
- 扩展到全市场股票(5~15 元区间),训练样本约 30,000 条
|
||||
- 引入 3 个市值因子(流通市值对数、市值波动交互、小市值溢价)
|
||||
- 在模型协同上做了第一次尝试:把 Rank 模型的预测值作为 Top 模型的输入特征
|
||||
|
||||
**关键发现**:
|
||||
- 市值因子有效——小市值股票确实更有弹性,触发网格的概率更高
|
||||
- “让 Top 站在 Rank 肩膀上”这个协同思路第一次被验证
|
||||
|
||||
---
|
||||
|
||||
### v3.0 ~ v3.6:特征消融与精简
|
||||
**核心目标**:从 36 个特征逐步消融,找到最精简有效的特征集。
|
||||
|
||||
**做了什么**:
|
||||
- 每轮消融删除重要性最低的几个特征,看 Spearman 是否下降
|
||||
- 引入负向指标(流动性枯竭、价格呆滞等),让模型学会“识别不适合网格的标的”
|
||||
- 最终精简到 34 维基础特征,Spearman 稳定在 0.53 附近
|
||||
|
||||
**关键发现**:
|
||||
- 特征不是越多越好。34 维中最后 6 个重要性极低的特征被删除后,Spearman 反而微升
|
||||
- 负向指标中只有“流动性枯竭”被模型充分吸收,其他几个效果有限
|
||||
|
||||
---
|
||||
|
||||
## 第二阶段:架构升级(v4.0 ~ v5.4)
|
||||
|
||||
### v4.0 ~ v4.1:三模型协同架构确立
|
||||
**核心目标**:从单模型升级为 Rank → Top → Stacking 三层协同。
|
||||
|
||||
**做了什么**:
|
||||
- **Rank(回归)**:全市场排序,预测匹配次数
|
||||
- **Top(分类)**:识别头部 5% 的特等契合标的
|
||||
- **Stacking(融合)**:综合 Rank 和 Top 的输出,产出最终评分
|
||||
- Top 模型的训练标签从“全市场 P95”改为“同 period 内 P95”,更公平
|
||||
|
||||
**关键发现**:
|
||||
- 三层协同比单模型显著提升——Top 模型 PR-AUC 0.34,命中率 100%
|
||||
- Stacking 层能有效融合两个上游信号
|
||||
|
||||
---
|
||||
|
||||
### v5.0 ~ v5.3:情绪因子探索
|
||||
**核心目标**:引入恐慌/贪婪情绪因子,让模型感知市场环境。
|
||||
|
||||
**做了什么**:
|
||||
- 构造恐慌期弹性因子(恐慌日振幅放大比、反弹强度)
|
||||
- 构造贪婪期独立因子(贪婪日相对涨幅、振幅比)
|
||||
- 多次调整阈值(从极端阈值放宽到温和阈值)
|
||||
|
||||
**关键发现**:
|
||||
- 情绪因子对 Rank 有正向贡献(Spearman 从 0.50 提到 0.53)
|
||||
- 但对 Top 模型始终没有产生增益——Top 做的是头部精选,情绪信号在头部样本上的区分度不够
|
||||
- **教训**:情绪因子更适合做负向过滤(识别“该淘汰的”),不适合做正向精选(识别“该买的”)
|
||||
|
||||
---
|
||||
|
||||
### v5.4-E:模型协同的突破
|
||||
**核心目标**:让 Top 模型真正受益于 Rank 的排序信号。
|
||||
|
||||
**做了什么**:
|
||||
- 把 Rank 模型的预测值(`rank_predicted_rounds`)作为 Top 模型的第 35 维输入特征
|
||||
- 分层标签 + 头部权重训练 Top 模型
|
||||
|
||||
**关键发现**:
|
||||
- 这是 v5.x 系列最重要的突破——Top PR-AUC 从 0.30 提升到 0.33
|
||||
- “让 Top 站在 Rank 肩膀上”被反复验证有效
|
||||
|
||||
---
|
||||
|
||||
## 第三阶段:交易系统化(v6.0 ~ v6.3)
|
||||
|
||||
### v6.0 ~ v6.1:Stacking 融合 + 知识蒸馏
|
||||
**核心目标**:用一个模型统一 Rank 和 Top 的能力。
|
||||
|
||||
**做了什么**:
|
||||
- 尝试用 MLP 多任务学习同时做回归和分类(v6.0,失败)
|
||||
- 尝试用知识蒸馏让 MLP 学习 Teacher 模型(v6.1,效果不如 LightGBM)
|
||||
|
||||
**关键发现**:
|
||||
- **MLP 在表格数据上不如 LightGBM**——这是被反复验证的教训
|
||||
- 之后不再尝试深度学习替代树模型
|
||||
|
||||
---
|
||||
|
||||
### v6.2 ~ v6.3:全系统收敛
|
||||
**核心目标**:把最优特征集、最优模型架构、最优参数固化。
|
||||
|
||||
**做了什么**:
|
||||
- 修复 total_share 数据源(4 个特征之前因为数据缺失被填 0,修复后恢复正常)
|
||||
- 回测收益 148%,夏普 1.74,最大回撤 -19.78%
|
||||
- v6.3 被确立为生产基线
|
||||
|
||||
**关键发现**:
|
||||
- v6.3 的生产基线是在“旧规则训练数据(9.0-9.8)+ 三模型协同”这个体系下被验证稳定的
|
||||
|
||||
---
|
||||
|
||||
## 第四阶段:风控与仓位管理(v6.4 ~ v6.5)
|
||||
|
||||
### v6.4:Meta Ranker 的诞生
|
||||
**核心目标**:用利润预测替代价格一刀切规则。
|
||||
|
||||
**做了什么**:
|
||||
- 在 Stacking 之上新增 Meta Ranker:输入价格 + Stacking 评分 + Rank 预测轮数,输出预测利润
|
||||
- 跑 720 种参数组合的规则探索,找到最优配置
|
||||
- 训练样本 1288 条,Spearman 0.77
|
||||
|
||||
**关键发现**:
|
||||
- **Meta Ranker 是这个阶段最重要的突破**——收益从 148% 提升到 152%,回撤从 -19.78% 降到 -10.10%,夏普从 1.74 提到 2.16
|
||||
- Meta Ranker 需要约 1000 条以上训练样本才能稳定
|
||||
- 它的成功高度依赖上游模型评分分布与策略边界的匹配
|
||||
|
||||
---
|
||||
|
||||
### v6.5:叶子 Embedding 增强(进行中)
|
||||
**核心目标**:用树模型的叶子节点编码作为 Embedding 特征,增强上游模型。
|
||||
|
||||
**做了什么**:
|
||||
- 从 v6.3 Rank 模型的 500 棵树中提取叶子编号
|
||||
- 构造 20 组叶子编码特征(基于目标编码的交互特征)
|
||||
- 加入训练数据后,Rank Spearman 从 0.54 飙升到 0.74
|
||||
|
||||
**关键发现**:
|
||||
- 叶子 Embedding 是最有效的特征增强方式——三列新特征包揽重要性前 3 名
|
||||
- 但 Meta Ranker 训练样本在 v6.5 的模型体系下反复不足,流程多次阻塞
|
||||
|
||||
---
|
||||
|
||||
## 第五阶段:收益导向重构(v7.0 探索中)
|
||||
|
||||
### v7.0 的规划(尚未完成)
|
||||
**核心目标**:把整条链路的训练目标从“匹配轮数(y_rounds)”改为“总回报(total_return_60d)”。
|
||||
|
||||
**为什么要改**:
|
||||
- 当前体系前三层(Rank/Top/Stacking)都在预测“匹配轮数”,只有最后一层 Meta Ranker 预测“利润”
|
||||
- 这导致前后层目标错位——上游选的是“最活跃的”,但实盘需要的是“最赚钱的”
|
||||
|
||||
**怎么做**:
|
||||
- 从零重建训练样本,标签改为 `total_return_60d`(已实现利润 + 期末持仓市值)
|
||||
- 全链路用新标签重训,让 Rank/Top/Stacking 都直接学习收益规律
|
||||
- 同时引入规模中性化特征(纠正大盘股成交额偏差)和三指数独立震荡特征(沪深300/中证500/中证1000)
|
||||
|
||||
**当前状态**:
|
||||
- 训练样本生成完成(约 4.9 万条,正回报占比约 11.6%)
|
||||
- 从零重建的数据源因 K 线时间范围(2020 年起)和股票覆盖(仅 600 开头)不足,无法复现 v6.3 的 1,799 只过滤后股票数
|
||||
- **当前卡点**:数据源覆盖问题,需要 2018 年起、全市场(含深市和创业板)的 K 线数据
|
||||
|
||||
---
|
||||
|
||||
## 全版本关键教训
|
||||
|
||||
| 教训 | 来源版本 | 说明 |
|
||||
|:---|:---|:---|
|
||||
| **情绪因子适合负向过滤,不适合正向精选** | v5.x | 对 Rank 有效,对 Top 无效 |
|
||||
| **MLP 在表格数据上不如 LightGBM** | v6.0-v6.1 | 深度学习不是万能药 |
|
||||
| **叶子 Embedding 是最强特征增强** | v6.5 | 非线性的树结构编码,比 PCA 强 10 倍 |
|
||||
| **Meta Ranker 是体系最关键一环** | v6.4 | 用利润预测替代价格一刀切,夏普提升 24% |
|
||||
| **训练数据必须与策略边界匹配** | v7.0 | 上游模型评分分布偏移会导致可买标的枯竭 |
|
||||
| **从零重建比复用旧样本更难** | v7.0 | 数据源时间范围和股票覆盖是关键约束 |
|
||||
| **规则探索需要专门为每个模型体系做一次** | v6.4/v6.5 | 同一参数在不同模型上效果截然不同 |
|
||||
|
||||
---
|
||||
|
||||
## 当前最优体系(v6.4 生产基线)
|
||||
|
||||
| 组件 | 版本 | 核心指标 |
|
||||
|:---|:---|:---|
|
||||
| Rank | v6.3 原始 | Spearman 0.5355 |
|
||||
| Top | v6.3 原始 | PR-AUC 0.3389 |
|
||||
| Stacking | v6.3 原始 | Spearman 0.6932 |
|
||||
| Meta Ranker | v2(1288 条训练) | Spearman 0.7663 |
|
||||
| **整体回测** | — | **收益 152.15%,回撤 -10.10%,夏普 2.16** |
|
||||
|
||||
---
|
||||
|
||||
## 下一步方向
|
||||
|
||||
| 优先级 | 方向 | 预期收益 | 风险 |
|
||||
| :---- | :-------------------------------------------- | :--- | :-- |
|
||||
| **1** | v6.7:叶子 Embedding 增强 v6.4 上游 + 复用 Meta Ranker | 低 | 低 |
|
||||
| **2** | v7.0:收益导向全链路重训(需先解决数据源问题) | 高 | 高 |
|
||||
| **3** | 市场风格 Embedding(大小盘/牛熊切换) | 中 | 中 |
|
||||
Reference in New Issue
Block a user