小林是某家互联网公司的算法工程师,他负责的信贷审批推荐模型上线才两周,社区就炸了锅——有人发帖说:“这模型对女性用户明显更苛刻!”小林第一反应是委屈:“我代码里根本没写性别,模型怎么会歧视?”可产品总监转发帖子时只问了一句话:“你说没歧视,能拿出数字吗?” 这句话把小林问住了。“不公平”是一种感觉,但在 AI 伦理审查的场景里,感觉没法写进报告,更没法说服监管。这就好比你去看病,跟医生说“我浑身不舒服”医生能开药,但真正让诊断可信的,是血压计的读数、化验单上的箭头、心电图里的曲线。模型也需要这样一份“公平体检报告”——把“公不公平”这个模糊的主观感受,翻译成一组具体的、可计算的、可审计的指标。 这篇文章就用“体检”作比喻,带你认识机器学习的三大公平性评估指标:人口统计学均等、机会均等、预测校准。学完之后,你也能像小林一样,拿出体检报告,底气十足地说:“我们的模型这周三项体检过了两项,第三项正在整改。”

岗位关联

对 AI 从业者来说,掌握公平性评估指标,意味着你能把“我觉得不公平”升级成“指标显示差距 18 个百分点”——这是模型过审、应对监管、赢得用户信任的硬通货。

目录
  1. 可视化演示
  2. 量化公平必要
  3. 人口统计学均等
  4. 机会均等
  5. 预测校准
  6. 权衡与局限
  7. 流程落地
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示人口统计学均等(DPD/DI)、机会均等与预测校准指标、以及公平性与准确率的Pareto权衡关系,帮助理解如何用量化指标衡量模型公平性。

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

'+captions.parity+'

量化公平必要

体检科的王医生总爱讲一个段子:老患者进了诊室就喊“大夫我肯定血压高了,头晕!”王医生不接话,撸起袖子量血压,一量 120/80,患者自己愣住了。这就是“感觉”和“测量”的区别。小林最初以为模型公平不公平是个态度问题,但总监要的是一份“化验单”——你得告诉我,哪个群体、什么指标、差了多少。

在机器学习里,公平性评估指标干的就是这活儿。模型是个黑箱,但它输出的行为可以统计:给 A 群体批了多少贷款,给 B 群体批了多少贷款。把这些行为归纳成数字,公平与否就从一个哲学问题变成了一个算术问题。而且算术的好处是:可以复核。你说“跌倒了”,我没法考证;你说“差了 18 个百分点”,我可以重新跑一遍数据验证。

所以,量化公平的第一性原理是:把不可审的主观判断,变成可复算的统计量。一个最简单的“差距度量”长这样:

小林听完王医生的话明白了:先不管模型冤不冤,把数据拉出来,跑一遍差值,比什么都强。第一项体检,就从最直观的“录取率差异”开始。

Δ=∣p0−p1∣\Delta = |p_{0} - p_{1}|
这个公式是在说:两组人群的某个比率(比如批贷率)各算出一个数,然后取绝对差。差越大,说明两组待遇差别越大。
  1. 定义 p₀$p_{0}$ 表示受保护属性取值为 0 的那一组(比如男性组)的关键比率,例如批贷率。先分别统计各组的正例比例,这是指标计算的基础。
    p0=P(y^=1∣A=0)p_{0} = P(\hat{y}=1 \mid A=0)
  2. 定义 p₁$p_{1}$ 是另一组(比如女性组)的同类比率。两组各自独立计算,互不干扰。
    p1=P(y^=1∣A=1)p_{1} = P(\hat{y}=1 \mid A=1)
  3. 取绝对差$\Delta = |p_{0} - p_{1}|$ 把两组比率相减取绝对值,得到一个非负数。这样无论哪组更高,差异大小都能被统一度量,方便设定阈值(比如规定 Δ 不得超过 0.05)。

人口统计学均等

体检科的墙上挂着一把身高尺,谁来了都得站上去量。身高尺不会因为你是运动员就放宽标准,也不会因为你是小孩就照顾几分。人口统计学均等(Demographic Parity,简称 DP)就是这样一把铁面无私的尺子:它要求不同受保护群体获得“正面结果”的比例完全相同。放在贷款场景里,就是男女两组用户的批贷率必须相等。

这个指标的逻辑直白得像量身高:不看你是不是真有能力还款(那是个人状态),只看模型是不是“一碗水端平”地发结果。它的数学定义是:

