市中心要批量引进一款“AI代驾系统”,市交通监管委员会没有直接签字放行,而是组织了一场特殊的“路考”。他们不只看“全体考生的平均通过率”,而是把考生按年龄分成青年组、中年组、老年组,分别统计每组成绩。结果让所有人倒吸一口凉气:整体通过率高达86%,看似优秀;但翻到老年组一栏,通过率只有71%,远低于75%的及格红线。如果只看总体平均分,这个隐患就会被轻描淡写地掩盖过去。 医疗AI器械的监管审评,正是同一套逻辑。一款AI辅助诊断系统,不能只汇报“总体准确率90%”就万事大吉,还必须回答更尖锐的问题:它对老年患者、对女性、对不同种族背景、对不同病情严重程度的患者,性能是否一致?会不会在某一类人身上“掉链子”?这就是亚组性能评估与泛化性验证——如同给AI做一次分科室、分人群的全面体检,确保它不会成为“偏科的优等生”。 这篇文章,我们就跟随这场“分组路考”的完整流程,弄明白四件事:怎么科学地分组、用什么指标衡量公平、发现差异后怎么分析与改进、以及如何把这一切写成过审的监管申报材料。

岗位关联

掌握亚组性能评估与泛化性验证,是医疗AI从业者从“模型能用”走向“产品能过审、能上市”的关键能力,也是与监管机构沟通时最硬核的底牌。

目录
  1. 可视化演示
  2. 亚组定义方法
  3. 公平性评估指标
  4. 性能差异分析
  5. 泛化性验证核心
  6. 偏差溯源与改进
  7. 监管申报实践
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示按年龄性别种族分组的AI器械亚组性能评估、DP/EO/Cal公平性指标体系、偏差检测五步流程及数据增强/重加权/对抗去偏/后处理四种改进策略对比,含六边网格背景。

本节配有交互动效(进入视口后自动加载,约 3KB)。

亚组定义方法

路考的第一件事,是确定“考谁、考什么”。市监管委员会把报名司机按年龄分成青年、中年、老年三组,又在每组内按驾龄和常跑路况做了细分。为什么如此大费周章?因为只考一种人、一种路况,即使成绩再漂亮,也无法证明系统对全城市民都安全。分组方案,就是整场路考公平性的第一块地基。

医疗AI的亚组评估也是如此。亚组(subgroup),就是按某些关键属性把目标人群切成的子集。最常用的切法有三类:人口学特征(年龄、性别、种族),临床特征(疾病严重程度、合并症数量、病灶大小),以及地域与设备环境(不同省份、不同品牌的影像设备)。监管部门最看重第一类,因为它直接关系到算法偏差是否系统性地伤害某类人群;后两类则直接影响产品能否在不同医院顺利落地。

划分不是拍脑袋,要满足两条硬性原则:互斥与穷尽。每个样本只能落在一个亚组里,所有亚组拼起来必须等于完整人群。划分维度需要写进验证方案,作为“事前决策”——依据流行病学证据、临床相关性以及监管指南要求。例如FDA与NMPA的临床评价指南都明确要求按年龄、性别分层报告灵敏度与特异度。

就像路考分组覆盖所有报名司机、一人一档,亚组定义保证了“每个人都参加考试、没有人被重复计算”。这块地基如果打不牢,后面所有的公平性指标、差异分析都成了空中楼阁。

