lightGBM 集成学习模型 - 以银行风控业务为例

LightGBM(Light Gradient Boosting Machine)是基于梯度提升决策树(GBDT)的一种改进实现。其核心思想是通过加法模型(additive model)和前向分布算法(forward distribution algorithm)来逐步构建一个强大的预测模型。下面详细介绍LightGBM的推导公式及其推导过程,以及它相对于其他模型的优势。

1. 梯度提升决策树(GBDT)概述

GBDT是一个集成学习方法,它通过逐步添加决策树来构建模型,每一步都试图修正前一步模型的错误。其核心思想如下:

1.1 加法模型

加法模型的基本形式是将多个弱学习器(如决策树)组合起来,以形成一个强学习器。对于一个样本 ( x i , y i ) (x_i, y_i) (xi,yi),模型的预测值 y ^ i \hat{y}_i y^i可以表示为:
y ^ i = ∑ m = 1 M f m ( x i ) \hat{y}_i = \sum_{m=1}^{M} f_m(x_i) y^i=m=1Mfm(xi)
其中, f m ( x ) f_m(x) fm(x)表示第 m m m个弱学习器。

1.2 损失函数

为了使模型的预测值 y ^ i \hat{y}_i y^i接近真实值 y i y_i yi,我们定义一个损失函数 L ( y , y ^ ) L(y, \hat{y}) L(y,y^),并希望通过不断优化该损失函数来改进模型。常见的损失函数包括均方误差(MSE)和对数损失(Log Loss)。

1.3 梯度提升

梯度提升的思想是在每一步添加一个新的决策树,使得损失函数在当前模型的基础上取得最大程度的下降。具体地,假设当前模型的预测值为 y ^ i ( m − 1 ) \hat{y}_i^{(m-1)} y^i(m1),则第 m m m步的模型为:
y ^ i ( m ) = y ^ i ( m − 1 ) + f m ( x i ) \hat{y}_i^{(m)} = \hat{y}_i^{(m-1)} + f_m(x_i) y^i(m)=y^i(m1)+fm(xi)
其中, f m ( x ) f_m(x) fm(x)是根据负梯度方向构建的新的决策树。

2. LightGBM 推导公式

LightGBM在GBDT的基础上进行了多项改进,其核心推导公式和过程如下:

2.1 基本公式

在每一步迭代中,LightGBM尝试找到一个新的函数 f m ( x ) f_m(x) fm(x)来最小化损失函数。假设当前模型的预测值为 y ^ i ( m − 1 ) \hat{y}_i^{(m-1)} y^i(m1),则新的预测值为:
y ^ i ( m ) = y ^ i ( m − 1 ) + η f m ( x i ) \hat{y}_i^{(m)} = \hat{y}_i^{(m-1)} + \eta f_m(x_i) y^i(m)=y^i(m1)+ηfm(xi)
其中, η \eta η是学习率,控制每次更新的步长。

2.2 目标函数

目标函数包括损失函数和正则化项:
L = ∑ i = 1 n L ( y i , y ^ i ( m − 1 ) + η f m ( x i ) ) + Ω ( f m ) \mathcal{L} = \sum_{i=1}^{n} L(y_i, \hat{y}_i^{(m-1)} + \eta f_m(x_i)) + \Omega(f_m) L=i=1nL(yi,y^i(m1)+ηfm(xi))+Ω(fm)
其中, Ω ( f m ) \Omega(f_m) Ω(fm)是正则化项,用于控制模型的复杂度,防止过拟合。

2.3 近似优化

为了简化优化过程,LightGBM采用二阶泰勒展开对损失函数进行近似:
L ( y , y ^ + δ ) ≈ L ( y , y ^ ) + g i δ + 1 2 h i δ 2 L(y, \hat{y} + \delta) \approx L(y, \hat{y}) + g_i \delta + \frac{1}{2} h_i \delta^2 L(y,y^+δ)L(y,y^)+giδ+21hiδ2
其中, g i = ∂ L ( y , y ^ ) ∂ y ^ g_i = \frac{\partial L(y, \hat{y})}{\partial \hat{y}} gi=y^L(y,y^)是损失函数的一阶导数(梯度), h i = ∂ 2 L ( y , y ^ ) ∂ y ^ 2 h_i = \frac{\partial^2 L(y, \hat{y})}{\partial \hat{y}^2} hi=y^22L(y,y^)是损失函数的二阶导数(Hessian矩阵)。

