贷款违约模型评估策略表和策略曲线
Posted 卖山楂啦prss
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贷款违约模型评估策略表和策略曲线相关的知识,希望对你有一定的参考价值。
对于贷款违约用户识别的二分类模型中,常用查全率、查准率、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()
用这个曲线来判断模型的好坏,也是一个不错的思路
以上是关于贷款违约模型评估策略表和策略曲线的主要内容,如果未能解决你的问题,请参考以下文章
分类模型评估体系:混淆矩阵PR曲线F1Weighted F1Micro F1Macro F1ROC&AUCKS曲线Lift曲线GAIN曲线