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) 点连起来"。每个点代表一个阈值。

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

浙公网安备 33010602011771号