人口学平价要求模型对不同群体的正预测率相等,是最直观的群体公平定义,但在处理率差异真实存在时可能与预测准确性冲突,需结合具体应用场景在公平性与效用间权衡,是算法公平领域讨论的基准定义之一,在公平性方法比较中广泛使用,相关研究持续推动该领域的方法学进步。
需要学习群体公平Demographic Parity,人口学平价要求模型对不同群体的正预测率相等,是最直观的群体公平定义,但在处理率差异真实存在时可能与预测准确性冲突,需结合具体应用场景在公平性与效用间权衡,是算法公平领域讨论的基准定义之一,在公平性方法群体公平Demographic Parity属于AI伦理与社会影响 > 算法公平性的关键内容,掌握后可更好地衔接后续章节。
目录
可视化演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
Demographic Parity 的定义与群体公平形式化条件
Demographic Parity(统计均等)要求模型对不同敏感群体的正预测率相等,即 P(Ŷ=1|A=0) = P(Ŷ=1|A=1),其中 A 为敏感属性(如性别、种族、年龄等)。该条件刻画了预测结果在群体层面的分布平衡,是最直观但非唯一的群体公平定义。
敏感属性指可能引发歧视的受保护特征,包括性别、种族、年龄、宗教信仰等,其划分依据法律法规与社会公平共识。公平性审计通常围绕这些属性分组统计模型行为。
用统计均等条件下的正预测比例定义群体公平,关注预测结果的分布平衡而非预测的正确性。满足 Demographic Parity 意味着各群体获得正预测的概率相同,是一种独立于真实标签的结果公平约束,不要求预测本身准确。
正预测率相等约束的统计含义与基线率问题
基线率指群体中真实正例的比例,即 P(Y=1|A=a),反映不同群体真实结果的分布差异。它与正预测率 P(Ŷ=1|A=a) 是不同的统计量,前者描述真实标签分布,后者描述模型输出分布。
群体间基线率差异在现实中普遍存在,例如不同族裔的贷款违约率、不同性别的某岗位胜任比例等,这种差异源于社会经济、历史、文化等多重因素,并非一定由模型偏见造成。
强行均等正预测率会扭曲真实风险刻画:当基线率不同时,要求预测分布均等可能导致对高基线率群体的预测偏低、对低基线率群体预测偏高,使预测偏离真实分布。基线率差异正是公平性与准确性冲突的根源,任何仅约束预测分布的公平准则都难以同时兼顾准确刻画。
Demographic Parity 与预测准确性的内在冲突
满足公平约束常以牺牲准确性为代价,因为强制正预测率相等会偏离最优预测策略,增加总体预测误差。当群体基线率差异越大,这种冲突越显著。
高基线率群体(真实正例多)在强制拉平后会出现更多假阴性,即真实正例被错误预测为负例,错过应获机会的个体;低基线率群体(真实正例少)在强制拉平后会出现更多假阳性,即真实负例被错误预测为正例,造成误判与资源错配。
准确性与公平性之间存在帕累托权衡空间:在不显著损害准确性的前提下可改善公平性,但无法在不付出代价的情况下同时最优化两者。实践需要在帕累托前沿上根据业务可接受度选择权衡点。
Demographic Parity 与其他群体公平定义的比较
Equal Opportunity(机会均等)只约束真实正例侧相等,即 P(Ŷ=1|Y=1, A=0) = P(Ŷ=1|Y=1, A=1),关注真正例率(TPR)的一致性,确保各群体中真实正例被正确识别的概率相同。
Equalized Odds(均等赔率)约束正例与负例两侧都相等,即同时要求真正例率与假正例率在群体间一致,条件更严格,既保证正例识别公平也约束负例误判。
Demographic Parity 只看预测分布不看真实标签,即 P(Ŷ=1|A=0) = P(Ŷ=1|A=1),是无条件公平。三者形成由条件到无条件的公平谱系:Demographic Parity 最宽松(无条件),Equal Opportunity 居中(条件于正例),Equalized Odds 最严格(条件于正负两侧)。
Demographic Parity 在算法公平性中的基准地位与局限
因定义简洁、易于计算,Demographic Parity 被广泛用作公平比较的基准指标,在学术论文与工业实践中常作为公平性评估的第一步。它只需要预测标签与敏感属性,无需真实标签即可计算,部署成本低。
忽略真实标签是其主要局限:仅凭预测分布无法判断预测是否准确,可能掩盖模型对某些群体系统性预测错误的问题。一个满足 DP 的模型可能同时对某群体产生大量错误预测。
可能掩盖群体内部个体差异:群体层面统计均等不代表群体内每个子群或个体都得到公平对待,存在“平均掩盖不均”的风险。此外,代理变量下公平约束易被规避——当模型不直接使用敏感属性时,可通过邮编、姓名、学校等代理变量间接还原敏感信息,绕过形式上的公平约束。
实际 AI 系统中的 Demographic Parity 检测与权衡实践
上线前按敏感属性分组统计正预测率差异,计算各群体正预测率及其差异比,作为公平性评估的基础指标。常用判定标准包括差异阈值(如不超过 4-5 个百分点)与 80% 规则(四分之五规则)。
差异超过预设阈值时触发再训练或后处理校准:再训练通过修改目标函数加入公平约束从源头优化,后处理通过调整各群体决策阈值实现,无需重训练、部署成本更低。
须量化公平改善与业务指标损失之间的权衡,记录准确率、召回率等核心指标的变化,确保公平改善不以不可接受的业务损失为代价。决策依据须完整记录以应对合规审计,包括公平指标数值、阈值选择理由、权衡取舍过程,满足反歧视法规与内部治理要求。
AI 应用场景
信贷模型的群体公平性审计
阶段:模型部署阶段
解决的问题:信贷模型在敏感群体间贷款批准率差异过大,违反 Demographic Parity 约束,存在歧视风险与合规隐患
具体案例:某银行信贷模型上线前,公平性审计模块按种族与性别分组统计贷款批准率,发现某少数族裔批准率比主流群体低 18 个百分点,违反 Demographic Parity;团队采用后处理阈值校准将该差异压到 5 个百分点内,同时记录整体准确率下降 2.3 个百分点的权衡数据,供合规审计使用。
招聘筛选模型的公平约束优化
阶段:模型训练阶段
解决的问题:简历筛选模型在性别维度上通过初筛比例差异过大,存在性别歧视风险
具体案例:一家科技公司简历筛选模型在目标函数中加入群体公平正则项,要求男女候选人通过初筛的比例差不超过 3 个百分点;训练后女性通过率从 22% 提升到 28%,接近男性 30% 的水平,在可控准确率损失下显著改善群体公平。
Python 演示
import numpy as npfrom sklearn.metrics import accuracy_score def demographic_parity_rate(y_pred, group): """计算各敏感群体的正预测率 P(Y_hat=1 | A=a)""" groups = np.unique(group) rates = {} for g in groups: mask = group == g rates[g] = y_pred[mask].mean() return rates def detect_violation(rates, threshold=0.05, use_four_fifths=True): """检测是否违反 Demographic Parity(阈值检测 + 80% 规则)""" vals = list(rates.values()) max_rate, min_rate = max(vals), min(vals) diff = max_rate - min_rate violations = {"rate_diff": diff} violations["threshold_violation"] = diff > threshold if use_four_fifths and min_rate > 0: ratio = min_rate / max_rate violations["four_fifths_ratio"] = ratio violations["four_fifths_violation"] = ratio < 0.8 return violations def threshold_calibration(y_score, group, thresholds): """后处理阈值校准:按群体设置不同决策阈值""" y_pred = np.zeros_like(y_score, dtype=int) for g, t in thresholds.items(): mask = group == g y_pred[mask] = (y_score[mask] >= t).astype(int) return y_pred def find_fair_thresholds(y_score, y_true, group, target_diff=0.03): """搜索使群体差异满足目标且准确率最高的后处理阈值""" groups = sorted(np.unique(group)) grid = np.arange(20, 80, 2) cand_a = np.percentile(y_score[group == groups[0]], grid) cand_b = np.percentile(y_score[group == groups[1]], grid) best = None for t0 in cand_a: for t1 in cand_b: thresholds = {groups[0]: t0, groups[1]: t1} y_pred = threshold_calibration(y_score, group, thresholds) rates = demographic_parity_rate(y_pred, group) diff = max(rates.values()) - min(rates.values()) acc = accuracy_score(y_true, y_pred) if diff <= target_diff: if best is None or acc > best["accuracy"]: best = {"thresholds": thresholds, "accuracy": acc, "diff": diff, "rates": rates} if best is None: best = {"thresholds": {groups[0]: 0.5, groups[1]: 0.5}, "accuracy": 0.0, "diff": 1.0, "rates": {}} return best def evaluate_tradeoff(y_true, y_pred_before, y_pred_after, group): """量化公平改善与准确性损失权衡""" before_rates = demographic_parity_rate(y_pred_before, group) after_rates = demographic_parity_rate(y_pred_after, group) before_diff = max(before_rates.values()) - min(before_rates.values()) after_diff = max(after_rates.values()) - min(after_rates.values()) return { "fairness_gain": before_diff - after_diff, "accuracy_loss": accuracy_score(y_true, y_pred_before) - accuracy_score(y_true, y_pred_after), "before_diff": before_diff, "after_diff": after_diff, "before_rates": before_rates, "after_rates": after_rates, } if __name__ == "__main__": np.random.seed(42) n = 2000 group = np.random.choice([0, 1], size=n, p=[0.6, 0.4]) y_true = (np.random.rand(n) < (0.5 + 0.2 * group)).astype(int) y_score = y_true * 0.6 + np.random.rand(n) * 0.4 + 0.1 * group y_pred_before = (y_score >= 0.5).astype(int) rates = demographic_parity_rate(y_pred_before, group) violations = detect_violation(rates) best = find_fair_thresholds(y_score, y_true, group) y_pred_after = threshold_calibration(y_score, group, best["thresholds"]) tradeoff = evaluate_tradeoff(y_true, y_pred_before, y_pred_after, group) print("原始正预测率:", rates) print("违规检测:", violations) print("校准后阈值:", best["thresholds"]) print("权衡评估:", tradeoff)
rates[g] = y_pred[mask].mean()对每个敏感群体计算预测为正的比例,即正预测率 P(Ŷ=1|A=a),是 Demographic Parity 的核心统计量。diff = max_rate - min_rate计算群体间正预测率的最大差值,作为衡量公平性偏离程度的指标,差值越大越不公平。violations["threshold_violation"] = diff > threshold阈值检测:当群体间正预测率差值超过预设阈值(默认 5 个百分点)时判定违反 Demographic Parity。ratio = min_rate / max_rate计算最小群体与最大群体正预测率之比,用于 80% 规则(四分之五规则)判定。violations["four_fifths_violation"] = ratio < 0.880% 规则:当比值低于 0.8 时判定违反 Demographic Parity,该规则源自就业公平的统一遴选程序指南。y_pred[mask] = (y_score[mask] >= t).astype(int)按群体各自阈值对预测分数二值化,实现后处理阈值校准,不改变模型本身只改决策边界。if diff <= target_diff:判断当前阈值组合是否使群体正预测率差异满足目标约束(默认 3 个百分点)。if best is None or acc > best["accuracy"]:在所有满足公平约束的候选阈值中,选取准确率最高的一组,体现公平与准确的帕累托权衡。"fairness_gain": before_diff - after_diff,公平改善量等于校准前后群体差值的减少量,数值越大表示公平性提升越多。"accuracy_loss": accuracy_score(y_true, y_pred_before) - accuracy_score(y_true, y_pred_after),准确性损失为校准前后准确率之差,用于评估公平改善所付出的业务代价。y_score = y_true * 0.6 + np.random.rand(n) * 0.4 + 0.1 * group构造带群体偏移的预测分数,模拟现实中不同群体基线率与模型输出存在差异的不公平场景。
常见问答
Demographic Parity 要求什么条件在敏感群体间相等?
什么是基线率,为什么它会导致公平性与准确性冲突?
80% 规则(四分之五规则)如何判断是否违反 Demographic Parity?
Demographic Parity 与 Equal Opportunity 的主要区别是什么?
为什么即使不使用敏感属性作为输入特征,模型仍可能违反 Demographic Parity?
后处理阈值校准如何改善群体公平?
常见误区
误区认为满足 Demographic Parity 就等于模型完全公平无歧视。
正解Demographic Parity 只保证群体间正预测率相等这一种统计公平,不保证机会均等、预测校准或个体公平。一个满足 DP 的模型仍可能对某群体系统性预测错误或在个体层面存在差别对待。
为何常见:Demographic Parity 是最直观、最常被提及的公平定义,容易让人误以为它是公平的全部,忽视了公平是一个多维度、可能相互冲突的概念。
误区认为不同群体真实正例比例基线率本来就相等,模型差异纯属偏见。
正解现实中基线率常真实存在差异,源于社会经济、历史、文化等多重因素。盲目拉平正预测率会扭曲真实风险刻画,导致对高基线率群体预测偏低、低基线率群体预测偏高。
为何常见:人们倾向假设各群体本质相似,忽视客观存在的分布差异,将所有预测差异都归因于模型偏见。
误区认为 Demographic Parity 要求正预测率绝对相等,差一点都算违反。
正解实践中以容忍阈值衡量,例如差异不超过 4 个百分点或满足 80% 规则即可接受。绝对相等在统计估计中既不现实也无意义,需要考虑抽样波动与业务容忍度。
为何常见:定义形式上写的是“相等”,容易被字面理解为严格相等,忽视了实际工程中的容错与统计不确定性。
误区认为只要不使用敏感属性作为输入特征,模型就自动满足 Demographic Parity。
正解模型可能通过邮编、姓名、学校、消费习惯等代理变量间接还原敏感信息,导致代理歧视。删除敏感特征不能消除特征间的相关性,反而可能让模型更依赖代理变量。
为何常见:直观认为不用敏感特征就不会歧视,忽视了高维特征空间中特征相关性的隐蔽性,这是“色盲”公平观的典型误区。
参考来源
- webpageFairness and Machine Learning: Limitations and Opportunities算法公平性系统教材,涵盖 Demographic Parity、Equal Opportunity、Equalized Odds 等群体公平定义及其冲突分析。
- webpageEquality of Opportunity in Supervised Learning (NeurIPS 2016)提出 Equal Opportunity 公平定义,并系统讨论其与 Demographic Parity、Equalized Odds 的关系与权衡。
- webpageFair prediction with disparate impact: A study of bias in recidivism prediction instruments (Big Data, 2017)证明在基线率不同时 Demographic Parity 与校准不可同时满足,揭示公平准则间的内在冲突。
- webpageUniform Guidelines on Employee Selection Procedures (1978) - Section 15 (80% Rule)四分之五规则(80% 规则)的官方出处,是 Demographic Parity 实践判定中广泛采用的阈值标准。