机器学习算法——评价指标汇总

2024-08-29 10:48

本文主要是介绍机器学习算法——评价指标汇总,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

准确率,精确率,召回率和F1

准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure

ROC-AUC

ROC曲线

需要提前说明的是,我们这里只讨论二值分类器。对于分类器,或者说分类算法,评价指标主要有precision,recall,F-score,以及我们今天要讨论的ROC和AUC。下图是一个ROC曲线的示例。
ROC更好的参考
正如我们在这个ROC曲线的示例图中看到的那样,ROC曲线的横坐标为false positive rate(FPR),纵坐标为true positive rate(TPR)。下图中详细说明了FPR和TPR是如何定义的。(真阳性/假阳性=roc)(acu为roc曲线下的面积0.5到1)

混淆矩阵.png

 

下面考虑ROC曲线图中的虚线y=x上的点。这条对角线上的点其实表示的是一个采用随机猜测策略的分类器的结果,例如(0.5,0.5),表示该分类器随机对于一半的样本猜测其为正样本,另外一半的样本为负样本。

如何画ROC曲线

假如我们已经得到了所有样本的概率输出(属于正样本的概率),现在的问题是如何改变“discrimination threashold”?我们根据每个测试样本属于正样本的概率值从大到小排序。下图是一个示例,图中共有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率[^4]。

样例.png

 

接下来,我们从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于图中的第4个样本,其“Score”值为0.6,那么样本1,2,3,4都被认为是正样本,因为它们的“Score”值都大于等于0.6,而其他样本则都认为是负样本。每次选取一个不同的threshold,我们就可以得到一组FPR和TPR,即ROC曲线上的一点。这样一来,我们一共得到了20组FPR和TPR的值,将它们画在ROC曲线的结果如下图:

为什么使用ROC曲线

既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。下图是ROC曲线和Precision-Recall曲线[^5]的对比:

信用评分的简单小结(ROC,IV,WOE)

常见的用于信用评分的模型就是logistic回归,这是一种处理二分类因变量的广义线性模型。这种模型的理论基础比较扎实,但是对于不同的问题当然也存在一些特殊的处理方式,我最大的困惑就在于建模时对分类自变量的处理方法。
由于制作评分卡的某些需要,通常会在建立评分模型时将自变量做离散化处理(等宽切割,等高切割,或者利用决策树来切割),但是模型本身没办法很好地直接接受分类自变量的输入,因此需要对自变量进行再次的处理。比较常规的做法有两种:做dummy变量,做基于目标的变量编码。

dummy变量是比较顺其自然的操作,例如某个自变量m有3种取值分别为m1,m2,m3,那么可以构造两个dummy变量M1,M2:当m取m1时,M1取1而M2取0;当m取m2时,M1取0而M2取1;当m取m3时,M1取0且M2取0。这样,M1和M2的取值就确定了m的取值。之所以不构造M3变量,是基于信息冗余和多重共线性之类的考虑。但是,构造dummy变量也存在一些缺点,例如无法对自变量的每一个取值计算其信用得分,并且回归模型筛选变量时可能出现某个自变量被部分地舍弃的情况。

另一种处理分类变量的方法是基于目标对其进行编码,在信用评分中比较常见的就是用WOE编码。WOE叫做证据权重(Weight of Evidence),表示的其实是自变量取某个值的时候对违约比例的一种影响。
信用评分的简单小结(ROC,IV,WOE)

直观地可以认为WOE蕴含了自变量取值对目标变量(违约概率)的某种影响,因此可以自然地将自变量重新编码:当自变量取值Ai时,编码为相应的WOEi。

KS

风控分类模型种类(决策、排序)比较与模型评估体系(ROC/gini/KS/lift)
区分度指标(KS)是度量具体模型下正常样本和违约样本分布的最大差距,首先按照样本的信用分数或预测违约率从小到大进行排序,然后计算每一个分数或违约率下好坏样本的累计占比。正常和违约样本的累计占比差值的最大值即为区分度指标(KS)。区分度指标(KS)的示意如图2所示。区分度指标(KS)小于0.2代表模型准确性差,超过0.75则代表模型准确性高。

实际上是就是你建立好模型后,按照评分从大到小排列后:检验你所谓的好客户和坏客户两类客户分布的差异性,即模型区分度。分布根据好坏两个客户评分的累积密度分布曲线,画出来的:比如好坏客户共100个,按照评分排序后前百分之十的客户即10个,其中好的客户有8个,坏的客户有2个(总体样本中好客户80个,坏客户20个),那么前10%的客户的累积密度为:好客户10%,坏客户10%。同理前20%的客户中其中好的客户有15个,坏的客户有5个那么前20%的客户的累积密度为:好客户18.75%,坏客户25%
以此类推可以得出前30%,40%。。。。100%的累积密度。以10%,20%,30%。。。100%为横坐标,以两类客户累积密度为纵坐标,即可画出KS曲线图。

群体稳定指数(PSI)————模型的稳定性

群体稳定性指标(population stability index),
公式: psi = sum((实际占比-预期占比)/ln(实际占比/预期占比))

psi.png

举个例子解释下,比如训练一个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模型稳定性差,建议重做。
模型的稳定性用PSI指标来检验




转自:https://www.jianshu.com/p/f60f7755a847
 

这篇关于机器学习算法——评价指标汇总的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117642

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

防止SpringBoot程序崩溃的几种方式汇总

《防止SpringBoot程序崩溃的几种方式汇总》本文总结了8种防止SpringBoot程序崩溃的方法,包括全局异常处理、try-catch、断路器、资源限制、监控、优雅停机、健康检查和数据库连接池配... 目录1. 全局异常处理2. 使用 try-catch 捕获异常3. 使用断路器4. 设置最大内存和线

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel