量化风控算法详解之CatBoost

news2024/11/15 11:14:59

CatBoost是俄罗斯的搜索巨头Yandex在2017年开源的机器学习库,与XGBoost、LightGBM并称为GBDT三大主流神器库。LightGBM和XGBoost已经在各领域得到了广泛的应用,而Yandex的CatBoost作为后起之秀则是号称比XGBoost和LightGBM在算法准确率等方面表现更为优秀的算法。

CatBoost的名称来源于”Category”和”Boosting”两个词。”Boosting”表明CatBoost和XGBoost、LightGBM一样,都是在梯度提升决策树(Gradient Boosting Decision Tree,GBDT)算法框架下的一种改进实现;而”Category”则体现了CatBoost最显著的一个特点,即它可以很好的处理类别型特征(Categorical Features)数据。在我们风控领域的建模中,类别型特征是十分常见的,比如用户的性别、职业、教育程度等等。

相较于XGBoost和LightGBM,CatBoost可以使我们在模型训练之前不再需要通过特征工程去处理分类型特征;同时CatBoost使用对称树作为基模型,并提出了新的方法来处理梯度偏差和预测偏移问题,减少了模型过拟合的可能,提升了模型预测的效果。可以预见,在风控建模中引入CatBoost算法会有着非常优异的表现。

下面我们针对CatBoost算法的主要特点逐一展开介绍:

一、类别型特征

1.Ordered TS编码

像XGBoost这样的算法是不接受类别型特征的输入的,因此在模型训练之前就需要对类别型特征进行特征工程处理。而特征工程中又有许多处理方法,比如分箱处理、one-hot编码、TS(target statistics)编码、label编码等。具体的方式选择取决于我们的主观经验以及调试结果。

CatBoost则设计了一直类似均值编码的,基于预测目标统计值的方法将类别特征转化为数值特征,这种方法称之为Ordered Target Statistics数值编码方法,可以有效解决梯度偏差和预测偏移的问题,降低模型过拟合的可能。它的流程如下:

对数据集多次随机排序,产生多组随机排列的情况。
将浮点型或属性值标记转化为整数。
对于每个样本的该类别特征中的某个取值,基于该样本之前的类别编码值取均值,同时加入先验的权重系数,转换为数值型结果。

由于CatBoost算法对样本进行了多次随机排序,在不同轮次的迭代中,会得到不同排序状态的样本集,综合起来使得模型方差更小,这种随机性可以减少过拟合。

2.特征交叉

特征交叉是指将样本集中的类别型特征进行组合,形成新的类别型特征。这是特征工程中的一种方式,可以丰富特征的维度。当然这些新的特征不一定都是有用的,需要结合实际业务场景和意义进一步筛选。

CatBoost在将类别特征转换为数值编码的同时,会自动产生交叉特征。但当样本集中的类别型特征较多的时候,如果让所有类别特征都两两,甚至三三及以上相互组合,产生的新特征又太多了。

CatBoost使用一种贪心的策略来进行特征交叉。在生成树选择第一个节点时,不使用交叉特征,而只考虑选择一个特征,如A;在生成第二个节点时,考虑A和任意一个类别型特征的组合,选择其中最优的,就这样使用贪心算法生成新的特征。

3.克服梯度偏差和预测偏移

在使用XGBoost和LightGBM的时候,经常会发生模型在训练集拟合的特别好,但是在测试集上却差强人意,这很有可能是由于模型太复杂了,造成了过拟合。

构建一棵树有两个阶段:一是选择树结构,二是计算叶节点的值。我们知道梯度提升算法都是通过构建新树来拟合当前模型的梯度。在训练下一棵树的时候,需要计算前面树构成的加法模型在所有样本上的一阶梯度和二阶梯度,然后用这些梯度来决定下一棵树的结构和叶子节点取值。但这是有偏的,前面的树是在这些样本上训练的,现在我们又在相同的样本上估计模型预测结果的梯度,应该换新的样本才合理。

而CatBoost和之前说的一样,先将样本随机打乱,每个样本只用排序在他前面的样本来训练模型,来估计预测结果的梯度,然后构建下一棵树的结构,最终树的每个叶子节点的取值则是用全体样本进行计算。这种方法可以有效减少梯度偏差,缓解预测偏移,缺点是增加了计算量,影响训练速度。

二、完全对称二叉树

