实战案例|ROC曲线与KS曲线评估模型~

简介: 大家好,我是志斌~我们搭建完机器学习模型后,还需要对模型的好坏进行评估,这里我们以实战案例|金融行业客户流失预警模型~,来给大家分享两种模型评估方法:ROC曲线与KS曲线。

01ROC曲线


ROC曲线是由不同阈值下的模型假警报率(FPR)与命中率(TPR)所组成的,如下图所示,其中FPR是横坐标,TPR是纵坐标。


68.png


命中率(TPR)计算公式为:

TPR=TP/(TP+FN)

假警报率(FPR)计算公式为:

FPR=FP/(FP+TN)

其中:

TP:正确肯定的数量

FN:漏报

FP:误报

TN:正确否定的数量


一个好的模型应该让TPR尽可能的高,而FPR尽可能低。从上图,我们可以看到,FPR与TPR之间是正相关,所以ROC曲线越靠近左上角,越陡峭,则这个模型就更完善。


当然,如果用曲线来进行描述,可能有些抽象,我们可以用AUC来判断模型的好坏。AUC指的是ROC曲线下方的面积,该值取值范围一般为0.5~1,越靠近1,则模型越好。


现实数据中,通常存在许多扰动因子,所以模型的AUC值一般达到0.75就可以接受,如果能达到0.85以上,那这个模型就非常好了。


我们来看看如何用Python绘制ROC曲线,首先查看不同阈值下的假警报率和命中率。


69.png

代码如下:


from sklearn.metrics import roc_curve
fpr,tpr,thres = roc_curve(Y_test,Y_pred_proba[:,1])
data = pd.DataFrame()
data['阈值'] = list(thres)
data['假警报率'] = list(fpr)
data['命中率'] = list(tpr)
data.head(10)


接着就是绘制该模型的ROC曲线了。


70.png


代码如下:


import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.plot(fpr,tpr)
plt.title('ROC曲线')
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.show()


AUC值为0.798,看来这个模型还是不错的,AUC值计算代码如下:


from sklearn.metrics import roc_auc_score
score = roc_auc_score(Y_test,Y_pred_proba[:,1])


02KS曲线


KS曲线本质上与ROC曲线是相同的,它关注的也是假警报率(FPR)与命中率(TPR),但是它的横坐标不再是假警报率(FPR),而是阈值,纵坐标为命中率与假警报率的差值。如下图:

71.png


跟ROC曲线一样,KS曲线也有一个量化指标用来衡量模型的预测结果—KS值,其计算公式为:

KS = max(TPR-FPR)

即KS值就是KS曲线的峰值。当KS值小于0.2时,我们认为模型的区分能力较差;

0.2-0.3之间时,模型具有一定的区分能力;

0.3-0.5之间时,模型具有较强的区分能力;

当然KS值也不是越大越好,当KS值大于0.75时,往往代表模型有问题。


我们来看看如何用Python绘制KS曲线,首先查看不同阈值下的假警报率和命中率。


72.png

代码如下:


from sklearn.metrics import roc_curve
fpr,tpr,thres = roc_curve(Y_test,Y_pred_proba[:,1])
data = pd.DataFrame()
data['阈值'] = list(thres)
data['假警报率'] = list(fpr)
data['命中率'] = list(tpr)
data.head(10)


接着就是绘制该模型的KS曲线了。


73.png


代码如下:


plt.plot(thres[1:],tpr[1:])
plt.plot(thres[1:],fpr[1:])
plt.plot(thres[1:],tpr[1:]-fpr[1:])
plt.title('KS曲线')
plt.xlabel('阈值')
plt.legend(['tpr','fpr','tpr-fpr'])
plt.gca().invert_xaxis()
plt.show()


KS值为0.493,看来这个模型有较强的区分能力,KS值计算代码如下:


max(tpr-fpr)


此时阈值为0.284,代码为:


data['TPR-FPR']=data['命中率'] - data['假警报率']
data[data['TPR-FPR']==max(data['TPR-FPR'])]


03小结


1. 本文详细介绍了ROC曲线和KS曲线的原理和代码实现方法,有兴趣的读者可以自己实现一下。

2. 对搭建好的模型进行评估是十分重要的,没有评估过的模型投入使用是不安全的。

3. 通过对模型的评估可以不断优化模型。

4. 代码和数据集可以加志斌微信领取~

相关文章
|
30天前
|
机器学习/深度学习 数据可视化
混淆矩阵与 ROC 曲线:何时使用哪个进行模型评估
混淆矩阵与 ROC 曲线:何时使用哪个进行模型评估
40 11
|
6月前
【R语言实战】——带有高斯新息的金融时序的GARCH模型拟合预测及VAR/ES风险度量
【R语言实战】——带有高斯新息的金融时序的GARCH模型拟合预测及VAR/ES风险度量
|
6月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
2月前
|
机器学习/深度学习
R语言模型评估:深入理解混淆矩阵与ROC曲线
【9月更文挑战第2天】混淆矩阵和ROC曲线是评估分类模型性能的两种重要工具。混淆矩阵提供了模型在不同类别上的详细表现,而ROC曲线则通过综合考虑真正率和假正率来全面评估模型的分类能力。在R语言中,利用`caret`和`pROC`等包可以方便地实现这两种评估方法,从而帮助我们更好地理解和选择最适合当前任务的模型。
|
6月前
|
机器学习/深度学习 数据可视化 数据挖掘
R语言逻辑回归logistic对ST股票风险建模分类分析混淆矩阵、ROC曲线可视化
R语言逻辑回归logistic对ST股票风险建模分类分析混淆矩阵、ROC曲线可视化
|
6月前
|
机器学习/深度学习 数据可视化 算法
数据分享|R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化
数据分享|R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化
116 10
|
6月前
|
机器学习/深度学习 数据可视化 算法
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为1
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
C++
深度解析roc曲线、AUC与排序损失
深度解析roc曲线、AUC与排序损失
179 0
|
6月前
|
机器学习/深度学习 数据可视化 数据挖掘
R语言用逻辑回归预测BRFSS中风数据、方差分析anova、ROC曲线AUC、可视化探索
R语言用逻辑回归预测BRFSS中风数据、方差分析anova、ROC曲线AUC、可视化探索
|
6月前
|
数据可视化 算法
【视频】分类模型评估:精确率、召回率、ROC曲线、AUC与R语言生存分析时间依赖性ROC实现
【视频】分类模型评估:精确率、召回率、ROC曲线、AUC与R语言生存分析时间依赖性ROC实现