[机器学习]模型评估指标:ROC/AUC,KS,GINI,Lift/Gain, PSI 总结

目录
背景介绍
一混淆矩阵
二 ROC曲线和AUC值
三 KS曲线
四 GINI系数
五 Lift , Gain
六 模型稳定度指标PSI

背景介绍
在模型建立之后,必须对模型的效果进行评估,因为数据挖掘是一个探索的过程,评估-优化是一个永恒的过程。在分类模型评估中,最常用的两种评估标准就是KS值和GINI, AUC值。可能有人会问了,为什么不直接看正确率呢?你可以这么想,如果一批样本中,正样本占到90%,负样本只占10%,那么我即使模型什么也不做,把样本全部判定为正,也能有90%的正确率咯?所以,用AUC值够保证你在样本不均衡的情况下也能准确评估模型的好坏,而KS值不仅能告诉你准确与否,还能告诉你模型对好坏客户是否有足够的区分度。

这里先整体给大家一个直观的介绍。

概括:

Confusion Matrix -> Lift,Gain,ROC。
ROC -> AUC,KS -> GINI。

在介绍之前,我们先重新明确一下这些图表的名称,中文、英文、简称,全部来熟悉一下:
[机器学习]模型评估指标:ROC/AUC,KS,GINI,Lift/Gain, PSI 总结_第1张图片
记住这个之后,我们来理解一下他们之间的关系。

拟人化概括

其实,这些图之间的关系不是很复杂。我尝试着用一个小故事概括一下人物之间的关系。

故事是这样的:

首先,混淆矩阵是个元老,年龄最大也资历最老。创建了两个帮派,一个夫妻帮,一个阶级帮。

之后,夫妻帮里面是夫妻两个,一个Lift曲线,一个Gain曲线,两个人不分高低,共用一个横轴。

再次,阶级帮里面就比较混乱。

  1. 帮主是ROC曲线。

  2. 副帮主是KS曲线,AUC面积

  3. AUC养了一个小弟,叫GINI系数

曲线与指标的综合对比图

下图是曲线与指标的综合对比图
[机器学习]模型评估指标:ROC/AUC,KS,GINI,Lift/Gain, PSI 总结_第2张图片
一 混淆矩阵:所有的基础

混淆矩阵其实就是交叉对比真实值与预测值的结果。很像Excel中的透视表。它的目的是告诉我们模型预测对了几个,错了几个。

下图就是混淆矩阵:
[机器学习]模型评估指标:ROC/AUC,KS,GINI,Lift/Gain, PSI 总结_第3张图片
最基础的混淆矩阵中只包含4个指标,TP,FP,FN,TN。

用这四个指标相互进行运算,得到了Precision,TPR,FPR,Specificity,Accuracy等众多次级指标。

这些指标,就是构成ROC,KS,AUC,Lift,Gain的基础。

真正类(True Positive,TP):真实类别为正类,预测类别为正类。
假正类(False Positive,FP):真实类别为负类,预测类别为正类。
假负类(False Negative,FN):真实类别为正类,预测类别为负类。
真负类(True Negative,TN):真实类别为负类,预测类别为负类。

精确率(Precision) 为TP/(TP+FP),即实际是正类并且被预测为正类的样本占所有预测为正类的比例,精确率更为关注将负样本错分为正样本(FP)的情况。

召回率(Recall) 为TP/(TP+FN),即实际是正类并且被预测为正类的样本占所有实际为正类样本的比例,召回率更为关注将正样本分类为负样本(FN)的情况。召回率(Recall)就是真正类率(TPR)。
在这里插入图片描述
假正类率(FPR),即实际是负类并且被预测为正类的样本占所有实际为负类样本的比例,假正类率更为关注将负样本分类为正样本(FP)的情况。

F1值是精确率和召回率的调和均值,即F1=2PR/(P+R) (P代表精确率,R代表召回率),相当于精确率和召回率的综合评价指标。

