公平性、可复现性与机器学习伦理
一句话定义
机器学习系统会继承并放大数据中的社会偏差(公平性),其结论又依赖难以复现的随机与配置链条(可复现性);伦理实践就是把这两类风险变成可检查、可记录、可问责的工程流程。
为什么重要
模型进入信贷、招聘、医疗、司法等高风险领域后,「准确率」不再是唯一标准:对特定群体的系统性歧视会引发法律责任与信任崩塌;不可复现的研究与模型让团队无法 debug、审计无法通过。这些不是「意识形态附加题」,而是与数据泄漏同级的技术问题——有明确的定义、度量与工程对策。
前置知识
数据泄漏与常见评估陷阱 的泄漏纪律(可复现性的技术底座);分类评估指标:混淆矩阵、Precision/Recall 与 ROC-AUC 的指标思维(公平性指标同属「把价值判断量化」)。
核心概念
- 偏差来源:历史数据偏差(过去歧视被学习)、标注偏差(标注者主观)、代表性不足(某群体样本稀少,误差集中在该群体)、代理变量(删掉敏感属性后,邮编/消费额仍编码它)。
- 群体公平指标:统计均等(demographic parity,各群体正预测率相同)、机会均等(equal opportunity,各群体真阳率相同)、校准(calibration,同一分数在各群体含义相同)。
- 不可能定理:三者在基础率不同的群体间互不相容,必须按场景选择。
- 可复现性要素:随机种子、数据版本、代码与环境版本、超参数与指标记录、模型卡。
- 模型卡(Model Card):随模型交付的说明书——用途、数据、指标分群体表现、已知局限。
直观类比
公平性像分蛋糕的三种「公平」:每人块头一样(统计均等)、每人按需分配(机会均等)、每块的糖分标注准确(校准)——客人胖瘦不同(基础率不同)时三者数学上不可兼得,主人必须挑一种并说明理由。可复现性像实验菜的配方表:温度、批次、火候全记下来,别人照做才能做出同一锅——否则只有「据说好吃」。
原理与机制
为什么删敏感属性没用:特征间相关使信息可代理(地址 → 种族/收入分布),所谓 fairness through unawareness 失效;正确路径是「显式度量 + 分群体评估」。不可能定理的形式:当两群体基础率 P(y=1 | A=a) ≠ P(y=1 | A=b) 时,同时满足统计均等与校准将迫使部分分数相等(推断退化)——Kleinberg 等人证明的取舍意味着「选哪个公平指标」是价值判断,工程师的职责是把选项与后果摆清楚,而不是假装存在无代价的解。可复现性的技术机制:把 kp-025 的 Pipeline 纪律推进到「环境锁版本(requirements/容器)+ 数据快照哈希 + 固定种子 + 全程记录(实验跟踪)」,使任意历史结果可重放;分群体指标(各群体的召回/误报率)写进常规评估报告,与模型卡一起交付。
公式与推导
统计均等差异(demographic parity difference)度量「各群体被给出有利结果的比率之差」:
机会均等约束则要求真阳率对齐:P(ŷ = 1 | y = 1, A = a) = P(ŷ = 1 | y = 1, A = b)。两者的冲突可由一个反例看出:若 a 群体基础率更高,校准的分数分布下 a 的正预测率必然更高——DPD 与校准不可兼得;该不等式对任意阈值化都成立,故「调阈值找公平点」没有免费午餐。
图示
数据 → 训练 → 模型 → 部署
└偏差入口: └审计出口:
历史歧视 / 标注主观 分群体指标(P/R/误报率)
代表性不足 / 代理变量 → 公平指标选择(DP/EO/校准)
↓ 模型卡 + 数据卡
缓解:重采样/加权/后处理 随机种子+版本快照 → 可复现实例或案例
分群体评估暴露「总体指标掩盖的失衡」(合成数据教学演示):
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import recall_score
from sklearn.model_selection import train_test_split
rng = np.random.default_rng(0)
n = 6000
score = rng.normal(size=n) # 真实能力分
group = rng.choice([0, 1], n, p=[0.8, 0.2]) # 敏感群体(B 组代表性不足)
y = (score + rng.normal(scale=1.2, size=n) > 0).astype(int)
y[group == 1] = (score[group == 1] + rng.normal(scale=2.0, size=(group == 1).sum()) > 0).astype(int)
X = np.column_stack([score, group])
X_tr, X_te, y_tr, y_te, g_tr, g_te = train_test_split(X, y, group, test_size=0.4, random_state=0)
m = LogisticRegression().fit(X_tr, y_tr)
pred = m.predict(X_te)
for g, name in [(0, "A组"), (1, "B组")]:
mask = g_te == g
print(f"{name}: 召回={recall_score(y_te[mask], pred[mask]):.3f} 样本占比={mask.mean():.2f}")同一模型在两组上的召回差异明显——「总体召回 0.75」这类单一数字掩盖的东西,正是审计要拆开看的。
常见误区
- 「删掉性别/种族字段就公平」:代理变量让信息回流,且失去度量能力;应保留以度量、用约束/加权缓解。
- 追求「最公平」的单一答案:公平指标间互斥(不可能定理),选择必须由场景价值判断驱动并记录理由。
- 可复现 = 固定随机种子:种子只压住采样随机性,数据/依赖/硬件漂移同样破坏复现,需要版本与快照。
- 把伦理当上线后补丁:偏差在数据定义阶段就注入,事后缓解代价更高、选项更少。
与其他知识点的关系
数据泄漏与常见评估陷阱 的泄漏纪律是可复现性的技术内核;树模型可解释性:特征重要性与 SHAP 的 SHAP 可用来检查敏感属性的代理使用;不平衡数据与代价敏感学习 的「把少数群体当少数类处理」需与公平性区分(重采样可能伤害校准公平);分类评估指标:混淆矩阵、Precision/Recall 与 ROC-AUC 的指标体系是分群体审计的方法论母体;端到端机器学习工作流与 Pipeline 的模型卡是工作流交付物的最后一块。
自测题
- 说出四种偏差来源并各举一例。
- 要点:历史偏差(过去招聘记录含歧视)、标注偏差(主观标注情绪)、代表性不足(少数群体样本少误差集中)、代理变量(邮编编码种族/收入)。
- 为什么统计均等与校准不可兼得?说明了什么?
- 要点:群体基础率不同时同时满足两者会迫使分数退化;说明公平指标选择是价值判断,工程师应给出取舍选项而非假装中立。
- 一份合格模型卡至少包含什么?
- 要点:预期用途与禁用场景、训练数据概况、总体与分群体评估指标、已知局限与失效模式、复现信息(种子/版本)。
延伸阅读
Kleinberg 等, Inherent Trade-Offs in the Fair Determination of Risk Scores(ITCS, 2017);Mitchell 等, Model Cards for Model Reporting(FAT*, 2019);Barocas 等《Fairness and Machine Learning》(MIT Press, 2023)。