Si={ x∈D∣A(x)=ai },⋃i=1kSi=D,Si∩Sj=∅\displaystyle \mathcal{S}_{i} = \{\, x \in \mathcal{D} \mid A(x) = a_{i} \,\}, \qquad \bigcup_{i=1}^{k} \mathcal{S}_{i} = \mathcal{D}, \qquad \mathcal{S}_{i} \cap \mathcal{S}_{j} = \varnothing
这个公式用“集合语言”宣告了亚组划分的三件事:每个亚组由某个属性值界定、所有亚组拼成完整的患者人群、任意两个亚组绝不重叠。
  1. 亚组集合$\mathcal{S}_{i}$ 表示第 $i$ 个亚组,通过“属性 $A(x)$ 恰好等于 $a_{i}$”这一条件把人群中的样本 $x$ 筛选进来。
    Si={ x∈D∣A(x)=ai }\mathcal{S}_{i} = \{\, x \in \mathcal{D} \mid A(x) = a_{i} \,\}
  2. 穷尽性所有亚组的并集等于完整数据集 $\mathcal{D}$,保证年龄、性别、病情等每个患者都能“参加考试”,没有被漏掉的人。
    ⋃i=1kSi=D\bigcup_{i=1}^{k} \mathcal{S}_{i} = \mathcal{D}
  3. 互斥性任意两个亚组之间没有交集,每个样本只属于一个分组,避免“一个人被统计两次”造成数据注水。
    Si∩Sj=∅\mathcal{S}_{i} \cap \mathcal{S}_{j} = \varnothing

公平性评估指标

路考进入成绩统计环节。委员会看着86%的平均通过率,没有点头,而是追问了一句:“老年组和青年组的及格率,到底差多少?” 这一问,就完成了从“平均思维”到“公平思维”的切换——不看总分,只看差距。

在AI领域,“看差距”的指标就是公平性指标。最常用的有三族。统计均等差异(demographic parity)比较两组预测阳性率是否相同;机会均等(equalized odds)比较两组真阳性率与假阳性率是否接近;校准公平(calibration fairness)则要求每个组的预测概率都忠实对应真实患病率。它们从不同侧面回答同一个问题:模型有没有偷偷“偏心”?

以机会均等为例。它的核心要求是不同亚组对“真病人”的识别能力不能差太多。真阳性率(TPR),就是医生常说的“灵敏度”——100个真病人里能揪出几个。若青年组灵敏度93%、老年组只有71%,即使总体平均高达86%,也会被机会均等指标一眼看穿。需要强调的是,指标不是选得越多越安全,而要结合应用场景和监管要求确定“主指标+辅助指标”,并预先将可接受阈值 $\varepsilon$ 写进分析计划,否则事后选指标难免有“考砸了换考场”之嫌。

机会均等指标就像路考中心那份“分组及格率对比表”——它不看哪组分数高,只看组间差距是否被锁在允许的5个百分点以内。一旦差距越线,监管委员会就有权打出“红牌”。

∣ TPRa−TPRb ∣≤ε\displaystyle |\, \mathrm{TPR}_{a} - \mathrm{TPR}_{b} \,| \leq \varepsilon
这个公式很朴素:两组灵敏度之差的绝对值不超过预先定好的容忍度(比如0.05),就认为这两组被“平等对待”了。
  1. 单组灵敏度$\mathrm{TPR}_{a}$ 是亚组 $a$ 的真阳性率,等于该组真阳性人数除以实际患病总人数,衡量“该组病人被正确识别”的比例。
    TPRa=TPaTPa+FNa\mathrm{TPR}_{a} = \frac{\mathrm{TP}_{a}}{\mathrm{TP}_{a} + \mathrm{FN}_{a}}
  2. 组间差值把亚组 $a$ 与亚组 $b$ 的灵敏度相减并取绝对值,得到两组识别能力的差距。
    ∣ TPRa−TPRb ∣|\, \mathrm{TPR}_{a} - \mathrm{TPR}_{b} \,|
  3. 容忍阈值$\varepsilon$ 是预先定好的可接受上限(如0.05),不超过它则视为“机会均等”达标。
    ∣ TPRa−TPRb ∣≤ε|\, \mathrm{TPR}_{a} - \mathrm{TPR}_{b} \,| \leq \varepsilon

性能差异分析

差距曝光只是开始。老年组通过率71%,委员会派机械工程师进场排查。工程师没有笼统地说“这车不行”,而是先查维修记录——是溜车(对应漏诊)多,还是闯红灯(对应误报)多?再用统计学方法判断:老年组的低分是“真差”还是“这次考试纯属运气差”?

