想象你是学校食堂的大厨。你有一道最拿手的红烧肉,吃过的人 90% 都竖大拇指——这是「准确性」。但总有 15% 的学生是素食者,还有几位回民同学,这道菜他们根本碰不了——这是「不公平」。于是你尝试做一道「人人都能下筷」的什锦蔬菜,素食者笑了,可爱吃肉的同学觉得寡淡,满意度掉到 70%。你发现一个令人头疼的规律:要想让所有人都接受,菜就很难极致好吃;要想极致好吃,就必须放弃一部分人。这个大厨的两难,正是算法世界里的「公平-准确性权衡」。AI 系统同样如此:追求整体预测准确,可能对某个群体系统性不公;强行拉平群体差异,又常常牺牲整体精度。本文会带你搞懂:公平性怎么度量、冲突从哪来、业界用什么算法化解、以及实际项目中该如何权衡。

岗位关联

掌握公平-准确性权衡,是 AI 伦理合规岗位的硬技能,也是算法工程师避免「模型翻车」、走向可信 AI 的必修课。

目录
  1. 可视化演示
  2. 概念基础:先认清两把尺子
  3. 公平性指标:三把不同的尺子
  4. 权衡根源:一张有偏的投票表
  5. 关键算法:大厨的三套配方
  6. 评估方法:怎么知道菜单真的合格了
  7. 实践策略:经营餐厅的现实取舍
  8. 伦理视角:算法也是社会的邻居
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示算法公平性与准确性的帕累托前沿、多公平度量间的张力关系、预处理/处理中/后处理三种缓解策略的交互动画,点击按钮切换。

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

帕累托前沿:公平与准确 前沿:最优公平-准确性权衡曲线 模型:不同正则强度下的模型点 max acc s.t. DP≤ε 前沿上方为不可行区域

概念基础:先认清两把尺子

镜头切回食堂。大厨的困境本质是:一道菜好不好吃,有一套评判标准;一桌人能不能都下筷,是另一套标准。过去他只管「好吃」,忽略了后者;现在他决定把两套标准都摆上台面,却发现它们时常打架。AI 系统也一样。所谓「准确性」,就是模型预测正确的比例——相当于食客对菜品的平均满意度;「公平性」则是模型面对不同人群(性别、种族、年龄、地域等)是否一视同仁——相当于菜单是否照顾到了素食者和忌口者。两把尺子各有刻度,冲突便从此处开始。

在机器学习中,准确性是最朴素也最常用的性能指标:把所有样本的预测结果与真实答案逐一对照,算一算有多少是猜对的。公式写出来并不复杂:

准确率把「对错」算得清清楚楚,但它有个盲区:它只关心总数,不关心错误是否集中砸在某一群人头上。就像大厨只看食堂平均满意度,素食者全都悄悄给了差评,他也浑然不知。这正是需要引入「公平」这把尺子的原因——也预示着两把尺子可能要抢同一个位置。

Accuracy=TP+TNTP+TN+FP+FN\displaystyle \text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN}
准确率 = 所有「猜对」的样本数 ÷ 样本总数。分子是真正例与真负例之和,分母则把四种可能情况全部加在一起。
  1. 真正例 TP模型预测为正、实际情况也是正的样本数,相当于「说好学生能考上,他真考上了」。
    TPTP
  2. 真负例 TN模型预测为负、实际也为负的样本数,相当于「说某人没过,他确实没过」。
    TNTN
  3. 两类错误假正例 FP 是把坏人认成好人,假负例 FN 是把好人认成坏人,两者都是扣分项。
    FP+FNFP + FN
  4. 总体占比把正确的两类除以包含错误的四类,就得到整体准确率。
    TP+TNTP+TN+FP+FN\frac{TP + TN}{TP + TN + FP + FN}

公平性指标:三把不同的尺子

