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

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

RONG CREDIT TECHNOLOGY CO., LTD.

工具实战

【CatBoost 系列 第3讲】CatBoost参数调参与早停策略:稳定收益优先配置法

围绕学习率、树深、正则和早停的调参顺序,说明 CatBoost 在量化任务里怎样优先得到稳定结果,而不是偶然的高验证分数。

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

目录

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. 明确哪些参数应该先调,哪些参数应该后调。
  3. 正确使用早停,而不是把验证集当成反复试错的训练集。
  4. 用“稳定收益优先”的思路看待参数,而不是只看某一次验证分数峰值。

二、环境准备:先把调参目标说清楚

量化项目里,调参不应该只有一句“让分数更高”。在真正动手前,至少要先回答下面三个问题:

  1. 你的任务是回归、二分类还是排序。
  2. 你最终看重的是误差、命中率、IC,还是分层后的组合表现。
  3. 你更在意峰值表现,还是更在意不同时间段下的稳定性。

如果这三件事没先定义好,后面的调参很容易变成“谁分高用谁”,最后把测试集也不知不觉调进去了。

对 CatBoost 来说,更稳的做法通常是先建立一个简单基线:

在这个阶段,不要同时改特征、标签窗口、样本过滤和模型参数。否则你最后很难知道效果变化到底来自哪一层。

三、操作步骤:先调哪些参数,后调哪些参数

如果你希望调参过程可复现,最重要的不是一次试很多参数,而是固定节奏。下面这套顺序的意义,就是先解决影响最大的参数,再处理细节上的收敛和稳健性问题。

CatBoost 常用参数很多,但不是每个都值得在第一轮就碰。对量化表格任务来说,一般可以按下面顺序推进。

3.1 第一步:先确定学习率和迭代轮数

learning_rateiterations 是最先要定下来的组合。它们的关系可以粗略理解为:

量化里更推荐从保守值起步,例如:

不要一开始把迭代轮数卡得太死,因为你还需要配合早停去观察模型到底在哪个区间开始失真。

3.2 第二步:再看树深度

depth 决定了单棵树能学到多复杂的交互结构。对量化任务来说,它通常比很多人想象中更容易过头。

经验上,日频或周频表格样本常用的起点是:

如果你把 depth 一路拉高,验证集分数有时会短暂变好,但分层收益、换手、回撤稳定性未必一起改善。对量化任务来说,这通常不是好信号。

3.3 第三步:再看正则和随机性

这一层最常用的是:

它们控制的是模型的保守程度,而不是“让模型更聪明”。如果你已经看到训练集表现明显优于验证集,优先看这几个参数,而不是继续加深树。

可以这样理解:

四、早停怎么用,才不会把验证集用坏

CatBoost 的早停很有用,但前提是验证集本身是干净的时间切分,而且你没有把它用成“无限次调参反馈面板”。

更稳的用法是:

  1. 固定一段时间做验证集。
  2. 在这段验证集上观察 best_iteration_
  3. 不要因为某一次峰值特别高,就反复重切验证区间。

对量化任务来说,早停的意义主要有两个:

如果某组参数的最优迭代轮数特别靠前,例如 50 轮内就停,往往意味着学习率偏大或树太深;如果始终跑到上限还没停,则可能说明学习率偏低,或者当前参数还没把模型复杂度放开。

五、工具落地:一个可复用的调参起点

下面给一个更适合量化项目起步的 CatBoost 训练写法:

from catboost import CatBoostRegressor, 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 = CatBoostRegressor(
    loss_function="RMSE",
    eval_metric="RMSE",
    iterations=1000,
    learning_rate=0.05,
    depth=6,
    l2_leaf_reg=5,
    random_strength=1,
    bagging_temperature=0,
    od_type="Iter",
    od_wait=80,
    random_seed=42,
    verbose=100,
)

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

print(model.get_best_iteration())
print(model.get_best_score())

这段代码的重点不是告诉你“参数就该这么设”,而是给你一个稳的起点:

六、常见问题排查

下面这些情况在量化调参里非常常见,而且很多时候看起来像模型能力问题,实际上是调参顺序或验证方法出了偏差。

6.1 问题一:训练集分数明显更好,验证集一塌糊涂

优先检查:

这时不要先去调更复杂的随机性参数,先把最基本的切分和深度看明白。

6.2 问题二:验证集效果不错,但测试集掉得很厉害

这往往说明你已经在“对验证集调参”。更稳妥的做法是:

6.3 问题三:不同参数组差异很小,不知道怎么选

当几组参数的误差接近时,优先选更保守的那组:

对量化来说,稳定可复现通常比“多赢一点点”更重要。

七、本讲完成标准

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

  1. 知道 CatBoost 调参应该先从学习率、迭代轮数和深度开始。
  2. 知道早停的作用是防止过拟合,而不是替代测试集。
  3. 知道遇到训练好、验证差时该先查哪些问题。
  4. 知道在参数结果接近时,为什么要优先选更稳的一组。

八、系列衔接

本讲是《CatBoost量化建模完整学习计划》的第 3/9 讲,当前主题是《CatBoost参数调参与早停策略:稳定收益优先配置法》。

上一讲:第 2 讲《CatBoost特征输入规范:类别编码、缺失值与时间切分》。

下一讲:第 4 讲《CatBoost在事件驱动策略中的应用:财报与公告特征融合》。

九、风险揭示与免责声明

风险揭示与免责声明

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

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

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

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