性能差异分析的标准动作是“两板斧”。第一板斧,分层混淆矩阵:把每个亚组的真阳性、假阴性、真阴性、假阳性拆开,看清错误结构——老年组到底是漏诊率飙升,还是误报率失控。第二板斧,显著性检验:判断组间性能差异是否大到排除了抽样误差的干扰。同时可以绘制亚组ROC曲线,直观比较各组在不同阈值下的灵敏度与特异度权衡。样本量充足时常用两比例z检验,小样本则改用bootstrap置信区间或精确检验。

工程师拿着诊断报告说:“是刹车片在低温下打滑。”切换到AI语境,这句话就是“老年组假阴性率显著偏高,并且差异经检验不是偶然”。问题被精确定位到错误类型和组别,下一步的改进方案才能有的放矢。

z=p^1−p^2pˉ(1−pˉ)(1n1+1n2)\displaystyle z = \frac{\hat{p}_{1} - \hat{p}_{2}}{\sqrt{\bar{p}(1 - \bar{p})\left(\dfrac{1}{n_{1}} + \dfrac{1}{n_{2}}\right)}}
这个 z 统计量衡量“两组性能差”相对于“抽样波动”放大了多少倍。比值越大,说明差异越不像偶然,越可能是真问题。
  1. 组间差异$\hat{p}_{1}$ 与 $\hat{p}_{2}$ 分别是亚组1和亚组2的性能点估计(例如灵敏度0.93与0.71),分子是两组之差,代表实际观察到的差距。
    p^1−p^2\hat{p}_{1} - \hat{p}_{2}
  2. 合并比例$\bar{p}$ 是两组的加权平均性能,作为“共同水平”来估计随机波动的大小。
    pˉ=n1p^1+n2p^2n1+n2\bar{p} = \frac{n_{1}\hat{p}_{1} + n_{2}\hat{p}_{2}}{n_{1} + n_{2}}
  3. 标准误分母是组间差的标准误差,样本量 $n_{1}$、$n_{2}$ 越大,波动越小,越容易识别出真实差异。
    pˉ(1−pˉ)(1n1+1n2)\sqrt{\bar{p}(1 - \bar{p})\left(\frac{1}{n_{1}} + \frac{1}{n_{2}}\right)}
  4. 显著性判断当 $|z|$ 超过1.96时,$P<0.05$,拒绝“两组性能相同”的假设,认定差异显著。
    ∣z∣>1.96|z| > 1.96

泛化性验证核心

本地路考全部通过后,委员会没有立刻发证,而是把车拉到隔壁省的山区城市和沿海多雨城市再考一轮。理由是朴素的:真实世界的路况、天气、驾驶员习惯,不可能和考场一模一样。这一关,就是“泛化性”的考验。

医疗AI的泛化性验证,是用独立于开发过程的数据检验模型在新环境中的表现。标准手段包括:外部数据集验证(用其他医院、其他地区的人群数据)、跨中心多机构验证(覆盖不同设备型号、不同操作者水平)、时间稳定性验证(前瞻性收集新病例,模拟“未来数据”)。为什么内部留出验证集不够?因为它和训练集来自同一个“考场”,同分布样本只能证明“重复性”,证明不了“换个环境还行不行”。

泛化失效的常见信号是领域漂移——部署人群的特征分布与训练人群悄悄分道扬镳。量化漂移最常用的工具是群体稳定性指数(PSI)。做法是把模型输出的风险分数分成若干段,比较训练集与部署人群中各段的占比差异。PSI小于0.1表示分布稳定,0.1到0.25之间需要警惕,超过0.25则说明发生了明显漂移,必须重新评估模型。