大厨想量化「公平」,发现不能凭感觉。于是他订做了三把尺子,每一把都能量「是否一视同仁」,但量法截然不同。第一把尺子叫统计均等(Demographic Parity),它要求 A 组和 B 组被模型「通过」的比例完全一样——好比要求素食窗口和荤食窗口的排队人数一样多。第二把尺子叫均等几率(Equalized Odds),它要求真实标签相同的人群,在两个组里得到的预测分布一致——即「同样有能力的人,无论来自哪个组,犯错率都应相同」。第三把尺子叫机会均等(Equal Opportunity),它只盯着真实为正的那部分人,要求他们的召回率一致——相当于「真正合格的人,无论背景如何,入选机会都要同样大」。

当大厨拿三把尺子同时去量一道菜时,他懵了:尺子之间会打架。以统计均等为例,它的数学形式是:

问题来了:如果 A、B 两组真实的违约率、合格率本来就不同,硬要把通过率拉平,就必须对有人放水或对有人苛责——这把尺子满足了,另一把尺子必然抗议。大厨此刻终于明白:公平不是一句话,而是一组互相牵制的指标,先选对尺子,才能谈权衡。

P(y^=1∣A=0)=P(y^=1∣A=1)\displaystyle P(\hat{y}=1 \mid A=0) = P(\hat{y}=1 \mid A=1)
统计均等的含义:给定受保护属性(如性别)的两个取值,模型输出有利结果的概率必须相同。也就是说,录取率、通过率、审批通过率要在群体间拉平。
  1. 预测标签$\hat{y}=1$ 表示模型给出「通过、录取、放款」等有利结论。
    y^=1\hat{y}=1
  2. 受保护属性 AA 代表性别、种族、年龄等不应影响决策的属性,这里简化为两个取值。
    A∈{0,1}A \in \{0,1\}
  3. 条件概率$P(\hat{y}=1 \mid A=0)$ 是在群体 0 中,模型给出正例结论的概率,说人话就是「这一组的通过率」。
    P(y^=1∣A=0)P(\hat{y}=1 \mid A=0)
  4. 两组相等统计均等要求两组通过率一致,否则就意味着模型对某一组更「苛刻」。
    P(y^=1∣A=0)=P(y^=1∣A=1)P(\hat{y}=1 \mid A=0) = P(\hat{y}=1 \mid A=1)

权衡根源:一张有偏的投票表

大厨想搞清楚为什么「又好吃又公平」这么难。他翻出往年食堂的点餐记录,发现一个秘密:当年做问卷调查时,只把问卷发给了爱吃肉的学生社团,素食者和少数族裔学生的口味完全没被记录进去。数据从源头就是偏的,菜单自然偏向多数人的口味。算法世界里的根源完全一样——数据偏差是首犯:历史数据记录了人类社会已有的偏见,比如过去银行少数族裔的拒贷率偏高,模型学到「他们信用差」的错误规律,再把偏见放大到未来。

第二大根源是样本量差异:少数群体在数据集中占比太低,模型「见过的例子少」,自然学不好他们的规律,准确率天然偏低。第三大根源是特征编码:像邮编、姓氏、语言这类特征,表面中立,实则与种族、阶层高度相关,模型会绕道捕捉敏感属性,相当于「菜里没放肉,却用肉味香精骗过食客」。为了看到全局,研究者把公平约束和准确率放进同一个目标函数:

这份「联合损失」就是权衡的数学缩影:分母只有一个,分子却有两个互相较劲的诉求。大厨看着这张有偏的投票表叹了口气——原料本身不干净,再厉害的厨艺也难做出让所有人都满意的菜。但至少,他现在知道病根在哪了。