于是,目标函数可以近似为:
L ≈ ∑ i = 1 n [ L ( y i , y ^ i ( m − 1 ) ) + g i f m ( x i ) + 1 2 h i f m ( x i ) 2 ] + Ω ( f m ) \mathcal{L} \approx \sum_{i=1}^{n} \left[ L(y_i, \hat{y}_i^{(m-1)}) + g_i f_m(x_i) + \frac{1}{2} h_i f_m(x_i)^2 \right] + \Omega(f_m) Li=1n[L(yi,y^i(m1))+gifm(xi)+21hifm(xi)2]+Ω(fm)

2.4 树结构的优化

LightGBM通过构建树结构来拟合 η f m ( x i ) \eta f_m(x_i) ηfm(xi)。树结构的优化包括选择最佳分裂点、计算叶子节点的权重等。具体来说,在每个节点处,LightGBM选择使目标函数下降最多的分裂点,并计算分裂后的叶子节点的最佳权重。

3. LightGBM 相对于其他模型的优势

3.1 高效性
  • 基于直方图的算法:LightGBM使用基于直方图的算法,将连续特征离散化为直方图,以减少内存使用和计算量。
  • Leaf-wise生长策略:与传统的层次生长策略不同,LightGBM采用叶子优先生长策略,能更快地降低损失函数,从而提高训练效率和模型精度。
3.2 可扩展性
  • 支持并行学习:LightGBM支持特征并行和数据并行,能在多核CPU或分布式环境下高效运行。
  • 处理大规模数据:由于其高效的内存管理和计算策略,LightGBM能处理数百万行甚至数亿行的数据集。
3.3 模型性能
  • 处理类别不平衡:LightGBM通过设置正负样本的权重或使用平衡正负样本的损失函数,能有效处理类别不平衡问题。
  • 自动捕捉特征交互:由于树模型的天然优势,LightGBM能自动捕捉特征之间的复杂交互关系,而无需手动特征工程。

LightGBM(Light Gradient Boosting Machine)是一种高效的梯度提升框架,广泛应用于大规模数据集的机器学习任务。由于其高性能和可扩展性,它在金融行业中非常受欢迎,特别是在信用评分和风险管理任务中。

4.在银行风控中的应用

4.1 问题背景

银行需要评估借款人违约的风险(即借款人未能按时还款)。主要目标是预测违约的可能性,这需要通过分析历史数据来构建预测模型,从而评估申请人的信用状况。

4.2 数据集

一个典型的银行风控数据集可能包括:

  • 客户人口统计信息:年龄、收入、就业状况等。
  • 信用历史:过去贷款的数量、还款历史、违约记录等。
  • 贷款详情:贷款金额、期限、用途等。
  • 财务比率:债务收入比、信用利用率等。
4.3 特征工程和预处理

需要仔细设计和预处理关键特征:

  • 处理缺失值:用均值/中值替换缺失值或使用插补技术。
  • 编码类别变量:使用独热编码或标签编码。
  • 归一化:将数值特征缩放到标准范围。
  • 特征工程:根据领域知识创建新特征,如交互项或聚合特征。
4.4 实施步骤

步骤 1: 安装 LightGBM

!pip install lightgbm

步骤 2: 加载和准备数据

import lightgbm as lgb
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score# 加载数据集
data = pd.read_csv('credit_data.csv')# 数据预处理
# 假设 'target' 是我们要预测的列
X = data.drop('target', axis=1)
y = data['target']# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

若没有现成的数据集,可以用下面的代码构造一个

import pandas as pd
import numpy as np# 生成随机数据
np.random.seed(42)
n_samples = 1000# 客户人口统计信息
age = np.random.randint(18, 70, size=n_samples)
income = np.random.randint(20000, 150000, size=n_samples)
employment_status = np.random.choice(['employed', 'self-employed', 'unemployed'], size=n_samples, p=[0.7, 0.2, 0.1])# 信用历史
num_past_loans = np.random.randint(0, 10, size=n_samples)
repayment_history = np.random.choice(['good', 'average', 'poor'], size=n_samples, p=[0.7, 0.2, 0.1])
default_history = np.random.randint(0, 5, size=n_samples)# 贷款详情
loan_amount = np.random.randint(1000, 50000, size=n_samples)
loan_term = np.random.choice([12, 24, 36, 48, 60], size=n_samples, p=[0.2, 0.2, 0.2, 0.2, 0.2])
loan_purpose = np.random.choice(['home improvement', 'debt consolidation', 'business', 'personal', 'education'], size=n_samples)# 财务比率
debt_to_income_ratio = np.round(np.random.uniform(0.1, 0.6, size=n_samples), 2)
credit_utilization = np.round(np.random.uniform(0.1, 0.9, size=n_samples), 2)# 目标变量:违约(1)或未违约(0)
target = np.random.choice([0, 1], size=n_samples, p=[0.85, 0.15])# 创建数据框
data = pd.DataFrame({'age': age,'income': income,'employment_status': employment_status,'num_past_loans': num_past_loans,'repayment_history': repayment_history,'default_history': default_history,'loan_amount': loan_amount,'loan_term': loan_term,'loan_purpose': loan_purpose,'debt_to_income_ratio': debt_to_income_ratio,'credit_utilization': credit_utilization,'target': default  # 目标变量
})# 显示前几行数据
print(data.head())# 保存数据集到CSV文件
data.to_csv('credit_data.csv', index=False)

