Files
obsidian_vault/FleetingNotes/GridSeeker/模型信息汇总.md
T

16 KiB
Raw Blame History

v6.4 生产模型体系详细说明


一、整体架构

v6.4 是一个四层串联的 LightGBM 模型体系,按照“排序 → 精选 → 校准 → 定价”的流程协同工作。

输入:一只股票的原始行情数据(K线、成交量等)
    │
    ▼
┌─────────────────────────────────────┐
│ 第1层:Rank(全市场排序)            │
│   模型:LGBMRegressor               │
│   输入:38维特征(34基础 + 4情绪)    │
│   输出:rank_predicted_rounds        │
│   角色:初级分析师,回答“谁更活跃”    │
└─────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────┐
│ 第2层:Top(头部精选)               │
│   模型:LGBMClassifier              │
│   输入:35维(34基础 + Rank预测值)   │
│   输出:top_elite_prob0~1        │
│   角色:资深专家,回答“谁是头部5%”   │
└─────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────┐
│ 第3层:Stacking(融合校准)          │
│   模型:LGBMRegressor               │
│   输入:36维(34基础 + Rank + Top  │
│   输出:calibrated_prob              │
│   角色:投资总监,回答“综合谁最好”   │
└─────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────┐
│ 第4层:Meta Ranker(定价决策)       │
│   模型:LGBMRegressor               │
│   输入:3维(价格 + Stacking + Rank)│
│   输出:predicted_profit             │
│   角色:定价师,回答“买谁最赚钱”     │
└─────────────────────────────────────┘
    │
    ▼
最终选出预测利润最高的10只建仓

二、各层模型详细说明

2.1 Rank 模型——全市场排序

属性 说明
文件 rank.pkl
模型类型 LightGBM 回归(LGBMRegressor
训练目标 y_rounds(未来60天网格匹配轮回数,log1p变换)
输入维度 38维(34基础特征 + 4情绪因子)
输出 rank_predicted_rounds(预测匹配轮数,log1p空间)
核心指标 Spearman 0.53555折交叉验证均值)
训练样本 约21.2万条,覆盖1,799只股票

角色:Rank 是整个链条的起点。它不关心价格合不合适、不关心最终能不能赚钱,只做一件事——给全市场股票排序,预测“谁最活跃”。它是整个体系中最依赖基础特征的模型。

输出如何被使用:Rank 的预测值作为 Top 模型的关键输入特征(第35维),也是 Stacking 和 Meta Ranker 的输入之一。它不以最终决策者的身份出现,而是作为“活跃度信号”传递给下游。


2.2 Top 模型——头部精选

属性 说明
文件 top.pkl
模型类型 LightGBM 分类(LGBMClassifier
训练目标 是否属于同 period 内 P95 头部(二分类)
输入维度 35维(34基础特征 + rank_predicted_rounds
输出 top_elite_prob(特等契合概率,0~1
核心指标 PR-AUC 0.3389Top5命中率 100%Top10命中率 100%
训练样本 与 Rank 相同

角色:Top 是“站在 Rank 肩膀上”的精选专家。它不自己做全市场排序,而是用 Rank 的输出作为最重要的参考信号,从中识别出“头部 5%”的特等契合标的。它的标签不是看绝对匹配次数的高低,而是看“在同一时期的所有股票里,是不是最优秀的那一批”。

标签构造逻辑

  • 将训练样本按 period_id(时间段)分组
  • 在每个 period_id 内,取 y_rounds 的 P95 分位数作为阈值
  • y_rounds >= P95 → 标签=1(正样本,头部5%
  • y_rounds < P95 → 标签=0(负样本)

为什么要用 period_id 分组:不同时期的网格活跃度差异很大。2024年2月恐慌期和2024年10月亢奋期,全市场的匹配次数分布完全不同。如果不用 period_id 分组,模型会把“恐慌期的中等活跃”和“亢奋期的高活跃”错误对比。分组让 Top 学会的是“在当前环境下,这只股票是不是相对最好的”。

输出如何被使用Top 的概率值作为 Stacking 的核心输入之一,帮助 Stacking 做最终校准。


2.3 Stacking 模型——融合校准

属性 说明
文件 stacking_calibrated.pkl
模型类型 LightGBM 回归(LGBMRegressor
训练目标 y_roundslog1p变换)
输入维度 36维(34基础特征 + rank_predicted_rounds + top_elite_prob
输出 calibrated_prob(校准后的最终评分)
核心指标 Spearman 0.6932
训练样本 与 Rank 相同

角色:Stacking 是“投资总监”。它不像 Rank 那样直接看原始数据,也不像 Top 那样只做头部精选,而是综合所有可用信息——原始特征、Rank 的判断、Top 的判断——做一次最终的校准评分。它能学会“当 Rank 和 Top 意见一致时,强化信号;当两者矛盾时,折中处理”。

与 Meta Ranker 的本质区别

  • Stacking 回答的是“谁最好”(质量排序),不考虑价格
  • Meta Ranker 回答的是“买谁最赚钱”(利润预测),必须考虑价格

输出如何被使用:在 v6.3 中,Stacking 的输出直接作为最终评分排序选股。在 v6.4 中,它退后半步,作为 Meta Ranker 的关键输入特征之一。


2.4 Meta Ranker 模型——定价决策

属性 说明
文件 meta_ranker_v2.pkl
模型类型 LightGBM 回归(LGBMRegressor
训练目标 future_60d_profit(买入后60天实际网格利润,log1p变换)
输入维度 3维(latest_close + calibrated_prob + rank_predicted_rounds
输出 predicted_profit(预测利润)
核心指标 Spearman 0.7663
训练样本 1,288条(v6.4自身回测产生的真实买入交易记录)

角色Meta Ranker 是 v6.4 区别于 v6.3 的核心创新。前三个模型都在回答“好不好”,Meta Ranker 回答的是“值不值”——以当前价格买入,未来60天能赚多少。

为什么要单独训练 Meta Ranker:Stacking 虽然擅长排序,但它不考虑入场价格。一只评分 0.99 的股票,如果当前价格太贵,向上空间很小,实际利润可能不如一只评分 0.70 但价格合适的股票。Meta Ranker 通过直接学习真实买入利润,学会了在“质量、活跃度、价格”三者之间做最优权衡。

训练样本的独特来源Meta Ranker 的训练样本不来自候选池特征快照,而来自 v6.4 自身回测中实际发生的买入交易。每条样本记录了“以某个价格买入某只股票后,未来60天实际赚了多少”。这让 Meta Ranker 学到的是“真实交易的利润规律”,而不是“理论上的匹配次数规律”。

为什么样本量只有 1,288 条:利润标签比匹配轮数标签更难获取——必须模拟一次真实的买入操作,然后跟踪后续60天的网格交易结果。但 Meta Ranker 仅需少量高质量样本就能生效,因为它只需要学习 3 个特征的组合规律。


三、因子体系详细说明

3.1 34 维基础特征(按类别分组)

价格波动类(6个)

特征 中文名称 计算逻辑 对模型的意义
price_cv 价格变异系数 观察窗口内收盘价标准差 / 均值 × 100 衡量价格离散程度,值越大说明价格波动越剧烈
volatility_20d 20日波动率 近20日日收益率标准差 × sqrt(252) × 100 年化波动率,衡量短期波动强度
avg_daily_amp 日均振幅 近20日 (high-low)/open × 100 的均值 日均波动幅度,直接反映网格触发潜力
atr_pct ATR百分比 14日ATR / 最新收盘价 × 100 考虑跳空缺口的真实波动,比单纯振幅更准确
bb_width 布林带宽度 (上轨-下轨)/中轨 × 100 价格通道宽度,过窄没有交易空间,过宽风险大
amplitude_cv 振幅变异系数 近20日日振幅标准差 / 均值 衡量振幅稳定性,稳定高振幅比忽大忽小更好

成交量与资金类(6个)

特征 中文名称 计算逻辑 对模型的意义
amount_mean_20d 20日平均成交额 近20日成交额均值 绝对成交活跃度
amount_cv_20d 20日成交额变异系数 近20日成交额标准差/均值 成交稳定性
turnover_proxy_20d 换手率代理 近20日成交量/总股本 相对成交活跃度,已标准化规模
volume_ratio 量比 近20日均量 / 近60日均量 >1放量,<1缩量
obv_slope OBV斜率 近20日OBV线性回归斜率 资金流向趋势,正=流入,负=流出
liquidity_drying_up_20d 流动性枯竭 20日最低量 / 60日均量 负向指标,成交量急剧萎缩是风险信号

趋势与位置类(7个)

特征 中文名称 计算逻辑 对模型的意义
trend_slope_60d 60日趋势斜率 近60日收盘价线性回归斜率 中长期趋势方向
trend_slope_20d 20日趋势斜率 近20日收盘价线性回归斜率 短期趋势方向
trend_abs_slope_20d 20日趋势绝对斜率 近20日趋势斜率的绝对值 趋势强度,不区分方向
drawdown_60d 60日最大回撤 近60日最高点到最低点的跌幅 风险度量
range_position_60d 60日区间位置 (当前价-60日最低)/(60日最高-60日最低) 当前价格在中期波动区间中的相对位置
rebound_from_low_60d 60日低点反弹幅度 (当前价-60日最低)/60日最低 从底部反弹的力度
intraday_trend_strength 日内趋势强度 近20日 abs(close-open)/open 均值 日内单边vs震荡的度量

网格结构类(5个)

特征 中文名称 计算逻辑 对模型的意义
grid_room_balance 网格空间均衡度 (当前价到上界距离)/(当前价到下界距离) 价格在网格区间内的位置是否均衡
grid_touch_count_60d 60日网格触达次数 近60日K线触碰整数网格线的次数 价格在网格线附近活动的频率
dist_to_grid_upper 距上方网格距离 (11-当前价)/11 向上卖出的空间大小
dist_to_grid_lower 距下方网格距离 (当前价-1)/当前价 向下买入的空间大小
cross_freq_x_bb 穿网频率×布林带宽 交互特征 网格穿越效率与价格通道的组合

市值与风格类(5个)

特征 中文名称 计算逻辑 对模型的意义
ln_float_mv 流通市值对数 log(流通市值) 规模因子,小市值弹性更大
mv_vol_interact 市值波动交互 ln_float_mv × volatility_20d 规模与波动的交互效应
small_cap_premium 小市值溢价 1/(流通市值+1) 市值越小值越大
amplitude_uniqueness_20d 振幅独特性 个股振幅相对沪深300振幅的偏离度 独立于大盘的震荡程度
price_entropy 价格分布熵 近60日收盘价分10bin计算信息熵 价格分布是否均匀

交互与辅助类(5个)

特征 中文名称 计算逻辑 对模型的意义
amp_x_grid 振幅×网格占比 avg_daily_amp × rolling_grid_ratio 网格内可交易波动空间
amp_x_grid_vol 振幅×网格×成交量 三维交互特征 带量支持的网格波动性
amp_cv_x_entropy 振幅变异×价格熵 交互特征 波动不稳定度与价格分布复杂度
price_stagnation_20d 20日价格停滞 近20日振幅极小程度 负向指标,价格过于呆滞不适合网格
gap_risk_20d 20日跳空风险 近20日跳空次数或幅度 负向指标,跳空会导致网格失效

3.2 4个情绪因子(v6.3 Rank 的 38 维中包含)

特征 中文名称 计算逻辑 对模型的意义
relaxed_panic_rebound_strength 宽松恐慌反弹强度 恐慌日最低点到次日最高点的平均反弹幅度 恐慌后修复能力
relaxed_panic_amplification_ratio 宽松恐慌振幅放大比 恐慌日振幅 / 正常日振幅 恐慌时波动是否放大
relaxed_greed_relative_gain 宽松贪婪相对涨幅 贪婪日个股涨幅 / 大盘涨幅 普涨时是否跟风
relaxed_greed_amplitude_ratio 宽松贪婪振幅比 贪婪日振幅 / 正常日振幅 普涨时是否维持独立震荡

注意:这4个情绪因子只进入 Rank 模型(38维),不进入 Top35维)和 Stacking36维)。因为 Top 和 Stacking 通过 rank_predicted_rounds 间接获取情绪信号,不需要自己再学一遍。

计算窗口:情绪因子使用 180 天历史窗口(不是 120 天),这是历史口径的要求。


四、模型间的数据流

输入:股票的 OHLCV 数据
    │
    ▼
34维基础特征计算 ← 依赖 K线 + 股本 + 指数数据
    │
    ├── + 4个情绪因子 → 38维 → Rank模型 → rank_predicted_rounds (log1p空间)
    │                                              │
    ├── 34基础 + rank_pred → 35维 → Top模型 → top_elite_prob (0~1)
    │                                              │
    ├── 34基础 + rank_pred + top_prob → 36维 → Stacking模型 → calibrated_prob
    │                                                              │
    └── latest_close + calibrated_prob + rank_pred → 3维 → Meta Ranker → predicted_profit
                                                                   │
                                                                   ▼
                                                           最终排序选股

关键注意点

  • Rank 输出是 log1p 空间,传给 Top 时不做 expm1 还原(保持与 v6.4 训练口径一致)
  • Top 输出直接是概率值,无需变换
  • Meta Ranker 的输入 rank_predicted_rounds 是还原后的原始值(expm1

五、模型训练数据来源

模型 训练数据 样本量 覆盖股票
Rank share_fixed_training_frame.parquet 211,976 1,799
Top 同上 同上 同上
Stacking 同上 同上 同上
Meta Ranker v6.4 自身回测产生的买入交易记录 1,288

Rank/Top/Stacking 共享同一份训练样本,这是 v5.0 时代固化的全历史滑窗样本。Meta Ranker 的训练样本完全不同——来自 v6.4 自身回测中实际发生的买入,每条记录包含真实利润。


六、关键参数汇总

参数 适用模型
补仓价格区间 [9.0, 10.0] 实盘回测
建仓价格区间 [8.0, 11.0] 实盘回测
淘汰阈值 Top100 实盘回测
TOP_N 10 实盘回测
每格股数 200 实盘回测
初始资金 60,000 实盘回测
观察窗口 120天 Rank/Top/Stacking 训练
标签窗口 60天 Rank/Top/Stacking 训练
滑窗步长 20天 Rank/Top/Stacking 训练
情绪窗口 180天 情绪因子计算