1. 引言
随着中国经济的发展,人们开始追求更有品质的生活。政府为了刺激经济和鼓励金融创新,也逐渐放宽了金融监管政策,使得近年来银行的贷款总额始终呈现上升趋势。根据中国银保监会统计数据,2022年末的贷款总额达到了1,827,315亿元,同比年初增长了179,152亿元。但与此同时,银行也愈发受到信用风险的威胁,商业银行的不良贷款余额始终呈现上升趋势。同时数据也显示,2022年末的不良贷款余额达到了29,829亿元,较年初增长了1359亿元。为了提升个人信用风险评估模型准确度,降低银行面临的个人信用风险,专家学者主要在探究个人信用风险影响因素和改进评估方法两个方面做出了许多努力。
在对影响因素的探究上,顾洲一等(2022)发现客户忠诚度、客户历史信贷数据、信贷合同特征是与个人信用风险评估高度相关的三个重要特征 [1] 。Wang等(2022)发现首付款金额、担保余额、抵押物价值(元)、担保方式、房屋数量、月房产成本、家庭月收入、分期还款方式、审批期限、是否欠息、账户是否贬值、安全系数是相对重要的因素 [2] 。张丽颖等(2022)基于Kaggle的Loan Defaulter数据集,发现性别、家庭人数以及借款人所在城市、住房类型、总收入、所属行业、职业类型、工作年限、受教育程度、消费贷款额度、贷款金额、贷款年金等都是影响客户违约的重要因素 [3] 。
针对评估方法,Durand (1941)最早使用了线性判别法评估个人信用风险 [4] ,Davis (1992)发现分类树机器学习算法优于传统算法 [5] 。后续越来越多的专家开始使用机器学习算法进行个人信用风险评估,到今天,各种集成算法逐渐被广泛应用。张承钿等(2022)结合集成算法的思想和XGBoost低偏差的特性设计了一种异构集成模型(HEM)来评估个人信用,通过UCI德国个人信用数据集验证,模型相对于传统的LR、DT、SVM和XGBoost集成模型的AUC值平均提升了7.38% [6] 。深度学习算法也逐渐走入大家的视线,Dastile等(2021)将表格数据集转换为图像,使用2D卷积神经网络(CNNs)进行了信用评估,结果优于其他信用评分方法 [7] 。
本文根据CCF竞赛提供的中原银行个人信用贷款违约数据,基于5C理论和预期收入理论分析了影响个人信用风险评估的主要因素。同时使用多种平衡数据集的采样方法,基于多种机器学习算法对银行个人信用风险进行评估,通过比较模型精度,选择准确度更高的模型。
2. 银行个人信用风险影响因素分析
信用风险(Credit Risk)是指由于借款人在偿还借款或债务时可能无法按时、足额偿还本金和利息,而对另一方造成财务损失的可能性或经济损害的风险,是商业银行是最为关键和复杂的风险。银行个人信用风险指银行在向个人提供信贷时,可能遭受到的潜在损失的风险,即个人贷款违约的风险。这种风险是由于借款人从银行等金融机构获得信用贷款后,没有按照规定时间还款而导致的 [8] 。
银行个人信用风险会给银行带来损失,因此银行会在发放贷款之前进行信用评估。常用的评估理论是“5C”理论,即针对借款人的品格(Character)、能力(Capacity)、资本(Capital)、担保(Collateral)和条件(Conditions) 5个方面进行信用评估。同时,预期收入理论由H.V. Prochnow在1945年首次提出,该理论认为,借款人的预期收入能够被作为偿还贷款能力的衡量标准。如果预期收入水平高,借款人则会倾向于提前还款以减少利息支出,银行也很乐意向其提供与预期收入相匹配的贷款金额。
本文所用数据来自CCF大数据与计算智能大赛提供的,中原银行实际业务场景下的个人信用贷款违约数据。该数据集包含了1万条脱敏记录,共有38个特征变量和1个标签,包括用户基本属性信息和借贷相关信息。由于数据来自实际场景,数据集保证了样本的真实性和客观性。
根据5C理论和预期收入理论将38个特征变量进行分类,如表1所示。同时,由于本文使用的是非抵押信用贷款数据集,不存在担保(Collateral)这一维度的数据。