L=Lacc+λ⋅Lfair\displaystyle \mathcal{L} = \mathcal{L}_{\text{acc}} + \lambda \cdot \mathcal{L}_{\text{fair}}
总损失 = 准确率损失 + λ 倍的公平损失。λ 越大,公平惩罚越重,模型越不可能只顾一头;λ 越小,模型越倾向于「怎么准怎么来」。
  1. 准确率损失$\mathcal{L}_{\text{acc}}$ 衡量模型预测错得有多离谱,是优化算法最原始的追求。
    Lacc\mathcal{L}_{\text{acc}}
  2. 公平损失$\mathcal{L}_{\text{fair}}$ 量化公平差距,比如两组通过率之差的平方。
    Lfair\mathcal{L}_{\text{fair}}
  3. 惩罚系数 λλ 是公平约束的「音量旋钮」,调大它,公平诉求在总目标里更响亮。
    λ∈[0,+∞)\lambda \in [0, +\infty)
  4. 相加成总目标模型训练时同时压低这两项,公平与准确便在同一赛场内互相拉扯。
    L=Lacc+λ⋅Lfair\mathcal{L} = \mathcal{L}_{\text{acc}} + \lambda \cdot \mathcal{L}_{\text{fair}}

关键算法:大厨的三套配方

知道了病根,大厨决定请救兵。他先后试了三套配方。第一套叫再加权法(Reweighting),思想很朴素:既然少数群体的样本被历史偏见「欺负」了,那就给他们的样本发「补偿金」——在训练时提高权重,让模型不敢忽视他们。第二套叫对抗训练,大厨请来一位专唱反调的副厨:主厨负责预测结果,副厨则努力从预测结果中猜出「这道菜是为谁做的」;一旦猜得中,就说明菜单上带着群体线索,主厨会被惩罚并调整,直到副厨再也猜不出来。第三套叫后处理法,不碰训练过程,而是等模型输出结果后,在「上菜」前微调:给弱势群体一个更宽容的阈值,或直接按组平移决策边界。

第四套配方是正则约束,把公平条件直接写进训练目标里,相当于在菜谱首页印上「本店对所有人同价」的店规。其中再加权法最容易理解,它给每个样本算一个「补偿系数」:

大厨试完三套配方后感慨:再加权像给弱势食材加量,对抗训练像请了位监督员,后处理则像上桌前最后摆盘。没有万能配方,但知道了这些手段,他总算可以对着那道「红烧肉」下手调整了。

wi=P(A=ai)⋅P(Y=yi)P(A=ai,  Y=yi)\displaystyle w_i = \frac{P(A=a_i) \cdot P(Y=y_i)}{P(A=a_i,\; Y=y_i)}
再加权权重 =(敏感属性的边缘概率 × 真实标签的边缘概率)÷ 二者联合概率。这个比值衡量的是:历史数据中这个「属性-标签」组合出现的比例,相比理想公平世界偏离了多少。
  1. 属性边缘概率$P(A=a_i)$ 表示样本 i 所属群体在人群中的占比,比如「女性占总申请者的 45%」。
    P(A=ai)P(A=a_i)
  2. 标签边缘概率$P(Y=y_i)$ 表示某类真实结果(如「按时还款」)在全体中出现的比例。
    P(Y=yi)P(Y=y_i)
  3. 理想联合概率把两者相乘,得到的是「若 A 与 Y 互不相关」时,这个组合本应出现的比例。
    P(A=ai)⋅P(Y=yi)P(A=a_i) \cdot P(Y=y_i)
  4. 实际联合概率$P(A=a_i,\; Y=y_i)$ 是历史数据里该组合真实出现的比例,偏差就藏在这里。
    P(A=ai,  Y=yi)P(A=a_i,\; Y=y_i)
  5. 权重比值期望比例与实际比例之比大于 1,就说明这个群体被低估了,训练时多给它一些话语权。
    wi=P(A=ai)⋅P(Y=yi)P(A=ai,  Y=yi)w_i = \frac{P(A=a_i) \cdot P(Y=y_i)}{P(A=a_i,\; Y=y_i)}

评估方法:怎么知道菜单真的合格了

配方调完了,怎么知道新菜单真的兼顾了「好吃」与「人人能吃」?大厨决定请一批「神秘顾客」来明察暗访。机器学习里,这套检查同样讲究方法。首先是混淆矩阵——一张 2×2 的表格,把预测结果与真实情况分成 TP、TN、FP、FN 四格。普通准确率只看对角线之和,而公平评估要把这张表格分群体各拆一张:女性一张、男性一张、年轻组一张、年长组一张,逐一对比同样的格子,差距就现形了。