步骤 3: 创建 LightGBM 数据集

train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test, reference=train_data)

步骤 4: 定义参数

params = {'boosting_type': 'gbdt','objective': 'binary','metric': 'auc','num_leaves': 31,'learning_rate': 0.05,'feature_fraction': 0.9
}

步骤 5: 训练模型

bst = lgb.train(params, train_data, num_boost_round=100, valid_sets=[test_data], early_stopping_rounds=10)

步骤 6: 进行预测和评估

y_pred = bst.predict(X_test, num_iteration=bst.best_iteration)
auc_score = roc_auc_score(y_test, y_pred)
print(f'AUC Score: {auc_score}')
6. 结果解释

AUC(曲线下面积)得分是二分类问题中常用的评估指标。它衡量模型区分不同类别的能力。得分越接近1,模型表现越好。

7. 特征重要性

理解哪些特征最重要可以提供关于影响风险的因素的见解。

import matplotlib.pyplot as pltlgb.plot_importance(bst, max_num_features=20)
plt.show()

常见挑战和解决方案

  1. 数据不平衡:在风险建模中,违约的数量通常远低于非违约数量。可以使用SMOTE(合成少数过采样技术)、调整类别权重或使用分层抽样来解决这种不平衡问题。

  2. 过拟合:LightGBM 强大但容易过拟合。使用交叉验证、设置适当的 num_leaves 和使用 early_stopping_rounds 等技巧可以防止过拟合。

  3. 特征交互:LightGBM 能够自动捕捉特征交互,但如果已知领域特定的交互,应手动添加这些特征以提高模型性能。

结论

LightGBM 是一个构建银行风险评估模型的强大工具。其速度和效率,加上处理大型复杂数据集的能力,使其非常适合实时风险评分和决策。通过仔细准备数据、调整模型和解释结果,银行可以显著提升其风险管理能力。

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

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

相关文章

Qt pro工程文件编写汇总(区分debug和release、32位和64位的方法,编译输出目录等)

前言: 从事qt开发已经好几年了,但有关pro编写的一些细节问题一直没有一个很好的梳理汇总——因为实际工作开发中,往往只需要编译特定版本的软件(例如32位release版本),项目创建好后并设置好编译路径&#x…

ML307R OpenCPU GPIO使用

一、GPIO使用流程图 二、函数介绍 三、GPIO 点亮LED 四、代码下载地址 一、GPIO使用流程图 这个图是官网找到的,ML307R GPIO引脚电平默认为1.8V,需注意和外部电路的电平匹配,具体可参考《ML307R_硬件设计手册_OpenCPU版本适用.pdf》中的描…

零基础PHP入门(一)选择IDE和配置环境

配置环境 官网下载安装包,windows https://windows.php.net/download#php-8.3 我是下载的最新版,也可以切换其他版本 https://windows.php.net/downloads/releases/archives/ 下载好压缩文件后,双击解压到一个目录 D:\soft\php 复制ph…

成都爱尔眼科医院《中、欧国际近视手术大数据白皮书2.0》解读会圆满举行

2024年5月12日,爱尔眼科联合中国健康促进基金会健康传播与促进专项基金、新华社新媒体中心与中南大学爱尔眼科研究院、爱尔数字眼科研究所重磅发布《中、欧国际近视手术大数据白皮书2.0》。这是继2021、2022年在国内相继发布《国人近视手术白皮书》、《2022中、欧近…

Ubuntu系统初始化相关配置

目录 Ubuntu文件传输: ubuntu怎么打开word:安装wps(应用中心搜索) Ubuntu安装annoconda

模型蒸馏笔记