ROC曲线把TPR作为纵坐标,把FPR作为横坐标。
KS曲线是把TPR和FPR都作为纵坐标,而样本数占比作为横坐标 。
AUC值:ROC曲线下方与坐标轴围成的面积。
Gini系数:Gini = 2*AUC -1
KS值:KS=max(TPR−FPR)。

二 ROC曲线和AUC值
在逻辑回归、随机森林、GBDT、XGBoost这些模型中,模型训练完成之后,每个样本都会获得对应的两个概率值,一个是样本为正样本的概率,一个是样本为负样本的概率。把每个样本为正样本的概率取出来,进行排序,然后选定一个阈值,将大于这个阈值的样本判定为正样本,小于阈值的样本判定为负样本,然后可以得到两个值,一个是真正率,一个是假正率。

真正率即判定为正样本且实际为正样本的样本数/所有的正样本数,假正率为判定为正样本实际为负样本的样本数/所有的负样本数。每选定一个阈值,就能得到一对真正率和假正率,由于判定为正样本的概率值区间为[0,1],那么阈值必然在这个区间内选择,因此在此区间内不停地选择不同的阈值,重复这个过程,就能得到一系列的真正率和假正率,以这两个序列作为横纵坐标,即可得到ROC曲线了。而ROC曲线下方的面积,即为AUC值,一般模型的AUC在0.5到1之间,AUC越高,模型的区分能力越好。

ROC曲线作图步骤:

  1. 根据学习器的预测结果(注意,是正例的概率值,非0/1变量)对样本进行排序(从大到小)-----这就是截断点依次选取的顺序

  2. 按顺序选取截断点,并计算TPR和FPR—也可以只选取n个截断点,分别在1/n,2/n,3/n…等位置

  3. 连接所有的点(TPR,FPR)即为ROC图

ROC曲线
[机器学习]模型评估指标:ROC/AUC,KS,GINI,Lift/Gain, PSI 总结_第4张图片
(a)理想情况下(分类器预测完全正确),TPR应该接近1,FPR应该接近0。

ROC曲线上的每一个点对应于一个阈值,对于一个分类器,每个阈值下会有一个TPR和FPR。

比如阈值=1时,TP=FP=0,对应于原点;阈值=0时,TN=FN=0,对应于右上角的点(1,1)。

(b)随着阈值增加,TP和FP都减小,TPR和FPR也减小,ROC点向左下移动。

AUC值

  • AUC=1 ,即ROC曲线为左边的轴和上边的轴,表示模型是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
  • 0.5 < AUC < 1,表示模型的预测能力优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
  • AUC=0.5,即ROC曲线与上图中红线重合,表示模型的预测能力跟随机猜测一样,模型没有预测价值。
  • AUC < 0.5,比随机猜测还差,但只要总是反预测而行,就优于随机猜测,因此不存在AUC < 0.5的情况。

三 KS曲线与KS值
KS曲线其实数据来源和本质和ROC曲线是一致的,只是ROC曲线是把真正率和假正率当作横纵轴,而KS曲线是把真正率和假正率都当作是纵轴,横轴则由选定的阈值来充当。

KS值:TPR与FPR差的绝对值的最大值max(|TPR−FPR|)。反应模型的最优分类效果,此时所取的阈值一般作为最优阈值。

KS值:用于评估模型的风险区分能力,指标衡量的是好坏样本累计分布之间的差值(最大值)。好坏样本累计差异越大,KS指标越大,那么模型的风险区分能力越强。

一般KS值要大于0.2才认为模型是一个可用的模型,且KS值越大模型效果越好。

但是,KS值过高,需核验模型是否使用未来变量,要谨慎使用。

具体KS值对应的模型区别能力见下表:
[机器学习]模型评估指标:ROC/AUC,KS,GINI,Lift/Gain, PSI 总结_第5张图片