DP 的好处是简单、直观、好审计,但它有一个著名的毛病:它不在乎两组的“底子”是否不同。如果 A 组里有资格还款的人本来就比 B 组多(基率差异),强行让两组批贷率一样,反而可能给不该贷的人放贷。这就像身高尺不管你是跳高运动员还是举重运动员,统一量身高定胜负,肯定有人不服。

王医生看着小林说:只量身高不管体质,会漏掉真问题。别急,还有第二项体检——它专门看“真有能力的人”有没有被误伤。

DP:P(y^=1∣A=0)=P(y^=1∣A=1)\text{DP}:\quad P(\hat{y}=1 \mid A=0) = P(\hat{y}=1 \mid A=1)
等式左边是 A 组被批准的概率,右边是 B 组被批准的概率。人口统计学均等要求这两个概率严格相等——也就是说,模型给出的正面结果(批贷、录取、通过)在群体层面没有差异。
  1. 认识预测符号$\hat{y}=1$ 表示模型给出的正面预测结果,比如“批准贷款”。这里的 $\hat{y}$ 是模型的预测值,区别于真实标签 $y$。
    y^=1表示模型预测为正类\hat{y}=1 \quad \text{表示模型预测为正类}
  2. 条件概率解读$P(\hat{y}=1 \mid A=0)$ 是在“用户属于 A 组”这个条件下,模型给出正面预测的概率。条件概率把人群先按受保护属性分开,再单独看每组的结果分布。
    P(y^=1∣A=0)≠P(y^=1∣A=1)⇒存在差距P(\hat{y}=1 \mid A=0) \neq P(\hat{y}=1 \mid A=1) \Rightarrow \text{存在差距}
  3. 等式即公平要求理想状态下两个条件概率相等。实际操作中我们算差 $\Delta$,并设容忍线(如 0.05),差距越小代表这个维度的公平度越高。

机会均等

第二项体检叫“运动平板测试”:不是所有人上跑步机,而是让心脏有隐患重点怀疑对象跑一跑,看谁能坚持下来。机会均等(Equal Opportunity,简称 EO)的思路正是如此——不比较所有申请人的整体批贷率,只比较“真实合格者”中,两组各有百分之多少被批准了。

换句话说,它问的问题是:真正有还款能力的人里,A 组有多少被批了,B 组有多少被批了?如果两个比例接近,说明模型没有误伤任何一组的“合格选手”;如果差距大,说明某组有大量合格者被拒之门外。

回到体检的比喻:DP 是“每个人都量身高”,EO 是“重点筛查高危人群”——它更精准,因为只关注真正需要被“救回来”的合格者。但 EO 也有限制:它只关心正类,不关心负类(那些不合格的人是否被过度放贷)。于是就有了第三项体检,检查模型“说话算不算数”。

EO:P(y^=1∣Y=1,A=0)=P(y^=1∣Y=1,A=1)\text{EO}:\quad P(\hat{y}=1 \mid Y=1, A=0) = P(\hat{y}=1 \mid Y=1, A=1)
这里的 $Y=1$ 表示真实标签为正(这个人实际有还款能力)。机会均等要求:在真实正类的人群里,各组的真阳性率(TPR)一致。它关心的是“够格的人有没有被公平对待”。
  1. 真实标签登场$Y=1$ 代表客观事实——这个人真的具备还款能力。它不来自模型,而来自历史数据、人工复核或业务记录。
    Y=1表示真实为正类Y=1 \quad \text{表示真实为正类}
  2. 双重条件约束$P(\hat{y}=1 \mid Y=1, A=0)$ 的含义是:在“真实合格”和“属于 A 组”这两个条件下,被模型批准的概率。先筛出合格者,再按组统计,这是 EO 与 DP 的本质区别。
    P(y^=1∣Y=1,A=0)=P(y^=1,Y=1,A=0)P(Y=1,A=0)P(\hat{y}=1 \mid Y=1, A=0) = \frac{P(\hat{y}=1, Y=1, A=0)}{P(Y=1, A=0)}
  3. 两组真阳性率对齐等式要求两组合格者的被批准率相等。若 A 组合格者 90% 被批、B 组合格者只有 60% 被批,则 EO 不通过,说明 B 组大量合格者被误拒。

预测校准