文章目录 一、什么是模型蒸馏二、如何蒸馏三、实践四、参考文献 一、什么是模型蒸馏 Hinton在NIPS2014提出了知识蒸馏(Knowledge Distillation)的概念,旨在把一个大模型或者多个模型ensemble学到的知识迁移到另一个轻量级单模型上&#xff0…

【SpringBoot】SpringBoot中防止接口重复提交(单机环境和分布式环境)

📝个人主页:哈__ 期待您的关注 目录 🌼前言 🔒单机环境下防止接口重复提交 📕导入依赖 📂项目结构 🚀创建自定义注解 ✈创建AOP切面 🚗创建Conotroller 💻分布…

构建高效的在线培训机构CRM应用架构实践

在当今数字化时代,在线培训已成为教育行业的重要趋势之一。为了提供更好的学习体验和管理服务,在线培训机构需要构建高效的CRM(Customer Relationship Management)应用架构。本文将探讨在线培训机构CRM应用架构的设计与实践。 一、…

PTA 6-3 入侵者围剿第二关3情报解密

经过上一步已经将2个分队得到的秘密情报合并到一起,并进行了信息去重。接下来,经过情报的分析,发现情报进行加密的方式,将链表从正中间断开,然后后面的链表全部接到前面,输出来的次序就是敌方的武器发射次序…

绿色智能:AI机器学习在环境保护中的深度应用与实践案例

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

在vps的centos系统中用Python和青龙检测网页更新

环境:vps,centos7,python3.8.10,青龙面板(用宝塔安装) 任务:用python代码,监控一个网站页面是否有更新(新帖子),若有,则提醒&#xf…

【数据结构】二叉树的认识与实现

目录 二叉树的概念: 二叉树的应用与实现: 二叉树实现接口: 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树 二叉树节点个数​编辑 二叉树叶子节点个数 二叉树第k层节点个数 二叉树查找值为x的节点​编辑 二叉树前序遍…

XSS+CSRF攻击

一、前言 在DVWA靶场的XSS攻击下结合CSRF攻击完成修改密码 也就是在具有XSS漏洞的情况下实施CSRF攻击 二、实验 环境配置与上一篇博客一致,有兴趣可以参考CSRF跨站请求伪造实战-CSDN博客 首先登录DVWA,打开XSS模块 name随便输入,message…

嵌入式0基础开始学习 Ⅲ Linux基础(1)Linux基本命令

1.APT unbuntu中功能最强大的命令行软件包管理工具, 用来获取,安装,编译,卸载,查询软件包。 工作原理; /etc/apt/sources.list -> 文件 用来指针ubuntu的软件源服务器…

HQL面试题练习 —— 合并数据

题目来源:京东 目录 1 题目2 建表语句3 题解 1 题目 已知有数据 A 如下,请分别根据 A 生成 B 和 C。 数据A ------------ | id | name | ------------ | 1 | aa | | 2 | aa | | 3 | aa | | 4 | d | | 5 | c | | 6 | aa…

Android 使用 ActivityResultLauncher 申请权限

前面介绍了 Android 运行时权限。 其中,申请权限的步骤有些繁琐,需要用到:ActivityCompat.requestPermissions 函数和 onRequestPermissionsResult 回调函数,今天就借助 ActivityResultLauncher 来简化书写。 步骤1:创…

基于FPGA的VGA协议实现

文章目录 一、VGA介绍1.1 VGA原理1.2VGA电路 二、配置三、实现3.1 字符显示3.2图片显示 四、代码4.1.vga驱动模块4.2数据模块4.3按键消抖模块4.4顶层模块4.5TCL引脚绑定 参考 一、VGA介绍 1.1 VGA原理 VGA接口 最主要的几根线: VGA其实就是相当于一块芯片&#…

gcc g++不同版本切换命令

sudo update-alternatives --config g sudo update-alternatives --config gcc ubuntu20.04 切换 gcc/g 版本_ubuntu降低g版本-CSDN博客

YOLOv10尝鲜测试五分钟极简配置

最近清华大学团队又推出YOLOv10,真是好家伙了。 安装: pip install supervision githttps://github.com/THU-MIG/yolov10.git下载权重:https://github.com/THU-MIG/yolov10/releases/download/v1.0/yolov10n.pt 预测: from ult…

Superset,基于浏览器的开源BI工具

BI工具是数据分析的得力武器,目前市场上有很多BI软件,众所周知的有Tableau、PowerBI、Qlikview、帆软等,其中大部分是收费软件或者部分功能收费。这些工具一通百通,用好一个就够了,重要的是分析思维。 我一直用的Tabl…