机器学习指标解析:AUC与KS值

python 复制代码
import numpy as np
from sklearn.metrics import confusion_matrix

y_pred = [0, 1, 0, 1]  # 模型预测结果
y_true = [0, 1, 1, 0]  # 真实标签
print('混淆矩阵:\n', confusion_matrix(y_true, y_pred))

# 输出:
# [[1 1]
#  [1 1]]

## accuracy
from sklearn.metrics import accuracy_score
y_pred = [0, 1, 0, 1]
y_true = [0, 1, 1, 0]
print('ACC:', accuracy_score(y_true, y_pred))  # 输出 ACC: 0.5

## Precision,Recall,F1-score
from sklearn import metrics
y_pred = [0, 1, 0, 1]
y_true = [0, 1, 1, 0]
print('Precision', metrics.precision_score(y_true, y_pred))
print('Recall', metrics.recall_score(y_true, y_pred))
print('F1-score:', metrics.f1_score(y_true, y_pred))

# 输出:
# Precision 0.5
# Recall 0.5
# F1-score: 0.5

简单案例分析:

  • 真实标签 y_true = [0, 1, 1, 0]:我们把 0 看作 "狗(负类)",1 看作 "猫(正类)",所以真实样本是:[狗, 猫, 猫, 狗]
  • 预测结果 y_pred = [0, 1, 0, 1]:模型的判断是:[狗, 猫, 狗, 猫]

AUC 计算代码:

python 复制代码
import numpy as np
from sklearn.metrics import roc_auc_score

y_true = np.array([0, 0, 1, 1])  # 真实标签
y_scores = np.array([0.1, 0.4, 0.35, 0.8])  # 模型预测的置信度分数
print('AUC socre:', roc_auc_score(y_true, y_scores))
# 输出:AUC socre: 0.75
  • y_true = [0, 0, 1, 1]:真实标签,我们把 0 看作狗(负类) ,1 看作猫(正类)。所以这里有 2 只狗、2 只猫。
  • y_scores = [0.1, 0.4, 0.35, 0.8]:模型给每张图打的 "是猫的置信度",分数越高,模型越认为它是猫。

AUC 的全称是ROC 曲线下的面积,它的本质含义是:

随机抽一只猫和一只狗,模型给猫打的置信度分数,比给狗打的分数高的概率。

用这个例子验证一下:

  • 所有「猫 vs 狗」的组合有 2×2=4 种:
    1. 猫 (0.8) vs 狗 (0.4):猫分数更高 ✅
    2. 猫 (0.8) vs 狗 (0.1):猫分数更高 ✅
    3. 猫 (0.35) vs 狗 (0.4):猫分数更低 ❌
    4. 猫 (0.35) vs 狗 (0.1):猫分数更高 ✅
  • 猫分数更高的情况有 3 种,所以 AUC = 3/4 = 0.75

怎么理解 AUC 数值?

  • AUC 越接近 1,说明模型越能把猫和狗区分开(几乎所有猫的分数都比狗高)。
  • AUC=0.5 时,模型和 "瞎猜" 没区别,猫和狗的分数是随机的。
  • AUC<0.5 时,模型反而把猫和狗搞反了,相当于 "反向预测"

二、第二部分:KS 值 计算代码

python 复制代码
from sklearn.metrics import roc_curve

y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1]
y_true = [0, 1, 1, 0, 1, 0, 1, 1, 1, 1]

# 计算ROC曲线的FPR和TPR
FPR, TPR, thresholds = roc_curve(y_true, y_pred)

# 计算KS值:FPR和TPR之间的最大差值
KS = abs(FPR - TPR).max()
print('KS值: ', KS)
# 输出:KS值: 0.5238095238095237
  • TPR(真正例率):所有猫里,被模型找出来的比例(召回率)
  • FPR(假正例率):所有狗里,被误判成猫的比例

roc_curve 函数会帮我们计算不同阈值下的 FPR 和 TPR,得到一组数据点。

2. KS 值 到底算的是什么?

KS 值的全称是Kolmogorov-Smirnov 值,它的定义是:

在所有可能的阈值下,TPR 和 FPR 之间的最大差值。

  • 我们希望模型找猫的能力(TPR)尽量高,误判狗的概率(FPR)尽量低。
  • 两者的差值 TPR - FPR 越大,说明模型区分猫和狗的能力越强。
  • KS 值就是这个差值的最大值,代表模型区分正负样本的 "最强区分度"。
相关推荐
郝学胜-神的一滴11 分钟前
AI 编程智能体 27:吃透MCP通信机制
人工智能·python·langchain·wpf·numpy·scikit-learn
天天被压力20 分钟前
【A股分钟级高频数据完全手册 #09】A股历史分时交易数据接口:普通分时怎么批量下
java·人工智能·python
天天被压力28 分钟前
【A股分钟级高频数据完全手册 #10】股票实时行情数据接口Python:公开源实时交易取数
java·人工智能·python
apcipot_rain1 小时前
C++转Java日记(05)
java·开发语言·c++
apcipot_rain9 小时前
C++转Java日记(04)
java·开发语言·c++
特立独行的猫A10 小时前
我给女儿写了个打字练习:一边敲键盘,一边把小学英语单词记牢
java·后端·python
cpolar技术支持10 小时前
「我这边连不上你那个服务」—— 用清单驱动的 TCP 连通性只读看板,cpolar 让远端同事自己取证
python·内网穿透·tcp·cpolar·网络诊断
云和数据.ChenGuang11 小时前
LangGraph 异步 Node 的设计与写法实践
开发语言·人工智能·python·机器学习·php
天诰12 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
benchmark_cc13 小时前
用 QuantDash 读取美股行情:AAPL.US 的运行前检查、排错顺序与数据校验清单
python·数据分析·pandas·量化交易·股票数据·quantdash