![](https://csdnimg.cn/release/download_crawler_static/87805904/bg1.jpg)
银行信贷风险评估模型代码分析
一、背景概要
信贷业务又称为信贷资产或贷款业务,是商业银行最重要的
资产业务,通过放款收回本金和利息,扣除成本后获得利润,所
以信贷是商业银行的主要赢利手段。
二、代码解析
1 相关技术背景
XGBoost 是一套提升树可扩展的机器学习系统。目标是设计
和构建高度可扩展的端到端提升树系统。提出了一个理论上合理
的加权分位数略图来计算候选集。引入了一种新颖的稀疏感知算
法用于并行树学习。提出了一个有效的用于核外树形学习的缓存
感知块结构。用缓存加速寻找排序后被打乱的索引的列数据的过
程。XGBoost 是一个树集成模型,他将 K(树的个数)个树的结
果进行求和,作为最终的预测值。
2 算法解析
使用机器学习建模的一般流程。分为两大部分:数据处理和
![](https://csdnimg.cn/release/download_crawler_static/87805904/bg2.jpg)
模型学习。第一部分需要大量的知识对原始数据进行清理及特征
提取;第二部分模型学习,涉及长时间的模型参数调整,调整方
向和策略需要根据经验来灵活调整。当模型效果不理想时,考虑
的调整策略:
(a)调节正负样本的权重参数。
(b)更换模型算法。
(c)同时几个使用模型进行预测,然后取去测的最终结果。
(d)使用原数据,生成新特征。
1. Logistic 函数
Logistic 回归模型中的因变量只有 1 和 0(发生于不发生)
两种。假设在 p 个独立自变量 x1,x2…xp 作用下,y 取 1 的概
率是 p = P(y = 1|X)取 0 的概率是 1-p,取 1 和取 0 的概率之
比为:P/(1-P);称为事件的优势比(odds),对 odds 取自然对
数得 Logistic 变换。
2.Logistic 回归建模步骤
(a)根据分析目的设置指标变量(因变量和自变量),然后收
集数据,根据收集到的数据,对特征再次进行筛选;
#特征重要程度情况
ax = xgb.plot_importance(model)
fig = ax.figure
fig.set_size_inches(15,10)
(b)y 取 1 的概率是 p= P(y= 1|X), 取 0 概率是 1-p。用
ln(p/(1−p))和自变量列出线性回归方程,估计出模型中的回归
![](https://csdnimg.cn/release/download_crawler_static/87805904/bg3.jpg)
系数;
(c)进行模型检验。模型有效性的检验指标有很多,最基本
的有正确率,其次有混淆矩阵、ROC 曲线、KS 值等。
(d)模型应用:输入自变量的取值,就可以得到预测变量的值,
或者根据预测变量的值去控制自变量的取值。
实例:
gender
age
dist
edu
job
lmt
basicLevel
x_0
x_1
2
27
640500
0
8
5.963
3
0
0
2
25
640600
0
3
6.467
3
0
0
2
37
641200
70
5
0.596
1
0
0
2
29
340821
0
4
6.3
3
0
0
2
22
732628
0
2
6.7
2
0
0
利用 Scikit-Learn 对这个数据进行逻辑回归分析。首先进行
特征筛选,特征筛选的方法有很多,主要包含在 Scikit_Learn
的 feature_ selection 库中,比较简单的有通过 F 检验(f_
regression)来给出各个特征的 F 值和 p 值,从而可以筛选变量
(选择 F 值大的或者 p 值小的特征)。其次有递归特征消除
( Recursive Feature Elimination, RFE) 和 稳 定 性 选 择
(StabilitySelection)等比较新的方法。这里使用了稳定性选择
方法中的随机逻辑回归进行特征筛选,然后利用筛选后的特征建
立逻辑回归模型,输出平均正确率。
3.数据源内容解读
数据集,可以看到数据样本中有很多列属性。
![](https://csdnimg.cn/release/download_crawler_static/87805904/bg4.jpg)
train_df = pd.read_csv("D:/files/train.csv")
test_df = pd.read_csv("D:/files/test.csv")
4.Python 主要数据预处理函数
在数据挖掘中,海量的原始数据中存在着大量不完整(有缺
失值)、不一致、有异常的数据,严重影响到数据挖掘建模的执
行效率,甚至可能导致挖掘结果的偏差,所以进行数据清洗就显
得尤为重要,数据清洗完成后接着进行或者同时进行数据集成、
转换、规约等一系列的处理,该过程就是数据预处理。数据预处
理一方面是要提高数据的质量,另一方面是要让数据更好地适应
特定的挖掘技术或工具。
5.二分类
对于二分类模型,其实既可以构建分类器,也可以构建回归。
# predict train
predict_train = model.predict(dtrain)
train_auc = evaluate_score(predict_train, y_train)
# predict validate
predict_valid = model.predict(dvalid)
valid_auc = evaluate_score(predict_valid, y_valid)
print('train auc = {:.7f} , valid auc = {:.7f}\n'.format(train_auc,
valid_auc))
三、模型训练
数据处理需要花费大量的精力,说明在机器学习中数据准备
![](https://csdnimg.cn/release/download_crawler_static/87805904/bg5.jpg)
的工作很重要,有了好的数据才能预测出好的分类结果,对于二
分类问题,一般情况下,首选逻辑回归。
#模型训练
model = xgb.train(dict(xgb_params),
dtrain,
evals=watchlist,
verbose_eval=50,
early_stopping_rounds=100,
num_boost_round=4000)
#利用最佳迭代次数,再次利用全量数据训练模型
print('---> training on total dataset to predict test and submit')
model = xgb.train(dict(xgb_params),
dtrain_all,
num_boost_round=best_num_boost_rounds)
# predict validate
predict_valid = model.predict(dvalid)
valid_auc = evaluate_score(predict_valid, y_valid)
print('
预测的验证集
AUC
指标:
', valid_auc)
===> feature count: 103
scale_pos_weight = 1
train: 91826, valid: 10203, test: 30000
[0] train-auc:0.50000 valid-auc:0.50000
Multiple eval metrics have been passed: 'valid-auc' will be used for early
stopping.
Will train until valid-auc hasn't improved in 100 rounds.
[50] train-auc:0.64097 valid-auc:0.65167
[100] train-auc:0.65153 valid-auc:0.67749
[150] train-auc:0.67276 valid-auc:0.72217
[200] train-auc:0.68959 valid-auc:0.73652
[250] train-auc:0.71319 valid-auc:0.73802
[300] train-auc:0.74216 valid-auc:0.73880
Stopping. Best iteration:
[241] train-auc:0.70966 valid-auc:0.73982
train auc = 0.7646057 , valid auc = 0.7385212
---> cv train to choose best_num_boost_round