基于机器学习的公司债券违约风险估计-211博士论文复现
大家好,我是Toby老师,今天复现一篇211硕士毕业论文,《基于机器学习的公司债券违约风险估计》,该论文下载量上千。本文将带你快速梳理该研究的核心方法、主要发现与复现价值。
01
基于机器学习的公司债券违约风险估计

基于机器学习的公司债券违约风险估计
黄颖
西南财经大学
摘要:2007年我国开始发行企业债券,借着经济发展的东风,公司债券的发展十分快速。直到2014年3月,国内公司债券出现了第一例违约事件。可以说这并非偶然,在随后的几年里,债券违约事件越发频繁,尤其是在2018年后,债券违约的数量及规模如“火箭”般直线上升,究其原因,是国内企业制度、市场发展、市场监督、投资者素质等各方面的因素综合起来造成。通过对近些年来我国金融市场的发展进行洞悉发现,诸如信贷违约、信托违约等越来越多的违约事件出现,给市场发展带来了很多不确定性。基于高投资回报的诱惑,人们往往经不住诱惑,在诱惑面前缺失理性,抱有侥幸心理挺而走险,导致各种违规违法事件出现,市场风险加剧。这篇文章通过进一步研究分析这些上市企业的对外财务报表,基于盈利、经营、偿债能力等指标分析公司的财务状况,并深入判断财务风险,从财务风险的角度去分析公司债券可能面临的信用风险等等,进一步帮助企业做出投资决策。即使财务比率、财务报告在很多时候都会被质疑:财务造假、财务被粉饰这些情况出现,考虑到当前市场和学术界的情况,使用财务信息是辨别信贷风险的最简单、最有效的方法。在这篇文章中,我们避免使用由许多条件和模型的实用性所限制的复杂模型。由于通常需要基于财务信息的优点来建立和使用模式,所以其适用性很容易被投资者接受。据专家介绍,考虑到时间、成本和有效性,首先需要选择财务信息。而且,从实际应用效果来看,上市公司发行的债券有可能发挥非常好的风险判断效果。即便在判定风险是无法作出一个比较清晰明了的量化性定义,但通过判断,投资人能够以自身的实际情况来决定自己自己是否需要对该企业做投资。本文中,笔者在机器学习的理论基础和数学原理以及数据挖掘的实际操作方法进行了具体的研究,证明了数据清洗和数据降维在使用机器学习训练算法的过程中的举足轻重的地位,使用了SPSS这一强大的数据处理软件和Python这个新晋的编程界“顶流”软件,通过实证分析验证了模型的可信度。用SPSS进行了数据处理和独立性T检验等工作,利用Python编程软件分别验证了决策树模型和light GBM模型的在评估企业信用风险方面的准确性,并对其评估结果进行对比,总结出一个最好的方式。 还原
关键词:
信用风险;公司债券;财务风险;机器学习;
- 专辑:
经济与管理科学
- 专题:
企业经济;金融;证券;投资
- DOI:
10.27412/d.cnki.gxncu.2021.003081
- 分类号:
F832.51;F275
导师:
刘强
学科专业:
金融
知网收录为博士毕业论文,博士电子期刊出版信息:
万方收录为硕士毕业论文
年期:2022年第11期 网络出版时间:2022-10-16—2022-11-15
文章目录
-
摘要
-
abstract
-
1.绪论
-
1.1 研究背景及意义
-
1.1.1 研究背景
-
1.1.2 研究意义
-
1.2 债券违约风险的研究文献综述
-
1.2.1 信用风险评估指标的选择
-
1.2.2 信用风险预测模型的选择
-
1.2.3 总结
-
1.3 研究方法
-
1.4 论文结构及研究内容
-
2.目前债券市场信用风险的实际应用
-
2.1 我国公司债券的现状
-
2.1.1 在我国公司债券的发行
-
2.1.2 我国公司债劵市场现状
-
2.2 公司债券的信用风险
-
2.2.1 公司债券信用风险的特征
-
2.2.2 信用风险的分解
-
2.3 评估信用风险大小的标准
-
2.4 本章小结
-
3.机器学习的理论基础
-
3.1 机器学习的概念及发展历程
-
3.1.1 机器学习的概念
-
3.1.2 机器学习的发展历程
-
3.2 机器学习的方法介绍
-
3.2.1 机器学习的类型
-
3.2.2 用有监督学习进行分类的模型
-
3.3 机器学习调参方法
-
3.4 机器学习评估指标
-
3.4.1 混淆矩阵与精度
-
3.4.2 召回率、准确率与F值
-
3.4.3 ROC曲线与AUC
-
3.5 本章小结
-
4.信用风险评估指标选择与数据初筛
-
4.1 信用风险识别指标选取原则
-
4.2 信用风险的评估指标
-
4.2.1 指标的选择
-
4.2.2 初选指标的数据挖掘
-
4.2.3 指标的初步筛选
-
4.2.4 使用SPSS进行主成分分析法降维
-
4.3 本章小结
-
5.债券市场信用风险识别实证分析
-
5.1 对数几率回归法建模及结果分析
-
5.1.1 对数几率回归模型的设计流程
-
5.1.2 模型结果分析
-
5.2 决策树算法建模及结果分析
-
5.2.1 决策树模型设计流程
-
5.2.2 决策树模型分析结果
-
5.3 LightGBM算法
-
5.3.1 LightGBM算法的训练过程
-
5.3.2 分析结果
-
5.4 多个模型效果的对比分析
-
5.5 本章小结
-
6.结论与展望
-
6.1 结论
-
6.2 展望
-
参考文献
-
附录
-
致谢
02
信用风险解读
该论文中介绍了信用风险,Toby老师为你们详细介绍信用风险。
信用风险的定义
信用风险指的是借款人因无法偿还贷款或履行合同承诺而出现损失的可能性。传统上,它与贷款人无法归还所欠利息和本金而产生的风险有关,影响现金流量并增加组合成本。准确预测谁将违约是不可思议的。尽管如此,适当的评估和风险管理可以通过降低损失的严格程度来帮助您在很大程度上减轻此类信用风险。

