实战案例|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. 代码和数据集可以加志斌微信领取~

相关文章
|
机器学习/深度学习 数据采集 测试技术
Toad:基于 Python 的标准化评分卡模型(上)
在信贷的风控模型中最常用、最经典的可能要属评分卡了,所谓评分卡就是给信贷客户进行打分,按照不同业务场景可为贷前、贷中、贷后和反欺诈,一般叫做ABCF卡。模型得到分数,通过设置cutoff阈值给出评估结果,结果可直接用于通过或拒绝,或者用于策略应用。
2214 0
Toad:基于 Python 的标准化评分卡模型(上)
|
机器学习/深度学习 存储
卡方分箱、KS分箱、最优IV分箱、树结构分箱、自定义分箱
卡方分箱、KS分箱、最优IV分箱、树结构分箱、自定义分箱
2809 0
卡方分箱、KS分箱、最优IV分箱、树结构分箱、自定义分箱
Py之scorecardpy:scorecardpy的简介、安装、使用方法之详细攻略
Py之scorecardpy:scorecardpy的简介、安装、使用方法之详细攻略
Py之scorecardpy:scorecardpy的简介、安装、使用方法之详细攻略
|
机器学习/深度学习 XML 算法
机器学习模型保存为PMML格式
PMML模型文件可以实现跨平台迁移,python和java都可以生成PMML文件,python和java都可以读取PMML文件
655 0
|
机器学习/深度学习 数据挖掘 Shell
|
人工智能 C++
ML之FE:Vintage曲线/Vintage分析的简介、计算逻辑、案例应用之详细攻略
ML之FE:Vintage曲线/Vintage分析的简介、计算逻辑、案例应用之详细攻略
ML之FE:Vintage曲线/Vintage分析的简介、计算逻辑、案例应用之详细攻略
|
机器学习/深度学习 算法 数据可视化
预测模型构建利器——基于logistic的列线图(R语言)
预测模型构建利器——基于logistic的列线图(R语言)
1596 0
预测模型构建利器——基于logistic的列线图(R语言)
|
Linux 网络安全 Shell
|
9月前
|
人工智能
【AI Make Money】如何用人工智能赚钱
【AI Make Money】如何用人工智能赚钱
1665 0
|
机器学习/深度学习 运维 搜索推荐
机器学习中准确率、精确率、召回率、误报率、漏报率、F1-Score、AP&mAP、AUC、MAE、MAPE、MSE、RMSE、R-Squared等指标的定义和说明
在机器学习和深度学习用于异常检测(Anomaly detection)、电子商务(E-commerce)、信息检索(Information retrieval, IR)等领域任务(Task)中,有很多的指标来判断机器学习和深度学习效果的好坏。这些指标有相互权衡的,有相互背向的,所以往往需要根据实际的任务和场景来选择衡量指标。本篇博文对这些指标进行一个梳理。
机器学习中准确率、精确率、召回率、误报率、漏报率、F1-Score、AP&mAP、AUC、MAE、MAPE、MSE、RMSE、R-Squared等指标的定义和说明

热门文章

最新文章