城市尽头有一家不起眼的照相馆,老板有一台神奇的“如果相机”。客人拍一张证件照,相机还会吐出一张平行宇宙里的照片:如果当年选了理科而不是文科,人生会怎样?如果换一个出生背景,现在会在哪家公司上班?照片不一定更美,但一定严格按店里的那张“命运路线图”重算。如今,AI 公司也悄悄用起了这种相机——把镜头对准贷款审批、简历筛选、急诊分诊。当一个人被算法拒绝时,我们最想问的是:如果 ta 的性别、肤色或出身变了,算法还会给出同样的答案吗?这个问题,就是反事实公平。接下来,我们一起拆开相机:看命运路线图(因果图)、拧改写旋钮(干预)、洗平行宇宙照片(反事实预测),最后学会用这套手艺给 AI 做公平体检。
学懂反事实公平,你就拥有了一套从“相关”穿透到“因果”的思维工具,能在模型上线前发现并修复隐蔽的算法歧视,成为可信 AI 时代稀缺的审计型人才。
可视化演示
展示结构因果模型DAG与反事实推理、公平性指标对比及路径专属公平与解决变量,支持三模式切换。
本节配有交互动效(进入视口后自动加载,约 3KB)。
结构因果模型与反事实推理 敏感属性A:性别/种族等受保护变量 中介变量E:教育等解决变量 结果Y:模型预测输出 CF: P(Ŷ(A)=Ŷ(A\')) = 1 翻转敏感属性后预测不变则满足反事实公平
公平性基础
照相馆门廊上并排挂着三块木牌。第一块写着“统计公平”:男宾女宾的满意率一样,就是公平;第二块写着“个体公平”:两个模样相似的客人,出片效果一样,就是公平。老板摇摇头,敲了敲第三块空木牌:“前两块的毛病,在于它们都在比‘两个不同的人’。可人和人哪能一样?真正该问的是——同一个客人,如果从头再活一次,只是换了个出生时的‘出厂设定’,照片还会是同一张吗?”
“统计公平”在文献里叫 demographic parity,它要求不同受保护组获得正向结果(比如“通过面试”)的概率相等:“个体公平”则要求足够相似的个体得到足够相似的预测。设 $\hat Y$ 为模型输出(1 表示通过),$A$ 为受保护属性(出厂设定),统计公平写成:
这两类公平标准有一个共同软肋:它们只在“相关层”打转。比如某招聘数据里 A 组通过率低,可能根本不是 A 引起的,而是 A 与某个隐藏因素只是碰巧相关。统计公平要么把虚假相关错当成罪证,要么把合理的组间差异一并抹平。反事实公平换了一个更狠的提问方式——不去比“两组人平均下来是否一样”,而是问“让同一个人穿越到另一个出厂设定,预测会不会变”。这个视角从“比较人”转向“比较同一个人的平行版本”,才算摸到了“歧视”的因果本质。于是老板摘下前两块牌子,在第三块空牌上刻下:“即便改写出厂设定,评分台上的你也纹丝不动。”这台“如果相机”从此有了正式名字——反事实公平。
- 左边条件概率这是“出厂设定”为 a 的那一组人,被预测为正例的比例,相当于统计公平要盯着的第一道目光。
- 右边条件概率换到“出厂设定”为 a' 的对照组,做完全相同的统计。
- 差值判公平两个概率的绝对差,就是“结果层面的不公平缝隙”,缝隙超过容差即视为未过线。
因果图模型
想要拍出靠谱的平行宇宙照片,相机里得先有一张“命运路线图”。这张图由圆圈和箭头组成:每个圆圈是一个人生变量,比如“出生地”“学历”“收入”;每条箭头表示“前者直接推动后者”,比如“学历→收入”。箭头不许回头——你不能让“收入”反过来决定“学历”,否则命运就成死循环了。这种图学名叫“有向无环图”,缩写 DAG。
图中的直接依赖关系用“父节点、子节点”描述,箭头连成的通道叫“因果路径”。真正让公平问题变得棘手的,是一种叫“混淆因子”的变量:它是多个变量的共同祖先,比如“成长环境”既影响一个人的群体归属,又影响他的收入。于是 A 与 Y 之间的相关,有一部分根本不是 A 的功劳,而是从共同祖先那里偷来的“后门路径”。要算出 A 对 Y 纯粹的因果效应,需要把后门路径上的混淆因子 Z 控制住:
这张“命运路线图”被老板挂在相机心脏的位置,旁边贴着一张便条:“图错一寸,照片假一尺。”因果图不是相关图,每一根箭头的方向都代表一个“拧一下会发生什么”的结构性断言。如果混淆因子漏画了,所谓平行宇宙只是另一个相关幻觉。
- do 算子登场把“拧旋钮”写成数学符号。do(A=a) 表示强行把 A 设为 a,并剪断所有指向 A 的箭头,只保留 A 向外的因果推挤。
- 逐层计算在混淆因子 Z 的每一层取值里,统计“A=a 时 Y=y”出现的概率,把 Z 暂时关起来再说话。
- 按权重求和把每一层的结果乘以该层在总体中的占比并累加,消除后门路径的污染,剩下的才是纯因果影响。
反事实推理
有了命运路线图,老板就可以拍摄平行宇宙照片了,操作分三步。第一步,把“出厂设定”A 从现实值 a 拧成目标值 a';第二步,把 A 以外的前代变量(比如天赋、努力)原封不动地锁住;第三步,沿着路线图让被锁住的变量一路重算下去,得到新的照片。这张照片回答的是:“如果唯一的变动是 A,世界会有什么不同?”
在因果推理里,拧旋钮叫“干预”,写作 do(A=a)。它和“观察到 A=a”(也就是给定 A=a)有本质区别:do 会切断指向 A 的箭头,观察则任由原因流向 A。“看到一个人吸烟”和“强迫这个人吸烟”,对身体的因果含义完全不同。只有 do 带来的变化,才能归因于 A 自身。统计学家用“潜在结果”来刻画这种平行宇宙:对某个个体 U,把 A 强行设为 a 后 Y 的取值记作:
老板把洗出来的两版照片并排贴在展示墙上,一张叫“现实版”,一张叫“改写版”。他常说:“相机不预测未来,它只回答‘如果’。而公平,恰恰就藏在‘如果’这两个字里。”
- 下标记录改写Y 的下标 A←a 表示“在因果图上把 A 强行为 a”,U 代表这个个体身上所有不变的前因,相当于平行宇宙重算时被锁住的那部分。
- 对照改写版本同样的 U,把 A 改为 a',得到另一个潜在结果——这就是照片的第二版“改写版”。
- 相减判定因果同一人的两个版本相减。差为零,说明 A 对 Y 没有因果作用;差非零,说明 A 确实在拨动结果。
反事实公平定义
现在把镜头对准 AI 本身。假设贷款申请人 Alice 被模型拒绝,我们想知道拒绝是否公平。传统做法是查模型里有没有性别字段——没有就算清白。老板摇头:“菜盘上没放辣椒,不代表汤里没有辣椒油。”Alice 的居住地、消费习惯、职业年限,都可能是她出厂设定的间接产物。真正的检查方式是:把 Alice 的出厂设定从 a 改成 a',其他一切可观测的 X 和不变的 U 统统锁死,看模型还会不会给出同样的拒绝。这就是反事实公平的标准定义。用公式写出来是:
这个定义的力量很大:它不允许预测分布直接依赖 A,也不允许依赖任何携带 A 影响的中间变量。常见的落地技巧,是把可行特征限制在“A 的非后代”里,用隐藏能力 H 这类变量取代学历等可见特征。换句话说,反事实公平不是让模型“假装看不见 A”,而是让 A 的影响在因果结构上根本到不了预测。老板给相机定下验收标准:把两张并排照片放上评分台,台面必须严格水平——只要改写版与现实版的高度差出一个像素,就从零开始检查命运路线图。
- 现实世界预言左边固定了“现实的这个人”(X=x,A=a),再问“如果 A 保持 a 不变,预测会是什么分布”——这其实就是模型对 Alice 的常规预测。
- 平行宇宙预言右边把同一个人的出厂设定改写为 a',观察特征仍锁定为 x,重新问预测会怎样;这一支依赖因果图对 A 的后代逐一重算。
- 分布相等才公平对任意个体、任意 y 值,左右两式都必须相等。只要有一个人的“改写版”预测变了,模型就违反了反事实公平。
因果公平方法
光说“不公平”不够,审计师还要回答“歧视从哪条路进来的”。出厂设定 A 影响预测 Y 有两条路:一条是直达车,A 直接改变 Y,这叫“直接效应”;另一条是转乘线,A 先改变中介 M(比如居住地、婚育状态),再由 M 改变 Y,这叫“间接效应”。这种按路径拆开测量效应的手段,就是路径特定效应分析。因果推理把两段路程写成总效应分解:
有了路径分解,修复就有了靶子。若间接效应过大,说明歧视在借中间变量渗透,应切断 A→M 的影响再重新训练;若直接效应过大,说明模型在赤裸裸地使用受保护属性,必须重设计特征。这个“按路径做手术”的过程,就是公平优化。老板修相机时最得意的一件事:不用把整台机器砸了,只要拿镊子夹住命运路线图上那根发红的线,轻轻剪断,平行宇宙的高度差立刻归零。
- 总效应定义TE 是 A 从 a' 整体换成 a 时,Y 在总体上的平均变化,包含所有路径贡献的总和。
- 自然直接效应 NDE把中介 M 固定在“a' 世界”的水平,只让 A→Y 的直达路径生效,量出直达车的贡献。
- 自然间接效应 NIE让 A 先变到 a,再沿 A→M→Y 的转乘线把影响传下去,量出中介环节的贡献。
- 合起来校验直达车与转乘线的贡献相加必须等于总效应,数学上保证“拆路”没有遗漏。
案例应用实践
照相馆的生意越做越大,开始接企业级“公平体检”订单。审计流程固定为五步:第一步,与业务方共建命运路线图,把受保护属性、可见特征、隐藏变量摆上桌面;第二步,检查数据里哪些特征其实是 A 的后代;第三步,训练或挑选一个只用非后代特征的候选模型;第四步,做反事实推断,对每个样本生成改写版预测;第五步,输出公平报告。
一家招聘平台的简历筛选模型曾被查出“性别→居住地址→入围分”的间接歧视——因为公司附近的老住户多为男性,男性求职者“住得近”的信号天然更多。反事实审计把性别从“女”改写为“男”,同一位候选人的入围分平均提高了 12 分。证据落地后,团队切断“居住地址→入围”路径并用非后代特征重训,差距从 12 分回落到 0.3 分。银行信贷也采用同一套方法:对每个被拒客户固定收入流水,把婚姻状态改写,违约分跳变超过阈值的申请全部转入人工复核。具体到代码,反事实预测可以按下式生成:固定隐藏能力 H,改写 A 后重算可见特征:
老板把每一份体检报告都装帧成册,首页印着那句话:“我们不是保证模型没有偏见,而是保证你亲眼看过另一个宇宙里同一个人的结局。”
- 固定隐藏能力H 是天赋、努力这类不受 A 影响的潜在变量,平行宇宙重算时被牢牢锁住。
- 重算可见特征沿着结构方程把 A 换成 a',算出新的可见特征 X_cf——这是“改写版照片”里的可见部分。
- 群体平均差值对每个样本求出两个宇宙预测的绝对差再求平均,得到审计报告上的“公平缝隙”数字。
挑战与边界
如果相机有时也会说谎,那一定发生在三个环节:第一,命运路线图画错,遗漏了某个共同祖先;第二,隐藏变量根本测不到,只能靠假设;第三,“公平”是不是该牺牲一点“效率”——这是价值观问题,不是数学问题。反事实公平最受欢迎的一条实用结论是:预测器想满足定义,输入特征必须与 A 的“辐射范围”完全绝缘:
可“非后代特征”常常包含未观测变量,完全依赖数据观测并不现实。行业标准做法是敏感性分析:把隐藏混淆的强度假设成一个区间,看公平结论在最大扰动下是否依然成立,就像老板调相机的“宽容度旋钮”。数值再大,数据再多,都替代不了未观测变量本身。老板在相机底座上刻了一行小字:“我不是神谕,我只是一张更诚实的地图。地图外的世界,请保持怀疑。”
- 非后代特征集合X_nd 是因果图上所有不受 A 影响的变量,它们与 A 之间没有任何箭头下行的通道。
- 后代集合定义Desc_G(A) 收集 A 的所有直接与间接影响到的变量,也就是“出厂设定的辐射范围”。
- 交集为空约束两集合不能有交集。数学翻译过来就是:A 的辐射不得进入预测函数的视线。
AI 应用场景
场景 1:招聘平台的“隐藏中介”审计
阶段:模型评估与公平性审计
解决的问题:招聘筛选用“简历文本 + 居住地址”预测入围分,女性候选人入围率明显偏低。传统审查只查模型里有没有性别字段,结论是“干净”;但反事实审计发现,“居住地址”是性别差异的间接通道——历史招聘偏好让老住户多为男性,男性求职者“住得近”的信号天然更多。传统方法看不到这条 A→M→Y 的转乘线路。
具体案例:数据团队对每份简历做改写实验:把候选人性别从“女”改写为“男”,其他特征按因果图重算,入围分平均跳升 12 分。锁定“居住地址”中介路径后,改用非后代特征重训模型,跨宇宙分数差回落到 0.3 分,录用率恢复均衡。
场景 2:银行信贷的合规“平行宇宙实验”
阶段:模型上线前合规评估与上线后监测
解决的问题:授信模型若依赖“婚姻状态”“自有住房”这类 A 的后代特征,会触碰信贷公平监管红线。传统方法无法回答“同一个被拒客户,若出厂设定不同,结果是否相同”,反事实公平恰好给出逐个体的答案。
具体案例:某风控团队把每个被拒申请人的“婚姻状态”改写后重算违约分,发现 3.2% 的客户分数跳变超过阈值,这些案件全部转入人工复核;同时用路径特定效应定位到“婚姻状态→收入稳定性→授信”的间接通道,替换特征后差异降到监管允许范围。
场景 3:医疗分诊的“疼痛评分”偏差诊断
阶段:模型诊断与特征工程改进
解决的问题:急诊分诊模型使用患者自报“疼痛评分”作为关键特征,但该评分受性别刻板印象干扰,本质上是被保护属性影响过的间接后代特征。
具体案例:研究团队构建“性别→疼痛自评→分诊优先级”的因果图,做反事实改写后发现,同一位患者被判定为“紧急”的概率随性别改写明显变化;将特征替换为客观病理指标后,改写实验不再产生差异,分诊准确率反而提升。
Python 演示
import numpy as np def simulate(n=5000, seed=42): """Generate data from a simple causal model. H: hidden qualification (latent variable, non-descendant of A) A: protected attribute, e.g. gender coding 0/1 X: visible feature, a descendant of A, e.g. address score """ rng = np.random.RandomState(seed) H = rng.normal(0, 1, n) A = 0.3 * H + rng.normal(0, 0.5, n) X = 0.8 * H + 0.7 * A + rng.normal(0, 0.5, n) return H, A, X def pred_use_A(X, A): """Predictor that illegally uses the protected attribute.""" return 1.5 * X + 2.0 * A def pred_use_X(X, A): """Predictor that only uses the descendant feature X.""" return 1.5 * X def pred_use_H(H, A): """Fair predictor that only uses the non-descendant latent H.""" return 1.5 * H def counterfactual_X(H, A_new): """Feature X under do(A=A_new), with H held fixed.""" return 0.8 * H + 0.7 * A_new def audit(threshold=0.05, n=5000, seed=42): H, A, X = simulate(n, seed) ones = np.ones(n) zeros = np.zeros(n) # candidate predictors: use A / use X / use H candidates = [ ("use protected A", pred_use_A, counterfactual_X), ("use descendant X", pred_use_X, counterfactual_X), ("use latent H", pred_use_H, lambda H_, a: H_), ] for name, model, feat_fn in candidates: pred_0 = model(feat_fn(H, 0.0), zeros) pred_1 = model(feat_fn(H, 1.0), ones) gap = np.abs(pred_1 - pred_0).mean() verdict = "fair" if gap <= threshold else "UNFAIR" print("%-22s gap=%.4f -> %s" % (name, gap, verdict)) if __name__ == "__main__": audit()
A = 0.3 * H + rng.normal(0, 0.5, n)受保护属性 A 与隐藏能力 H 同源,H 是两者的共同祖先(混淆因子)。X = 0.8 * H + 0.7 * A + rng.normal(0, 0.5, n)可见特征 X 被 A 直接影响,所以 X 是 A 的“后代特征”。return 1.5 * X + 2.0 * A这个预测器直接把出厂设定 A 写进公式,是赤裸裸的歧视路径。def counterfactual_X(H, A_new)平行宇宙重算函数:锁住 H,只改写 A。return 0.8 * H + 0.7 * A_new按结构方程重算 A 改写后的特征 X,等价于给模型喂“改写版照片”。pred_0 = model(feat_fn(H, 0.0), zeros)生成 A=0 世界的预测分布。gap = np.abs(pred_1 - pred_0).mean()两个宇宙预测差的平均幅度,即公平缝隙。lambda H_, a: H_公平模型的“特征提取器”:直接把非后代变量 H 端给预测函数,绕开所有 A 的辐射。
常见误区
误区很多人写代码前先做一步“脱敏”:把性别、民族这些字段从训练集里删掉,然后松了一口气说“模型里没有歧视变量了,肯定公平”。可上线后歧视照样出现,让人百思不解。
正解受保护属性会通过它的“后代”把自己的影响传给预测结果。删掉 A 本身,但保留居住地、消费习惯等 A 的后代特征,就像撕掉了“出厂标签”,可标签粘过的胶痕还在传导影响。反事实公平要求的是把 A 的整条因果辐射都隔离掉,而不仅仅是移走 A 这一个字段。
为何常见:直觉上“看不见等于不存在”,但机器学习最擅长从相关特征中重组出受保护属性的影子。删除字段后留下的代理变量,恰是隐蔽歧视最常见的老巢。
误区“只要两组人的录取率、通过率一样,就说明我们的算法是公平的。”这是很多团队给领导汇报时最爱用的一句话。
正解统计公平只约束群体层面的结果比例,反事实公平约束的是个体层面的因果不变性。两个标准可以相互矛盾:录用率完全一致,但模型却因为 A 让两个实力相同的人得到截然不同的命运。老板的话是:“平均水位一样高,不代表每艘船的吃水线都公平。”
为何常见:群体统计量容易计算、便于汇报,而个体因果判断需要建模假设和计算成本,人们本能地选简单的标准来交差。
误区有人拿数据算个相关性热力图,再把相关系数高的变量之间随便连几条箭头,就宣称“我们建好了因果图”,开始跑反事实公平。
正解因果图的每条箭头都代表“干预前者,后者会变”的结构性断言,方向画反,do 算子算出来的就是假因果。相关只是“同时出现的概率”,因果是“拧一下旋钮会发生什么”。相关图可以自动算,因果图必须结合领域知识手工审定。
为何常见:从数据中学习相关性有现成工具,而因果结构需要行业经验与专家访谈,偷懒的人会把省下的功夫变成审计报告里的地雷。
误区“报告上写着‘已通过反事实公平审计’,以后谁再说我们歧视,就拿报告怼回去。”不少团队把审计证书当成永久免检金牌。
正解反事实公平完全建立在因果图假设之上。图里漏了混淆因子,审计就成了“带着错误地图找路”。业务环境在变,数据分布在漂移,今天的因果结构明天可能失效。正确的做法是用敏感性分析检验结论稳健性,并定期重新审计,而不是把“审计通过”奉为神谕。
为何常见:审计通过是客观数字,人容易忘记数字背后是一组主观构建的结构假设;再加上“维护期不用干活”的侥幸心理,就把一次性审查当成了终身保障。
面试题
Q1. 反事实公平的核心思想是以下哪一项?
- A.两组通过率必须完全相等
- B.同一人改写属性后预测不变← 正确答案
- C.所有特征必须强制纳入模型
- D.预测结果必须做到零错误
答案:B。反事实公平不比较两个不同的人,而是把同一个人的“出厂设定”改写后看预测是否变化,所以选 B。A 是统计公平,C 与公平无关,D 是准确率问题。
Q2. “受保护属性”最准确的含义是什么?
- A.法规禁止据此歧视人的属性← 正确答案
- B.训练集中出现次数最多的属性
- C.对预测贡献最大的那个属性
- D.和标签相关性最高的属性
答案:A。受保护属性指法律或伦理上不允许用来歧视人的特征,如性别、种族、民族,所以选 A。B、C、D 都是数据或业务视角的描述,不涉及伦理约束。
Q3. 只把“性别”字段从训练数据中删掉,为什么仍可能不公平?
- A.性别通过后代特征间接泄漏← 正确答案
- B.模型会自动把性别字段再生成
- C.删掉特征会导致模型无法收敛
- D.性别是预测中最关键的变量
答案:A。删字段只去掉“直达车”,性别仍可通过居住地、消费习惯等后代特征影响预测,所以选 A。模型不会自动生成字段(B 错),删特征照样能训练(C 错),性别也未必是关键变量(D 错)。
Q4. 下列哪些变量允许出现在反事实公平的预测模型中?
- A.受保护属性的非后代变量← 正确答案
- B.因果图上 A 的后代变量
- C.与 A 无关的隐藏能力变量← 正确答案
- D.受保护属性本身未做变换
答案:AC。反事实公平要求预测不依赖 A 及其后代,因此允许 A 的非后代变量(如隐藏能力 H)和与 A 无关的变量,选 A、C。B(后代变量)与 D(A 本身)都会让歧视进入预测。
Q5. do(A=a) 与条件 A=a 的本质区别是什么?
- A.do 是干预切断指向 A 的箭头← 正确答案
- B.do 是观察保留原来的结构
- C.二者在统计上是完全等价的
- D.do 只在非线性模型中才会出现
答案:A。do 是结构干预,要切断指向 A 的所有箭头,和“看到 A”的自然观察完全不同,所以选 A。观察保留一切结构(B 错),二者不等价(C 错),do 与线性非线性无关(D 错)。
Q6. 因果图上的箭头方向表示什么?
- A.箭头表示变量间的相关强弱
- B.箭头表示因果影响的方向← 正确答案
- C.箭头记录数据采集时间顺序
- D.箭头标记特征的存储顺序
答案:B。因果图中每条箭头代表“干预前者,后者会变”的因果影响方向,所以选 B。箭头有方向,但不表示相关强弱(A 错)、采集顺序(C 错)或存储顺序(D 错)。
Q7. 若存在 A→X→Y 且 A→Y 两条路径,改变 A 引起的 Y 变化包含什么?
- A.只有直接路径带来的效应
- B.只有间接路径带来的效应
- C.直接与间接路径效应之和← 正确答案
- D.与因果路径无关的随机项
答案:C。A 同时走直达路 A→Y 和转乘路 A→X→Y,所以改变 A 引起的 Y 变化是两条路径效应之和,选 C。A、B 各只说了一半,D 与因果无关。
Q8. 反事实公平成立的前提条件包括哪些?
- A.拥有结构正确的因果图← 正确答案
- B.数据覆盖关键混淆因子← 正确答案
- C.预测模型必须是非线性的
- D.只用 A 的非后代特征预测← 正确答案
答案:ABD。反事实公平建立在正确因果图、覆盖混淆因子的数据以及只用非后代特征三个前提上,选 A、B、D。线性还是非线性模型不影响定义本身(C 错)。
Q9. 平行宇宙比喻中的“改写旋钮”对应因果推理中的哪个概念?
- A.对因果图的干预 do 算子← 正确答案
- B.变量之间的简单相关系数
- C.训练时的交叉验证机制
- D.对特征做的标准化缩放
答案:A。“改写旋钮”就是把 A 强行设成某个值的干预 do(A=a),所以选 A。相关系数描述观察层面的相关(B 错),交叉验证与标准化缩放都与干预无关(C、D 错)。
Q10. 关于未观测混淆对反事实公平审计的影响,下列说法正确的是?
- A.未观测混淆令因果图失真← 正确答案
- B.敏感性分析可评估稳健性← 正确答案
- C.数据量足够大便完全克服
- D.遗漏共同祖先让审计失效← 正确答案
答案:ABD。未观测混淆会让因果图缺节点、漏路径,审计可能失真(A、D 对);敏感性分析可以在假设区间内评估结论稳健性(B 对);样本量再大也无法代替未观测变量本身(C 错)。