Youden指数与ROC曲线:诊断模型最优截断值选择指南
1. 先把 Youden 指数拉回它最该待的位置做诊断模型、生物标志物筛选、或者任何一门需要划一条线把人群分成两类的活儿早晚会撞上同一个问题这条线到底划在哪里医学统计里管这条线叫截断值cut-off机器学习里管它叫阈值threshold。你可以用逻辑回归、随机森林、XGBoost 把风险分数算得漂漂亮亮但最后交付给使用者的往往不是一串概率而是一个超过多少就算阳性的具体数字。Youden 指数就是解决这个数字最有名的工具之一中文文献里也常写作约登指数在英文资料里它还有两个常见名字Youdens J statistic和Youdens index。我最早接触它是做一个肿瘤标志物的项目手里只有八十多例样本、一个连续指标甲方要求给出推荐参考值。当时我天真地拿准确率最高的那个点交上去结果被临床的老师一句话问住你这个切点把多少本来有病的人漏掉了那一刻我才意识到准确率这个指标在两类样本数量悬殊的时候几乎是个陷阱而 Youden 指数恰好绕开了这个陷阱。这篇文章我打算把 Youden 指数从公式一路讲到代码落地包括它为什么长这样、什么时候不该用它、并列切点怎么处理、置信区间怎么给、实测中踩过哪些坑。不管你是刚接触 ROC 分析的学生还是已经做过几个诊断建模项目的老手应该都能从里面捡到点东西。核心关键词Youden 指数在下面的内容里会反复出现但它每次出现的身份都不太一样有时是公式有时是几何距离有时是一个筛选准则有时是一个需要被质疑的对象。1.1 一张四格表撑起全部逻辑要讲清楚 Youden 指数绕不开那张最朴素的四格表。假设你有一个二分类的金标准有病/没病也有一个待评价的指标连续值你选定了一个切点 c规则是指标值大于等于 c 判为阳性。把所有人按金标准和判读结果交叉一数就得到四类人真阳性TP金标准阳性判读也阳性。抓对了。假阴性FN金标准阳性判读是阴性。漏诊通常代价很大。真阴性TN金标准阴性判读也阴性。正确排除。假阳性FP金标准阴性判读是阳性。误诊会带来不必要的复查和焦虑。有了这四个数字两个基础指标就出来了。**灵敏度Sensitivity**等于 TP 除以 TP 加 FN意思是所有真正有病的人里我抓出来多少也叫真阳性率、召回率。特异度Specificity等于 TN 除以 TN 加 FP意思是所有真正没病的人里我排除掉多少也叫真阴性率。这两个指标有个共同的好性质它们各自只在单一类别内部计算所以不受患病率影响。也就是说你在三甲医院门诊收集的样本和社区筛查收集的样本只要金标准可靠灵敏度特异度理论上是一致的这点比准确率强太多。注意灵敏度用的是列方向的比值按金标准分组不是行方向的比值。行方向算出来的是阳性预测值和阴性预测值那两个量会随患病率剧烈波动。很多新手会把这两组指标混着讲评审时容易被抓。1.2 公式只有三个符号含义值得掰开揉碎Youden 指数的定义简单到一句话灵敏度加特异度再减一。写成公式就是 J Sens Spec − 1。因为灵敏度等于真阳性率TPR1 减特异度等于假阳性率FPR所以它还有一个等价写法J TPR − FPR。这两个写法一个从诊断学的角度出发一个从ROC 空间的角度出发说的是同一件事。取值范围上J 的理论下限是 −1理论上限是 1。什么时候是 1灵敏度和特异度同时为 1也就是那条线完美分开了两类人现实中基本不存在。什么时候是 0灵敏度加特异度等于 1最典型的例子就是抛硬币式的随机判读或者一条完全没有区分能力的对角线。什么时候是负数指标方向和判读方向反了比如你把数值越高越健康当成了数值越高越有病这种时候 J 会掉到 0 以下通常是个信号提示你检查一下方向参数。我特别喜欢用一个类比例子来解释这个公式。把灵敏度理解成保安抓坏人的命中率特异度理解成保安不冤枉好人的准确率。Youden 指数衡量的是这个保安相对于闭着眼随机抓到底强多少。随机抓的期望是命中率加不冤枉率等于 1所以减掉 1 之后的余量就是真正的信息增益。这个类比在给非技术背景的同事讲的时候一次就能说明白比画 ROC 曲线还管用。1.3 它为什么会被反复使用除了公式简单Youden 指数还有几个讨喜的工程性质。第一它是单点指标每个候选切点对应一个数值比较起来直观特别适合写进自动化脚本里做扫描。第二它不依赖患病率因为它只由灵敏度和特异度构成而这两个量都与患病率无关。第三它有几何解释就是 ROC 曲线到对角线的最远垂直距离这让它在一堆阈值选择准则里显得有理论根基不是拍脑袋定的。当然它也不是没毛病。最大的槽点在于那个减 1背后的隐含假设它把漏诊和误诊看得一样重。临床上这个假设经常不成立。肿瘤筛查里漏掉一个早期病例和让一个健康人多做一次复查两者的代价差着数量级。所以真正做项目时Youden 指数更常见的定位是一个不错的起点和一个可以写进论文的规范做法而不是终点。2. 几何视角为什么最大 Youden 指数就是离对角线最远的点如果你只记公式遇到平滑 ROC 曲线后怎么求最优切点这类问题就会卡住。把 Youden 指数放到 ROC 空间里看一切都顺了。这一节我尽量不用数学符号堆砌用坐标和距离讲清楚。2.1 ROC 空间的两个坐标轴ROC 曲线的横轴是假阳性率也就是 1 减特异度范围 0 到 1纵轴是真阳性率也就是灵敏度范围也是 0 到 1。每当切点 c 往上挪一格就会有一个或几个人从判为阳性变成判为阴性相应地 TP 和 FP 可能各减一个于是 (FPR, TPR) 这对坐标就沿着曲线往左下角移动。把切点从最大值一路扫到最小值得到的这一串坐标点连起来软件里通常用梯形规则连线就是 ROC 曲线。曲线的左下角是 (0, 0)对应切点极高、几乎没人被判为阳性灵敏度为零特异度为一。右上角是 (1, 1)对应切点极低、所有人都被判为阳性灵敏度为一特异度为零。这两个极端都没用。中间那条从 (0,0) 到 (1,1) 的对角线代表完全没有区分能力也就是随机判读的期望轨迹。曲线越往左上角凸说明这个指标的区分能力越强。2.2 最大 Youden 指数就是最大垂直距离现在看 J TPR − FPR 这个式子。在 ROC 平面上过某一点 (FPR, TPR) 作一条竖直线它与对角线的交点坐标是 (FPR, FPR)。所以 TPR 减 FPR 正好就是这一点到对角线的垂直距离。于是最大化 Youden 指数这件事几何上等价于在整条 ROC 曲线上找一个离对角线最远的点。这是个非常漂亮的结论也是为什么很多教材直接管它叫最优切点。理解了这个几何含义几个实际问题就迎刃而解了。比如你用的是平滑后的 ROC 曲线双正态模型之类曲线是光滑的你没法靠逐个候选切点试一遍来找最大值但你可以直接求那条曲线上垂距最大的位置再反解出对应的切点值这就是参数化方法的思路。再比如你想做加权 Youden 指数把灵敏度乘上一个权重系数、特异度乘上另一个系数几何上就变成了最大化到一个非对角线方向的投影虽然不再有特别直观的几何对应但计算逻辑还是同一套。2.3 和准确率、F1、Kappa 摆在一起看很多人第一次做诊断模型默认会去最大化准确率。我做过一个不平衡的样本集一千例里只有三十例阳性结果任何全判阴性的模型准确率都能到 97%看着很漂亮实际一点用没有。准确率的分母是总人数它天然受患病率影响不能跨人群比较。F1 是精确率和召回率的调和平均它关心的是阳性这一类预测得准不准完全不管真阴性用在信息检索里很合适用在要同时保证不漏诊和少误诊的诊断场景里就偏了。Kappa 系数考虑了随机一致比准确率稳一些但本质还是被患病率牵着走。把它们摆在一张表里对比会更清楚指标计算依据是否受患病率影响适合回答的问题准确率TPTN 占总人数比例强受影响整体判对的比例是多少F1精确率与召回率的调和平均不受影响但不看 TN判为阳性的人里有多少是对的Kappa扣除随机一致后的符合度受影响判读一致性比偶然好多少Youden 指数灵敏度与特异度之和减一不受影响哪个切点让抓对和不冤枉的总体收益最大提示表格里说 Youden 指数不受患病率影响指的是它在计算时不引入患病率而不是说它选出的切点在所有人群里都最优。换人群后如果指标的分布本身变了比如检测平台不同切点依然需要重新验证。3. 手算一遍才有手感从原始数据到最优切点光看公式容易产生我懂了的错觉。这一节我用一个二十例的小样本把从原始数据到切点扫描的全过程走一遍。数据量小好验证你拿计算器就能对上结果。3.1 构造一份最小的示例数据假设有一个待评价的连续型指标十例确诊阳性十例确诊阴性检出值如下单位随意用来说明方法即可阳性组2.12.83.23.94.45.05.66.37.18.5阴性组1.21.92.42.93.33.63.84.14.66.9判读规则统一为指标值大于等于切点 c 判为阳性。这两组数据有重叠阴性组里有一个 6.9 混得比较深阳性组里也有 2.1 这种低值整体区分能力一般正好适合演示。3.2 逐个切点扫描的计算表切点的候选值不需要是连续的所有实数。对于这种样本把候选切点取在所有观测值上就足够覆盖所有可能出现的最优解因为切点在两个相邻观测值之间移动时TP、TN 都不会变J 也不变。扫描结果如下只列关键的十一行切点 cTPFNTNFP灵敏度特异度Youden 指数2.1100281.000.200.202.4100371.000.300.302.891370.900.300.203.282460.800.400.203.682550.800.500.303.973730.700.700.404.464820.600.800.405.055820.500.800.305.646820.400.800.206.337820.300.800.107.128910.200.900.10拿其中一行验算比如 c 等于 3.9 这一行阳性组里大于等于 3.9 的有 3.9、4.4、5.0、5.6、6.3、7.1、8.5共 7 个所以 TP 是 7FN 是 3灵敏度是 0.70。阴性组里小于 3.9 的有 1.2、1.9、2.4、2.9、3.3、3.6、3.8共 7 个所以 TN 是 7FP 是 3特异度是 0.70。J 等于 0.70 加 0.70 再减 1正好 0.40。手算对上了你心里就有底了后面看软件输出就不会盲信。3.3 结果解读与并列切点怎么处理这张表里有三个地方值得停下来看看。第一最大 Youden 指数是 0.40出现在 c 等于 3.9、4.2 和 4.4 三个位置4.2 没在表里因为它是观测值之间的点扫描时容易被忽略但它的 J 同样是 0.40。这叫并列最优在小样本里几乎必然出现不是软件出错了。第二J 随着切点上移先升后降形状像个山峰峰顶附近很平说明切点的选择对这个数据集其实不太敏感。第三同一批数据算出来的 AUC 大约是 0.70而最大 J 是 0.40两个数的量纲完全不同不要指望它们之间有什么简单的换算关系。并列时怎么办业
上一篇/下一篇内容由系统自动关联
返回资讯列表 →