外部路考总是能暴露“考场经验”之外的脆弱点:山路急弯对应不常见的解剖变异,雨天湿滑对应低质量影像,陌生城市对应不同人群构成。多中心验证和PSI监测,就是提前发现这些“隐性路况变化”的预警雷达。

PSI=∑i(pi−qi)ln⁡piqi\displaystyle \mathrm{PSI} = \sum_{i} (p_{i} - q_{i}) \ln \frac{p_{i}}{q_{i}}
PSI就像路考中心新增的“路况监测仪表盘”:如果训练时的路况构成和实际运营城市的差异太大,仪表盘就会亮黄灯甚至红灯。
  1. 基线占比$p_{i}$ 是训练集(基线人群)中风险分数落在第 $i$ 个分箱的比例,代表模型“熟悉的世界”。
    pi=nitrainNtrainp_{i} = \frac{n_{i}^{\text{train}}}{N^{\text{train}}}
  2. 目标占比$q_{i}$ 是部署人群(目标医院或真实世界)中落在同一分箱的比例,代表模型“将要面对的世界”。
    qi=nitargetNtargetq_{i} = \frac{n_{i}^{\text{target}}}{N^{\text{target}}}
  3. 逐段求和对每个分箱用 $(p_{i} - q_{i})\ln(p_{i}/q_{i})$ 计算贡献并累加,得到整体漂移量。PSI越小,两个世界越相似。
    PSI=∑i(pi−qi)ln⁡piqi\mathrm{PSI} = \sum_{i} (p_{i} - q_{i}) \ln \frac{p_{i}}{q_{i}}

偏差溯源与改进

根因调查有了结论:训练数据里老年驾驶员的样本太少,系统压根没见识过足够的老年操作习惯。怎么办?工程师的方案不是把车扔进熔炉重造,而是三管齐下:补采老年样本、训练时给老年样本加权重、外加给刹车系统装一套“冬季模式”后处理模块。

医疗AI的偏差改进,也是同一套组合拳。数据层面:主动补充弱势亚组的样本,或对少数类做过采样;训练层面:为不同亚组设置不同损失权重,让模型在优化时“多看几眼”弱势群体;输出层面:后处理校正——例如阈值平移、概率重新校准、多模型集成投票。三者成本递增,所以工程上建议“先调阈值,再改训练,最后补数据”。

加权损失函数是训练层面最直接的手段。它不改变模型结构,只是把“每个样本对损失的贡献”按所属亚组重新配比。权重通常取逆频形式:样本量越少的亚组,权重越大。这样模型每更新一次参数,都能从弱势群体那里多学一点。

补数据如同给老年驾驶员“加练”,加权训练如同“调整评分比重”,后处理校准如同“加装冬季模式”。三者组合使用、由浅入深,是偏差缓解最务实的工程路径。

L=1N∑i=1Nwg(i)⋅ℓ(yi,y^i),wg=nmax⁡ng\displaystyle \mathcal{L} = \frac{1}{N}\sum_{i=1}^{N} w_{g(i)} \cdot \ell(y_{i}, \hat{y}_{i}), \qquad w_{g} = \frac{n_{\max}}{n_{g}}
这个公式像是给班级考试成绩重新计分:弱势亚组的每一分都乘以一个较大的系数,让它们的错误在总评分中“被听见”。
  1. 加权求和$w_{g(i)}$ 是样本 $i$ 所属亚组的权重,先乘在该样本的损失 $\ell(y_i, \hat{y}_i)$ 上,再对所有样本求和取平均。
    1N∑i=1Nwg(i)⋅ℓ(yi,y^i)\frac{1}{N}\sum_{i=1}^{N} w_{g(i)} \cdot \ell(y_{i}, \hat{y}_{i})
  2. 逆频权重$n_{g}$ 是亚组 $g$ 的样本量,$n_{\max}$ 是最大亚组的样本量,样本越少权重越高。
    wg=nmax⁡ngw_{g} = \frac{n_{\max}}{n_{g}}
  3. 损失主体$\ell(y_{i}, \hat{y}_{i})$ 是逐个样本的损失函数(如交叉熵),$y_i$ 是真实标签,$\hat{y}_i$ 是模型预测。
    ℓ(yi,y^i)\ell(y_{i}, \hat{y}_{i})