王医生办公室里贴着一张天气预报截图,上面写着“明日降雨概率 70%”。他问实习生:如果一年里所有“70% 概率降雨”的预报,最终真的下雨的只有一半,这预报靠谱吗?这就是预测校准(Calibration)关心的问题——模型打出的分数,是否真的对应真实的概率。模型说你有 90% 的概率违约,那么在所有得 90 分的用户里,就应该真的有大约 90% 的人违约。

这个指标最适合那些“分数会被直接使用”的场景,比如风控评分、医疗分诊。如果模型对 A 组经常“虚高”(说 90 分实际只有 70% 概率),对 B 组经常“保守”(说 50 分实际有 80% 概率),那即使两组批贷率相同、合格者都通过,这个分数体系依然是失真的。量化的方式是“概率分桶”:

ECE 就像给天气预报员做绩效考核:说 70% 就 70%,不吹不黑。不过王医生提醒小林:指标不是越多越好,因为有的指标天生互相打架——这就引出了公平性评估里最扎心的一课。

ECE=∑m=1M∣Bm∣n∣acc(Bm)−conf(Bm)∣\text{ECE} = \sum_{m=1}^{M} \frac{|B_m|}{n} \left| \text{acc}(B_m) - \text{conf}(B_m) \right|
ECE(期望校准误差)把所有人的预测分数分成 M 个桶,检查每个桶里“实际正类比例”与“平均预测分数”是否吻合,再按桶的大小加权求和。误差越小,说明模型越诚实。
  1. 分桶操作$\{B_m\}_{m=1}^{M}$ 是把预测分数切成 M 个区间,比如 0–0.1、0.1–0.2……每个样本按分数落入对应桶。分桶是为了把连续的分数离散化,让概率比较有统计基础。
    Bm={x∣模型打分落入第 m 个区间}B_m = \{x \mid \text{模型打分落入第 } m \text{ 个区间}\}
  2. 桶内加权$\frac{|B_m|}{n}$ 是第 m 个桶的样本数占总样本数 n 的比例。大桶的误差对整体影响更大,所以用桶大小作为权重。
    wm=∣Bm∣n,∑m=1Mwm=1w_m = \frac{|B_m|}{n}, \qquad \sum_{m=1}^{M} w_m = 1
  3. 误差绝对值$\left| \text{acc}(B_m) - \text{conf}(B_m) \right|$ 表示桶内实际正类比例与平均预测分数之差的绝对值。若两者接近,说明模型在这个分数段“说到做到”。

权衡与局限

体检科走廊里贴着一张“体检套餐性价比对比图”,单查一项便宜,全套做下来又贵又费时间。王医生说:从来没有一项检查能包治百病,公平指标也一样——它们之间可能互相矛盾。最经典的冲突是 DP 与 EO 不可兼得:当两组人群的真实合格率(基率)本身就不同时,你不可能同时做到“两组批贷率一样”且“各组合格者通过率一样”。

举个例子:A 组真实合格率是 80%,B 组只有 50%。要满足 DP,两组都得批 65%,那 A 组就有 15% 的合格者被误拒;要满足 EO,两组合格者都得批 90%,则整体批贷率必然不同。数学上可以严格证明:

除了指标互斥,还有两座大山:小样本噪声——B 组样本太少,算出来的比率波动极大,今天 60% 明天 80%,没法稳定评估;选择性标签——历史数据本身就是有偏的(过去就没给 B 组放贷,自然没有还款记录可学),模型只是忠实地复刻了历史的不公。这些局限意味着:公平体检报告上每一个“通过”,都要问一句“数据本身干净吗?”

DP∧EO  ⟹  P(Y=1∣A=0)=P(Y=1∣A=1)\text{DP} \land \text{EO} \implies P(Y=1 \mid A=0) = P(Y=1 \mid A=1)
这个式子是在说:如果有一个模型同时满足人口统计学均等和机会均等,那么必然能推出两组的真实合格率相等。反过来讲,只要两组基率不同,DP 和 EO 就注定只能二选一。
  1. 逻辑蕴含$\text{DP} \land \text{EO}$ 表示“DP 成立且 EO 成立”同时为真。我们假设存在这样的模型,看它必然推出什么。
    DP∧EO⇒两组条件概率同时相等\text{DP} \land \text{EO} \quad \Rightarrow \quad \text{两组条件概率同时相等}
  2. 概率推演当两组被批准的概率相等、且合格者中被批准的比例也相等时,联立两个等式可以反推出合格者在总体中的占比也必须相等。这个推导只用到条件概率的基本性质,不需要额外假设。
    P(Y=1∣A=0)=P(Y=1∣A=1)P(Y=1 \mid A=0) = P(Y=1 \mid A=1)
  3. 结论即悖论现实中两组基率往往不同(比如历史机会不均导致合格率不同),所以同时满足两个指标在数学上几乎不可能。这提醒我们:选择指标不是越多越好,而是要按场景取舍。