Table 1. Feature classification based on 5C and expected income theory
表1. 基于5C和预期收入理论的特征分类
3. 建模过程
本文使用了Python语言作为分析和建模的工具,建模流程如图1所示。
3.1. 数据清洗
数据清洗(Data Cleaning)是指检测和纠正数据中存在的缺失、异常值、重复值等。它的主要目的是提高数据的质量,确保数据准确、完整、一致。只有在充分检查和清理数据后,才能提高数据的质量和可靠性,以便于后续的数据分析和建模。本文的数据清洗主要进行了以下步骤。
3.1.1. 不相关的变量处理、数据类型的转换
本文首先删除了不相关的变量。贷款记录唯一标识loan_id和借款人唯一标识user_id无实际意义。信用额度开立时间earlies_credit_mon仅为额度开立的时间,与是否贷款、何时贷款没有直接关系,且该数据存在一定的年份缺失问题。
然后进行了数据类型的转换,通过构建工作年限work_year、贷款等级class、工作类型employer_type和所在行业industry的字典,结合map函数的使用进行数值化处理。并将贷款发放时间issue_date使用to_datetime函数转换成标准日期格式,然后将其分成年份issue_date_year和月份issue_date_mon;将贷款发放时间issue_data和设定的初始base_time相减,将日期转化数值型数据天数issue_date_diff;在完成上述两步后,删除原始字段issue_date。
在完成上述处理后,共剔除了4个特征,增加了3个特征,得到了37个特征。
3.1.2. 缺失值、异常值值处理
本文数据集中有7列存在缺失值,根据不同特征的特点,我们对工作年限work_year使用众数进行填充,对公开记录中清除数量pub_dero_bankrup和匿名变量f0~f4使用中位数来补齐。由于匿名变量f0~f4的缺失表现出了极强的相关性,说明f0~f4的缺失存在某种关系,具体将在特征工程部分进行分析。
而针对离群值,在信用评估领域中,它们的存在通常具有意义,可能会包含其他有用的信息,比如一些潜在的风险。因此,我们不会轻易对其进行处理。而对于方差明显过小的特征,例如公开可用的策略policy_code、匿名变量f1等,在后续的特征选择中一并进行处理。同时针对不一致的数据,即样本中存在提前还款次数early_return为0,但提前还款金额early_return_amount却不为0的情况。鉴于这些样本中提前还款金额具体可见,我们猜测使该部分提前还款次数填写错误。因此,我们将这部分提前还款次数由0更正为1。
本文缺失值和异常值的处理仅进行了填补和修改,此时仍剩余10000个样本和37个特征。
3.2. 特征组合
有时候将不同的特征组合在一起,可以得到更有信息量和预测能力的特征变量,进而改善模型的性能。结合前文的分析,本文针对该数据集作如下几点特征组合:
① 评分上下限两个特征scoring_low和scoring_high相关性较高,但代表程度却较低。因此我们将评分上下限组合起来,通过加权平均值构造特征平均分scoring_ave。
② 在缺失值处理时,我们看出f0~f4的缺失之间似乎存在某种联系。我们尝试以f0和f1为例构建了特征f_miss。具体规则如下:当取值为0时表示f1和f0均不缺失,当取值为1时表示f1和f0均缺失,而当取值为2时表示f1缺失而f0不缺失。
③ 为了更好地衡量“5C”理论条件(Condition)因素中外部市场环境变化的影响,我们考虑构建特征贷款结束年份end_year,用贷款结束的时间的来表示不同时期的外部市场环境。将贷款发放时间issue_date_year和贷款年限year_of_loan相加来表示,即end_year = issue_date_year + year_of_loan。
④ 通过观察early_return与isDefault的柱状分布图,发现early_return是否大于0对违约的区分作用十分明显。即有提前还款行为的客户违约率远低于没有提前还款行为的客户,因此本文在提前还款次数early_return基础上新增是否提前还款is_early_return这一特征。
经过特征组合,增加了4个特征并删除了2个特征,得到了39个特征。
3.3. 特征选择
在进行数据清洗和特征组合后,此时还剩下39个特征。过多的特征中往往存在与预测无关的特征。根据问题的不同,从原始数据中挑选出最具有判别性、与目标变量相关的特征,同时滤除不相关或者噪声特征,以提高模型的泛化能力和处理效率。具体的特征选择步骤如下。
3.3.1. 方差选择法(Variance-Based Method)
方差选择法根据特征的方差大小排序,选择方差较大的特征。因为方差较小的特征说明其数据集中度较高,缺乏有效信息,而方差较大的特征则可能有更好的区分性。
此处筛选掉了方差小于0.1的特征,包括公开可用的策略policy_code,匿名特征f1和是否个人申请app_type三个特征。其中policy_code具有唯一取值1,因此方差为0,f1的方差为0.001,app_type的方差为0.020。方差太小说明它们过于稳定,对结果的预测不起作用因此删除,此时剩余36个特征。
3.3.2. 假设检验(Hypothesis Testing)
假设检验(Hypothesis Testing)分为t检验、F检验、卡方检验等,将计算得到的统计量与置信区间和显著性水平进行比较,显著性水平是指原假设被拒绝的概率,通常取值为0.05。即当p值低于0.05,拒绝原假设,说明该特征和目标变量显著相关。
本文对数值型变量进行了F检验,从26个数值型特征中删除了所有p值小于0.05的特征,共计9个变量。包括了贷款数额total_loan,分期付款金额monthly_payment,借款人申请时邮政编码post_code,地区编码region,借款人过去18个月逾期30天以上的违约事件数del_in_18month,借款人提供的贷款名称title,匿名特征f2,f4,贷款发放月份issue_date_mon,选择了剩余17个数值型变量。
然后对类别变量使用scipy库中的stats.chi2_contingency函数进行卡方检验,从10个特征删除了所有p值小于0.05的特征,共计5个变量。包括了所在公司类型employer_type,工作领域industry,工作年限work_year,贷款用途类别use,贷款的初始列表状态initial_list_status,选择了剩余5个类别变量。
3.3.3. 特征递归消除
递归特征消除(Recursive Feature Elimination,简称RFE)是一种基于机器学习的特征选择方法。该方法通过不断地训练模型,逐步删除权值较低的特征,得到新的特征子集,直到剩下指定数量或达到指定阈值的特征个数为止。
本文使用sklearn.ensemble库中的RandomForestClassifier函数,以随机森林作为基分类器进行多次训练。每进行一次训练,删除其中最不重要的特征,并利用决策树算法计算准确率。通过准确率的比较,确定了选择18个特征如表2所示,此时准确率Accuracy达到了81.3%。