监管申报实践

最终,委员会要求车企提交一份“验收全景图”:哪天考的谁、考场怎么布置、每组多少人、及格线为何定在75%、组间差异如何解释、明年如何复测。这份文件的意义不在于“证明现在没问题”,而在于让监管方将来任何时候都能追溯当年每组考生的成绩。

医疗AI申报材料里的对应物,是统计分析计划书(SAP)和临床评价报告。SAP必须在验证启动前锁定全部关键决策:亚组定义、主要与次要评价指标、统计方法、显著性水平、缺失数据处理方式。审评机构最忌讳“先看结果、后补计划”——那就相当于考试结束后再修改及格线,结论自然不可信。分层结果报告也不能只报一个点估计数字,必须给出置信区间,让审评员看到性能的“稳定范围”。同时提交风险缓释方案:针对识别出的弱势亚组,说明将采取哪些上市后监测与补救措施。

一份“事前定计划、事中留痕迹、事后可复盘”的申报文件,让审评员能够对AI产品做全生命周期的公平性监督。将来产品上市后哪怕出现新的亚组风险,监管方也能依据当年的基线数据快速定位变化,企业则有预案可按、有对策可用。

p^±z1−α/2p^(1−p^)n\displaystyle \hat{p} \pm z_{1-\alpha/2}\sqrt{\frac{\hat{p}(1 - \hat{p})}{n}}
这是亚组性能报告的通用格式:点估计旁边永远带着一个“不确定度尾巴”,样本量越小尾巴越长,提醒大家不要轻信小数人群的漂亮数字。
  1. 点估计$\hat{p}$ 是某个亚组的性能估计值(比如灵敏度0.71),它是整个置信区间的中心锚点。
    p^\hat{p}
  2. 临界值$z_{1-\alpha/2}$ 是标准正态分布的分位数,95%置信区间取1.96;$\alpha=0.05$ 表示允许5%的出错风险。
    z1−α/2=1.96(α=0.05)z_{1-\alpha/2} = 1.96 \quad (\alpha = 0.05)
  3. 标准误与区间根号内是比例估计的标准误,样本量 $n$ 越大区间越窄;"±"给出区间的下限与上限。
    p^(1−p^)n\sqrt{\frac{\hat{p}(1 - \hat{p})}{n}}

AI 应用场景

医疗影像AI的注册申报

阶段:模型验证与监管申报阶段

解决的问题:传统做法只汇报总体AUC,审评机构不认可——他们追问:“这个AI对不同年龄、性别的患者性能是否一致?” 亚组性能评估提供了标准答案。

具体案例:一家做肺结节CT检测的初创公司,在NMPA申报前整理了12家医院的影像数据,按年龄(<40岁、40–60岁、>60岁)、性别分层计算灵敏度。结果发现60岁以上组的灵敏度从0.92掉到0.83,接近红线。团队随即补充了老年胸部CT样本并调整决策阈值,最终在申报材料中提交了完整的分层报告和置信区间,顺利通过发补。

慢病筛查AI的跨地域部署验证

阶段:产品上市前的外部验证阶段

解决的问题:单中心训练的数据高度同质,移植到人群构成、设备型号、疾病流行率均不同的新地域时,性能可能大幅缩水。

具体案例:一款糖尿病视网膜病变筛查AI在广东训练完成,计划部署到西部省份。团队在目标省份的5家医院前瞻性收集了8000例眼底照片做外部验证,并用PSI对比训练集与当地人群的病变严重度分布,发现PSI高达0.31(远超0.25警戒线)。进一步按地区分层报告显示,轻度病变组的灵敏度偏低。团队补充了当地轻症样本微调模型,PSI回落到0.12,多中心评分最终达标。