KS曲线作图步骤:

  1. 根据学习器的预测结果(注意,是正例的概率值,非0/1变量)对样本进行排序(从大到小)-----这就是截断点依次选取的顺序

  2. 按顺序选取截断点,并计算TPR和FPR —也可以只选取n个截断点,分别在1/n,2/n,3/n…等位置

  3. 横轴为样本的占比百分比(最大100%),纵轴分别为TPR和FPR,可以得到KS曲线

  4. TPR和FPR曲线分隔最开的位置就是最好的”截断点“,最大间隔距离就是KS值

KS值的计算步骤如下:

  1. 计算每个评分区间的好坏账户数。
  2. 计算每个评分区间的累计好账户数占总好账户数比率(good%)和累计坏账户数占总坏账户数比率(bad%)。
  3. 计算每个评分区间累计坏账户占比与累计好账户占比差的绝对值(|累计good%-累计bad%|),然后对这些绝对值取最大值即得此评分卡的KS值。

KS曲线
[机器学习]模型评估指标:ROC/AUC,KS,GINI,Lift/Gain, PSI 总结_第6张图片

补充一句,我查看了许多的资料,KS曲线的横轴有资料上写说是阈值,有些资料上写是数据样本的所占百分比。具体是否对其有官方的定义,我确实还没有能够找到。

但是,从样本测评的角度来讲,不管是样本的百分比,还是阈值,其实都能达到同样的效果。

  1. 如果我们的横轴选用阈值,这时我们就能判断在不同阈值的选择下,模型分割样本的优劣。
  2. 如果我们的横轴选用样本百分比,我们能衡量模型能够很好的解释百分之多少的样本。在样本容量是多少的时候,模型的判别最为优秀。

所以,从我个人的理解,横轴选用阈值还是样本百分比,只是模型解释的角度不同。在真实的生活与工作中,这些图都是在为了解释模型、评定模型准确性服务。所以了解如何解释模型,才是最为关键。

KS值与AUC值区别

  • 由于KS值能找出模型中差异最大的一个分段,因此适合用于cut_off,像评分卡这种就很适合用ks值来评估。但是ks值只能反映出哪个分段是区分最大的,而不能总体反映出所有分段的效果,因果AUC值更能胜任。

  • ROC值一般在0.5-1.0之间。值越大表示模型判断准确性越高,即越接近1越好。ROC=0.5表示模型的预测能力与随机结果没有差别。
    KS值表示了模型将+和-区分开来的能力。值越大,模型的预测准确性越好。一般,KS>0.2即可认为模型有比较好的预测准确性。KS值一般是很难达到0.6的,在0.2~0.6之间都不错。
    一般如果是如果负样本对业务影响极大,那么区分度肯定就很重要,此时KS比AUC更合适用作模型评估,如果没什么特别的影响,那么用AUC就很好了。

最后放理解KS的一个小例子
​  
为了便于理解,举一个通俗易懂的小例子(非实际情况)。现假设有两百个样本,其中100个为逾期客户(标记为1),100个为正常客户(标记为0)。计算模型KS值的步骤如下:
​  
step1:用这两百个样本训练一个模型(可以是逻辑回归、GBDT等),得到两百个样本预测为逾期的prob。

step2:把两百个样本根据prob从高到低排序。

step3:把样本均分成10组/20组等(最多每个样本是一组,分成两百组)。

step4:统计每个组别中逾期客户数量/正常客户数量。

step5:统计每个组别中累计逾期客户数量占比/累计正常客户数量占比。

step6:计算每个组别中abs(累计逾期客户数量占比-累计正常客户数量占比)。

step7:找到累计占比差值绝对值最大的数,即为所求的KS值。

表格形式如下:
[机器学习]模型评估指标:ROC/AUC,KS,GINI,Lift/Gain, PSI 总结_第7张图片

