【贷款违约模型评估】策略表和策略曲线

本文介绍了一种评估信贷风险模型有效性的方法——策略曲线。通过比较不同模型在各种阈值下的bad_rate,帮助理解模型在实际应用中的表现,特别是在接受与拒绝贷款申请方面的决策效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于贷款违约用户识别的二分类模型中,常用查全率、查准率、ROC、AUC等指标来对模型进行评估。

这篇文章:如果模型的预测精度不高怎么办?提到除了这些指标,还可以用策略曲线来评估模型。具体细节不多说了,感兴趣的可以看看

大概意思就是模型建立好后会预测每一个贷款用户的违约概率,一般我们会设定一个阈值,预测概率大于阈值的标记为1,否则为0,标记为0的代表是不拒绝贷款申请的用户,标记为1代表拒绝申请。但是实际中,这部分模型预测的接受用户(标记为0)还是会有拒绝的可能性

在这里插入图片描述

即无论拒绝贷款申请数量多少,接受贷款申请人多少,仍可能会有债务人违约

在这里插入图片描述
所以我们可以用策略曲线,来对模型进行评估

具体思路可以看文章

我看完之后,觉得以后工作说不定会用上,用python来实现一下


假设

模型1,预测集的概率保存为:model1_test_pred_prob
模型2,预测集的概率保存为:model2_test_pred_prob

测试集标签为:y_test


这里首先用预测概率的分位数作为阈值,绘制策略曲线

bad_rate1 = []
cut_off1 = []

bad_rate2 = []
cut_off2 = []
for i in np.arange(0,100,1):
	# 如80%分位数,意思就是接受80%的人,拒绝20%的人
	# 如首先寻找预测概率的80%分位数点,作为阈值
    fws1 = np.percentile(model1_test_pred_prob, i)
    cut_off1.append(fws1)
    # 如果这个分位数点为0或者是最小值,那bad_rate直接就是0
    if fws1==0 or fws1==min(model1_test_pred_prob):
        brate1=0
        bad_rate1.append(brate1)
    else:    
        #print(i)
        # 否则这个分位数点就可以作为阈值,如果大于这个值,就标记为1,否则标记为0。标记为1,则代表拒绝贷款申请。
        y_pred_binary1 = (model1_test_pred_prob >= fws1)*1
        # 取所有模型接受的人在实际的表现
        accepted_zs1 = y_test[y_pred_binary1==0]
        # 模型接受但实际违约/模型接受
        brate1 = sum(accepted_zs1)/len(accepted_zs1)
        bad_rate1.append(brate1)
        
for i in np.arange(0,100,1):
    fws2 = np.percentile(model2_test_pred_prob, i)
    cut_off2.append(fws1)
    if fws2==0 or fws2==min(model2_test_pred_prob):
        brate2=0
        bad_rate2.append(brate2)
    else:    
        #print(i)
        y_pred_binary2 = (model2_test_pred_prob >= fws2)*1
        accepted_zs2 = y_test[y_pred_binary2==0]
        brate2 = sum(accepted_zs2)/len(accepted_zs2)
        bad_rate2.append(brate2)
import matplotlib.pyplot as plt 
plt.plot(np.arange(0,100,1),bad_rate1,color= 'red',label="模型1")
plt.plot(np.arange(0,100,1),bad_rate2,color='blue',label="模型2")
plt.legend()
plt.xlabel("接受分位数(%)", fontsize=14)
plt.ylabel("bad_rate", fontsize=14)
plt.title("策略曲线", fontsize=14)
plt.show()

在这里插入图片描述

dd = {"接受分位数":list(np.arange(0,100,1)),
     "阈值":cut_off1,
     "bad_rate1":bad_rate1}
df = pd.DataFrame(dd)
df

在这里插入图片描述


前面是用预测概率的分位数点来作为阈值,下面直接使用0到1之间的数作为阈值,绘制曲线

bad_rate1 = []
bad_rate2 = []
for i in np.arange(0,1,0.01):
    if i==0:
        brate=0
        bad_rate1.append(brate)
        bad_rate2.append(brate)
    else:    
        #print(i)
        y_pred_binary1 = (model1_test_pred_prob >= i)*1
        y_pred_binary2 = (model2_test_pred_prob >= i)*1
        
        accepted_zs1 = y_test[y_pred_binary1==0]
        accepted_zs2 = y_test[y_pred_binary2==0]
        
        brate1 = sum(accepted_zs1)/len(accepted_zs1)
        brate2 = sum(accepted_zs2)/len(accepted_zs2)
        bad_rate1.append(brate1)
        bad_rate2.append(brate2)
import matplotlib.pyplot as plt 
plt.plot(np.arange(0,100,1),bad_rate1,color= 'red',label="模型1")
plt.plot(np.arange(0,100,1),bad_rate2,color='blue',label="模型2")
plt.legend()
plt.xlabel("阈值", fontsize=14)
plt.ylabel("bad_rate", fontsize=14)
plt.title("策略曲线", fontsize=14)
plt.show()

在这里插入图片描述

用这个曲线来判断模型的好坏,也是一个不错的思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值