上市后亚组性能持续监测

阶段:产品上市后的真实世界监测阶段

解决的问题:真实使用人群与临床试验人群永远存在差异,且会随时间漂移;必须建立持续的亚组性能监测机制,才能第一时间发现“某一类人开始掉队”。

具体案例:某心电AI辅助诊断产品上市6个月后,监测系统发现年龄≥80岁组的假阳性率由4.1%升至9.7%。分析定位到原因:新签约的养老机构使用的智能手环信号质量较差。团队在数据管道中增加信号质量筛选环节,并为高龄组引入校准偏置修正,两周内将假阳性率拉回6%以内,随后向监管机构提交了风险缓释报告与更新的分层性能数据。

Python 演示

python38 行
import numpy as np def subgroup_metrics(y_true, y_pred, groups, metric="sensitivity"):    """按亚组计算性能指标: sensitivity=灵敏度, specificity=特异度"""    results = {}    for g in np.unique(groups):        mask = groups == g        tp = int(np.sum((y_true[mask] == 1) & (y_pred[mask] == 1)))        fn = int(np.sum((y_true[mask] == 1) & (y_pred[mask] == 0)))        tn = int(np.sum((y_true[mask] == 0) & (y_pred[mask] == 0)))        fp = int(np.sum((y_true[mask] == 0) & (y_pred[mask] == 1)))        if metric == "sensitivity":            value = tp / (tp + fn) if tp + fn > 0 else 0.0        else:            value = tn / (tn + fp) if tn + fp > 0 else 0.0        results[g] = {"value": round(value, 3), "n": int(mask.sum())}    return results def flag_low_groups(metrics, threshold=0.75):    """标记性能低于阈值的亚组"""    return [g for g, m in metrics.items() if m["value"] < threshold] if __name__ == "__main__":    rng = np.random.default_rng(42)    n = 600    groups = rng.choice(["青年", "中年", "老年"], size=n, p=[0.45, 0.4, 0.15])    y_true = rng.binomial(1, 0.4, size=n)    p_detect = np.where(groups == "老年", 0.70, 0.88)    y_pred = np.where(y_true == 1, rng.binomial(1, p_detect, size=n),                      rng.binomial(1, 0.05, size=n))    results = subgroup_metrics(y_true, y_pred, groups, metric="sensitivity")    flagged = flag_low_groups(results, threshold=0.75)    print("亚组性能评估结果:")    for g in ["青年", "中年", "老年"]:        m = results[g]        mark = "  <- 低于阈值!" if g in flagged else ""        print("  {}: 灵敏度={:.3f}, 样本数={}{}".format(g, m["value"], m["n"], mark))    print("需关注的亚组:", flagged)
目的:模拟一个医疗AI在“青年、中年、老年”三个亚组上的预测结果,自动计算各亚组灵敏度并用75%阈值标记“掉队”的组别——复现路考中发现老年组71%低于红线的全过程。
  1. groups = rng.choice(["青年", "中年", "老年"], size=n, p=[0.45, 0.4, 0.15])生成600例模拟患者的亚组标签,老年组仅占15%,制造“少数群体”场景
  2. p_detect = np.where(groups == "老年", 0.70, 0.88)设定真实世界中老年组灵敏度为0.70、其余组为0.88,埋入算法偏差
  3. y_pred = np.where(y_true == 1, rng.binomial(1, p_detect, size=n), rng.binomial(1, 0.05, size=n))按每组灵敏度模拟预测结果,健康人被误报的概率统一设为5%
  4. value = tp / (tp + fn) if tp + fn > 0 else 0.0灵敏度 = 真阳性 ÷ 该组实际患病总人数,分母为0时返回0避免除零崩溃
  5. return [g for g, m in metrics.items() if m["value"] < threshold]用列表推导式一次性找出所有低于75%红线的亚组

常见误区