Table 2. Important factors affecting bank personal credit risk after feature selection
表2. 特征选择后影响银行个人信用风险的重要因素
3.4. 非平衡数据集处理
3.4.1. 数据非平衡性判断
针对本文的标签“是否违约”,在数据集中没有发生违约行为的样本有8317条,发生违约的仅为1683条,样本比例接近5:1,存在一定不平衡问题。在这种情况下,由于多数类样本过多,使得分类器不能很好地学习少数类中重要特征,而更加倾向于将所有样本都分为多数类。这会影响模型的准确率和泛化能力,需要在后续进行非平衡数据处理。
3.4.2. 平衡前后模型结果对比
本文利用了SMOTE 过采样、随机欠采样和SMOTEENN组合采样三种方式来对数据集进行不平衡性的处理。
SMOTE (Synthetic Minority Over-Sampling Technique)是一种过采样技术,它通过少数类样本之间的距离来创建合成样本,来增加其数量,从而使数据更加平衡;随机欠采样技术(Random Under-Sampling)则是通过从多数类中随机选择一个子集来减少多数类样本数的一种方法;组合采样(Combining Sampling)本质上是将欠采样和过采样方法的优势结合起来,通过从多数类别中欠采样,从少数类别中过采样,生成一组新的平衡数据集,SMOTEENN就是一个很好的例子,它结合了过采样(SMOTE)和欠采样(ENN)两种技术,提供了更加平衡的数据集。
将没有平衡处理的样本以及三种采样方法后得到的样本,按照6:4划分为训练集和测试集,把训练集放到随机森林模型中进行拟合,用测试集进行模型评估,表现如表3所示。

