Python实现xgboost分类模型(XGBClassifier算法)项目实战

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,100CU*H 3个月
简介: Python实现xgboost分类模型(XGBClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。

image.png

image.png

1.项目背景

随着大数据时代的到来,具备大数据思想至关重要,人工智能技术在各行各业的应用已是随处可见。金融机构因车辆贷款违约而遭受重大损失。这导致汽车贷款承销收紧,汽车贷款拒收率上升。这些机构也提出了建立更好的信用风险评分模式的必要性。这值得进行一项研究,以估计车辆贷款违约的决定因素。金融机构想要准确预测贷款人/借款人在到期日第一个 EMI(等同于每月分期付款)中拖欠车辆贷款的概率。

数据集中提供了有关贷款和贷款人的信息:

贷款人信息(人口数据,如年龄、身份证明等)

贷款信息(付款详情、贷款与价值比率等)

统计局数据与历史(局分数、活跃账户数、其他贷款状况、信用记录等)

这样做将确保能够还款的客户不会被拒绝,并可以确定重要的决定因素,这些决定因素可以进一步用于将违约率降至最低。

2.数据获取 

本次建模数据来源于网络(本项目撰写人整理而成),数据项统计如下

编号 

变量名称

描述

0

UniqueID

客户标识符

1

loan_default

到期日第一个 EMI 中的付款违约;1 = 违约,0 = 不违约

2

disbursed_amount

已支付的贷款金额

3

asset_cost

资产成本

4

ltv

资产价值贷款

5

branch_id

发放贷款的分行

6

supplier_id

贷款发放地的车辆经销商

7

manufacturer_id

汽车制造商(Hero, Honda, TVS 等)

8

Current_pincode_ID

客户当前的引脚码

9

Date.of.Birth

客户的出生日期

10

Employment.Type

客户的就业类型(受薪/自雇)

11

DisbursalDate

付款日期

12

State_ID

付款状态

13

Employee_code_ID

记录付款的组织员工

14

MobileNo_Avl_Flag

如果Mobile no.被客户共享,然后标记为 1

15

Aadhar_flag

如果 aadhar 被客户共享, 则标记为 1

16

PAN_flag

如果pan被客户共享,则标记为 1

17

VoterID_flag

如果voter被客户共享, 然后标记为 1

18

Driving_flag

如果 DL 由客户共享,则标记为 1

19

Passport_flag

如果passport由客户共享,则标记为 1

20

PERFORM_CNS.SCORE

局分数

21

PERFORM_CNS.SCORE.DESCRIPTION

局分数描述

22

PRI.NO.OF.ACCTS

客户在付款时获得的贷款总额(主要帐户是客户为个人用途而使用的客户帐户)

23

PRI.ACTIVE.ACCTS

客户在付款时获得的主动贷款计数

24

PRI.OVERDUE.ACCTS

付款时违约账户计数

25

PRI.CURRENT.BALANCE

付款时主动贷款的本金未偿总额

26

PRI.SANCTIONED.AMOUNT

付款时所有贷款所批准的总额

27

PRI.DISBURSED.AMOUNT

支付时支付的所有贷款总额

28

SEC.NO.OF.ACCTS

客户在付款时获得的贷款总额(次要帐户是指客户作为共同申请人或gaurantor的账户)

29

SEC.ACTIVE.ACCTS

客户在付款时获得的主动贷款计数

30

SEC.OVERDUE.ACCTS

付款时违约账户计数

31

SEC.CURRENT.BALANCE

付款时主动贷款的本金未偿总额

32

SEC.SANCTIONED.AMOUNT

付款时所有贷款所批准的总额

33

SEC.DISBURSED.AMOUNT

支付时支付的所有贷款总额

34

PRIMARY.INSTAL.AMT

初级贷款的EMI金额

35

SEC.INSTAL.AMT

次级贷款的EMI金额

36

NEW.ACCTS.IN.LAST.SIX.MONTHS

客户在付款前的最后 6 个月内获得的新贷款

37

DELINQUENT.ACCTS.IN.LAST.SIX.MONTHS

过去6个月拖欠的贷款

38

AVERAGE.ACCT.AGE

平均贷款年租期

39

CREDIT.HISTORY.LENGTH

自第一次贷款以来的时间

40

NO.OF_INQUIRIES

客户为贷款而进行的查询

数据详情如下(部分展示): 

image.png

3.数据预处理 

真实数据中可能包含了大量的缺失值和噪音数据或人工录入错误导致有异常点存在,非常不利于算法模型的训练。数据清洗的结果是对各种脏数据进行对应方式的处理,得到标准的、干净的、连续的数据,提供给数据统计、数据挖掘等使用。数据预处理通常包含数据清洗、归约、聚合、转换、抽样等方式,数据预处理质量决定了后续数据分析挖掘及建模工作的精度和泛化价值。以下简要介绍数据预处理工作中主要的预处理方法:

3.1 去除挖掘无关重要的特征

一些ID标识类的数据参与机器建模没有意义,所以在此进行去掉,主要包括:

image.png

关键代码:

image.png

3.2特征文本数据转换

1.数据项:PERFORM_CNS.SCORE.DESCRIPTION

PERFORM_CNS.SCORE.DESCRIPTION此数据项为文本类型的分数级别描述,需要转换成数值型的信用风险等级:

处理前:

image.png

处理后:

image.png

2.数据项:Employment.Type

Employment.Type此数据项为文本类型的客户的就业类型(受薪/自雇),需要转换成数值型:

处理前:

image.png

处理后:

image.png

3.3客户年龄计算

通过客户的付款日期减去客户的出生日期来计算客户的当前年龄,关键代码如下:

image.png

输出结果如下:

image.png

3.4文本数据处理

AVERAGE.ACCT.AGE 平均贷款年租期

CREDIT.HISTORY.LENGTH 自第一次贷款以来的时间

本次主要是针对这两个数据项的处理,原始数据如下:

image.png

处理后如下:

image.png

关键代码如下:

image.png

4.探索性数据分析

4.1数值型特征变量T检验与特征选择

T检验图如下:

image.png

为了更好地进行展示,所以用图表以显示 T 测试的"替代假设"的接受度。因此,那些跨越红线的人显示出统计学意义。但对于汽车贷款和教育贷款,据观察,银行不想妥协,以透露任何细节的二级账户持有人,因为他们也是贷款的担保人,以防违约。但是,此 T 测试中有一个问题,如下一个单元格中将观察到的问题

image.png

上述观察是列的标准偏差(即默认值与非默认值)。T 独立性测试的假设是,观测下的样本应具有等于标准偏差。虽然上面观察到的差异似乎较小,但似乎仍然不能接受。因此,我们将进行非参数测试。

我们将使用 SelectKest 库来缩小功能选择的范围。这将利用Annova 测试。

image.png

该图显示二级帐户信息微不足道。当然,银行也不能放弃二级账户信息,因此我们必须将初级账户和次级账户信息结合起来。

关键代码如下:

image.png

image.png

4.2分类特征变量的卡方检验

Categorical特征常被称为分类特征,数据类型通常是object类型,而我们的机器学习模型通常只能处理数值数据,所以需要对Categorical数据转换成Numeric特征。如下图:

image.png

在这里,图表也显示了对替代假设的接受。同样,我们可以观察到credit scorePAN Card之间的一些多重共线性,因为PAN Card是获得信用评分的必修课。因此,卡方检验认为它认为它对我们的研究有盈余。但为了争论,我们会保留它。

5.特征工程

5.1 建立特征数据和标签数据

loan_default为标签数据,除 loan_default之外的为特征数据。关键代码如下:

image.png

5.2数据集拆分

训练集拆分,分为训练集和验证集,70%训练集和30%验证集。关键代码如下:

image.png

6.构建逻辑回归和xgboost分类模型 

主要使用使用LogisticRegressionXGBClassifier算法,用于目标分类。

6.1 建立逻辑回归模型

模型名称

指标名称

指标值

验证集

逻辑回归模型

准确率

78.27%

查准率

0.00%

查全率

0.00%

F1分值

0.00%

逻辑回归分类模型报告:

image.png

首先通过建立逻辑回归模型看到查准率、查全率、F1分值都是0,说明这是一个无效的模型;可能的原因目标变量分布不均衡,接下来咱们查看一下标签变量的分布:

image.png

通过上图可以清晰地看到,标签变量的数据分布确实不均衡。

那么接下来在查看一下信用历史特征的分布情况:所包含的特征:

image.png

image.png

首次申请贷款的客户数量最多,这解释了为什么上述所有列都有如此多的零值。此外,还有许多值得注意的离群值。

6.2 离群值处理

让我们处理离群值。我们将尝试保留离群值记录,而不是删除它们。我们将使用RobustScaler使观测值更接近中值

关键代码:

image.png

现在,对于零观测,我们将制作一个新功能,计算零的功能。这将作为有信用记录的人和没有信用记录的人之间的标准。当然,没有信用记录的人可能会有超过9个特征为零,在客户有信用记录的情况下这种情况是不太可能的

关键代码:

image.png

6.3模型调优

本项目主要是对XGBClassifier分类算法使用GridSearchCV (网格搜索)进行参数的调优,找出模型模型最优的参数,然后进行建模。

关键代码如下:

image.png

image.png

6.4模型参数 

编号

模型名称

参数

1

Xgboost分类模型

learning_rate=0.01

2

n_estimators=5000

3

max_depth=9

4

min_child_weight=1

5

gamma=0.4

6

subsample=0.8

7

colsample_bytree=0.8

8

reg_alpha=0.005

9

objective='binary:logistic'

10

nthread=4

11

scale_pos_weight=1

12

seed=27

关键代码如下:

image.png

7.模型评估

7.1评估指标及结果 

评估指标主要包括准确率、查准率、查全率、F1分值等等。

模型名称

指标名称

指标值

验证集

Xgboost分类模型

准确率

99.82%

查准率

99.87%

查全率

99.30%

F1分值

99.58%

从上表可以看出, xgboost分类模型比较优秀,效果非常好。

关键代码如下:

image.png

7.2 混淆矩阵

xgboost分类模型混淆矩阵:

image.png

7.3 模型特征重要性

image.png

从上图可以看到特征变量对此模型的重要性依次为:PAN_flag、No of AccountsMissing Features等等。

7.4 ROC曲线

image.png

从上图可以看出AUC值为1,模型非常棒。

8.结论与展望

综上所述,本文采用了xgboost分类模型,最终证明了我们提出的模型效果良好。准确率达到了99%,在实际贷款过程中可以应用此模型进行预测,使之后续的贷款业务做得更好。

# 本次机器学习项目实战所需的资料,项目资源如下:
 
# 项目说明:
 
# 获取方式一:
 
# 项目实战合集导航:
 
https://docs.qq.com/sheet/DTVd0Y2NNQUlWcmd6?tab=BB08J2
 
# 获取方式二:
 
链接:https://pan.baidu.com/s/1NtTDi5sNI7vn3lB2P8NYHw 
提取码:zxu1


相关实践学习
使用PAI+LLaMA Factory微调Qwen2-VL模型,搭建文旅领域知识问答机器人
使用PAI和LLaMA Factory框架,基于全参方法微调 Qwen2-VL模型,使其能够进行文旅领域知识问答,同时通过人工测试验证了微调的效果。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
2月前
|
算法 数据可视化 数据挖掘
基于EM期望最大化算法的GMM参数估计与三维数据分类系统python源码
本内容展示了基于EM算法的高斯混合模型(GMM)聚类实现,包含完整Python代码、运行效果图及理论解析。程序使用三维数据进行演示,涵盖误差计算、模型参数更新、结果可视化等关键步骤,并附有详细注释与操作视频,适合学习EM算法与GMM模型的原理及应用。
|
2月前
|
存储 监控 安全
企业上网监控系统中红黑树数据结构的 Python 算法实现与应用研究
企业上网监控系统需高效处理海量数据,传统数据结构存在性能瓶颈。红黑树通过自平衡机制,确保查找、插入、删除操作的时间复杂度稳定在 O(log n),适用于网络记录存储、设备信息维护及安全事件排序等场景。本文分析红黑树的理论基础、应用场景及 Python 实现,并探讨其在企业监控系统中的实践价值,提升系统性能与稳定性。
58 1
|
2月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
67 4
|
3月前
|
PyTorch 算法框架/工具 C++
人工智能算法python程序运行环境安装步骤整理
本教程详细介绍Python与AI开发环境的配置步骤,涵盖软件下载、VS2017安装、Anaconda配置、PyCharm设置及组件安装等内容,适用于Windows系统,助你快速搭建开发环境。
|
机器学习/深度学习 并行计算 算法
第113天: Python XGBoost 算法项目实战
第113天: Python XGBoost 算法项目实战
568 0
|
6月前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
|
3月前
|
Python
Python编程基石:整型、浮点、字符串与布尔值完全解读
本文介绍了Python中的四种基本数据类型:整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。整型表示无大小限制的整数,支持各类运算;浮点型遵循IEEE 754标准,需注意精度问题;字符串是不可变序列,支持多种操作与方法;布尔型仅有True和False两个值,可与其他类型转换。掌握这些类型及其转换规则是Python编程的基础。
209 33
|
2月前
|
数据采集 分布式计算 大数据
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
80 1
|
3月前
|
设计模式 安全 Python
Python编程精进:正则表达式
正则表达式是一种强大的文本处理工具,用于搜索、匹配和提取模式。本文介绍了正则表达式的语法基础,如`\d`、`\w`等符号,并通过实例展示其在匹配电子邮件、验证电话号码、处理日期格式等场景中的应用。同时,文章提醒用户注意性能、编码、安全性等问题,避免常见错误,如特殊字符转义不当、量词使用错误等。掌握正则表达式能显著提升文本处理效率,但需结合实际需求谨慎设计模式。
134 2

推荐镜像

更多