误区我们的AI总体准确率90%,远高于监管要求的80%,肯定能过审吧?细分到每个亚组太麻烦,没必要。

正解监管关注的不仅是总体性能,更是性能的一致性。就像路考不能只看平均分——老年组71%的通过率一经曝光,86%的均值反倒成了“掩盖问题”的证据。国内外的审评指南都要求分层报告,总体指标只能说明“平均而言不错”,完全无法保证“对每个人都可用”。

为何常见:传统软件评测习惯只报总体指标,而且总体指标天然有“平滑作用”,很容易把小样本亚组的失效抹平。

误区我把人群按年龄×性别×地域切成20个亚组,每一组都报告,这样总该算严谨了吧?

正解亚组越多,每个亚组的样本量越小,置信区间越宽,统计功效越低。老年女性×山区组可能只有几十个样本,算出的灵敏度毫无说服力。合理的做法是依据监管要求、临床相关性和样本量预算,预设少量关键亚组(如3–6个),必要时对次要维度只做描述性分析。

为何常见:人们容易把“细致”误解为“严谨”,忽略了统计学里样本量与功效的基本权衡。

误区老年组灵敏度只有0.71,低于阈值,看来只能把模型推倒重来,或者干脆砍掉这个产品线。

正解差异分析要先溯源:如果根因是数据分布偏差,补数据或加权训练即可;如果是决策阈值太激进导致的漏诊,后处理校准往往成本最低、见效最快。重新训练是最后手段,且必须保留旧模型做回归对比,防止“按下葫芦浮起瓢”。

为何常见:“重新训练”是最直观最暴力的方案,但它的周期长、成本高,而且不一定能解决真正的根因。

误区我们按8:2切分了同一家医院的数据,验证集表现稳定,应该足够支撑申报了吧?

正解内部留出集与训练集来自同一个分布,只能证明“重复性”,不能证明“泛化性”。真正的泛化验证需要用独立于开发过程的外部数据——其他医院、其他设备、其他时间阶段——并用PSI等指标监控分布漂移。否则就像只在本地考场考了两次就宣称“这车全国都能开”。

为何常见:混淆了“验证集”与“外部验证”两个概念,以为随机切分就能模拟外推场景。

误区我们报告了机会均等指标,差值0.04远小于0.05,公平性肯定没问题了。

正解单一公平性指标无法全面刻画公平。统计均等、机会均等、校准公平刻画的是公平的不同侧面,且某些情境下彼此冲突。审评机构常要求同时报告多个指标并结合临床意义解释;指标的选择本身也要写进分析计划,不能事后挑一个“好看”的交差。

为何常见:把“量化公平”误解为“定义公平”,忽略了公平的多维性以及指标之间的张力。

面试题

Q1. 亚组性能评估的核心目的是什么?

单选题 · easy

  • A.提高模型的总体准确率
  • B.发现并消除群体间性能差异← 正确答案
  • C.减少训练数据的采集数量
  • D.加快模型推理的速度指标

答案:B。亚组评估不是为了刷总体指标,而是聚焦“哪些人群可能被亏待”。A是总体性能优化,C和D与公平验证无关。就像路考不是为了提升全员平均分,而是揪出老年组71%的短板。

Q2. 机会均等(Equalized Odds)指标要求什么?

单选题 · mid

  • A.两组预测正例比例完全相同
  • B.两组真阳性率与假阳性率相近← 正确答案
  • C.两组样本数量必须完全相等
  • D.两组模型参数量需要一致

答案:B。机会均等要求两组的真阳性率(灵敏度)和假阳性率都接近。A描述的是统计均等,C是采样设计,D与公平无关。就像路考中青年组和老年组不仅要“及格率接近”,“误判率”也要接近。

Q3. 外部数据集验证的主要价值是什么?

单选题 · easy

  • A.检验模型对新环境的泛化能力← 正确答案
  • B.提升模型在训练集上的精度
  • C.缩短模型的开发周期时长
  • D.降低数据标注的人力成本

