当前位置:   article > 正文

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

python xgboost 多分类

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

1.项目背景

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

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

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

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

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

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

2.数据获取

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

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

3.数据预处理

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

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

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

 

关键代码:

3.2特征文本数据转换

1.数据项:PERFORM_CNS.SCORE.DESCRIPTION

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

处理前:

处理后:

2.数据项:Employment.Type

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

处理前:

 

 处理后:

3.3客户年龄计算

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

 

输出结果如下:

3.4文本数据处理

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

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

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

 

处理后如下:

关键代码如下:

4.探索性数据分析

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

T检验图如下:

 

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

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

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

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

关键代码如下:

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

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

 

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

5.特征工程

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

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

 

5.2数据集拆分

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

 

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

主要使用使用LogisticRegression、XGBClassifier算法,用于目标分类。

6.1 建立逻辑回归模型

 逻辑回归分类模型报告:

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

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

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

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

6.2 离群值处理

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

关键代码: 

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

关键代码:

6.3模型调优

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

关键代码如下:

6.4模型参数 

 关键代码如下:

7.模型评估

7.1评估指标及结果

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

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

关键代码如下:

7.2 混淆矩阵

xgboost分类模型混淆矩阵:

 

7.3 模型特征重要性 

 

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

7.4 ROC曲线 

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

8.结论与展望

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

  1. warnings.filterwarnings("ignore")
  2. df = pd.read_excel('data.xlsx')
  3. # 去除挖掘无关重要的特征
  4. df = df.drop(
  5. ['UniqueID', 'branch_id', 'supplier_id', 'Current_pincode_ID', 'State_ID', 'Employee_code_ID', 'MobileNo_Avl_Flag'],
  6. axis=1)
  7. # 本次机器学习项目实战所需的资料,项目资源如下:
  8. 链接:https://pan.baidu.com/s/1NtTDi5sNI7vn3lB2P8NYHw
  9. 提取码:zxu1
  10. # 特征文本数据转换
  11. def credit_risk(df):
  12. d1 = []
  13. d2 = []
  14. for i in df:
  15. p = i.split("-")
  16. if len(p) == 1:
  17. d1.append(p[0])
  18. d2.append('unknown')
  19. else:
  20. d1.append(p[1])
  21. d2.append(p[0])
  22. return d2
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号