Table 3. Performance of different sampling methods on Random Forests
表3. 不同采样方法在随机森林上的表现
表3中数据表明,在随机森林模型上SMOTEENN组合采样后的三个评估指标均达到了0.9以上,效果远好于SMOTE采样和随机欠采样。其中随机欠采样虽在F1-Score和AUC上略有提升,但准确率低于0.8,甚至比不处理更差。可能是由于违约样本的数量比较少,欠采样会使整体数据量减少,因此丢失了许多有价值的样本。所以最终选择了SMOTEENN方法来平衡本文的数据集,
3.5. 分类器对比分析
本节将经过SMOTEENN组合采样得到的样本,放到决策树、随机森林、AdaBoost和LightGBM模型中进行拟合。
分类与回归树算法(Classification and Regression Tree, CART)最早由Breiman等人提出 [9] ,采用基尼指数(Gini Index)来度量信息纯度,其值越小代表纯度越高,CART在每个内部节点上进行二分法划分,直到达到预定条件;随机森林(Random Forest)通过自助采样(Bagging)和随机子空间法(Random Subspace Method)生成多棵决策树,采用投票法集成多个决策树来提高预测准确率和稳定性;AdaBoost (Adaptive Boosting)针对多个分类器训练数据是否正确的不同情况进行加权重处理,通过不断对错误样本提升权重的方式,使得分类器对该错误分类样本的重视程度不断提高,直到达到预定的迭代次数或误差率满足某一阈值;LightGBM (LightGradient Boosting Machine)使用了“leaf-wise”的决策树生长策略,在进行梯度下降的过程中采用了直方图加速的方式。此外,LightGBM还支持类别特征和缺失值的自动处理,同时支持分布式训练,具有效率高、精准度高和可扩展性强的优点。
将四种分类器的预测精确度、F1-Score和AUC值进行汇总比较,结果如表4所示。同时绘制了如图2所示的ROC曲线。
根据表4和图2中的信息,我们可以得出以下结论:
首先,我们可以看到所有模型的准确率Accuracy得分都很高,超过了0.92。其中,LightGBM模型具有最高的准确率得分,为0.961。

Table 4. Performance of different classifiers based on SMOTEENN
表4. 基于SMOTEENN的不同分类器表现

Figure 2. ROC curves for different classifiers based on SMOTEENN
图2. 基于SMOTEENN的不同分类器ROC曲线
其次,各模型在F1-Score上也表现出色,都在0.93以上,说明这些模型较好的平衡了准确率和召回率。具体而言,LightGBM模型在F1-Score上表现最好,达到了0.966。
最后,我们考虑AUC分数。图2中的ROC曲线可以通过可视化的方式,简单的了解各模型间的效果差异,因此可以首先看出决策树模型的效果最差,但由于随机森林、AdaBoost、LightGBM的结果比较相近,因此需要通过表格中具体数值判断。从表格中可以看出,在AUC得分方面,LightGBM模型又一次表现出色,达到了0.959,略高于其他三个模型。
因此综合来看,我们认为在这四个模型当中,LightGBM模型是表现最佳的。它在准确率、F1-Score和AUC得分方面都表现出非常出色的表现,同时拥有最高的得分。在实际应用中,我们可以借鉴LightGBM模型的算法思路和特点,并将该模型应用于银行个人信用风险评估领域中,以提高分类器性能和分类效果。
3.6. 特征重要性排序
经过前两节的对比,我们使用效果好的SMOTEENN组合采样和LightGBM分类器建立模型,使用plot_importance函数得到特征排序如图3所示。
4. 结论
经过以上研究,本文得出以下结论:
1) 针对银行个人信用风险的影响因素,本文通过数据清洗和特征工程,从38个特征里选出了18个特征如表4所示。除了匿名变量f0和f3由于表意不清无法分类外,被选中的18个特征在5C (除担保)和预期收入理论中的类别中均有分布,再次验证了结合5C理论和预期收入理论的科学性。同时根据图3特征重要性排序,我们可以看出排在前五的因素为信贷周转余额合计、贷款发放日期据初始日期天数、借款人贷款评分平均分、当前贷款利率和匿名变量f0,说明在银行个人信用评估中,借款本身的具体条件和借款人的品格是决定是否违约的较重要的因素,应当给予更高的权重。
2) 对于非平衡数据处理,SMOTEENN组合采样在准确率、F1-Score和AUC值上的表现均达到了0.9以上,效果远好于SMOTE采样和随机欠采样,是效果最优的非平衡数据处理方式。模型选择上,LightGBM的效果最佳,准确率达到96%以上,准确性较高;F1-Score为0.966,说明模型对准确率和召回率的平衡比较好;AUC值为0.959,说明对是否违约具有很好的判断识别能力。综上,本文选择了经过SMOTEENN组合采样后的样本构建了LightGBM模型,具有很好的准确性和泛化能力。