上表把200个样本按prob从大到小排序,按数量均分成10组。统计每组中逾期客户数占总逾期客户数的比例,以及每组中正常客户数占总正常客户数的比例。每一组的KSi为逾期客户累计占比和正常客户累计占比差值的绝对值,最大值0.52即为该模型的KS值,在pop=0.4处取得。

从上表可以发现,逾期客户的prob相对较高,正常客户的prob相对低,即好坏样本的累计分布之间存在差异。思考一个极端情况,所有逾期客户的prob都高于正常客户的prob,那意味着模型的KS趋近于1,或者为1(分组够细)。这时,说明模型能完全区分出正常客户和逾期客户。

四 GINI系数

GINI系数:也是用于模型风险区分能力进行评估。Gini系数指ROC曲线与y=x(红线)围成的面积和y=x之上的面积的(0.5)比例。AUC和Gini的换算关系为:
Gini = 2*AUC -1
GINI统计值衡量坏账户数在好账户数上的的累积分布与随机分布曲线之间的面积,好账户与坏账户分布之间的差异越大,GINI指标越高,表明模型的风险区分能力越强。

GINI系数的计算步骤如下:

  1. 计算每个评分区间的好坏账户数。
  2. 计算每个评分区间的累计好账户数占总好账户数比率(累计good%)和累计坏账户数占总坏账户数比率(累计bad%)。
  3. 按照累计好账户占比和累计坏账户占比得出下图所示曲线ADC。
  4. 计算出图中阴影部分面积,阴影面积占直角三角形ABC面积的百分比,即为GINI系数。
    [机器学习]模型评估指标:ROC/AUC,KS,GINI,Lift/Gain, PSI 总结_第8张图片
    GINI系数取值对应模型的解释能力:
    [机器学习]模型评估指标:ROC/AUC,KS,GINI,Lift/Gain, PSI 总结_第9张图片

五 Lift , Gain
前三个指标应用场景更多一些
Lift图衡量的是,与不利用模型相比,模型的预测能力“变好”了多少,lift(提升指数)越大,模型的运行效果越好。
Gain图是描述整体精准度的指标。
计算公式如下:

[机器学习]模型评估指标:ROC/AUC,KS,GINI,Lift/Gain, PSI 总结_第10张图片

作图步骤:

  1. 根据学习器的预测结果(注意,是正例的概率值,非0/1变量)对样本进行排序(从大到小)-----这就是截断点依次选取的顺序
  2. 按顺序选取截断点,并计算Lift和Gain —也可以只选取n个截断点,分别在1/n,2/n,3/n等位置
    例图:
    [机器学习]模型评估指标:ROC/AUC,KS,GINI,Lift/Gain, PSI 总结_第11张图片
    [机器学习]模型评估指标:ROC/AUC,KS,GINI,Lift/Gain, PSI 总结_第12张图片

六 模型稳定度指标PSI
群体稳定性指标PSI(Population Stability Index)是衡量模型的预测值与实际值偏差大小的指标。

PSI = sum((实际占比-预期占比)* ln(实际占比/预期占比))

举例:

比如训练一个logistic回归模型,预测时候会有个概率输出p。
测试集上的输出设定为p1吧,将它从小到大排序后10等分,如0-0.1,0.1-0.2,…。
现在用这个模型去对新的样本进行预测,预测结果叫p2,按p1的区间也划分为10等分。
实际占比就是p2上在各区间的用户占比,预期占比就是p1上各区间的用户占比。
意义就是如果模型跟稳定,那么p1和p2上各区间的用户应该是相近的,占比不会变动很大,也就是预测出来的概率不会差距很大。

一般认为PSI小于0.1时候模型稳定性很高,0.1-0.25一般,大于0.25模型稳定性差,建议重做。

PS:除了按概率值大小等距十等分外,还可以对概率排序后按数量十等分,两种方法计算得到的psi可能有所区别但数值相差不大。

你可能感兴趣的