CatBoost官方论文深度解读:CatBoost: unbiased boosting with categorical features

张开发
2026/6/16 11:28:50 15 分钟阅读
CatBoost官方论文深度解读:CatBoost: unbiased boosting with categorical features
大家好我是toby老师。根据我方期刊论文情报系统显示近几年涉及catboost模型的论文越来越多。这是因为多算法比较中catboost大概率会夺冠。今天我们来聊聊 Yandex 开源的梯度提升库CatBoost。我方公司专业从事企业建模期刊论文专利定制服务。具体场景包括个人信用贷款违约风控模型企业信用贷款违约风控模型债券违约预测模型政府信用评级模型股票价格预测模型房价预测模型。CatBoost的名称来源于两个关键特性Cat代表了分类任务而Boost代表了梯度提升。CatBoost引入了一些创新的技术和特性使其在效率和性能上优于其他梯度提升算法。Catboost起源-俄罗斯搜索巨头Yandex官网https://www.yandex.com/。Yandex是俄罗斯最大的互联网巨头企业类似中国阿里巴巴。俄罗斯数学家是非常有实力的不逊色于欧美。最近我重新研读了 CatBoost 的官方论文《CatBoost: unbiased boosting with categorical features》发现里面有很多值得深挖的细节。这篇文章将带你梳理论文的核心内容并解释 CatBoost 为何能在众多 GBDT 实现中脱颖而出。官方论文1. 引言梯度提升的“隐形”问题梯度提升Gradient Boosting是机器学习竞赛和工业界最常用的技术之一。从 XGBoost 到 LightGBM它们都在速度和精度上不断突破。然而CatBoost 的论文指出现有的所有梯度提升实现都存在一个统计缺陷——在训练过程中模型会逐渐依赖于训练样本的目标值导致预测分布发生偏移这种现象被称为预测偏移Prediction Shift。这种偏移本质上是一种目标泄露Target Leakage它会使得模型在训练集上的表现被高估而泛化能力下降。同时在处理类别特征时常用的目标统计Target StatisticsTS方法也面临类似的问题。CatBoost 正是为了解决这两个问题而诞生的。2. 类别特征的处理从 Greedy TS 到 Ordered TS类别特征在表格数据中非常普遍例如用户 ID、地区、广告 ID 等。传统处理方法包括One-hot 编码当类别数量很大时会导致特征维度爆炸。目标统计TS用每个类别对应的目标均值来替换原始类别例如计算点击率。这是目前最有效的方法之一但存在一个致命问题使用当前样本的目标值来计算自身的 TS会造成目标泄露。论文中举了一个极端例子如果每个类别的样本都是唯一的那么用 Greedy TS 可以完美拟合训练集但在测试集上完全失效。为了缓解这个问题常见的做法有Holdout TS将训练集分成两部分一部分用于计算 TS另一部分用于训练。但这样会浪费数据。Leave-one-out TS对每个样本用除它之外的其他样本计算 TS。但论文证明对于常数值特征这仍然存在泄露。CatBoost 提出了一种Ordered TS方法引入一个随机排列permutationσ对于第 k 个训练样本只使用排列中排在它之前的样本来计算 TS。这样既避免了泄露又充分利用了所有数据。而且为了降低方差CatBoost 会在不同的梯度提升轮次中使用不同的排列。3. 预测偏移与 Ordered Boosting3.1 什么是预测偏移在传统的梯度提升中每一步的基模型如决策树是在当前模型对训练样本的负梯度上拟合的。但是当前模型本身已经用到了这些样本的目标值导致梯度估计存在偏差。论文通过一个简单的回归例子特征为 Bernoulli 变量从理论上证明了如果每一步都用同一份数据最终模型会有偏差而如果用独立的数据集则无偏。这种偏差就是预测偏移训练样本上模型的条件分布与测试样本上的不同。3.2 Ordered Boosting 的朴素思想假如我们有无限的数据我们可以每一步都采样新数据来计算无偏的梯度。但现实中数据有限。一个理想的做法是对于每个样本 x_k用一个没有使用过 x_k 的模型来计算其梯度。也就是说我们需要维护 n 个不同的模型每个模型是在排除某个样本后训练得到的。这显然不现实。CatBoost 借鉴了在线学习的思想引入一个随机排列对于第 i 个样本用前面 i-1 个样本训练出的模型来预测它从而得到无偏的梯度。但维护 n 个不同模型的开销太大CatBoost 通过一种高效的数据结构只存储 O(log n) 个版本的模型实现了近似保证了复杂度与标准 GBDT 相同。4. CatBoost 的工程实现亮点4.1 使用多个排列CatBoost 会生成 s1 个独立的随机排列。其中 s 个排列用于构建树的结构选择分裂点另一个排列σ₀用于计算最终叶子节点的值。这样做可以减少单排列带来的方差。4.2 Oblivious 树对称树CatBoost 采用 oblivious 树作为基模型即树的每一层都使用相同的分裂特征和阈值。这种树更平衡、不易过拟合且在预测时速度更快。4.3 特征组合CatBoost 会自动构建类别特征的组合例如将用户 ID 和广告主题组合成一个新特征。组合是通过贪心方式生成的在构建树的过程中将当前树中用到的所有类别特征及已有组合与原始类别特征进行拼接并转换为 TS。这能捕获高阶依赖提升效果。4.4 复杂度分析论文给出了 Ordered 模式和 Plain 模式标准 GBDT的复杂度对比。Ordered 模式虽然引入了额外开销但通过技巧只存储对数个模型保证了与 Plain 模式相同的渐进复杂度。实验显示Ordered 模式比 Plain 慢约 1.7 倍但仍与 LightGBM 相当。5. 实验评估CatBoost 全面领先论文在多个公开数据集上对比了 CatBoost、XGBoost 和 LightGBM。所有算法的类别特征都统一用 Ordered TS 预处理以保证公平。结果表 2显示CatBoost 在所有数据集上都取得了更低的 logloss 和分类错误率尤其是在小数据集如 Adult、Internet上优势明显。这张表对比了CatBoost内部的两种模式Plain模式传统的GBDT算法但使用了Ordered TS处理类别特征。Ordered模式CatBoost的核心创新包含Ordered Boosting Ordered TS。结论小数据集优势明显正如文本中所说在相对较小的数据集Adult 40K训练样本Internet约13.6万上Ordered模式的优势最大支持了“预测偏移在小样本下更严重”的理论。大数据集仍有增益在超大数据集Epsilon上Ordered模式依然有小幅提升但差距缩小。安全选择Ordered模式从未比Plain模式差即使负数也是轻微领先或持平可以视为“无风险”的性能增强版。5.1 Ordered 模式 vs Plain 模式catboost有两种boosting模型即ordered和plain。在小数据集上Ordered 模式相比 Plain 模式提升显著图 2验证了预测偏移在小样本下影响更大的理论。Ordered 模型 vs Plain 模型算法流程图对比Plain 模式标准 GBDT在计算梯度或更新叶子节点时使用当前模型对所有训练样本的预测结果。这就意味着在拟合第 tt 棵树时模型会使用样本 ii 自身的目标值间接通过当前模型来计算它在该步的梯度。这正是导致论文中提到的预测偏移的根源——样本的梯度中包含了来自它自身标签的“未来”信息。Ordered 模式CatBoost 的核心创新严格遵循时间顺序。它引入了一个随机排列 σσ 确保在计算某个样本的梯度或叶子值时只使用该样本之前的数据绝对不使用它自身的标签信息从而避免目标泄露。5.2 不同 TS 方法的对比论文对比了 Ordered TS、Greedy TS、Holdout TS、Leave-one-out TS。结果显示Ordered TS 全面优于其他方法Holdout TS 次之而 Greedy TS 和 Leave-one-out TS 在某些数据集上表现很差印证了目标泄露的危害。5.3 特征组合与排列数量的影响特征组合从禁止组合到允许两个特征组合logloss 平均下降 1.86%再增加组合数收益递减。排列数量增加排列数 s 能略微提升效果s3 比 s1 提升 0.19%s9 提升 0.38%。6.catboost对缺失值处理6.1数值型特征CatBoost为数值型特征提供了三种缺失值处理模式通过nan_mode参数控制Min默认将缺失值视为比所有其他数值都小的特殊值。在构建树时算法会确保考虑到能将缺失值与其他值分开的分裂方式。这相当于把缺失值作为一个有独特意义的类别来处理而不是简单地进行填充。Max将缺失值视为比所有其他数值都大的特殊值。Forbidden不支持缺失值如果数据中存在缺失值则会报错。6.2 类别型特征对于类别型特征CatBoost官方文档指出它并不对缺失值进行任何特殊处理。这意味着如果类别特征中存在缺失值你需要在使用前自行进行预处理例如将其填充为一个新的类别如 “Unknown”。总结一下虽然开创性的CatBoost论文本身没有讨论缺失值算法但在其实际实现中通过将缺失值作为“小于/大于所有值”的特殊值来处理是一种非常巧妙且有效的方法。它既避免了主观填充带来的信息损失又能让模型自行学习缺失值的最佳分裂方式。7.接口丰富catboost接口支持深度学习TensorFlowKeraspythonRSHAP等诸多语言和工具极大扩展了应用空间。8. 结论CatBoost 的核心贡献在于揭示了梯度提升中普遍存在的预测偏移问题并提出了 Ordered Boosting 来解决它。针对类别特征提出了 Ordered TS避免目标泄露。工程上实现了高效的算法在保持与标准 GBDT 相同复杂度的同时显著提升泛化能力。catboost一些关键的特性和优势包括处理类别特征CatBoost可以自动处理类别特征无需进行独热编码或标签编码。数据自动缩放CatBoost能够自动处理不同数据类型的特征并在训练过程中进行自动的特征缩放。基于对称树的学习CatBoost采用对称树结构在学习中利用对称树来提升训练效率和准确性。支持多种损失函数CatBoost支持多种常用的损失函数并且可以自定义损失函数。鲁棒性和高性能CatBoost在处理大规模数据集时表现优异具有较高的泛化能力和鲁棒性。总的来说CatBoost是一个功能强大、高性能的机器学习算法特别适用于处理分类问题和回归问题而且它的一些独特特性使其在实际应用中表现优异。目前 CatBoost 已经在 Yandex 内部广泛使用并开源接口丰富应用广泛。对于处理含有大量类别特征的数据如点击率预测、推荐系统CatBoost 是一个非常值得尝试的工具。一些思考作为数据科学家我们在使用 GBDT 时往往关注树的数量、深度、学习率等超参数却很少意识到目标泄露和预测偏移的存在。CatBoost 的论文提醒我们数据泄露有时藏得很深甚至在每一步的梯度计算中都可能发生。Ordered Boosting 的思路也可以启发我们在构建特征时始终用历史数据而非全局数据是一种避免未来信息泄露的有效原则。如果你还没有试过 CatBoost不妨在你的下一个项目中用它跑一跑尤其是数据集里有很多类别特征的时候。相信你会被它的效果和易用性惊艳到。原文来源CatBoost官方论文深度解读。版权声明文章来自公众号(python风控模型),未经许可不得抄袭。遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。

更多文章