流程落地

体检的意义不在体检本身,而在把健康管理排进日程。小林最终把公平性检查写进了模型开发流程,一共四道关卡。第一关是数据审查:打开数据先看各群体样本量、标签分布,排查有没有选择性标签。第二关是训练约束:在损失函数里加公平正则项,或者对样本做重加权,把模型的“不公平倾向”按在摇篮里。第三关是评估报告:训练完成后自动跑一遍 DP、EO、ECE 三维度体检,输出合规报告。第四关是持续监控:上线后数据分布会漂移,每隔一段时间要重新复查。

重加权是实操中最常用的手段,思路也很朴素:把少数群体中原本被低估的样本“抬秤”,多给一些权重。

三个月后,小林带着新一版模型的体检报告去给总监汇报:DP 差距从 18 个百分点降到 4.8,EO 稳定在 3 个百分点以内,ECE 从 0.12 降到 0.08。总监点点头说:“这份报告才是你该给我的东西。”小林心里默默感谢王医生——原来把“公平”这件事当成体检来做,一切就都变得清晰了。

wa=Ptarget(A=a)Pobserved(A=a)w_a = \frac{\mathbb{P}_{\text{target}}(A=a)}{\mathbb{P}_{\text{observed}}(A=a)}
公式的意思是:观测数据中 A 组占比 30%,我们希望它在训练里占 50%,那就给 A 组每个样本乘以 50%/30% ≈ 1.67 的权重。这样模型在更新参数时,“看到”的 A 组样本变多了,学出来的决策自然更均衡。
  1. 观测分布$\mathbb{P}_{\text{observed}}(A=a)$ 是从原始数据里统计的 A 组占比。比如数据里女性申请人只占 30%,这就是观测分布。
    Pobserved(A=1)=0.3\mathbb{P}_{\text{observed}}(A=1) = 0.3
  2. 目标分布$\mathbb{P}_{\text{target}}(A=a)$ 是你希望训练分布呈现的占比,通常设为 50/50 或其他业务上认为“公平”的比例。目标分布代表你的价值取向,而观测分布代表历史和现状。
    Ptarget(A=1)=0.5\mathbb{P}_{\text{target}}(A=1) = 0.5
  3. 权重计算$w_a$ 是两者的比值。比值大于 1 说明该组样本被“放大”了,小于 1 说明被“缩小”了。把这些权重塞进损失函数(比如加权交叉熵),训练时就相当于构造了一个更平衡的数据集。
    wa=0.50.3≈1.67w_a = \frac{0.5}{0.3} \approx 1.67

AI 应用场景

消费信贷审批合规审计

阶段:模型评估与上线审核

解决的问题:监管机构要求贷款模型不得歧视受保护群体,传统做法靠人工抽检和主观判断,效率低且难以举证。用公平性指标对全量申请人群自动计算 DP 差距、EO 差距和 ECE,形成标准化的体检报告,任何超限值自动触发整改流程。

具体案例:某消费金融公司在放贷模型上线前跑了一遍公平体检,发现女性组批贷率比男性组低 18 个百分点,DP 不达标。进一步检查发现,历史数据中女性申请人被收集的收入特征缺失率高,导致模型对她们整体保守。团队用重加权补齐权重后,差距降到 4 个百分点以内,顺利通过合规评审。

招聘简历初筛的公平性监督

阶段:数据偏见诊断与训练调优

解决的问题:招聘场景最怕“合格者被误筛”。仅看整体简历通过率(DP)可能掩盖真实问题,机会均等(EO)指标能专门监控“实际胜任者”中各组通过率是否对齐,防止某群体的优秀候选人被系统性漏掉。

具体案例:某科技公司的简历初筛模型被发现对女性候选人通过率偏低。用 EO 指标对比“试用期表现合格”的候选人,发现女性合格者的初筛通过率仅为男性的 82%,说明模型存在误伤。团队在训练中加入 EO 正则化约束,并将性别特征从特征集中移除,修复后合格者通过率差异降到 3% 以内。

