机器学习分类问题评价指标(一):auc/ks

本文介绍了在二分类问题中,如何利用混淆矩阵评估算法性能,并重点讲解了AUC(曲线下面积)和KS(最大绝对差值)两个关键指标。通过实例展示了随着阈值变化,TPR和FPR的变化过程,以及如何计算和绘制ROC曲线。

前面

分类问题一般围绕错误率展开,即错分样本占据的比例。而分类算法可以给出预测概率,那么通过设置不同的阈值,来获得更好的结果,此时混淆矩阵就是分类问题评价指标的基础。

混淆矩阵

假设二分类问题,P代表正类,N代表负类。

正类 负类
正类 TP(真正类) FP(假正类)
负类 FN(假负类) TN (真负类)

TP:正类被预测为正类的数量
FP:正类被预测为负类的数量
TN:负类被预测为负类的数量
FN:负类被预测为正类的数量
假设判断为正类的概率阈值设置为0,所有的样本划分为正类,如果数据中是正负类极端不平衡的,可能Precision(精确率)可能比较高,但是算法没有什么用。
定义几个值:
查全率/召回率:正类正确分类的概率
TPR=TP/(TP+FN)TPR = TP / (TP + FN)TPR=TP/(TP+FN)
负类分错的概率:
FPR=FP/(FP+TN)FPR = FP / (FP + TN)FPR=FP/(FP+TN)

AUC/KS

- auc
横轴: FPR
纵轴: TPR
画出的曲线叫ROC 曲线,auc=ROC 曲线与横轴之间的面积

- ks
横轴: 评分区间划分段
纵轴: FPR TPR
ks=两条曲线之间的最大差值的绝对值

- 举个梨子
6个样本
真实标签: y_true = (1,1,0,0,1,1)
预测概率:y_predict = (0.4,0.7,0.55,0.3,0.8,0.65)
概率取值范围在[0,1],划分为10个,横轴依次取值
(0.1,0.2,0.3,…,1),也就是判定样本预测是正负类的阈值分别是(0.1,0.2,0.3,…,1)。

  1. thres = 0.1, if y>=thres : y=positive(P) else y=negative(N)
    y_predict = (0.4,0.7,0.55,0.3,0.8,0.65)
    y_pred_label = (1,1,1,1,1,1)
    y_true = (1,1,0,0,1,1)
    TPR=4/4=1TPR = 4/4 = 1TPR=4/4=
<think> 嗯,用户想了解AUCKS、ROC的概念、计算方法和应用场景。从查询看,用户可能有机器学习或风控分析背景,需要这些指标的基础解释和实践指导。 用户提供的引用内容很丰富: [1]提到ROC绘制需要多个阈值计算TPR/FPR,AUC是曲线下面积,KS是最大差值; [2]给出KS的Python计算代码; [3]说明KS曲线的分位点计算方式; [4]关联到洛伦兹曲线。不过用户真正的需聚焦在概念层面。 需要结构化解释三个指标: 先说明ROC是二维曲线,由不同阈值下的TPR(真阳率)和FPR(假阳率)构成。坐标系中左上角是最佳状态,曲线越凸越好。AUC作为量化指标,接近1表示模型优秀,0.5相当于随机猜测。 KS指标重点在风控场景的应用,要强调它反映的是TPR与FPR的最大分离程度,通常要>0.3。计算方法上引用[3]的分位点法和引用[2]的最大差值法都可提及,但需指出实际计算更常用排序差值法。 应用场景需要差异化: - AUC适合模型整体排序能力评估 - KS在风控阈值选择上有优势 - ROC可视化对比很直观 Python实现部分准备引用sklearn的roc_curve/auc函数示例,KS计算则采用排序后累积分布的方式,避免分位点法的信息损失。考虑到用户可能接触过引用[2]的代码,会说明实际计算更推荐scipy.stats的ks_2samp方法。 最后考虑设计相关问题时,重点补充用户可能延伸的疑问:如多分类场景的指标调整,非均衡数据下的适用性,以及风控实践中KS>0.4的合理性判断等。 </think> 以下是关于AUCKS、ROC的核心知识总结,结合概念、计算方法和应用场景: --- ### **、核心概念** 1. **ROC曲线(Receiver Operating Characteristic)** - **定义**:展示二分类模型在不同阈值下**真正例率(TPR)**与**假正例率(FPR)**关系的曲线 - **横轴**:FPR = FP / (FP + TN)(假正例占比) - **纵轴**:TPR = TP / (TP + FN)(真正例占比) - **特点**:曲线越靠近左上角,模型性能越好;对角线(AUC=0.5)表示随机猜测[^1][^3]。 2. **AUC(Area Under Curve)** - **定义**:ROC曲线下的面积,衡量模型**整体排序能力** - **范围**:0.5(无效模型)~ 1(完美模型)。通常AUC>0.8认为模型优秀 - **意义**:随机选取个正样本和负样本,正样本预测概率高于负样本的概率[^1][^4]。 3. **KS值(Kolmogorov-Smirnov)** - **定义**:在不同阈值下,**TPR与FPR的最大差值** - **公式**:KS = max\|TPR - FPR\| - **范围**:0~1,值越大表示模型区分能力越强 - **应用**:风控中KS>0.3认为模型可用,>0.6为优秀[^2][^3]。 --- ### **二、计算方法** #### **1. ROC曲线绘制步骤** ```python from sklearn.metrics import roc_curve, auc # y_true: 真实标签, y_score: 预测概率 fpr, tpr, thresholds = roc_curve(y_true, y_score) roc_auc = auc(fpr, tpr) # 计算AUC值 # 绘图 plt.plot(fpr, tpr, label=f'AUC={roc_auc:.2f}') plt.plot([0,1], [0,1], 'k--') # 随机线 plt.xlabel('FPR'), plt.ylabel('TPR') ``` > 每个阈值对应(FPR, TPR),连接所有点形成ROC曲线[^1][^3]。 #### **2. KS值计算** ```python import numpy as np from scipy.stats import ks_2samp # 方法1:直接计算 ks_value = max(tpr - fpr) # 基于ROC结果 # 方法2:分位点法(风控常用) good = df[df['label']==0]['score'] # 负样本 bad = df[df['label']==1]['score'] # 正样本 ks_stat, _ = ks_2samp(bad, good) # KS统计量 ``` --- ### **三、应用场景** | **指标** | **核心应用场景** | **优势** | |----------|------------------------------------------|-----------------------------------| | **ROC** | 模型选择、阈值调优 | 可视化不同阈值下的性能 | | **AUC** | 评估模型整体排序能力 | 不受阈值影响,适合不平衡数据 | | **KS** | 风控模型评估(如信贷评分卡) | 直接反映正负样本分布的最大分离度 | > **典型案例**: > - 信贷风控中,用KS选择最佳阈值(如KS最大时对应阈值=0.35)[^2][^3] > - 医疗诊断模型用AUC评估疾病预测准确性(AUC=0.92优于0.75) > - 广告点击率模型用ROC对比不同算法的表现 --- ### **四、关键区别** | **指标** | **关注点** | **阈值依赖** | |----------|------------------|--------------| | AUC | 全局排序能力 | 无 | | KS | 局部区分度 | 有(需计算) | | ROC | 阈值动态变化 | 是 | > 📌 **经验法则**: > - AUC用于模型**横向对比**(如选AUC更高的模型) > - KS用于风控**业务决策**(如确定放贷阈值)[^3] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值