解释
当任何贷方提供抵押贷款、信用卡或其他类似贷款等贷款时,存在借款人可能无法偿还贷款金额的可避免风险。此外,如果公司向客户提供此类信贷,则同样存在客户不还款的风险。它还包含其他相关风险,例如债券发行人可能无法在到期时付款以及因保险公司无力赔偿索赔而产生的风险。有利可图的市场中较高水平的信用风险将与较高的借贷成本相关联。因此,在技术上对其进行评估以将此类风险降低到一定程度。
如何衡量信用风险?
计算信用风险损失的一种适度方法是计算预期损失,它是违约概率 (PD)、违约风险敞口 (EAD) 和违约损失率 (LGD) 减一的乘积。
数学公式如下

信用风险示例
下面给出以下示例:
假设一家名为 XYZ Bank Ltd 的银行向一家房地产公司提供了 250,000 美元的贷款。根据银行信用评估,公司根据所见证的行业周期性被评为“A”级。
让我们根据以下详细信息计算 XYZ Ltd 的预期损失:

解决方案:

信用风险的类型
信用风险是贷款机构在提供信贷之前进行大量信用评估的原因。信用风险可大致分为三类。

-
信用违约风险:信用违约风险包括当借款人无能力全额归还该笔款项或借款人自到期日起超过 90 天但仍未还款时,贷款人遭受的损失。
-
集中风险:集中风险来自对任何个人或团体的大量敞口,因为任何不利事件都可能造成重大损失。它主要与任何个别行业或公司有关。
-
国家风险:国家风险是指主权国家隔夜停止支付外币承诺而导致违约的风险。宏观经济成就主要影响国家风险。它也被称为主权风险。
更多相关知识请参考之前文章
04
有监督机器学习
论文实证分析采用的是有监督机器学习。作为债券违约模型属于商业应用,要求精准,Toby老师和作者一样推荐有监督机器学习。
有监督和无监督机器学习区别
有监督学习和无监督学习的核心区别在于训练数据是否拥有“标签”。有监督学习使用带有已知答案的标签数据(例如,已标记为“猫”或“狗”的图片)进行训练,其目标是学习一个从输入到输出的映射关系,以便对新的未知数据做出预测,核心任务是分类和回归。而无监督学习则使用完全没有标签的原始数据,其目标是探索数据内在的固有结构和模式,比如将相似的数据聚集成群组或简化数据维度,核心任务是聚类和降维。简而言之,有监督学习是为了“预测”,而无监督学习是为了“发现”。
Toby老师罗列常见有监督学习的机器学习模型,并提供基础模型代码具体如下。
逻辑回归
逻辑回归是一种经典的分类算法,尤其用于二元分类问题。它通过线性回归和Sigmoid函数将线性组合的输入特征映射到0到1之间的概率值,从而预测样本属于某一类别的可能性。其核心思想是找到一条决策边界(线性或通过特征变换变为非线性)来区分不同类别。模型训练通过最大似然估计来优化参数,目标是最小化预测概率与实际标签之间的差异。它简单、高效,且模型结果具有较好的可解释性。
from sklearn.linear_model import LogisticRegression# 创建并训练逻辑回归模型lr = LogisticRegression(random_state=42, max_iter=1000)lr.fit(X_train, y_train)# 预测y_pred_lr = lr.predict(X_test)# 评估print("逻辑回归准确率:", accuracy_score(y_test, y_pred_lr))print("系数形状:", lr.coef_.shape)
KNN
K最近邻算法是一种简单直观的惰性学习算法,既可用于分类也可用于回归。其核心思想是“物以类聚”:在预测一个新样本的类别或值时,它会在训练集中查找与之最相似的K个最近邻居,然后通过投票(分类)或取平均值(回归)来决定该样本的输出。KNN无需显式的训练过程,其性能高度依赖于距离度量的选择、K值的大小以及数据的尺度与分布。
from sklearn.neighbors import KNeighborsClassifier# 创建并训练KNN模型knn = KNeighborsClassifier(n_neighbors=5)knn.fit(X_train, y_train)# 预测y_pred_knn = knn.predict(X_test)# 评估print("KNN准确率:", accuracy_score(y_test, y_pred_knn))
随机森林
随机森林是一种强大的集成学习算法,它通过构建多棵决策树并将它们的预测结果进行综合(Bagging)来提高模型的准确性和鲁棒性。在构建每棵树时,它不仅对样本进行随机有放回抽样,还会在节点分裂时随机选择一部分特征进行候选,这种双重随机性有效降低了模型方差,防止过拟合。最终,对于分类任务采用投票法,对于回归任务采用平均法。它通常能产生高精度的模型,并能评估特征的重要性。from sklearn.ensemble import RandomForestClassifier
# 创建并训练随机森林模型rf = RandomForestClassifier(n_estimators=100, random_state=42)rf.fit(X_train, y_train)# 预测y_pred_rf = rf.predict(X_test)# 评估print("随机森林准确率:", accuracy_score(y_test, y_pred_rf))print("特征重要性:", rf.feature_importances_[:5]) # 显示前5个特征的重要性
XGBoost
XGBoost是一种高效的、可扩展的梯度提升集成算法。它通过串行地构建多棵决策树,每一棵新树都致力于纠正前一棵树的残差(错误)。其核心创新在于对目标函数进行了二阶泰勒展开,并加入了正则化项,从而在优化过程中同时考虑了损失函数的一阶梯度(类似传统Gradient Boosting)和二阶梯度(Hessian矩阵),以更精准地确定树的结构和叶节点权重。这使得XGBoost在精度和速度上都有卓越表现,成为许多数据科学竞赛的利器。
from xgboost import XGBClassifier# 创建并训练XGBoost模型xgb = XGBClassifier(n_estimators=100, random_state=42, eval_metric='logloss')xgb.fit(X_train, y_train)# 预测y_pred_xgb = xgb.predict(X_test)# 评估print("XGBoost准确率:", accuracy_score(y_test, y_pred_xgb))
LightGBM
LightGBM是微软开发的一种梯度提升框架,旨在提供更快的训练速度和更低的内存消耗。它主要引入了两种关键技术:基于梯度的单边采样,通过保留梯度大的样本并随机丢弃梯度小的样本来减少数据量;互斥特征捆绑,将稀疏的互斥特征捆绑在一起,以减少特征维度。此外,它采用直方图算法和叶子生长策略,进一步加速了训练过程。它在处理大规模数据时相比XGBoost具有显著的速度优势。
from lightgbm import LGBMClassifier# 创建并训练LightGBM模型lgb = LGBMClassifier(n_estimators=100, random_state=42)lgb.fit(X_train, y_train)# 预测y_pred_lgb = lgb.predict(X_test)# 评估print("LightGBM准确率:", accuracy_score(y_test, y_pred_lgb))
CatBoost
CatBoost是Yandex开发的梯度提升算法,其名称源自“Categorical Boosting”。它最大的特点是能够原生、高效地处理类别型特征,而无需像其他模型那样需要进行大量的预处理(如独热编码)。它使用一种有序编
的策略来有效避免目标泄露问题。同时,它在算法层面改进了梯度偏差的处理,并使用对称树结构,这些设计使得CatBoost在拥有高精度的同时,能够减少过拟合,并且超参数调优相对简单。from catboost import CatBoostClassifier
# 创建并训练CatBoost模型cb = CatBoostClassifier(n_estimators=100, random_state=42, verbose=False)cb.fit(X_train, y_train)# 预测y_pred_cb = cb.predict(X_test)# 评估print("CatBoost准确率:", accuracy_score(y_test, y_pred_cb))
AdaBoost
AdaBoost是早期最成功的自适应提升集成算法之一。它通过串行训练一系列“弱”学习器(如深度很浅的决策树),每一轮训练都会调整样本的权重:增加上一轮被错误分类样本的权重,降低正确分类样本的权重,从而迫使后续的弱学习器更关注那些难以学习的样本。最终,它将所有弱学习器的预测结果进行加权投票,权重取决于该弱学习器的准确率。AdaBoost能显著提升弱分类器的性能。
from sklearn.ensemble import AdaBoostClassifierfrom sklearn.tree import DecisionTreeClassifier# 创建并训练AdaBoost模型ada = AdaBoostClassifier(estimator=DecisionTreeClassifier(max_depth=1),n_estimators=100,random_state=42)ada.fit(X_train, y_train)# 预测y_pred_ada = ada.predict(X_test)# 评估print("AdaBoost准确率:", accuracy_score(y_test, y_pred_ada))
卷积神经网络
卷积神经网络是一种专为处理网格状数据(如图像、音频)而设计的深度学习架构。其核心是通过卷积层自动提取数据的局部空间特征(如图像的边缘、纹理),池化层对特征图进行下采样以增强平移不变性和减少参数,并通过多层堆叠形成从低级特征到高级语义特征的层次化表示。CNN通过端到端的训练,自动学习特征,避免了传统方法中繁琐的手工特征工程,在计算机视觉等领域取得了革命性成功。
优缺点汇总表
| 算法 | 主要优点 | 主要缺点 |
|---|---|---|
| 逻辑回归 | 训练和预测速度快;模型可解释性强,能输出概率;不易过拟合(尤其带L2正则时)。 | 无法自动捕捉复杂非线性关系(需手动特征工程);对多重共线性数据敏感;性能天花板较低。 |
| KNN | 原理简单,易于理解和实现;无需训练模型;对数据分布没有假设。 | 预测阶段计算成本高(需计算与所有样本的距离);对不相关特征和数据尺度敏感;高维数据上性能差。 |
| 随机森林 | 准确率高,抗过拟合能力强;能处理高维特征,且无需特征缩放;可评估特征重要性。 | 模型可解释性差(黑盒模型);训练和预测速度相对较慢;需要更多的内存。 |
| XGBoost | 精度极高,在许多任务中表现SOTA;正则化有助于防止过拟合;训练速度快(并行化)。 | 参数较多,调优复杂;对异常值敏感;模型可解释性依然较差。 |
| LightGBM | 训练速度极快 ,内存消耗低;精度与XGBoost相当甚至更高;支持大规模数据。 | 对过拟合比较敏感(小数据上可能不如XGBoost);对类别特征的处理不如CatBoost原生。 |
| CatBoost | 原生支持类别特征 ,无需预处理;精度高,抗过拟合能力强;默认参数效果就好。 | 训练速度可能不如LightGBM;对大量数值型特征的数据集优势不明显。 |
| AdaBoost | 概念简单,实现方便;能有效提升弱分类器的性能。 | 对噪声数据和异常值非常敏感;弱学习器太弱或太强都会影响效果;训练时间较长。 |
| 卷积神经网络 | 能自动提取特征,无需手工设计;在图像、语音等任务上性能远超传统方法;具有强大的表示学习能力。 | 是计算和数据的“饕餮”,需要大量数据和强大算力;模型是极端的黑盒,可解释性极差;训练和调参过程复杂。 |
更多相关知识请参考之前文章
银行金融风控面试必考题目(一)逻辑回归
银行金融风控面试必考题目(二)逻辑回归
银行金融风控面试必考题目(三)集成树Decision Tree
银行金融风控面试必考题目(四)树模型优劣对比XGBOOST,lightgbm,catboost,adaboost,ngboost
03
模型验证解读
- (Information Value,信息价值)-
该论文中用到了大量模型验证指标介绍,包括AUC,ROC,混淆矩阵,F1,召回率等等,Toby老师为你一一解析。AUC值是金融风控模型最常用指标,用于验证模型区分能力,具体阈值如下:
-
AUC = 0.5:模型没用,和瞎猜一样。
-
0.5 < AUC < 0.7:模型区分能力弱。
-
0.7 ≤ AUC < 0.85:模型区分能力一般。
-
0.85 ≤ AUC < 0.95:模型区分能力较强。
-
AUC ≥ 0.95:模型区分能力很强。
当然这只是一般性参考,不同风控模型阈值不一样,例如银行贷前审批模型AUC值一般较弱常介于0.55-0.75之间。贷后和催收模型AUC较高,Toby老师见过很多AUC0.85-0.9模型。
通俗讲AUC就是ROC曲线下面的面积,用来衡量分类模型的好坏。ROC曲线是用假正率(FPR)当横轴,真正率(TPR)当纵轴画出来的。AUC(area under the curve)是机器学习领域中一种常见且重要的模型评估指标,用于计算二元分类器效率的方法。AUC表示ROC(receiver operator characteristic)曲线下的面积,即AUC = ROC 曲线下面积。
TP(True Positive)=A类产品的数量,属于A类产品。

