# 公平判据 —— 群体、个体、反事实

> 三个家族构成了公平文献的骨架。群体公平：人口均等、均等几率、条件使用准确率相等——平均而言在各受保护群体上速率相等。个体公平（Dwork et al. 2012）：相似的个体得到相似的决策；决策映射上的 Lipschitz 条件。反事实公平（Kusner et al. 2017）：如果在反事实地改变敏感属性时一个决策保持不变，那它对该个体就是公平的。2024 年的理论结果（NeurIPS 2024）：存在一个内在的「反事实 vs 准确率」权衡；一个模型无关的方法能把一个「最优但不公平」的预测器转换成反事实公平的，准确率损失有界。回溯反事实（arXiv:2401.13935, 2024 年 1 月）：一个新范式，避免了对受法律保护属性做干预。哲学层面的调和（ICLR Blogposts 2024）：有了因果图，满足某些群体公平度量就蕴含反事实公平。

**类型：** Learn
**语言：** Python（标准库，三判据对比）
**前置要求：** 阶段 18 · 20（偏见）、阶段 02（经典 ML）
**预计时间：** ~60 分钟

## 学习目标

- 说出三个群体公平判据（人口均等、均等几率、条件使用准确率相等）和一个不可能性结果。
- 经由 Dwork et al. 2012 的 Lipschitz 表述描述个体公平。
- 描述反事实公平及其对因果图的依赖。
- 解释回溯反事实，以及为什么它绕开了「对受保护属性做干预」的问题。

## 问题背景

第 20 课讲的是测量偏见。第 21 课讲的是定义测量该服务的那个公平标准。三个家族给出结构上不同的标准——一个模型可以是群体公平、个体不公平，也可以反事实公平、群体不公平。选一个标准是一项政策决策；没有标准是普遍最优的。

## 核心概念

### 群体公平

- **人口均等（Demographic parity）。** 对所有群体 P(Y=1 | A=a) = P(Y=1 | A=a')。接受率相等。
- **均等几率（Equalized odds）。** P(Y=1 | Y*=y, A=a) = P(Y=1 | Y*=y, A=a')。各群体 TPR 和 FPR 相等。
- **条件使用准确率相等（Conditional use accuracy equality）。** P(Y*=y | Y=y, A=a) = P(Y*=y | Y=y, A=a')。各群体预测值相等。

不可能性（Chouldechova, Kleinberg-Mullainathan-Raghavan 2017）：在基础率不相等的情况下，这三者无法同时满足。

### 个体公平

Dwork et al. 2012。如果一个决策映射 f 相对于某个任务特定的相似度度量 d 满足 |f(x) - f(x')| <= L * d(x, x')（L 为某个 Lipschitz 常数），那它就是个体公平的。相似的个体得到相似的决策。

需要定义 d。这是政策问题，不是统计问题。

### 反事实公平

Kusner et al. 2017。如果在某个总体的因果模型下，当个体 i 的敏感属性被反事实地改变时决策保持不变，那这个决策对 i 就是反事实公平的。

需要一张因果 DAG。这张 DAG 是一个建模选择。反事实公平的正当性，只取决于那张 DAG 的正当性。

### 反事实 vs 准确率的权衡

NeurIPS 2024 理论：反事实公平与预测准确率之间存在内在权衡。一个模型无关的方法能把一个「最优但不公平」的预测器转换成反事实公平的，准确率代价有界。这个准确率代价取决于「最优不公平预测器」里敏感属性系数的大小。

### 回溯反事实

arXiv:2401.13935（2024 年 1 月）。传统反事实需要对敏感属性做干预——「如果这个人是另一种性别，决策会变吗」。在法律上这有问题：分类法律不允许对受保护属性做干预。

回溯反事实把方向翻过来：不去干预属性，而是问该个体的实际特征的哪种组合，本会产生那个反事实结果。这绕开了法律上的反对意见。

### 哲学层面的调和

ICLR Blogposts 2024。手里有一张因果图时，满足某些群体公平度量就蕴含反事实公平。三个家族并不正交；它们是同一个底层因果结构的不同侧面。

这并没有解决不可能性定理（基础率不等仍然阻止群体公平同时成立）。但它表明，「群体」与「个体 / 反事实」之间表面上的对立，部分是「没有把因果模型说清楚」造成的假象。

### 这在阶段 18 里的位置

第 20 课是偏见测量。第 21 课是公平定义。第 22 课是隐私（差分隐私）。第 23 课是水印。这些是与分配相邻的课，与第 7-11 课「与欺骗相邻」的内容互补。

```figure
an-fairness-trilemma
```

## 实际使用

`code/main.py` 造了一个带敏感属性和不等基础率的玩具二分类数据集。在一个简单分类器上计算人口均等、均等几率、条件使用准确率相等。观察这三个指标互相打架。施加一个针对人口均等的重新加权，观察它在另两个指标上的代价。

## 拿去用

本课产出 `outputs/skill-fairness-criterion.md`。给定一个公平宣称或政策，它识别出在宣称哪个判据、在所宣称的不等基础率下模型能否满足其余判据、以及这个宣称依赖于哪张因果 DAG。

## 练习

1. 运行 `code/main.py`。报告默认数据上的三个群体指标。施加针对人口均等的重新加权，再报告一次。

2. 用非敏感特征上的 L2 实现 Dwork et al. 2012 的个体公平度量。报告在常数 L=1 下有多少对违反 Lipschitz。

3. 读 Kusner et al. 2017。为简历评分构造一张简单的双特征因果 DAG，并指出它蕴含的反事实公平条件。

4. 2024 年的回溯反事实论文避免了对受保护属性的干预。描述一个这件事对法律合规很重要的场景。

5. ICLR 2024 的调和主张群体公平与反事实公平是同一结构的侧面。在 `code/main.py` 里挑两个判据，说出能让它们等价的那个因果假设。

## 关键术语

| 术语 | 大家嘴上怎么说 | 它实际是什么 |
|------|-----------------|------------------------|
| 人口均等 | 「速率相等」 | P(Y=1 | A=a) 在各群体相等 |
| 均等几率 | 「TPR/FPR 相等」 | 各群体真阳性率和假阳性率相等 |
| 条件使用准确率 | 「PPV/NPV 相等」 | 各群体预测值相等 |
| 个体公平 | 「Lipschitz 条件」 | 相似的个体得到相似的决策 |
| 反事实公平 | 「对因果改变不变」 | 在反事实地改变属性时决策保持不变 |
| 回溯反事实 | 「用实际值来解释」 | 从结果往回推、而非从属性往前推的反事实 |
| 不可能性定理 | 「三者冲突」 | Chouldechova / KMR 2017：基础率不等时群体判据互斥 |

## 延伸阅读

- [Dwork et al. — Fairness through Awareness (arXiv:1104.3913)](https://arxiv.org/abs/1104.3913) —— 个体公平
- [Kusner, Loftus, Russell, Silva — Counterfactual Fairness (arXiv:1703.06856)](https://arxiv.org/abs/1703.06856) —— 反事实公平
- [Chouldechova — Fair prediction with disparate impact (arXiv:1703.00056)](https://arxiv.org/abs/1703.00056) —— 不可能性
- [Backtracking Counterfactuals (arXiv:2401.13935)](https://arxiv.org/abs/2401.13935) —— 针对受保护属性干预的新范式
