目录
一、课题设计背景
信贷用户逾期预测是新手入门必备的一个练习课题,每个银行都有大量的信用贷款客户,随着近年来银行面向个人的小额贷款业务的不断发展,防范个人信贷欺诈,降低贷款不良率,提高银行回款率是银行开展相关业务的首要目标。通过信贷用户的其他行为,利用大数据、人工智能、机器学习等方法,预测用户是否逾期。
文件包含训练集(train.csv)、测试集(test.csv)、提交样例(submission.csv),包含627个字段(附字段说明.xlsx)。
二、设计方案概述
1. 数据预处理
由于数据来源于某银行公布的网上公开数据集,为该银行真实信贷用户信息,应用于信用逾期预测、信用卡评分等业务场景。数据中存在不完整的(缺少某些感兴趣的属性值)、不一致的(包含代码或者名称的差异)、极易受到噪声(错误或异常值)的侵扰的等等,因此在进行数据预测之前先进行数据预处理。
1.1 删除无意义的列
OPEN_ORG_NUM | 开户机构 |
IDF_TYP_CD | 证件类型 |
GENDER | 性别 |
bad_good | 个贷是否逾期 |
CUST_EUP_ACCT_FLAG | 是否有欧元账户 |
CUST_AU_ACCT_FLAG | 是否有澳元账户 |
CUST_SALARY_FINANCIAL_FLAG | 是否薪资理财 |
CUST_SOCIAL_SECURITYIC_FLAG | 是否社保金融IC卡 |
CUST_MTFLOW_FLAG | 是否物流IC卡 |
CUST_DOLLER_FLAG | 是否美元卡 |
CUST_INTERNATIONAL_GOLD_FLAG | 是否国际金卡 |
CUST_INTERNATIONAL_COMMON_FLAG | 是否国际普卡 |
CUST_INTERNATIONAL_SIL_FLAG | 是否国际银卡 |
CUST_INTERNATIONAL_DIAMOND_FLAG | 是否国际钻石卡 |
CUST_GOLD_COMMON_FLAG | 是否金普卡 |
CUST_STAD_PLATINUM_FLAG | 是否标准白金卡 |
CUST_LUXURY_PLATINUM_FLAG | 是否豪华白金卡 |
CUST_PLATINUM_FINANCIAL_FLAG | 是否白金理财卡 |
CUST_DIAMOND_FLAG | 是否钻石卡 |
CUST_INFINIT_FLAG | 是否无限卡 |
CUST_BUSINESS_FLAG | 是否商务卡 |
1.2 删除脏数据
因为文件中可能包含空值数据,NAN数据、重复等数据,因此使用panda库对数据进行清理。
1.3数据编码
文件中某些字段是非数值的,因此使用OneHot编码对数据进行处理。
2.XGBOOST算法
建立XGBoost模型,使用预处理数据,对模型进行训练,使用训练好的模型,对测试数据进行预测。
涉及到的参数
nthread=4 | nthread=-1时,使用全部CPU进行并行运算(默认), nthread=1时,使用1个CPU进行运算。 |
learning_rate=0.08, | 含义:学习率,控制每次迭代更新权重时的步长,默认0.3。调参:值越小,训练越慢。典型值为0.01-0.2。 |
n_estimators=50 | 总共迭代的次数,即决策树的个数 |
max_depth=5 | 树的深度,默认值为6,典型值3-10。调参:值越大,越容易过拟合;值越小,越容易欠拟合 |
gamma=0 | 惩罚项系数,指定节点分裂所需的最小损失函数下降值 |
subsample=0.9 | 训练每棵树时,使用的数据占全部训练集的比例。默认值为1,典型值为0.5-1。调参:防止过拟合 |
colsample_bytree=0.5 | 训练每棵树时,使用的特征占全部特征的比例。默认值为1,典型值为0.5-1。调参:防止过拟合 |
三、具体实现
1. 使用到的库
2.OneHot编码模型
3.导入文件
4. 数据处理
4.1 删除无意义的列
4.2 删除脏数据
4.3 对数据的非数值字段OneHot编码
5.数据切分
将数据按8:2划分为训练集、测试集。
6.Xgboost 模型建立,参数选取
7.评价指标
8. 预测测试文件
四、结果及分析
1. 训练数据集结果
2.测试数据集提交结果
五、总结
在进行此次实践时,一开始对于平台的使用并不是特别的了解,也不熟悉其中的相关操作,经过一段时间的使用后,也逐渐了解了对平台的使用。
在进行这次实践之前,思想只停留在相对基础的基础的集成学习上面,并且没有实战的经验,因此在开始阶段一头雾水。
首先,通过视频资料,对集成学习的发展史进行了解,了解大致情况,然后,通过详细的视频资料进一步学习,层层递进,并且通过阅读陈天奇博士的XGBoost论文,大致了解了XGBoost对于前一代GBDT算法的区别,大致区别我总结了一下几点:
- GBDT算法只利用了一阶的导数信息,XGBoost对损失函数做了二阶的泰勒展开。
- XGBoost的目标函数多了正则项, 相当于预剪枝,使得学习出来的模型更加不容易过拟合。
- 对缺失值的处理。对于特征的值有缺失的样本,XGBoost可以自动学习出它的分裂方向。
在学习过程中,我还学习了关于参数调节的方法:贪心调参方法、网格调参方法等等。
虽然此次实战选取的题目,数据量大,最终的分数也达到了满分,但由于选取的题目难度相对来说还是偏易,因此很多机器学习的知识并没有在这次实战中体现出来,但是在此次实战还是讲很多课上的理论知识运用到实际数据当中,关于模型的选取,参数的调节,数据的处理,也通过此次实践有了全新的认识。
数据集下载:用户逾期行为预测 竞赛 - DataFountain
完整代码:zhaozhao626/Machine_learning_course_design (github.com)