接下来是公平审计:像财务查账一样,系统性地遍历各敏感属性的每个取值,计算公平指标的差距是否超出红线。最后是绩效评估:不能只看公平,还得回头确认准确率没有崩盘——两边同时汇报给决策层。审计时最常用的一条准则是均等几率,它的容忍形式如下:

神秘顾客的结论让大厨很受用:原来「合格」不是一句感觉,而是一串可审计的数字。每张分群体的混淆矩阵就像每桌客人的反馈表,公平审计则像定期查账——只有把检查机制固化下来,菜单才不算「表面公平」。

∣P(y^=1∣A=0,  Y=y)−P(y^=1∣A=1,  Y=y)∣≤ϵ\displaystyle \left| P(\hat{y}=1 \mid A=0,\; Y=y) - P(\hat{y}=1 \mid A=1,\; Y=y) \right| \le \epsilon
均等几率公式:固定真实标签 Y 后,两个群体的预测正例率之差不能超过容忍度 ε。它保证「同类人受到同类对待」。
  1. 固定真实标签只考察真实标签为 y 的那批样本,避免「基准率不同」干扰比较。
    Y=yY=y
  2. 群体 0 的正例率在真实标签相同的条件下,群体 0 被模型判为正的比例。
    P(y^=1∣A=0,  Y=y)P(\hat{y}=1 \mid A=0,\; Y=y)
  3. 群体 1 的正例率同样条件下群体 1 被判为正的比例,两者理应接近。
    P(y^=1∣A=1,  Y=y)P(\hat{y}=1 \mid A=1,\; Y=y)
  4. 差距上界取绝对值后设置一个容忍度 ε,差距越小说明模型对不同群体越「一视同仁」。
    ∣P(y^=1∣A=0,  Y=y)−P(y^=1∣A=1,  Y=y)∣≤ϵ\left| P(\hat{y}=1 \mid A=0,\; Y=y) - P(\hat{y}=1 \mid A=1,\; Y=y) \right| \le \epsilon

实践策略:经营餐厅的现实取舍

大厨发现,解决权衡不只是技术题,更是经营题。业务取舍是第一关:每提升 1 个百分点的公平差距,要付出多少准确率?如果只花 0.5% 的准确率就能让通过率差距从 10% 降到 3%,这笔买卖划算;反过来,如果得砸掉 8% 的准确率,就要慎重。聪明的做法是定义一个统一的「决策分数」,把好坏折算成同一货币:

合规需求是第二关:欧盟《人工智能法案》、中国《算法推荐管理规定》等对歧视性算法划了红线,公平不再是「可选项」而是「必选项」。动态调优是第三关:人群结构会变,数据分布会漂移,今天调好的公平参数可能三个月后失效,所以要像大厨定期换菜单一样,持续监控、定期重训。经营餐厅的智慧在于:不追求童话里的「完美公平」,而是算清每一份取舍的账,守住底线、动态调整。

D(λ)=Acc(λ)−η⋅Gap(λ)\displaystyle D(\lambda) = \text{Acc}(\lambda) - \eta \cdot \text{Gap}(\lambda)
决策分数 = 当前约束下的准确率 − η × 当前公平差距。η 是「公平差距折算成准确率损失」的汇率,由业务方拍板。
  1. 当前准确率$\text{Acc}(\lambda)$ 是在公平惩罚强度为 λ 时,模型重新训练后的整体准确率。
    Acc(λ)\text{Acc}(\lambda)
  2. 当前公平差距$\text{Gap}(\lambda)$ 是两组通过率或错误率之差,差距越大越不公平。
    Gap(λ)\text{Gap}(\lambda)
  3. 折算汇率 ηη 表示业务愿意用多少准确率去换取一个单位的公平差距缩小。
    η⋅Gap(λ)\eta \cdot \text{Gap}(\lambda)
  4. 统一打分把两边变成同一单位相减,分数最高的 λ 就是当前业务下的最优解。
    D(λ)=Acc(λ)−η⋅Gap(λ)D(\lambda) = \text{Acc}(\lambda) - \eta \cdot \text{Gap}(\lambda)

