Youden指数:从直觉到公式,再到算法

概念解释

1. 面临的真实问题

 你手里有一个模型,给每张图打一个分(0~1)。分越高,越像脓毒症。现在你要划一条线——大于这条线判阳性,小于判阴性。

这条线划在哪? 

天然想要两件事:

查全(高召回):别漏掉真正的病人,宁可多拉几个来做进一步检查。

查准(高精度):别把正常人吓个半死,假阳性越少越好。

问题是这两个东西是矛盾的——你把线划得越低越不遗漏,但假阳性就多了;你把线划得越高越精准,但会漏掉病人。 你需要一个方法来自动找到最佳平衡点。

2. TPR 和 FPR

从混淆矩阵开始。假设你划了一条线,阈值 = T,统计出四个数:

 

  预测阳性 预测阴性
真实阳性 TP(真阳) FN(漏检)
真实阴性 FP(误报) TN(真阴)

从中算出两个比率,它们就是 Youden 指数的两个零件:

TPR(灵敏度/召回)= TP / (TP + FN)   ← 真正的病人里,我抓到了多少
FPR(误报率)= FP / (FP + TN)   ← 没病的人里,我冤枉了多少 

用大白话说:TPR 是你"做了好事"的比例,FPR 是你"犯了错"的比例。 你想让 TPR 尽量大、FPR 尽量小。 

3. Youden 指数

Youden 指数(记作 J)= 你做的好事比例(TPR) 减去 你犯的错比例(FPR)

J = TPR − FPR
取值范围:−1(全错)→ 0(瞎猜)→ +1(完美) 

ROC 曲线就是"把所有阈值下的 (FPR, TPR) 点连起来"。每个点代表一个阈值。 

image

ROC 曲线上,Youden 最优点就是离"随机猜测线"(对角线)垂直距离最大的那个点。 因为对角线上 TPR = FPR,离对角线越远,J = TPR − FPR 越大。 

算法实现

1、把所有样本按分数从高到低排序

2、取相邻分数的中点作为候选阈值,逐个算 J

3、取 J 最大的那个阈值

fpr, tpr, thresholds = sklearn.metrics.roc_curve(y_true, scores)
best = thresholds[np.argmax(tpr - fpr)] 

总结

Youden 指数 = TPR − FPR = 你做的好事比例 − 你犯的错比例

选阈值的算法:
① 把所有样本按分数排序
② 取相邻分数的中点做候选阈值
③ 每个候选阈值算一遍 TPR 和 FPR,算出 J
④ 取 J 最大的那个阈值——这就是 Youden 最优阈值

不靠魔法、不靠经验、不靠拍脑袋。就是把所有可能的分数线都试一遍,挑净收益最大的。 和菜市场挑西瓜一个道理——拍一个听一个,选最甜的那个买。

 

posted @ 2026-07-22 23:23  黄艺龙  阅读(1)  评论(0)    收藏  举报