CatBoost 是一种基于梯度提升的决策树(Gradient Boosting Decision Trees, GBDT)算法,专门优化了处理分类特征和序列数据的能力。算法步骤如下:
第一:生成初始模型,从简单的模型开始,通常是所有目标值的平均值;
第二:迭代构建树,计算当前模型的残差(即预测误差),使用残差构建一棵新的决策树,拟合这些残差,将这棵树加到模型中,以减少误差;
第三:更新模型,重复迭代,逐步增加决策树,直到达到预定的树数量或其他停止条件。
CatBoost模型案例
1 背景
当前有一项关于‘信用卡交易欺诈’的数据科学研究,已整理好数据共为1000条,其包括六项,分别是换设备次数,支付失败次数,换IP次数,换IP国家次数,交易金额和欺诈标签,欺诈标签时,数字1表示欺诈,数字0表示没有欺诈行为,现希望通过CatBoost进行模型构建,并且做一些预测工作,部分数据如下图所示:
2 理论
在进行CatBoost模型时,其涉及参数如下表所述:
参数 | 说明 | 参数值设置 |
---|---|---|
损失函数 | 构建模型的算法方式,通常使用默认参数值即可 | Auto(自动选择):SPSSAU自动进行选择。Logloss: 对数损失函数。MultiClass: 多分类损失函数。MultiClassOneVsAll: 一对多分类损失函数。RMSE: 均方根误差。MAE: 平均绝对误差。MAPE: 平均绝对百分比误差,特别适用于目标值变化范围较大的情况。Quantile: 分位数损失,适用于预测区间。LogLinQuantile: 对数线性分位数损失,处理目标具有对数分布的情况。Poisson: 泊松损失,适用于泊松分布的情况。 |
迭代次数 | 模型迭代的次数 | 默认是500 |
树最大深度 | 树的深度越大,则对数据的拟合程度越高(过拟合程度也越高) | 默认是6 |
学习率 | 学习率即模型参数更新步长,越小收敛越快,但迭代次数越多。 | 范围(0.0, 1.0] 默认0.1 |
L2正则化 | 增加L2正则化项的权重,从而更强烈地惩罚大的权重,使模型更加平滑,减少过拟合的风险。 | 默认权重为3 |
特征子集比例 | 用于控制在每一层决策树中使用的特征子集的比例。 | 默认是1即特征子集全部使用 |
任务类型 | 包括自动判断,分类和回归任务 | 系统会结合Y的不同数字个数自动判断分类或回归任务,当然可自行选择分类或回归任务 |
除此之外,与其它的机器学习算法类似,SPSSAU提供训练集比例参数(默认是训练集占0.8,测试集占0.2),数据归一化参数(默认不进行),以及保存预测值(CatBoost时会生成预测类别,但不会生成预测概率),保存训练测试标识(生成一个标题来标识训练集和测试集数据的标识)。
3 操作
本例子操作截图如下:
将欺诈标签放入Y框中,其余5个特征项作为自变量X。与此同时,训练集比例默认为0.8,暂不进行数据归一化,当然当前数据也可考虑做标准化处理,因为涉及数据的量纲不同。更多参数设置暂保持为默认值。
4 SPSSAU输出结果
SPSSAU共输出5项结果,依次为基本信息汇总,特征权重值,训练集或测试集模型评估结果,测试集结果混淆矩阵,模型汇总表和模型代码,如下说明:
项 | 说明 |
---|---|
基本信息汇总 | 因变量Y(标签项)的数据分布情况等 |
特征权重值 | 展示各个X(特征)对于模型的贡献力度 |
训练集或测试集模型评估结果 | 分析训练集和测试集数据的模型效果评估,非常重要 |
测试集结果混淆矩阵 | 测试集数据的进一步效果评估,非常重要。分类任务时提供,如果是回归任务则没有该矩阵。 |
模型汇总表 | 模型参数及评估汇总表格 |
模型代码 | 模型构建的核心python代码 |
上述表格中,基本信息汇总展示出因变量Y(标签项)的分类分布情况,模型评估结果(包括训练集或测试集)用于模型的拟合效果判断,尤其是测试集的拟合效果,以及提供测试集数据的混淆矩阵结果(如果是分类任务则提供,如果是回归任务则无该表格);模型汇总表格将各类参数值进行汇总,并且在最后附录模型构建的核心代码。
5文字分析
首先针对特征的权重即重要性情况进行说明,如下图:
上图可以看到:换设备次数,或者换IP国次数这两项对于预测是否欺诈有着较高的帮助,而且支付失败次数也起着重要的作用。但是换IP次数或者交易金额这两项的作用相对来讲会较小些。接下来针对最重要的模型拟合情况进行说明,如下表格:
上表格中分别针对训练集和测试集,提供四个评估指标,分别是精确率、召回率、f1-scrore、准确率,以及平均指标和样本量指标等,整体来看,训练集的拟合效果非常好,各项指标均完美为1,但更多还需要从测试集上看,测试集上F1-score值为0.89,接近于0.9,另外精确率和召回率也在0.9左右,意味着模型可能有着过拟合问题,训练集完美但测试集指标相对一般。
接着进一步查看测试数据的‘混淆矩阵’,即模型预测和事实情况的交叉集合,如下图:
‘混淆矩阵’时,右下三角对角线的值越大越好,其表示预测值和真实值完全一致。上图中显示测试集时,真实值为1(即欺诈)但预测为0(即不欺诈)的数量为20,另外真实值为0(即不欺诈)但预测为1(欺诈)的数量为2,仅测试集共有200条,但预测出错为22条,出错率为11%。最后SPSSAU输出模型参数信息值,如下表格:
模型汇总表展示模型各项参数设置情况,最后SPSSAU输出使用python中slearn包构建本次CatBoost模型的核心代码如下:
model = CatBoostClassifier(loss_function='None', iterations=500, learning_rate=0.1, depth=6, colsample_bylevel=1.0, l2_leaf_reg=3.0, random_seed=0')
model.fit(x_train, y_train)