XGBoost一层层建立节点(level-wise),LightGBM一个个地建立节点(leaf-wise),而CatBoost则采用完全对称二叉树作为基树模型,这种树的特点是每一层使用相同的分割特征。叶子节点可以被转化为二进制编码,结点的值被存储在一个长度为2的d次方(d为树的深度)的浮点向量中。这种树的一个优点是预测性能更好、速度更快,同时这种结构也能一定程度弱化决策树容易过拟合的缺点。

非对称树:
在这里插入图片描述

对称树:

图片

三、优缺点

在实际的应用中,相比于XGBoost和LightGBM而言,CatBoost在类别型特征较多的时候更能发挥自身的优势,总结而言主要有以下几大优点:

性能优异:

足以匹敌任何先进的机器学习算法,在某些情况下能比XGBoost和LightGBM有更高的精准性和泛用性;

稳健性:

它减少了对很多超参数调优的需求,并降低了过度拟合的机会,这也使得模型变得更加具有通用性;

实用:

可以处理类别型、数值型特征,支持自定义损失函数;

易用:

提供scikit集成的Python接口,支持自动调参。

当然,CatBoost也有一些缺点:

对于类别型特征的处理需要大量的内存和时间;
不同随机数的设定对于模型预测结果有一定的影响。

四、总结

在信贷风控场景中,LightGBM和XGBoost已经得到了充分的应用,而CatBoost算法的使用还相对较少。这是因为这个算法比较新,国内对它的研究也比较少。当实际业务中的数据包含较多的类别型特征的时候,我们不妨可以试试这个简单而又强力的后起之秀,说不定能得到意外的效果。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/731181.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Hello mysql】 mysql数据类型

Mysql专栏:Mysql 本篇博客简介:介绍mysql的数据类型 mysql数据类型 数据类型分类数值类型tinyint类型越界测试bit类型小数类型float类型decimal类型 字符串类型charvarchar 时间和日期类型enum和setenunmset 总结 数据类型分类 为什么要存在数据类型呢&a…

办公难题轻松解决!快速实现文件夹多次复制,轻松节省办公时间

在日常办公中,我们经常遇到需要多次复制文件夹的情况,而繁琐的操作常常令人头疼。但现在,我们为您提供了一款简单易用且高效的解决方案,让您轻松应对复制文件夹的难题,节省宝贵的办公时间! 首先我们要进入…

Flask框架之RESTful--参数验证--add_argument方法参数详解

目录 参数验证 参数验证的重要性 Flask-RESTful 参数验证方法 基本用法 1. 使用 reqparse 模块 示例 代码详解 2. 使用 marshmallow 库 示例 代码详解 add_argument方法参数详解 名词解释 代码案例 参数验证 参数验证也叫参数解析 Flask-Restful插件提供了类似W…

Win10任务栏 图标居中

参考:图标居中 1.右键任务栏,将锁定任务栏取消。 2.右键选择工具栏,然后选择新建工具栏。 3.选择一个空的文件夹。 4.将开始菜单旁边的两条线拖到新建工具栏的后面。 5.将图标拉到中间。 6.在新建工具栏的标题上右键,将显示标题取消选择…

cmake流程控制---cmake数学计算操作和if命令