伦理视角:算法也是社会的邻居

食堂开在社区里,大厨渐渐意识到,自己不只是个做饭的,还影响着社区的饮食文化和孩子们的价值观。算法也一样:当信贷、招聘、医疗系统大规模使用 AI 决策,模型的「价值取向」会直接塑造社会机会的分配。如果算法只追求平均准确率,最弱势的群体可能被静默牺牲——这不是技术问题,而是伦理问题。于是「最大最小」的正义观登场了:与其只盯着平均值,不如先保证最差的那个群体不至于太差。这就是罗尔斯(Rawls)式的公平观,形式化后长这样:

这种伦理视角要求算法团队承担透明责任:为什么要选这个公平指标?公平约束牺牲了多少准确率?决策依据是什么?都要向公众说得清。大厨最终把新菜单贴在食堂门口,标注了每道菜的用料和适用人群——没有人人都爱吃的完美菜品,但一份透明、有底线、肯持续调整的菜单,才是社区真正需要的菜单。这也正是算法公平性的终极答案:公平不是一次性的模型补丁,而是一种持续的价值承诺。

θ∗=arg⁡max⁡θ  min⁡a∈{0,1}Acca(θ)\displaystyle \theta^* = \arg\max_{\theta} \; \min_{a \in \{0,1\}} \text{Acc}_a(\theta)
该公式表达「先找出表现最差的群体,再优化模型让这个最差群体尽量变好」,而不是只优化总平均。它把伦理底线写入目标函数。
  1. 模型参数θ 代表模型的全部参数,相当于大厨的完整菜谱与火候设置。
    θ\theta
  2. 单群体准确率$\text{Acc}_a(\theta)$ 是在群体 a 上单独计算的准确率,屏蔽掉其它群体的光环。
    Acca(θ)\text{Acc}_a(\theta)
  3. 取最小值$\min_{a}$ 是指只盯着两个群体中准确率更差的那一个,因为它才是最容易被遗忘的角落。
    min⁡a∈{0,1}Acca(θ)\min_{a \in \{0,1\}} \text{Acc}_a(\theta)
  4. 最大化底线$\arg\max_{\theta}$ 表示调整配方,让「最差群体」的准确率尽可能提高。
    θ∗=arg⁡max⁡θ  min⁡a∈{0,1}Acca(θ)\theta^* = \arg\max_{\theta} \; \min_{a \in \{0,1\}} \text{Acc}_a(\theta)

AI 应用场景

信贷审批:让放款不再「看人下菜」

阶段:模型评估与部署阶段

解决的问题:传统信贷模型只看整体坏账率(准确性),可能对少数族裔或新移民群体系统性压低额度、提高拒贷率。AI 公平审计在部署前分群体计算统计均等差距,再用再加权法重新训练,让审批通过率差距显著缩小而坏账率几乎不变。

具体案例:某消费金融公司开发信用卡审批模型,发现少数群体申请被拒率高出 15 个百分点,但实际逾期率并不高。团队用对抗去偏 + 阈值平移,把拒率差压到 3 个百分点以内,综合坏账率仅上升 0.4 个百分点。

招聘筛选:给简历池加一把「公平搅拌勺」

阶段:数据准备与模型训练阶段

解决的问题:历史录用数据来自有偏的招聘流程,模型会学到「 IT 岗位更倾向男性」之类的刻板印象,导致合格女性候选人被系统筛掉。通过均等几率约束训练,模型在保证录用后绩效不变的前提下,让各群体的入选率趋近一致。

具体案例:某招聘平台为企业做简历初筛模型时,加入公平约束后,女性候选人入选率从 32% 提升到 44%,后续试用期绩效显示这批候选人的通过率并未下降,候选池多样性反而提升了团队创造力。

