深圳融克迪特科技有限公司 Logo,金融科技,量化交易,软件开发

深圳融克迪特科技有限公司

RONG CREDIT TECHNOLOGY CO., LTD.

工具实战

【CatBoost 系列 第6讲】CatBoost概率输出与风险分层在选股模型中的应用

说明怎样把 CatBoost 的分类概率转成分层、分组和风险规则,避免把概率数字直接当成仓位或收益率解释。

2026-04-29 智铨研究 阅读时长 5 分钟

目录

CatBoost · 工具实战

  1. 第 1 讲【CatBoost 系列 第1讲】CatBoost在量化任务中的优势:有序提升与抗过拟合机制
  2. 第 2 讲【CatBoost 系列 第2讲】CatBoost特征输入规范:类别编码、缺失值与时间切分
  3. 第 3 讲【CatBoost 系列 第3讲】CatBoost参数调参与早停策略:稳定收益优先配置法
  4. 第 4 讲【CatBoost 系列 第4讲】CatBoost在事件驱动策略中的应用:财报与公告特征融合
  5. 第 5 讲【CatBoost 系列 第5讲】CatBoost模型可解释性:特征贡献、样本归因与异常诊断
  6. 第 6 讲【CatBoost 系列 第6讲】CatBoost概率输出与风险分层在选股模型中的应用
  7. 第 7 讲【CatBoost 系列 第7讲】CatBoost跨市场迁移:A股与期货数据域适配方法
  8. 第 8 讲【CatBoost 系列 第8讲】CatBoost模型鲁棒性测试:市场状态切换下的稳定性评估
  9. 第 9 讲【CatBoost 系列 第9讲】CatBoost生产化部署:批量推理、监控告警与漂移修复

一、本讲目标

很多团队把 CatBoost 训练完以后,直接拿预测值去排序、分仓,最后发现模型输出和实际风险承受能力并不匹配。问题往往不是模型完全没用,而是输出层处理太粗。

这一讲要解决的是:怎样把 CatBoost 的分类概率转成可用的风险分层和选股分组,而不是把概率数字生硬地当成仓位。

你需要完成四件事:

  1. 选对适合概率输出的标签定义。
  2. 知道 predict_proba 的结果该怎么读。
  3. 学会把概率转成分层、分组和仓位规则。
  4. 理解为什么概率高不等于可以无上限加仓。

二、环境准备:什么时候该用概率输出,而不是直接回归

如果你的交易动作本质上是“从一批资产里挑出更有把握的一组”,那么分类概率通常比直接回归未来收益更容易落地。

常见的标签定义方式包括:

这种定义的好处是,模型输出可以直接解释成“更像正样本的概率”。它不完美,但比直接把一个噪声很大的连续收益预测值拿去下单,通常更稳。

如果你的目标本身就是做分层、分档、分组,分类任务往往比回归更顺手。

三、操作步骤:把概率输出变成真正可用的分层规则

概率输出真正难的地方不在于取到一个数字,而在于把这个数字放回交易流程里。下面这套顺序的重点,就是先让概率有可比性,再让它有可执行性。

3.1 第一步:先确认正负样本定义

概率有没有意义,首先取决于你的标签定义是不是稳定。

例如你定义:

这在波动很大的时期可能太敏感;你也可以改成:

第二种定义通常更适合选股分层,因为它直接对应“我要挑更强的一组资产”,而不是试图精确拟合每一个收益数值。

3.2 第二步:读取概率,而不是只看 0/1 预测

对 CatBoostClassifier 来说,更重要的是:

如果模型输出某只股票成为正样本的概率是 0.78,这不意味着“未来收益 78% 会涨”,而更像是在当前训练定义下,它更接近正样本的历史模式。

这是一种相对置信度,不是可直接兑现的收益承诺。

3.3 第三步:先分层,再决定仓位

更稳的落地方式通常不是“概率多少就买多少”,而是:

  1. 先按概率从高到低排序。
  2. 再分成若干层,例如 5 层或 10 层。
  3. 比较每一层的平均收益、回撤、换手和样本覆盖率。

如果最高一层在多个时间片里都更稳,才有资格作为高优先级选股层。

对很多量化团队来说,真正可执行的仓位映射往往是分段规则,例如:

这样做的好处是能减少模型小幅波动对仓位的放大影响。

四、校准为什么重要

概率输出不一定天然“像概率”。有些模型分数排序很好,但数值校准很差,例如:

这时你应该区分两件事:

  1. 模型有没有排序能力。
  2. 模型的概率刻度是不是可靠。

如果你后续要把概率用于风险分层、触发阈值或额度控制,建议额外做概率校准复核,例如观察分桶命中率是否和概率分段大体一致,而不是只看整体 AUC。

五、工具落地:一个最小概率分层示例

from catboost import CatBoostClassifier, Pool

train_pool = Pool(train_df[feature_cols], label=train_df[target_col], cat_features=cat_cols)
valid_pool = Pool(valid_df[feature_cols], label=valid_df[target_col], cat_features=cat_cols)

model = CatBoostClassifier(
    loss_function="Logloss",
    eval_metric="AUC",
    iterations=800,
    learning_rate=0.05,
    depth=6,
    random_seed=42,
    verbose=100,
)

model.fit(train_pool, eval_set=valid_pool, use_best_model=True)

test_df = test_df.copy()
test_df["prob_up"] = model.predict_proba(test_df[feature_cols])[:, 1]
test_df["prob_bucket"] = pd.qcut(test_df["prob_up"], 5, labels=False, duplicates="drop")

这个例子里,真正值得分析的是:

六、常见问题排查

概率分层看起来比回归直观,但它同样会被样本口径、阈值设定和交易约束影响。下面这几类偏差最值得优先检查。

6.1 问题一:AUC 不错,但分层收益不明显

这很常见。说明模型可能能区分正负样本,但还不足以支撑实际交易分层。先看标签定义是不是过宽,再看是否需要加入交易成本和流动性约束后的再评估。

6.2 问题二:最高概率层样本太少

如果高概率层样本过少,组合会很集中,回撤和单日冲击都可能变大。这时更合理的是放宽候选区间,再叠加其他约束筛选,而不是只盯着极少数最高分样本。

6.3 问题三:概率阈值在不同阶段失效

这通常说明概率刻度发生漂移。更稳的做法是定期复核分层命中率,而不是长期固定一个绝对阈值不动。

七、本讲完成标准

如果你已经做到下面几点,这一讲就算完成:

  1. 知道什么时候更适合把 CatBoost 用成分类模型。
  2. 知道 predict_proba 的结果不能直接当收益率解释。
  3. 知道分层通常比直接概率映射仓位更稳。
  4. 知道排序能力和概率校准是两件不同的事。

八、系列衔接

本讲是《CatBoost量化建模完整学习计划》的第 6/9 讲,当前主题是《CatBoost概率输出与风险分层在选股模型中的应用》。

上一讲:第 5 讲《CatBoost模型可解释性:特征贡献、样本归因与异常诊断》。

下一讲:第 7 讲《CatBoost跨市场迁移:A股与期货数据域适配方法》。

九、风险揭示与免责声明

风险揭示与免责声明

本页面内容仅用于量化研究与技术交流,旨在展示研究方法与流程,不构成对任何金融产品、证券或衍生品的要约、招揽、推荐或保证。

本文所涉历史数据、回测结果与示例参数不代表未来表现,也不应作为投资决策依据。

市场存在波动、流动性与执行偏差等不确定性,任何策略均可能出现收益波动或阶段性失效。

读者应结合自身风险承受能力进行独立判断,并在必要时咨询持牌专业机构意见。