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

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

RONG CREDIT TECHNOLOGY CO., LTD.

工具实战

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

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

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

目录

CatBoost · 工具实战

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

一、为什么 CatBoost 真正落地时,往往不是先败在参数,而是先败在输入表

很多人学 CatBoost,第一反应会自然落到参数上,觉得只要把深度、学习率、迭代轮数调好,模型效果就会起来。可一旦进入量化场景,很快就会发现现实并不是这样。真正最容易出问题的地方,往往比参数更早,出在输入样本表本身。类别列没有明确声明、缺失值来源混乱、训练验证随机切分导致时间泄露,这些问题一旦存在,后面的调参几乎都会建立在偏掉的地基上。

这也是为什么 CatBoost 系列的第二讲必须先讲输入规范。因为对量化任务来说,一份样本表不是“列放全就行”,而是必须明确哪些信息属于当期可见特征,哪些是未来标签,哪些列是离散身份,哪些列是真正的连续数值。只要这层没有先理顺,模型就很容易学到错误结构,线下验证也很容易虚高。

因此,本讲真正要解决的,不是“怎么把 DataFrame 扔进 CatBoost”,而是如何把一张表整理成真正适合训练、适合复现、也尽量不引入未来函数风险的输入层。对量化建模来说,这是第一道硬门槛。

二、为什么“模型原生支持类别特征和缺失值”不能被误解成“输入可以很随意”

CatBoost 最常被宣传的两个优点,就是原生支持类别特征,以及对缺失值有较好容忍度。这两个优点确实存在,也很有价值。但恰恰因为它们太方便,初学者特别容易产生一种危险误解:既然模型自己能处理这些问题,那输入表就不需要太严格。这个想法只对了一半。模型能处理,不等于模型能替你判断语义,也不等于它能自动识别时间穿越和数据脏点。

举个最常见的例子,证券代码如果被你先粗暴转成连续整数,CatBoost 虽然能吃进去,但这不代表这种输入形式是正确的;再比如财务缺失、上市天数不足导致的窗口缺失、数据源抓取异常带来的断档,这些空值虽然表面上都长得一样,模型却不会替你分辨它们的业务含义。只要你把这些问题简单理解成“模型会自己搞定”,后面训练出来的结果往往很难真正可信。

所以,本讲特别要先把这个边界拉清楚。CatBoost 的强项是减少合理预处理负担,不是替你免除输入治理责任。输入规范做不好,模型优势根本发挥不出来。

三、为什么在量化样本表里,最先要分清的是“可见特征”和“未来标签”

对普通表格任务来说,输入和标签的边界已经足够重要;到了量化里,这件事更是最硬的约束。因为量化任务天然带着时间顺序,任何把未来信息混进当前特征的做法,都会让验证结果直接失真。也正因为如此,在整理 CatBoost 输入表时,最先要确认的不是列名齐不齐,而是每一列到底属于哪一层:是当前可见特征,还是未来标签。

比如,你在 trade_date 这一天构建样本,那么所有特征列都必须来自这一天当下已经可知的信息;而标签列如果是未来 5 日收益,就必须严格来自后面的窗口。这两者之间只要有一点混淆,模型就会学到本不该知道的信息。更麻烦的是,这种错误往往不会像语法错误一样直接报出来,它只会让你得到一份“看起来分数很好、其实完全不可信”的结果。

因此,本讲最重要的第一层输入规范,就是先把可见特征和未来标签边界钉死。只要这层没先守住,后面讲类别列、缺失值和调参都没有真正意义。

四、为什么类别列不能只看“是不是整数”,而要看它是否表达离散身份

在量化样本表里,最常见的一类误用,就是把代码、行业、交易状态这类离散身份列,先编码成数字,然后就当成普通数值列丢进模型。表面上看,这么做省事,甚至 DataFrame 也更“整齐”。但从模型语义上讲,这是非常容易出错的。因为一个编码后的整数,并不天然具有连续大小关系。1057 并不比 18 更“大”或“更强”,它只是一个身份标签。

所以判断某列应不应该作为 CatBoost 的类别特征,关键不在于它是不是字符串,也不在于它是不是整数,而在于它表达的是不是离散身份。证券代码、行业标签、ST 状态、公告类型、季度类别等,都属于典型的类别语义。相反,换手率、波动率、动量、估值分位这些本身有连续数值含义的列,就不该因为长得像“编号”而被混进类别列里。

只要这一层判断标准先建立起来,后面你在构造样本表时就不会只盯着数据类型表面,而会更关注列背后的业务含义。这种语义优先的判断方式,对 CatBoost 尤其重要。

五、为什么 CatBoost 的类别优势,本质上要求你“先保真”,而不是急着手工编码

一谈类别列,很多人下意识就会想到 one-hot 编码或者别的手工映射方式。可在 CatBoost 这里,更稳的起点往往不是先编码,而是先保真。所谓保真,就是尽量保留原始类别语义,不要为了“让模型看起来更方便输入”而过早把信息压扁或者扭曲。比如行业就保留行业标签,证券代码就保留代码本身,交易状态就保留清楚的枚举,而不是急着把一切都映射成一组看起来干净的数字。

这样做的价值有两层。第一,它减少了你手工编码时引入错误结构的风险。第二,它能更好地发挥 CatBoost 在类别处理上的优势。尤其在量化里,很多类别列的取值空间不小,若一开始就粗暴展开或重编码,不仅麻烦,也容易让不同时间段之间的口径变得不一致。