目录 cmake 数学计算操作 demo if命令 基本表达式 逻辑表达式(NOT AND OR) 比较表达式 正则表达式 demo 文件系统相关 判断是否存在的表达式 cmake 数学计算操作 有时候我们需要对cmake变量之间进行数学运算,这时候cmake提供了math()这个命令,命令格式如下: math(…

黑苹果网络经常掉线/无线网卡无法驱动解决办法(itlwm)

适用问题 黑苹果3-5分钟掉一次网,网卡无法驱动(右上角WLAN图标变灰有斜杠) 作者环境 作者笔记本因为Intel网卡太旧且系统支持不稳定,所以经常掉网 在Github上有一款驱动(Airport)itlwm,经OC注入后网络状态稳定 安装方法(OC) 下载 建议在…

阿里云服务器扩容记录

先在控制台选择云盘扩容,然后才能在服务器操作: blkidlsblk -n df -Thapt-get updatetype growpart || apt-get install -y cloud-guest-utilstype sgdisk || apt-get install -y gdiskLC_ALLen_US.UTF-8 growpart /dev/vda 3 resize2fs /dev/vda3

Element+Vue+OpenLayers的项目实战

WebGIS ElementVueOpenLayers的项目实战 使用npm配置开发环境Vue的安装npm安装vue-cli脚手架构建工具安装桥接工具运行项目 使用npm配置开发环境 开发是项目级别的,则需要使用npm来配置开发环境; 使用npm配置开发环境主要包括Vue、Element和OpenLayers的…

PyQt如何查找帮助信息(不会写组件的代码,快看过来!)

1.可以在PyQt6官网中查找信息kReference Guide — PyQt Documentation v6.5.1 看不懂没有关系啦,可以使用网页翻译哒~ 找到或者直接搜索QLabel,寻找对应函数即可 2. https://zetcode.com/pyqt6/ 3.Qt Creator中寻找 例如,输入setText 就可以…

BC 汇率读取问题

今天发现一个奇怪的问题,读去汇率,A账户汇率正常读取,B账户能读取到记录,并且ABAP判断不是初始,但是里面的实际数据都是0 。发现是权限的问题 sm30 经过测试 是以上的权限对象的问题 解决思路 权限对象配起来

如何通过浏览器配置哪些网页不走代理服务器,Lantern开启后部分网页打不开了

浏览器点设置 > 搜索“代理” > “打开计算机的代理设置” > 编辑“使用代理服务器” 搜索“代理” > “打开计算机的代理设置” > 编辑“使用代理服务器”,将不用代理的url链接域名写进来,点击保存。然后刷新打不开的网页,…

Elasticsearch + Kibana+Docker实现词云

需求 实现文件导入es,支持格式TXT、DOC、PPT、XLS、PDF、图片ik分词器远程热更新自定义扩展字典和停用字典Kibana配置词云,并显示对应文档详情和字典频次,且自定义显示字典 技术点 文件导入:es插件ingest-attachment图片文字识…

QT day1简单登录界面

widget.cpp文件代码&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {qDebug()<<this->size();qDebug()<<this->frameSize();this->setFixedSize(50…

Element Plus el-table 自定义合并行和列

原文链接&#xff1a;Element Plus el-table 自定义合并行和列 前言 目标效果是将表格行数据中某个属性值相同的项合并到一起&#xff0c;效果如下&#xff1a; <el-table :data"tableData" :span-method"spanMethod" style"width: 100%">…

[桌面运维] 显示器 色准,色域,色深,分辨率,带宽,刷新率的基本概念,图像呈现的基本原理

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

数字创新 融合发展 2023中国国际数字和软件大会在大连开幕

作为数字和软件服务产业一年一度的行业盛宴&#xff0c;为期四天的2023年中国国际数字和软件服务交易会&#xff08;以下简称“数交会”&#xff09;&#xff0c;于7月6日在大连正式拉开帷幕。 本届数交会由商务部、科技部、中国国际贸易促进委员会、辽宁省人民政府主办&#x…

抖音seo矩阵系统源代码分享--开发者

一、技术开发注意事项&#xff1a; 目录 一、技术开发注意事项&#xff1a; 二、抖音SEO账号矩阵系统源码思路 三、抖音SEO底层开发逻辑主要包括以下几个方面&#xff1a; 四、 功能规划 五、 代码开发展示 确定业务需求&#xff1a;在开发前&#xff0c;需要明确抖音矩阵…

游泳耳机哪款好,列举几款不错的游泳耳机

在接下来的日子可以说每个地方的天气都陆续的进入了夏天&#xff0c;而在炎热的夏天里&#xff0c;很多人都会选择通过游泳&#xff0c;在水下感受凉爽的同时起到了不错的放松效果&#xff0c;但对于新手而言有一些游泳好物还不知道该如何挑选&#xff0c;今天我就来给大家分享…

写一个starter(spring boot)

前置知识 自动装配 自动装配的一个重要注解就是SpringBootApplication。它是一个复合注解&#xff0c;由四个元注解和另外三个注解组成。这三个注解是&#xff1a; ConfigurationEnableAutoConfigurationComponentScan Configuration Configuration 是 JavaConfig 形式的…

红黑树做中文字符输入法,你懂了不?

前言 输入一个字符&#xff0c;匹配中文字符的输入法&#xff0c; 例如输入a&#xff0c;输出&#xff1a;啊阿&#xff0c;然后再输入n&#xff0c;即变成an&#xff0c;输出&#xff1a;鞍氨安俺按暗岸胺案&#xff0c; 要求要有搜索的接口&#xff0c;应该如何设计呢&#…