医疗分诊资源精准投放

阶段:模型上线监控与更新迭代

解决的问题:分诊模型输出的“风险分数”直接决定急诊资源的分配,如果分数失真(校准不良),会造成真正高风险的患者被低估。预测校准指标用来确保模型对不同人群都说实话,让分诊决策可靠。

具体案例:某医院 AI 辅助分诊系统上线后发现,模型对老年患者给出的高风险预测平均虚高 0.15(说 80% 风险实际只有 65%),导致老年病床过度拥挤。监测 ECE 发现校准误差超限后,团队按年龄分组做温度缩放(temperature scaling),使各风险等级的预测概率与真实发病率对齐,分诊准确率提升了约 20%。

Python 演示

python63 行
"""Fairness metrics quick report."""import pandas as pd  def load_data():    """Simulate loan approval data with two protected groups."""    return pd.DataFrame({        "group": [0, 1, 0, 1, 0, 1, 0, 1, 0, 1] * 50,        "approved": [1, 0, 1, 1, 0, 0, 1, 1, 0, 1] * 50,        "qualified": [1, 0, 1, 1, 0, 0, 1, 1, 0, 1] * 50,        "score": [0.8, 0.4, 0.7, 0.6, 0.3, 0.2, 0.9, 0.8, 0.2, 0.7] * 50    })  def demographic_parity_gap(df, pred_col="approved", group_col="group"):    """Absolute difference of positive prediction rates."""    rates = []    for g in sorted(df[group_col].unique()):        sub = df[df[group_col] == g]        rates.append(sub[pred_col].mean())    return abs(rates[0] - rates[1])  def equal_opportunity_gap(df, pred_col="approved", label_col="qualified",                          group_col="group"):    """Absolute difference of TPR between groups."""    rates = []    for g in sorted(df[group_col].unique()):        sub = df[(df[group_col] == g) & (df[label_col] == 1)]        rates.append(sub[pred_col].mean())    return abs(rates[0] - rates[1])  def calibration_error(df, score_col="score", label_col="qualified",                      n_bins=5):    """Expected calibration error via equal-width bins."""    tmp = df.copy()    tmp["bin"] = pd.cut(tmp[score_col], bins=n_bins, labels=False)    err = 0.0    total = len(tmp)    for b in range(n_bins):        part = tmp[tmp["bin"] == b]        if len(part) == 0:            continue        acc = part[label_col].mean()        conf = part[score_col].mean()        err += (len(part) / total) * abs(acc - conf)    return err  def main():    data = load_data()    dp = demographic_parity_gap(data)    eo = equal_opportunity_gap(data)    ece = calibration_error(data)    print("=== Fairness Report ===")    print("DP gap: {:.3f}  {:>4}".format(dp, "PASS" if dp < 0.05 else "FAIL"))    print("EO gap: {:.3f}  {:>4}".format(eo, "PASS" if eo < 0.05 else "FAIL"))    print("ECE:    {:.3f}  {:>4}".format(ece, "PASS" if ece < 0.10 else "FAIL"))  if __name__ == "__main__":    main()
目的:读取一份包含“受保护属性、模型预测、真实标签、预测分数”的模拟数据,自动计算人口统计学均等差距、机会均等差距和期望校准误差,并判定每项体检是否通过。
  1. rates.append(sub[pred_col].mean())对每个受保护群体分别计算批贷率(预测正类占比),这是 DP 指标的基础。
  2. abs(rates[0] - rates[1])取两组比率的绝对差,得到“体检读数”,差距越小越公平。
  3. df[(df[group_col] == g) & (df[label_col] == 1)]用双重条件过滤:先限定群体,再只保留真实合格者,这是机会均等的核心逻辑。
  4. pd.cut(tmp[score_col], bins=n_bins, labels=False)把预测分数切成 5 个桶,为计算校准误差做准备。
  5. err += (len(part) / total) * abs(acc - conf)按桶大小加权累加“实际正类比例与平均预测分数”的偏差,最终得到 ECE。
  6. print("DP gap: {:.3f} ...")用格式化输出保证报告清晰可读,方便你换成真实数据直接跑。

常见误区

误区“我把 DP 差距调到了 0,模型肯定公平了,可以放心上线上。”

