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

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 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-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
21天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
221 55
|
9天前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
102 66
|
20天前
|
机器学习/深度学习 数据可视化 TensorFlow
使用Python实现深度学习模型的分布式训练
使用Python实现深度学习模型的分布式训练
164 73
|
13天前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
50 20
|
6天前
|
算法 网络协议 Python
探秘Win11共享文件夹之Python网络通信算法实现
本文探讨了Win11共享文件夹背后的网络通信算法,重点介绍基于TCP的文件传输机制,并提供Python代码示例。Win11共享文件夹利用SMB协议实现局域网内的文件共享,通过TCP协议确保文件传输的完整性和可靠性。服务器端监听客户端连接请求,接收文件请求并分块发送文件内容;客户端则连接服务器、接收数据并保存为本地文件。文中通过Python代码详细展示了这一过程,帮助读者理解并优化文件共享系统。
|
23天前
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品消费需求分析的深度学习模型
使用Python实现智能食品消费需求分析的深度学习模型
75 21
|
11天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
43 5
|
11天前
|
存储 缓存 算法
探索企业文件管理软件:Python中的哈希表算法应用
企业文件管理软件依赖哈希表实现高效的数据管理和安全保障。哈希表通过键值映射,提供平均O(1)时间复杂度的快速访问,适用于海量文件处理。在Python中,字典类型基于哈希表实现,可用于管理文件元数据、缓存机制、版本控制及快速搜索等功能,极大提升工作效率和数据安全性。
46 0
|
3月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
95 3
|
6月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【7月更文挑战第22天】在大数据领域,Python算法效率至关重要。本文深入解析时间与空间复杂度,用大O表示法衡量执行时间和存储需求。通过冒泡排序(O(n^2)时间,O(1)空间)与快速排序(平均O(n log n)时间,O(log n)空间)实例,展示Python代码实现与复杂度分析。策略包括算法适配、分治法应用及空间换取时间优化。掌握这些,可提升大数据处理能力,持续学习实践是关键。
136 1