TP,FP,FN,TN与ROC关系图如下

AUC相关统计学指标如下,专业术语叫混淆矩阵
FN (False Negative) = A 类产品的数量,属于 B 类产品。
TN (True Negative) = B 类产品的数量,属于 B 类产品。
FP(False Positive)= B类产品的数量,属于A类产品。
FP = N-TP;// 其中数字 N 是 A 类产品的数量
FN = M-TN;// 其中 number M 是 B 类产品的数量
为了让大家更好立即,附上英文释义
TP (True Positive) = number of Class A products, which are classified as Class A products.
FN (False Negative) = number of Class A products, which are classified as Class B products.
TN (True Negative) = number of Class B products, which are classified as Class B products.
FP (False Positive) = number of Class B products, which are classified as Class A products.
FP = N-TP; // where number N is the number of class A type products
FN = M-TN; // where number M is the number of class B type products


更多相关知识请参考之前文章
《银行信用评分卡关键指标解读:IV、KS、AUC、GINI》
04
论文复现
我方团队可复现基于机器学习的公司债券违约风险估计论文中数据集,实证分析代码,模型AUC高于0.8,模型性能优越。

ks大于0.4,模型区分好坏客户能力良好。

数据案例可用于建立华丽模型,发布论文专利,政府企业科研立项
数据案例可用于建立华丽模型,发布论文专利。

(模型自动化EDA统计图)

(热力图可视化)

(KS和AUC,模型区分能力指标)

(评分分箱图)


(变量系数稳定性)

(信用额度分箱)

(PSI模型稳定性测评)

(变量重要性可视化)



对各省多头借贷数量可视化统计

更多推荐
所有评论(0)