CatBoost
CatBoost(Categorical Boosting)是一种面向类别特征的梯度提升树(GBDT)算法。其核心特性包括:
CatBoost 算法
1. 方法概述
CatBoost(Categorical Boosting)是一种面向类别特征的梯度提升树(GBDT)算法。其核心特性包括:
- 原生类别特征处理(Target Statistics + Ordered Boosting)
- 对称/同层分裂的 Oblivious Tree(训练稳定、推理快)
- 避免目标泄漏的有序统计(Ordered TS)
设共有 \(n\) 个样本、\(d\) 个特征,训练数据为
$$ \mathcal{D}=\{(x_i,y_i)\}_{i=1}^{n},\quad x_i\in\mathbb{R}^d \tag{1} $$
其中 \(y_i\) 为分类标签或回归目标值。
2. 公共部分(特征工程与类别处理)
系统支持缺失处理、类别编码、缩放、特征构造/选择与降维等步骤;其中 CatBoost 可直接处理类别特征,无需 One-Hot。
2.1 Z-score 标准化
$$ z_{ij}=\frac{x_{ij}-\mu_j}{\sigma_j} \tag{2} $$
2.2 Min-Max 归一化
$$ z_{ij}=\frac{x_{ij}-\min x_j}{\max x_j-\min x_j+\varepsilon} \tag{3} $$
2.3 One-Hot 编码(可选)
$$ x^{(k)}_{ij}= \begin{cases} 1,& x_{ij}=\text{cat}_k\\ 0,& \text{otherwise} \end{cases} \tag{4} $$
2.4 类别特征的目标统计(Target Statistics)
对类别取值 \(c\),引入先验均值 \(\bar{y}\) 与平滑参数 \(a>0\),在有序采样下计算
$$ \text{TS}_i(c)= \frac{\sum_{j:\,\pi(j)<\pi(i)} y_j\cdot \mathbf{1}(x_j=c)+a\bar{y}} {\sum_{j:\,\pi(j)<\pi(i)} \mathbf{1}(x_j=c)+a} \tag{5} $$
其中 \(\pi\) 为样本随机排列,\(\mathbf{1}(\cdot)\) 为指示函数。该设计可减少目标泄漏并稳定类别统计。
3. CatBoost 模型结构与训练
3.1 加性模型(梯度提升)
CatBoost 采用加性模型迭代更新:
$$ F^{(0)}(x)=\arg\min_{c}\sum_{i=1}^{n}L(y_i,c) \tag{6} $$
$$ F^{(t)}(x)=F^{(t-1)}(x)+\eta\,h_t(x),\quad t=1,2,\ldots,T \tag{7} $$
其中 \(h_t\) 为第 \(t\) 棵树,\(\eta\) 为学习率。
3.2 Oblivious Tree(对称树)
每一层使用同一分裂特征与阈值,形成对称树:
$$ h_t(x)=\sum_{\ell=1}^{2^D} v_\ell\cdot \mathbf{1}(x\in R_\ell) \tag{8} $$
其中 \(D\) 为树深度,\(R_\ell\) 为叶节点区域。
3.3 常用损失函数
二分类 Logloss $$ L(y,p)=-\big[y\ln p+(1-y)\ln(1-p)\big],\quad p=\sigma(F(x))=\frac{1}{1+e^{-F(x)}} \tag{9} $$
回归平方损失(RMSE/MSE) $$ L(y,F(x))=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2 \tag{10} $$
4. Ordered Boosting(有序提升)
CatBoost 使用有序提升以降低目标泄漏。对样本随机排列 \(\pi\),第 \(t\) 轮拟合仅使用当前样本之前的子集。
设第 \(t\) 轮模型为 \(F^{(t)}\),则对第 \(i\) 个样本的有序梯度(或残差)可表示为:
$$ g_i^{(t)}=\left.\frac{\partial L\big(y_i, F^{(t-1)}(x_i)\big)}{\partial F}\right| _{F=F^{(t-1)}_{\pi(<i)}(x_i)} \tag{11} $$
为进一步降低方差,可对多次随机排列取平均:
$$ \bar{g}_i^{(t)}=\frac{1}{S}\sum_{s=1}^{S} g_{i,s}^{(t)} \tag{12} $$
其中 \(F^{(t-1)}_{\pi(<i)}\) 表示仅使用排列中 \(\pi(j)<\pi(i)\) 的样本训练得到的模型。
有序提升与有序目标统计(式(5))结合,可显著降低因类别统计或梯度估计产生的泄漏偏差。
5. 分类版(CatBoostClassifier)
5.1 决策函数
$$ \hat{y}= \begin{cases} 1,& p\ge 0.5\\ 0,& p<0.5 \end{cases} \tag{13} $$
5.2 多分类 Softmax(扩展)
当类别数为 \(K\) 时,CatBoost 使用 Softmax 生成类别概率:
$$ p_k(x)=\frac{e^{F_k(x)}}{\sum_{j=1}^{K}e^{F_j(x)}},\quad k=1,\ldots,K \tag{14} $$
预测类别为 $$ \hat{y}=\arg\max_k p_k(x) \tag{15} $$
多分类交叉熵损失:
$$ L= -\frac{1}{n}\sum_{i=1}^{n}\sum_{k=1}^{K} y_{ik}\ln p_k(x_i) \tag{16} $$
5.3 分类评价指标
准确率 $$ \text{Accuracy}=\frac{TP+TN}{TP+TN+FP+FN} \tag{17} $$
精确率 / 召回率 $$ \text{Precision}=\frac{TP}{TP+FP} \tag{18} $$
$$ \text{Recall}=\frac{TP}{TP+FN} \tag{19} $$
F1 值 $$ F1=\frac{2\cdot \text{Precision}\cdot \text{Recall}}{\text{Precision}+\text{Recall}} \tag{20} $$
ROC 曲线与 AUC $$ \text{TPR}=\frac{TP}{TP+FN},\quad \text{FPR}=\frac{FP}{FP+TN} \tag{21} $$
$$ \text{AUC}=\int_0^1 \text{TPR}(\text{FPR})\,d(\text{FPR}) \tag{22} $$
5.4 分类文字说明(论文可用)
- 使用 CatBoostClassifier 训练模型,预测得到 \(\hat{y}\) 与类别概率 \(p\)。
- 输出 Accuracy、Precision、Recall、F1 与 AUC 等指标(式(17)–(22))。
- 通过混淆矩阵、ROC/PR、阈值–F1、阈值–TPR/FPR 进行可视化分析。
6. 回归版(CatBoostRegressor)
6.1 回归预测函数
$$ \hat{y}=F(x) \tag{23} $$
6.2 回归评价指标
MAE $$ \text{MAE}=\frac{1}{n}\sum_{i=1}^{n}|y_i-\hat{y}_i| \tag{24} $$
MSE / RMSE $$ \text{MSE}=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2,\quad \text{RMSE}=\sqrt{\text{MSE}} \tag{25} $$
决定系数 $$ R^2=1-\frac{\sum_{i=1}^{n}(y_i-\hat{y}_i)^2}{\sum_{i=1}^{n}(y_i-\bar{y})^2} \tag{26} $$
6.3 回归文字说明(论文可用)
- 使用 CatBoostRegressor 训练回归模型,输出预测值 \(\hat{y}\)。
- 评价指标包括 MAE、RMSE、\(R^2\)(式(24)–(26))。
- 通过预测-真实散点、残差直方图、残差-拟合图与 Q-Q 图检验拟合与误差分布。
7. 训练与验证(公共)
7.1 训练/测试划分
若设置测试集比例为 \(t\in(0,1)\),则 $$ n_{\text{test}}=\lceil n\cdot t\rceil,\quad n_{\text{train}}=n-n_{\text{test}} \tag{27} $$
7.2 \(K\)-折交叉验证
对 \(K\) 折的评价指标取均值: $$ \bar{M}=\frac{1}{K}\sum_{k=1}^{K}M_k \tag{28} $$
8. 符号说明
| 符号 | 含义 |
|---|---|
| \(n\) | 样本数量 |
| \(d\) | 特征维度 |
| \(K\) | 类别数量 |
| \(x_i\) | 第 \(i\) 个样本特征 |
| \(y_i\) | 第 \(i\) 个样本标签/真实值 |
| \(y_{ik}\) | 样本 \(i\) 在类别 \(k\) 上的指示标签 |
| \(p_k(x)\) | 多分类 Softmax 输出概率 |
| \(F^{(t)}(x)\) | 第 \(t\) 轮加性模型输出 |
| \(\eta\) | 学习率 |
| \(h_t(x)\) | 第 \(t\) 棵树的输出 |
| \(S\) | 有序排列次数(有序提升平均) |
| \(TP,FP,TN,FN\) | 分类混淆矩阵四要素 |
| \(\hat{y}\) | 预测值 |
9. 结果输出说明
系统输出(Excel + 图表)包括:原始数据、处理后数据、训练/测试集、指标、预测、参数、参数与配置(分组)、交叉验证汇总、报告摘要,以及图表清单与可解释性结果(特征重要性、SHAP 图)。
论文写作建议按以下顺序组织:
- 模型与参数说明(树深度、学习率、迭代次数、类别特征处理方式);
- 核心指标表(分类:Accuracy/Precision/Recall/F1/AUC;回归:MAE/RMSE/R²);
- 可视化图表(分类:混淆矩阵、ROC/PR;回归:预测-真实、残差分析);
- 交叉验证稳定性(各折指标与均值对比)。
若存在数值编码但应视为类别的列,应显式加入 cat_features 白名单,以避免误作为数值特征处理。
10. 与代码实现的对应关系
CatBoost 程序的核心实现位于 具体的算法/CatBoost/core/critic_calculator.py。从代码看,它除了常规训练与评估外,还专门处理了 SHAP、学习曲线兼容性以及独立预测脚本导出等 CatBoost 特有问题。
实现上应在文档中说明:
-
CatBoost 结果目录包含模型与推理模板
程序会导出模型文件、模型元数据以及predict_template.py。该模板会按feature_columns对输入列进行对齐,并生成列对齐报告,因此适合后续部署或交付。 -
SHAP 并非纸面功能,而是代码中的真实可选输出
当启用shap_enable时,程序会导出SHAP_重要性表、shap_summary_bar图;若运行环境安装了shap包,还会继续导出shap_beeswarm蜂群图。 -
学习曲线存在兼容性保护
由于 CatBoost 与 sklearn 工具链的兼容性问题,程序会先检查 tags 能力;若条件不足,则自动跳过学习曲线并写明原因,而不是直接报错中断。 -
Excel 工作表相对完整
常见结果包括:原始数据、处理后数据、训练集、测试集、指标、预测、混淆矩阵、分类报告、特征重要性、SHAP_重要性、学习曲线、图表清单、参数、CV汇总、CV折i_预测、验证集、参数与配置(分组)、报告摘要。 -
CatBoost 的解释结果应和普通树模型区分
程序同时支持基于内置特征重要性和基于 SHAP 的两套解释结果,因此论文中需区分“分裂重要性”和“SHAP 平均绝对贡献”两种概念。
11. 论文写作模板
方法描述模板:
“本文采用 CatBoost 模型进行监督学习分析。该模型可直接处理类别特征,并通过有序统计与有序提升降低目标泄漏风险。建模时在训练集上完成参数学习,并在测试集上输出预测结果、整体指标及可解释性结果;同时结合交叉验证与学习曲线对模型稳健性进行辅助分析。”
结果描述模板:
“程序结果目录除常规 Excel 和图表外,还包含 CatBoost 模型文件、独立预测模板脚本以及 SHAP 解释结果。Excel 中提供了处理后数据、逐样本预测、CV 汇总、参数配置、特征重要性与 SHAP 重要性等内容,因此论文中既可以报告模型精度,也可以进一步展示特征贡献排序与解释图,增强结果部分的可解释性。”
12. 单篇终审补充
12.1 图题与表题对齐建议
原始数据表可写为:表X CatBoost 原始数据表。处理后数据表可写为:表X CatBoost 处理后数据表。训练集表可写为:表X CatBoost 训练集数据表。测试集表可写为:表X CatBoost 测试集数据表。指标表可写为:表X CatBoost 性能指标表。预测表可写为:表X CatBoost 逐样本预测结果表。混淆矩阵表可写为:表X CatBoost 混淆矩阵表。分类报告表可写为:表X CatBoost 分类报告表。特征重要性表可写为:表X CatBoost 特征重要性表。图表清单表可写为:表X CatBoost 图表索引表。参数表可写为:表X CatBoost 参数设置表。CV汇总表可写为:表X CatBoost 交叉验证汇总表。参数与配置(分组)表可写为:表X CatBoost 分组参数配置表。报告摘要表可写为:表X CatBoost 结果摘要表。feature_importance_topN.png建议写为:图X CatBoost Top-N 特征重要性图。confusion_matrix.png建议写为:图X CatBoost 混淆矩阵图。roc.png建议写为:图X CatBoost ROC 曲线图。pr.png建议写为:图X CatBoost PR 曲线图。threshold_f1.png建议写为:图X CatBoost 阈值-F1 曲线图。threshold_tpr_fpr.png建议写为:图X CatBoost 阈值-TPR/FPR 曲线图。calibration.png建议写为:图X CatBoost 校准曲线图。class_distribution_triptych.png建议写为:图X CatBoost 类别分布图。
12.2 终审说明
- 当前最适合作为终审证据的代表性目录可采用
具体的算法/CatBoost/results/CatBoost分析结果_20260329_163807。该目录同时具备简版结果簿、全量结果簿、实体图和 repro 脚本。 - 简版结果簿
CatBoost分析结果_20260329_163807.xlsx的真实工作表为原始数据/处理后数据/训练集/测试集/指标/预测/混淆矩阵/分类报告/特征重要性/图表清单/参数/CV汇总/参数与配置(分组)/报告摘要;全量结果簿CatBoost分析结果_20260329_163807_full.xlsx的真实工作表为总览-说明/参数配置/原始数据/数据清洗与描述/步骤-confusion_matrix/步骤-classes/步骤-classification_repor/步骤-feature_importance/步骤-cv/最终结果/混淆矩阵/重要性与可解释性/图表索引/图像预览/复现环境与版本。 - 因此,这篇在论文终稿中应区分“正文采用简版结果簿”与“附录采用 full 结果簿”。前者适合直接展示指标与预测,后者更适合完整留档与方法复核。
- 当前真实图文件稳定为
feature_importance_topN.png、confusion_matrix.png、roc.png、pr.png、threshold_f1.png、threshold_tpr_fpr.png、calibration.png、class_distribution_triptych.png,并附带class_distribution_full.png。正文图题一般不需要引用 full 分布图。 - 当前复现脚本为
repro_template_20260329_163807.py,采用SRC_FILE = 'repro_inputs/sample_classification.xlsx'。因此 CatBoost 这篇同样可以把repro_inputs/...作为标准复现输入路径写入附录。
12.3 全量强化补充
- 本轮按真实磁盘再次核对,算法目录为
具体的算法/CatBoost,代表性结果目录为具体的算法/CatBoost/results/CatBoost分析结果_20260329_163807。 - 该目录实际包含两份结果工作簿:简版
CatBoost分析结果_20260329_163807.xlsx与全量版CatBoost分析结果_20260329_163807_full.xlsx。简版工作表为原始数据、处理后数据、训练集、测试集、指标、预测、混淆矩阵、分类报告、特征重要性、图表清单、参数、CV汇总、参数与配置(分组)、报告摘要;全量版工作表为总览-说明、参数配置、原始数据、数据清洗与描述、步骤-confusion_matrix、步骤-classes、步骤-classification_repor、步骤-feature_importance、步骤-cv、最终结果、混淆矩阵、重要性与可解释性、图表索引、图像预览、复现环境与版本。 - 当前实体图文件全部位于结果目录根部,而不是单独
plots/子目录,实际文件为feature_importance_topN.png、confusion_matrix.png、roc.png、pr.png、threshold_f1.png、threshold_tpr_fpr.png、calibration.png、class_distribution_triptych.png、class_distribution_full.png。 - 当前 repro 口径是标准
repro_inputs/...:repro_template_20260329_163807.py中明确写有SRC_FILE = 'repro_inputs/sample_classification.xlsx',且该输入副本在repro_inputs/中实际存在。 - 这篇最适合的论文写法仍然是“正文使用简版结果簿,附录使用 full 结果簿”,但现在可以进一步明确:两类图证都直接来自同一目录根部,不需要再去其他子目录检索。
- 当前代表性目录未见单独模型文件或
predict_template.py,因此本轮强化口径应继续锚定真实工作簿、实体图和 repro 脚本,不把其他运行批次可能存在的附加文件写成这一目录既有产物。
12.4 软件实现核查补充(2026-07)
- 当前实现保留了 CatBoost 与 sklearn 的兼容补丁,
__sklearn_tags__相关适配是实测中的必要环节;文档里可以说明这属于工程兼容,不是算法理论的一部分。 - 学习曲线属于条件性输出,当前目录里可能会按模型能力或环境自动跳过,因此正文不要把学习曲线写成必然存在的结果图。
- 结果目录同时存在简版与全量版结果簿,适合分别用于正文展示和附录留档;复现脚本使用
repro_inputs/sample_classification.xlsx的标准输入口径。 - 文档中若讨论类别重要性、交叉验证或参数配置,建议明确它们来自导出结果表,而不是人工额外整理的派生内容。