正解DP 差距为 0 只说明“各组批贷率相同”,但它根本不看预测分数是否可信、不看合格者是否被误伤。一个模型完全可以做到两组批贷率都是 60%,但 A 组是“合格者全放、不合格者全拒”的精准模型,B 组是“闭眼随机抽 60%”的糊涂模型。这就像体检只查了血压,却告诉你“血压正常所以没病”——单项指标永远无法覆盖健康的全部维度。多指标联合使用,才能交叉验证。

为何常见:DP 是最早被提出的指标、计算最简单,初学者容易把它当成公平性的“标准答案”,忽略了公平性本身是多维度的。

误区“我同时把 DP、EO、ECE 都拉到最优,这样最安全。”

正解这些指标之间存在数学上的互斥关系,尤其在两组真实合格率(基率)不同的场景下,DP 和 EO 往往不可能同时满足。硬要同时优化,只会让模型变成在多个相互拉扯的目标中找平衡点,最后每个指标都“半吊子”。正确做法是:根据业务场景选择“主指标”。招聘要防误伤合格者,优先看 EO;贷款要防群体间整体歧视,优先看 DP;医疗分诊要分数可信,优先看 ECE。其余指标作为参考。

为何常见:人们习惯性地认为“多做检查总没坏处”,但公平指标不是体检项目,而是互相牵制的要求——这是指标互斥这一属性天然带来的。

误区“加了公平约束,模型准头肯定要大跳水,这是没办法的事。”

正解公平约束对准确率的影响没有想象中那么大,取决于数据集本身的偏差程度。有时加约束反而能提升鲁棒性——因为公平正则项相当于给模型加了“不该依赖敏感属性的先验”,逼它学习更本质的特征。在可视化的动画里,重加权后 DP 差距收窄到 5% 以内,而整体批贷率几乎没动。真正的准确率损失往往来自“基率差异极大且标签噪声高”的极端数据集,此时任何约束都会让模型难以拟合,但这恰恰说明数据本身有问题,而不是公平约束的错。

为何常见:人们把公平约束想象成“额外的紧箍咒”,但实际上它更像“限速标志”——大多数路段根本不超速,只有本来就开飞车的路段才需要急刹车。

误区“DP 差距一超标,模型就有性别/种族歧视,必须立刻下架!”

正解统计差异 ≠ 歧视。两组的批贷率不同,可能源于真实的基率差异——比如在历史机会不均的条件下,两组申请人的平均收入水平本就不同,模型只是忠实地还原了这个现实。公平性指标的功能是“报警”,而不是“定罪”。收到报警后,要往下拆:是模型用敏感属性做了不当推断?还是历史数据里选择性标签导致偏差?还是业务规则本身就不公平?只有找到根因,才能决定是修数据、调模型还是改业务。小林刚被投诉时差点直接下架模型,后来分析发现是数据缺口造成的,重加权就解决了。

为何常见:人的直觉是“差异 = 不公”,但统计学上差异可能是真实的群体分布差异的表现,相关性不等于因果性——这个区分是数据素养的核心。

面试题

Q1. 人口统计学均等(DP)的核心要求是什么?

单选题 · easy

  • A.不同群体正类预测率完全相等← 正确答案
  • B.不同群体真实标签率完全相等
  • C.模型在每类样本上误差为零
  • D.所有样本的预测分数都相同

答案:A。DP 要求各组被预测为正类的比例相等,即 $P(\hat{y}=1 \mid A=0) = P(\hat{y}=1 \mid A=1)$。选项 B 说的是真实基率相等,不是模型指标;C 把公平等价于零误差,明显错误;D 更不现实。DP 管的是“模型输出结果”的群体分布,不管真实标签。

Q2. 机会均等(EO)指标聚焦的人群是?

单选题 · easy

  • A.所有申请贷款的用户
  • B.真实标签为正类的用户← 正确答案
  • C.被模型拒绝的用户
  • D.被模型批准的用户

答案:B。EO 只关心 $Y=1$(真实合格)的用户,比较各组“合格者中被批准”的比例(真阳性率 TPR)。它不像 DP 那样看全量人群,而是先筛出合格者再按组对比,目的是检测“合格者是否被误伤”。C、D 关注的是结果侧而非真实标签,A 是全量人群,均不对。

Q3. 预测校准(Calibration)最关心的核心问题是?

单选题 · easy

  • A.模型输出的分数是否真的等于概率← 正确答案
  • B.模型输出的分数是否总是最高
  • C.模型预测的类别是否完全正确
  • D.模型训练的速度是否足够快

