栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

贷款逾期预测模型_贷款风险评估模型?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

贷款逾期预测模型_贷款风险评估模型?

对于贷款违约用户识别的二分类模型中,常用查全率、查准率、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()

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/786806.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号