工具实战
围绕学习率、树深、正则和早停的调参顺序,说明 CatBoost 在量化任务里怎样优先得到稳定结果,而不是偶然的高验证分数。
前两讲已经把 CatBoost 的位置和输入规范讲清楚了。真正开始训练后,大多数人很快会陷入另一个误区:一上来就做大规模网格搜索,结果参数试了一堆,却还是不知道模型为什么不稳。
这一讲只解决一个核心问题:在量化任务里,CatBoost 应该按什么顺序调参,才能优先得到稳定结果,而不是偶然跑出来的高分。
你需要完成四件事:
量化项目里,调参不应该只有一句“让分数更高”。在真正动手前,至少要先回答下面三个问题:
如果这三件事没先定义好,后面的调参很容易变成“谁分高用谁”,最后把测试集也不知不觉调进去了。
对 CatBoost 来说,更稳的做法通常是先建立一个简单基线:
在这个阶段,不要同时改特征、标签窗口、样本过滤和模型参数。否则你最后很难知道效果变化到底来自哪一层。
如果你希望调参过程可复现,最重要的不是一次试很多参数,而是固定节奏。下面这套顺序的意义,就是先解决影响最大的参数,再处理细节上的收敛和稳健性问题。
CatBoost 常用参数很多,但不是每个都值得在第一轮就碰。对量化表格任务来说,一般可以按下面顺序推进。
learning_rate 和 iterations 是最先要定下来的组合。它们的关系可以粗略理解为:
量化里更推荐从保守值起步,例如:
learning_rate 先试 0.03、0.05、0.08iterations 先给足,例如 600 到 1200不要一开始把迭代轮数卡得太死,因为你还需要配合早停去观察模型到底在哪个区间开始失真。
depth 决定了单棵树能学到多复杂的交互结构。对量化任务来说,它通常比很多人想象中更容易过头。
经验上,日频或周频表格样本常用的起点是:
depth=4:偏保守,结构简单。depth=6:常见默认档。depth=8:只在样本量、特征质量都比较扎实时再看。如果你把 depth 一路拉高,验证集分数有时会短暂变好,但分层收益、换手、回撤稳定性未必一起改善。对量化任务来说,这通常不是好信号。
这一层最常用的是:
l2_leaf_regrandom_strengthbagging_temperature它们控制的是模型的保守程度,而不是“让模型更聪明”。如果你已经看到训练集表现明显优于验证集,优先看这几个参数,而不是继续加深树。
可以这样理解:
l2_leaf_reg 更像对叶子值做收缩。random_strength 会增加分裂选择时的随机扰动,减少模型死盯某几列。bagging_temperature 会影响采样的激进程度,适合在样本噪声偏大的时候尝试。CatBoost 的早停很有用,但前提是验证集本身是干净的时间切分,而且你没有把它用成“无限次调参反馈面板”。
更稳的用法是:
best_iteration_。对量化任务来说,早停的意义主要有两个:
如果某组参数的最优迭代轮数特别靠前,例如 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())
这段代码的重点不是告诉你“参数就该这么设”,而是给你一个稳的起点:
下面这些情况在量化调参里非常常见,而且很多时候看起来像模型能力问题,实际上是调参顺序或验证方法出了偏差。
优先检查:
depth 是否过大。这时不要先去调更复杂的随机性参数,先把最基本的切分和深度看明白。
这往往说明你已经在“对验证集调参”。更稳妥的做法是:
当几组参数的误差接近时,优先选更保守的那组:
对量化来说,稳定可复现通常比“多赢一点点”更重要。
如果你已经做到下面几点,这一讲就算完成:
本讲是《CatBoost量化建模完整学习计划》的第 3/9 讲,当前主题是《CatBoost参数调参与早停策略:稳定收益优先配置法》。
上一讲:第 2 讲《CatBoost特征输入规范:类别编码、缺失值与时间切分》。
下一讲:第 4 讲《CatBoost在事件驱动策略中的应用:财报与公告特征融合》。
风险揭示与免责声明
本页面内容仅用于量化研究与技术交流,旨在展示研究方法与流程,不构成对任何金融产品、证券或衍生品的要约、招揽、推荐或保证。
本文所涉历史数据、回测结果与示例参数不代表未来表现,也不应作为投资决策依据。
市场存在波动、流动性与执行偏差等不确定性,任何策略均可能出现收益波动或阶段性失效。
读者应结合自身风险承受能力进行独立判断,并在必要时咨询持牌专业机构意见。