辅助诊断:让 AI 医生不「偏爱」某类肤色

阶段:性能评估与长期监控阶段

解决的问题:医疗数据集常以浅肤色人群为主,皮肤癌筛查模型在深肤色人群上准确率明显偏低。公平评估把混淆矩阵按肤色分组对比,暴露差距后,用再采样 + 再加权法校准,把准确率差距压到可接受范围。

具体案例:某 AI 皮肤癌筛查系统在白肤色与深肤色人群上的准确率差距达 8%,通过再加权与数据补采,将差距缩小到 2% 以内,同时整体敏感度保持在 91%,并通过了医院伦理委员会的公平审计。

Python 演示

python33 行
import numpy as np def make_data(n=2000, seed=42):    """生成两组带结构性差异的模拟信贷数据。    A 组历史评分客观,B 组因过去偏见被系统性低估。"""    rng = np.random.default_rng(seed)    group = np.repeat([0, 1], n // 2)    ability = rng.normal(0.4, 1.0, n) - group * 0.9    label = (ability + rng.normal(0, 0.5, n) > 0).astype(int)    score = ability + rng.normal(0, 0.3, n)    return group, label, score def evaluate(boost, group, label, score):    """给 B 组分数加一个补偿 boost,返回准确率与公平差距。"""    pred = (score + group * boost > 0).astype(int)    acc = float((pred == label).mean())    gap = abs(float(pred[group == 0].mean() - pred[group == 1].mean()))    return acc, gap def main():    group, label, score = make_data()    print("=== 公平-准确性权衡:后处理补偿演示 ===")    print("补偿值  A通过率  B通过率  公平差距   准确率")    for boost in np.arange(0.0, 1.6, 0.2):        pred = (score + group * boost > 0).astype(int)        acc, gap = evaluate(boost, group, label, score)        rate0 = pred[group == 0].mean() * 100        rate1 = pred[group == 1].mean() * 100        print("%4.1f   %5.1f%%  %5.1f%%    %.3f     %.3f"              % (boost, rate0, rate1, gap, acc)) if __name__ == "__main__":    main()
目的:用模拟数据演示「给弱势群体分数加补偿」这一后处理策略,观察公平差距缩小时准确率如何变化,直观复现公平-准确性权衡。
  1. ability = rng.normal(0.4, 1.0, n) - group * 0.9让两组群体的真实能力基准不同,这是权衡的结构性前提。
  2. score = ability + rng.normal(0, 0.3, n)模型打分基于真实能力叠加噪声,模拟一个「看似客观」的评分器。
  3. pred = (score + group * boost > 0).astype(int)补偿项 group * boost 只加给 B 组,相当于后处理法的阈值平移。
  4. gap = abs(...)公平差距定义为两组通过率之差的绝对值,这是最直观的统计均等度量。
  5. np.arange(0.0, 1.6, 0.2)连续加大补偿力度,输出表格就能看到「公平上升、准确率下降」的完整轨迹。

常见误区

误区很多人一听到公平约束就摆手:「不行不行,加上公平模型就不准了。」仿佛公平和准确是你死我活的仇敌,做公平就必然牺牲业务。

正解权衡的斜率并非总那么陡峭。当数据偏差较轻时,后处理或再加权几乎不伤准确率;只有当历史偏见很深时,成本才会显著。食堂大厨如果把红烧肉只是稍微减一点油盐,大多数食客根本尝不出来,但素食者却多了一道能吃的菜。先量化代价,再下结论。

为何常见:论文和新闻总爱渲染「跷跷板效应」,把极端案例当普遍规律,导致直觉被夸大。

误区以为公平 = 让两个群体的预测分布完全一致,于是想方设法把 A、B 两组的通过率强行拉到一模一样的数值。

正解统计均等只是一种指标,不是公平的圣经。如果两组真实违约率确实不同,硬拉通过率反而会把高风险的人放进来、把低风险的人挡在外,既伤准确也违背机会均等。好比把荤菜素菜都做成无色无味的糊糊,看似「一视同仁」,实则对所有人都更糟。

为何常见:「一视同仁」的日常直觉与统计意义上的公平不是一回事,初学者容易把二者混为一谈。

误区有人坚信「数据是机器记录的,不带感情,所以从数据里学出来的模型肯定客观公正」。

正解历史数据是社会的快照,偏见早就烙在标签里。过去银行少给某群体放贷,标签就写着「他们信用差」;模型忠实地学到了这种偏见,并把它放大到未来。食堂大厨如果只统计爱吃肉学生的投票,无论统计得多认真,菜单也是偏的——输入有偏,输出必然有偏。

为何常见:人们习惯把「数据」等同于「真相」,忽略了数据采集过程本身的社会偏差。

误区团队一口气把统计均等、均等几率、机会均等全部设成验收指标,要求同时通过,否则就判定不公平。

正解公平指标之间存在不可调和的冲突:当两组基准率不同时,统计均等与均等几率在数学上无法同时满足。这就像要求一把尺子同时量出长度和重量——工具选错了,标准越多越混乱。实务做法是结合业务场景,挑一个主指标,其余作参考。

为何常见:对指标背后的数学关系缺乏理解,直觉上认为「指标越多越安全」。

误区认为模型上线前做一次数据脱敏、加一次公平约束,就一劳永逸地「公平」了。

正解公平会随数据漂移而失效。用户结构变了、政策环境变了,原本调好的公平参数可能几个月后就失衡,必须像大厨定期更新菜单一样,持续监控公平指标并定期重训。公平不是补丁,而是一项持续治理的运维活动。

为何常见:把公平当成模型的一个静态属性,忽略了现实世界本身是动态变化的。

面试题

Q1. 算法公平性研究的核心目标是?

单选题 · easy

  • A.让模型对所有输入都输出相同结果
  • B.减少模型对特定群体的系统性不利影响← 正确答案
  • C.让模型在所有指标上都做到最优
  • D.完全消除模型预测中的全部随机误差

答案:B。公平性不是让输出一致,而是消除群体间的系统性伤害。B 正确。A 是机械平均主义,C 在数学上不可能(指标间存在冲突),D 属于噪声问题而非公平问题。就好比食堂大厨追求的是「每桌都有能吃的菜」,而不是「每桌都吃一模一样的菜」。

Q2. 准确率的正确计算公式是?

单选题 · easy

  • A.预测正确的样本数除以全体样本数← 正确答案
  • B.预测为正例中真实正例所占比例
  • C.真实正例中被正确预测的比例
  • D.模型训练一轮所花费的分钟数

答案:A。准确率 = (TP+TN) / 全体样本数,A 正确。B 是精确率,C 是召回率,D 是训练耗时,属于性能指标而非正确性指标。好比算「食堂整体满意度」,要用满意人数除以全部食客,而不是只算爱吃肉的那部分人。

Q3. 「统计均等」(Demographic Parity)要求什么?

单选题 · mid

  • A.各群体预测为正比例相同← 正确答案
  • B.各群体准确率必须完全相等
  • C.各群体样本数量必须一致
  • D.各群体特征数量必须相同

答案:A。统计均等要求有利结果(如通过、录取)在各群体中的比例一致,A 正确。B 混淆了准确率与通过率,C 和 D 是关于数据量与特征数量的说法,与公平度量无关。类比:它要求素菜窗口和荤菜窗口排队人数一样多,而非两队人的口味必须一样。

Q4. 「均等几率」(Equalized Odds)要求什么?

单选题 · mid

  • A.同标签下各组预测分布一致← 正确答案
  • B.各群体整体通过率完全相同
  • C.各群体样本占比完全一致
  • D.各群体特征权重完全一致

答案:A。均等几率要求先固定真实标签,再看两个群体被预测为正的比例是否一致,因此避免了基准率不同的干扰,A 正确。B 描述的是统计均等,C 和 D 与公平定义无关。就像考试阅卷:同等水平的学生,无论来自哪个班,得分规律应当一样。

Q5. 为什么公平约束常以牺牲准确率为代价?

单选题 · mid

  • A.公平约束限制了模型拟合训练集的能力空间← 正确答案
  • B.公平约束会让模型参数永远无法收敛
  • C.公平约束增加了特征数量导致过拟合
  • D.公平约束会删除数据集中的正例样本

答案:A。公平约束相当于在损失函数中加入额外限制,压缩了模型的可行解区域,拟合能力下降,A 正确。B、C、D 都是对公平约束机制的误解——它不删除样本、不增加特征,更不会导致不收敛。好比大厨被要求「少油少盐」,能做的菜式变少了,但并不会让厨房停摆。

Q6. 再加权法(Reweighting)的核心思想是?

单选题 · hard

  • A.调整不同样本在训练中的损失权重← 正确答案
  • B.为所有样本生成完全相同的标签
  • C.将模型输出结果进行随机化处理
  • D.使用对抗网络生成大量的新样本

答案:A。再加权法通过计算「期望联合概率 / 实际联合概率」为样本分配权重,让历史中被低估的群体在损失函数中拥有更大话语权,A 正确。B 是破坏标签,C 是随机扰动,D 是数据增强,均与再加权无关。类比:给被忽视的食材加量,让它的味道在整道菜中不被淹没。

Q7. 对抗去偏训练中,对抗模块扮演的角色是?

单选题 · hard

  • A.从预测结果中推断受保护属性← 正确答案
  • B.直接输出样本的真实类别标签
  • C.压缩样本特征减少模型大小
  • D.增加训练数据以提升泛化能力

答案:A。对抗模块专门「找茬」——尝试从模型预测中猜出样本的敏感属性,如果猜得中,说明预测结果泄漏了群体信息,主模型就会被惩罚,A 正确。B、C、D 分别对应分类器、降维和数据增强的职责。这就像大厨请的副厨,专门盯着「这道菜是不是有明显的群体偏好」,一旦发现就要求重做。

Q8. 以下属于常见公平性度量指标的有?

多选题 · easy

  • A.统计均等(Demographic Parity)← 正确答案
  • B.均等几率(Equalized Odds)← 正确答案
  • C.机会均等(Equal Opportunity)← 正确答案
  • D.梯度下降(Gradient Descent)

答案:ABC。统计均等、均等几率、机会均等是三大经典公平指标,A、B、C 正确。D 是优化算法,用于最小化损失函数,与公平度量无关。好比食堂的三把尺子各有刻度,而「梯度下降」是做饭用的火候控制器,两者不是一回事。

Q9. 公平-准确性权衡的典型根源包括?

多选题 · mid

  • A.历史数据中固化了社会偏见← 正确答案
  • B.少数群体样本数量严重不足← 正确答案
  • C.特征编码放大了群体差异← 正确答案
  • D.模型初始化使用随机参数值

答案:ABC。数据偏差、样本量差异、特征编码是权衡的三大根源,分别对应「输入偏」「学不好」「放大偏」,A、B、C 正确。D 中随机初始化是训练常规操作,不同种子只会影响收敛细节,不会造成系统性群体偏差。类比:菜单失衡来自调查表有偏、样本不够和佐料误导,而不是因为大厨开火的时间是随机的。

Q10. 关于公平性指标冲突,下列说法正确的有?

多选题 · hard

  • A.基准率不同时两种指标常冲突← 正确答案
  • B.所有公平指标可同时全部达标
  • C.实践应结合业务选择合适指标← 正确答案
  • D.公平冲突意味着无法做任何改进

答案:AC。基准率不同时,统计均等要求通过率拉平,均等几率要求同等能力同等对待,两者在数学上难以同时成立,A 正确,因此 B 错误。正确做法是结合业务选主指标,C 正确。D 过度悲观——指标冲突不代表无解,只是要接受取舍并透明披露。就像一把尺子不能同时量长度和重量,但选对工具照样能把菜做好。