所以本讲里讲类别列,重点不在补充更多编码技巧,而在先把一条更稳的原则立住:在 CatBoost 里,类别列最该先做的是保留真实语义,再通过显式声明交给模型处理,而不是过早自作聪明地改写它们。

六、为什么缺失值必须先分型,不然“模型能处理”反而会把问题藏起来

量化数据里的缺失值非常常见,但常见不代表可以模糊处理。窗口不足、财报尚未披露、停牌或暂停交易、字段拼接错误、源数据抓取异常,这些情况都会表现成空值。可它们的业务含义完全不同。如果你只是因为 CatBoost 能接受缺失值,就把它们一股脑全留给模型,表面上省事,实际上会把最关键的问题藏起来。

本讲特别强调缺失值分型,就是因为量化里很多“模型不稳”本质上并不是模型问题,而是空值来源根本没分清。窗口不足造成的空值,可能是正常现象;财务字段缺失,可能需要额外缺失标记;而某些日期突然大面积空缺,则很可能是数据源异常。只要这些来源不分,模型后面无论表现好坏,你都很难真正解释清楚。

因此,CatBoost 的缺失值优势应该被用在“减少对合理缺失的过度处理”上,而不是变成忽略输入排查的借口。先分型,再决定保留、标记还是剔除,才是更稳的做法。

七、为什么时间切分在量化里不是建议,而是几乎不能退让的验证纪律

如果说前面几项输入规范还可能被一些人误判成“工程细节”,那么时间切分就是完全不能退让的核心纪律。量化任务最大的特殊性之一,就在于样本带着严格的时间方向。随机切分在用户画像或普通风控表格里有时还能成立,但在收益预测、事件驱动和横截面选股里,随机打散几乎一定会高估模型效果。因为模型会提前见到本不该在那个时点可知的市场结构和分布信息。

所以,训练集、验证集、测试集必须按时间顺序切开,这不是“更稳一些”的建议,而是近乎底线要求。训练只能用更早时间段,验证紧跟其后,测试放在最后。如果你反过来或者随意混用,只要样本里存在明显的时间漂移,验证结果就会被严重美化。

也正因为如此,本讲里时间切分的位置很重。因为它不是调参前的附属事项,而是整个 CatBoost 训练能不能被信任的基础前提。没有这一层,后面所有“模型表现不错”的结论都不牢靠。

八、这一讲真正建立的,是 CatBoost 训练前的“输入治理意识”

如果把整个 CatBoost 建模流程看成一条链,那么模型训练和调参其实处在相对中后段。它们能否有意义,很大程度取决于前面的输入治理做得怎么样。所谓输入治理,不只是清一下表头或删几列,而是系统地明确:哪些列可见、哪些列未来、哪些列属于类别语义、哪些列是连续数值、哪些空值是正常、哪些空值异常、训练验证该如何按时间切开。

这层意识非常重要,因为它会让你在真正调用模型前,就先用一种更严谨的方式审视样本表。你不再把 DataFrame 当成“列差不多齐了就能开训”的材料,而开始把它看作一份需要治理后才能进入模型的训练输入。对量化任务来说,这种意识比很多参数技巧都更值钱。因为只要输入治理先稳住,后面的训练和调参才真正有被信任的基础。

因此,本讲虽然还没正式进入调参,却已经在搭整个 CatBoost 系列最关键的落地地基。只要这块地基立住,后面才值得继续往上建。

九、为什么这一讲做完后,最好已经形成“开训之前先治理输入”的工作顺序

很多模型项目一上来最容易犯的错误,就是先把表扔进训练器里试一轮,再回头看哪里不对。第 2 讲更值得建立的工作顺序是,开训之前先治理输入。也就是先确认标签与特征边界、类别列识别、缺失值语义和时间切分这些前提都已经成立,然后才进入真正训练。只要这个顺序已经建立,后面的调参和验证就不容易建立在松动输入上。

这种顺序感很关键,因为它能帮你避免大量后置返工。很多看起来像“模型问题”的现象,最后追根究底,其实都来自输入治理没先站稳。

十、这一讲也在帮你建立“输入层质量决定后续可信度”的底层判断

CatBoost 再强,也无法绕过输入层质量对可信度的决定作用。第 2 讲更核心的判断是,后面的训练结果能否被信任,首先取决于输入层是否已经被严格治理。类别列如果识别错了,缺失值如果语义混乱,时间切分如果泄露未来,再好的评估数字也站不住。只要这层判断已经立住,你就会更愿意把时间花在输入治理上,而不是急着追求表面分数。

这层判断其实会贯穿整个系列。因为从调参、解释性到输出层治理,所有环节最终都建立在这一份训练输入是否可信之上。

十一、总结

这一讲的重点,不是把表扔进 CatBoost 就开训,而是先把量化样本表整理成真正适合训练和验证的输入层。你需要先分清可见特征和未来标签,再按语义识别类别列,先分型再处理缺失值,并且把训练、验证、测试严格按时间切开。只要这些输入治理原则先建立起来,后面的 CatBoost 调参和评估才真正有意义。

十二、系列衔接

本讲是《CatBoost量化建模完整学习计划》的第 2 讲,当前主题是《CatBoost 特征输入规范:类别列、缺失值与时间切分》。上一讲已经把 CatBoost 在量化里的定位和边界讲清楚,这一讲则开始进入真正的落地前提,先把训练输入整理到可信状态。下一讲会在此基础上进入调参与早停,重点讨论怎样优先得到稳定结果,而不是偶然跑出的高分。

十三、风险揭示与免责声明

风险揭示与免责声明

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

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

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

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