跳转至

Bias 与 Fairness

偏见与公平性关注系统是否对不同群体产生系统性不利、错误或不一致结果。这里的「公平」不是单一指标,而是需要结合具体业务决策定义:哪些群体受影响、哪些结果不可接受、如何度量差异,再据此选择公平性约束。 NIST SP 1270 把 AI 偏见来源归纳为三类——统计/计算偏见、人类偏见与系统性偏见——说明偏见不只在数据里,也藏于建模选择、评测方法与组织流程中;因此治理偏见不能只清洗数据集,而要沿着整个生命周期追踪。

快速开始

明确受影响群体与业务决策。 先界定系统在做什么决策(录取、招聘、授信、医疗建议等)、哪些属性构成敏感群体(性别、种族、年龄、地域等),以及什么程度的结果差异算不可接受。没有这层定义,任何「公平性」评测都无从落地,也无法判断一项差异是偏差还是正常分布。

分组评测。 不要只看总体准确率。按群体拆分错误率、假阳性与假阴性、输出分布与体验质量,做差异显著性检验;同时追踪训练数据、提示词与检索内容中可能引入偏见的环节。评测要覆盖同一含义的不同表述方式,避免模型对措辞敏感造成隐性差异。常用的分组公平性约束可写成条件概率等式:

\[ P(\hat Y=1 \mid A=a)=P(\hat Y=1 \mid A=b) \]

上式是「统计均等 (Demographic Parity)」,只要求预测结果与敏感属性 \(A\) 无关。更强的「机会均等 (Equalized Odds)」由 Hardt 等人 2016 年提出,要求在真实标签 \(Y\) 给定的条件下预测也独立于 \(A\):

\[ P(\hat Y=1 \mid A=a, Y=y)=P(\hat Y=1 \mid A=b, Y=y),\qquad y\in\{0,1\} \]

它同时约束假阳性率与假阴性率;只约束 \(y=1\)(真阳性率)的弱化版本称为「机会平等 (Equal Opportunity)」。监管与合规场景常用「差异影响比率 (Disparate Impact, DI)」:

\[ \mathrm{DI}=\frac{P(\hat Y=1 \mid A=a)}{P(\hat Y=1 \mid A=b)} \]

通常以 DI 低于 0.8 作为「四分之五法则」告警线。不同约束之间往往不可同时满足,需要根据业务取舍。

建立人工机制。 对高风险决策保留人工复核与申诉渠道,并记录决策依据;设定上线阈值与持续监控,群体差异超出阈值即告警。验证方式:构造仅在敏感属性上不同的成对样本,观察输出是否出现系统性分歧。

案例

场景:一个招聘助手在筛选简历时,对不同姓名和背景描述给出不同建议。

  • 输入:同一份简历,仅替换姓名与个别背景词汇,观察建议是否变化。
  • 关键步骤:用成对样本做分组评测,统计不同群体被推荐比例与拒因分布;若差异显著,回到数据、提示词和检索/决策流程定位来源,而不是只改输出措辞。
  • 预期结果:定位到差异来自训练数据中的历史偏向、提示词中的隐含偏好或评测集不均衡,并有针对性地修正数据或流程。
  • 常见失败点与排查:只修「语气」或「措辞」而保留底层差异;或只测一个总体指标掩盖了子群体分化。排查时用分层统计与因果追踪确认差异来源。

分组指标可以用最小代码计算,避免只看总体准确率:

def group_rates(y_true, y_pred, mask):
    tp = ((y_true == 1) & (y_pred == 1) & mask).sum()
    fn = ((y_true == 1) & (y_pred == 0) & mask).sum()
    fp = ((y_true == 0) & (y_pred == 1) & mask).sum()
    tn = ((y_true == 0) & (y_pred == 0) & mask).sum()
    tpr = tp / (tp + fn)   # 真阳性率
    fpr = fp / (fp + tn)   # 假阳性率
    return tpr, fpr

其中 mask 是按敏感属性选出的子群体。验证标准是:各群体的 TPR 与 FPR 差异是否超过预设阈值,而非总体准确率本身。

相关主题