答案:A。校准关注“说 90 分就应有约 90% 的真实正类比例”,即 $\text{acc}(B_m) \approx \text{conf}(B_m)$。B 是排序问题,C 是准确率问题,D 是工程问题。校准的本质是检查概率预测的诚实性。

Q4. 当两组真实合格率(基率)不同时,DP 与 EO 的关系是?

单选题 · mid

  • A.一定可以同时满足
  • B.数学上通常互斥只能二选一← 正确答案
  • C.两者没有任何关系
  • D.只要模型足够复杂就能兼顾

答案:B。由 $\text{DP} \land \text{EO} \Rightarrow P(Y=1 \mid A=0) = H(Y=1 \mid A=1)$ 可知,同时满足会推出基率相等。现实中基率往往不同,所以 DP 与 EO 是此消彼长的关系。盲目追求两者都达标,只会让模型陷入互相拉扯的优化困境。

Q5. ECE(期望校准误差)的计算过程中,哪一步是必需的?

单选题 · mid

  • A.把预测分数切分成多个概率桶← 正确答案
  • B.对模型做交叉验证重训练
  • C.按受保护属性拆分训练集
  • D.对超参数做网格搜索调优

答案:A。ECE 的完整步骤是:分桶 → 算桶内真实正类比例与平均预测分数 → 按桶大小加权取绝对差。B、C、D 分别是模型验证、公平分组分析、调参手段,都不是 ECE 的组成部分。没有分桶就无法做校准误差统计。

Q6. 重加权(Reweighting)技术解决公平问题的机制是?

单选题 · mid

  • A.修改模型结构增加复杂度
  • B.调整训练样本的权重分布← 正确答案
  • C.删除所有敏感属性特征
  • D.扩大测试集的样本数量

答案:B。重加权通过 $w_a = P_{\text{target}}(A=a) / P_{\text{observed}}(A=a)$ 给少数群体样本放大权重,让模型在训练时“看到”更均衡的群体分布。A 是改模型架构,C 是特征工程,D 是数据收集,都不改变样本权重。

Q7. 某推荐系统 DP 差距为 0,但女性用户的推荐满意度显著低于男性,最可能的原因是?

单选题 · hard

  • A.模型根本没有训练
  • B.推荐结果虽均等但质量失真← 正确答案
  • C.女性用户人数太少
  • D.系统服务器性能不足

答案:B。DP=0 只保证推荐量在群体间一致,不保证推荐内容对每个群体都精准。模型可能对女性用户推荐了“数量相同但相关性很差”的内容。这体现了单指标盲区,需要用 EO(满意度高的人是否被正确推荐)或校准指标补充验证。

Q8. 在数据审查阶段,发现某群体样本量只有另一组的 5%,以下哪项说法是正确的?

单选题 · hard

  • A.指标计算结果会有很大统计噪声← 正确答案
  • B.指标计算结果是完全可信的
  • C.样本量不影响任何公平性评估
  • D.直接删除该群体的所有样本即可

答案:A。小样本会导致比率估计波动极大,今天算 DP 差 0.05 明天差 0.2,无法稳定审计。应该做的是补充数据或采用置信区间限制判定,而不是直接删样本(D 会让问题更严重)。

Q9. 以下哪些情况可能导致“指标显示公平但实际仍存在歧视”?

多选题 · mid

  • A.数据里存在选择性标签偏差← 正确答案
  • B.两组基率不同但只看 DP 指标← 正确答案
  • C.模型输出分数在校准层面失真← 正确答案
  • D.训练集样本总量超过百万

答案:ABC。DP=0 时如果基率不同,可能是“假装公平”(B);选择性标签让真实标签不可信,任何指标都失真(A);校准失真会让分数被误用(C)。样本量大只让统计更稳定(D 不是问题),不影响指标盲区。

Q10. 要在模型开发流程中落地公平性评估,正确的做法包括哪些?

多选题 · hard

  • A.训练前审查数据中的选择性偏差← 正确答案
  • B.训练时加入公平正则化或重加权← 正确答案
  • C.上线后持续监控指标变化← 正确答案
  • D.只在模型上线前评估一次即可

答案:ABC。公平性管理要贯穿全生命周期:数据阶段查偏、训练阶段加约束、上线后持续监控(A、B、C)。只做一次评估(D)无法应对数据漂移带来的公平性退化。这也是“体检要定期做”的工程化体现。