答案:A。外部数据集来自独立中心、不同设备或不同人群,能检验“换个环境还行不行”。B是内部优化,C和D是效率问题,都与泛化无关。如同路考不能只在本地考场拿高分就去全国发证。

Q4. 以下哪些做法有助于缓解亚组性能偏差?

多选题 · mid

  • A.补充弱势亚组的训练数据← 正确答案
  • B.对弱势亚组样本加权训练← 正确答案
  • C.删除弱势亚组的异常样本
  • D.汇总报告总体性能指标值

答案:AB。补数据和样本加权分别对应数据层面和训练层面的偏差缓解。删除样本会进一步减少弱势组数据,汇总指标则掩盖差异。就像给老年组加练(补数据)和调整评分权重(加权训练),而不是删掉老年考生。

Q5. 校准公平性要求模型输出的概率满足什么条件?

单选题 · hard

  • A.各组预测阳性率完全一致
  • B.各组校准曲线接近于一致← 正确答案
  • C.各组误诊率必须低于百分之一
  • D.各组灵敏度与特异度乘积最大

答案:B。校准公平关注“预测概率是否等于真实概率”,要求各亚组的校准曲线重合。A是统计均等,C是绝对性能门槛,D是另一个优化目标。好比路考评分必须用同一把“尺子”,不能对某组放松标准。

Q6. 以下哪些属于亚组定义的常用依据?

多选题 · easy

  • A.患者年龄段划分← 正确答案
  • B.患者性别类别← 正确答案
  • C.患者的种族背景← 正确答案
  • D.服务器内存大小

答案:ABC。年龄、性别、种族是监管指南最常要求的分层维度;服务器内存是部署环境参数,与患者亚组无关。亚组要选择“影响疾病与诊断”的临床相关属性,就像路考按驾驶者特征分组而非按轮胎品牌分组。

Q7. 比较两个亚组灵敏度差异是否显著,常用的方法是?

单选题 · mid

  • A.两比例z检验← 正确答案
  • B.配对均值t检验
  • C.方差齐性F检验
  • D.皮尔逊相关分析

答案:A。两个亚组的性能是独立比例,用两比例z检验判断差异是否超过抽样波动。t检验用于均值比较,F检验用于方差比较,相关分析看关联方向。如同工程师用统计工具判断老年组低分是“真问题”还是“样本巧合”。

Q8. 监管申报中的统计分析计划书(SAP)应在何时确定?

单选题 · mid

  • A.模型开发完成之后
  • B.临床试验开始之前← 正确答案
  • C.产品上市销售之后
  • D.数据收集完成之时

答案:B。SAP必须在验证启动前锁定亚组定义、指标、统计方法和显著性水平,避免“先看结果再画靶子”。A、C、D都太晚。就像路考规则必须先公布再考试,不能等考完再改及格线。

Q9. 后处理校正亚组偏差的常见方法有哪些?

多选题 · hard

  • A.阈值平移调整← 正确答案
  • B.概率重新校准← 正确答案
  • C.加权多数投票← 正确答案
  • D.删除全部训练数据

答案:ABC。阈值平移、概率校准、集成投票都属于后处理,不改模型结构就能调整输出。删数据是最坏做法,会严重损害整体性能。好比给刹车加装“冬季模式”(后装校准),而不是把车拆了重造。

Q10. 当小样本亚组出现明显的性能差异时,正确的解读方式是?

单选题 · extreme

  • A.差异显著即存在算法偏见
  • B.需结合置信区间与效应量判断← 正确答案
  • C.小样本亚组性能必然可靠
  • D.只要P值显著就必须重新训练

答案:B。小样本下的差异可能源于抽样波动,要结合置信区间宽度、效应量和临床意义综合判断。A过度解读,C自相矛盾,D把统计显著性等同于行动指令。就像不能因为老年考生人数少,就断定他们的低分必然是“真差”而非“偶然而已”。