↓ Skip to main content
  1. Posts/

模型准确率高达 98%,为什么仍然可能是不公平的?——理解 Algorithmic Bias

·12377 words·25 mins
Note: This article is available in Chinese only. 本文暂无英文版本。 View original

起因
#

上一篇聊分布偏移与外推的时候,我把关注点放在了训练数据与生产环境之间的不一致上:模型在离线测试集上哪怕拿到了 98% 的高分,一旦现实环境发生 Covariate Shift 或者流形外推,线上的预测能力依然可能迅速滑坡。

那个时候我脑子里的心智模型其实依然有一个默认的前提:离线测试集的统计指标,代表了模型在理想、无偏移环境下的最高质量上限。 只要环境稳定、测试集与训练集严格服从独立同分布(IID),模型给出的高准确率就足以证明它是一个优秀的系统。

但最近跟着 MIT 6.S191(2026 年 Lecture 6: New Frontiers)往下看时,课程抛出了一个完全打破这个前提的维度:

如果一个模型在训练集和测试集上表现都极度优异,离线准确率高达 95% 甚至 98%,并且上线部署后外部环境也完全没有发生分布偏移,它是否依然可能是一个存在严重缺陷、甚至带来负面危害的系统?

答案是肯定的。

这就是 Algorithmic Bias(算法偏差)所直面的核心命题。对于长期做 ML Infra、成天盯着训练收敛曲线、推理延迟与显存吞吐的我来说,这个问题像是一记重锤:它逼着我从单纯的系统与统计指标中抬起头来,重新审视我们交给模型去拟合的那些目标本身。

需要在最开头简要说明的是:这里的 Algorithmic Bias 指的是算法决策系统对不同人群产生的系统性不公平表现,与统计学习理论中模型复杂度权衡的 Bias-Variance Tradeoff(偏差—方差权衡)中的 Bias 完全是两个不同维度的概念。

一个 95% 准确率的分类模型
#

为了直观体会为什么总体指标会骗人,可以先看一个简单的图像分类思想实验。

假设我们训练了一个图像识别模型,并在一个严格保留的 1000 张测试集上进行评估。测试集由两个不同的用户群体构成:群体 A 有 900 张图片,群体 B 有 100 张图片。

离线评测跑完后,统计报表交出了一份非常亮眼的答卷:

群体划分测试样本数预测正确数预测错误数群体准确率
多数群体 A900891999.0%
少数群体 B100604060.0%
全局汇总10009514995.1%

从全局加权平均来看,模型的总体准确率是:

$$ \text{Accuracy}_{\text{overall}} = \frac{891 + 60}{1000} = 95.1\% $$
总体准确率与群体准确率的加权遮蔽效应

如果我们的自动化评估流水线只监控全局指标,这个 95.1% 的测试结果几乎是一路绿灯。在常规的工程发布标准里,95% 已经是一个极具说服力的上线阈值。

但在亮眼数字的掩盖下,真实情况是:模型对少数群体 B 的预测错误率高达 40%。每遇到 5 个群体 B 的样本,模型就会判断错 2 个。

面对这种巨大的群体差异,我在刚接触这类问题时想了挺久。这里需要理清两个关键细节:

首先,不同群体之间的性能差距绝对值得重点审计,但这并不必然意味着模型设计者有主观上的恶意偏见。在很多情况下,这种差距纯粹是由于数据集中不同群体的样本规模悬殊,梯度下降在最小化全局经验风险(Empirical Risk Minimization)时,算法自动选择了牺牲少数群体以换取全局损失更低。

其次,算法公平性之所以不能只看单一的总体准确率,是因为在真实的业务落地场景中,错误的类型与决策后果在现实世界中是有极高代价的。如果这是一个门禁安检、贷款资质审查或医疗辅助诊断系统,群体 B 用户承受的高错误率就意味着他们被系统性地拒之门外,或者面临严重的漏诊风险。

总体指标抹平了内部的断裂,让工程师误以为系统对所有人一视同仁。

真实世界里的镜像:Gender Shades 评测
#

上面的思想实验并不是空穴来风的假设。在真实的深度学习落地历史中,这个现象曾被极其严肃地揭露过。

2018 年,研究者 Joy Buolamwini 与 Timnit Gebru 发表了一篇具有里程碑意义的论文:Gender Shades: Intersectional Accuracy Disparities in Commercial Gender Classification。

他们评测了当时三家主流科技公司(IBM、Microsoft、Face++)公开提供的商业人脸分析 API。这项任务非常具体:从输入的人脸静态图像中识别出对应的性别。这里必须严谨区分:这是人脸属性的二分类任务,而不是一般意义上用于身份比对的人脸身份识别(Face Verification / Identification)。

研究者按照 Fitzpatrick 肤色分级系统将受试人脸划分为较浅肤色(Lighter)与较深肤色(Darker),并与性别维度交叉组合,得出了四个细分人群的评测数据:

Gender Shades 2018 研究中商业性别分类系统的交叉群体错误率对比

以论文中评测的某商业分类器为例,测试展现出了令人触目惊心的系统性鸿沟:

  • 在较浅肤色男性(Lighter Male)样本上,分类系统的错误率最低仅为 0.8%;
  • 在较浅肤色女性(Lighter Female)样本上,错误率上升至 7.1%;
  • 在较深肤色男性(Darker Male)样本上,错误率为 12.0%;
  • 而在较深肤色女性(Darker Female)这一交叉群体上,错误率飙升到了 34.7%。

这意味着,同一个商业级视觉模型,在面对浅色男性人脸时几乎百发百中,但在面对深色女性人脸时,其性能几乎跌落到了接近盲猜的边缘(错误率超过三分之一)。

需要客观说明的是:这些具体的数据来自于 2018 年发表的历史研究,展示的是第一代商业人脸分类 API 在当时的表现,并不代表当前工业界各个最新模型的现状。近年来计算机视觉领域对评测基准的多样性已经进行了大量的补足与重构。

但这项研究带来的思想冲击至今依然存在:如果只看厂商在官方产品主页上宣传的“全库平均准确率超 90%”,没有人能察觉到系统背后隐藏着如此巨大的群体鸿沟。

当多个维度的特征(如肤色与性别)交织在一起时,处于交集边缘的少数群体往往承担了系统所有结构性盲区的总和。

数据集偏差与采样偏差:数据量大不等于覆盖充分
#

为什么一个在海量数据上训练出来的深度神经网络,会对不同人群产生如此悬殊的性能差距?

最先浮现在脑海里的根源通常是:数据集本身是有偏差的。

在机器学习中,我们常常接触到两个相关的术语:

  • Dataset Bias(数据集偏差):训练数据由于采集环境、测量手段或历史限制,未能如实反映真实世界中目标现象的整体特征。
  • Sampling Bias(采样偏差):作为数据集偏差的最常见形式,它特指在数据抽样阶段,某些群体被选中的概率系统性高于其他群体,导致样本在统计结构上发生倾斜。

一个很常见的工程师直觉是:“是不是因为数据量还不够大?如果我们把图片从一万张堆到一百万张,模型应该就能自动学好所有人群了吧?”

这种想法其实混淆了数据总量与流形覆盖度的本质区别。

真实目标总体与存在采样偏差的训练数据覆盖对比

举个医疗影像领域的典型场景:我们希望训练一个皮肤病变智能识别模型,用来辅助医生筛查黑色素瘤。研发团队通过与几家顶尖的三甲医院合作,收集了数十万张高清临床皮肤照片。

这个数据集从绝对数量来看极其庞大,标注质量也很高。然而仔细核查数据来源就会发现:这些合作医院大多集中在特定纬度的大型城市,就诊的患者绝大多数属于特定肤色群体。最终沉淀下来的数十万张图片中,深色皮肤上的病变样本可能占比不足 2%。

在这种情况下,哪怕你把数据集扩展到五百万张,只要数据生成的采样机制没有改变,深色皮肤病变样本的稀缺状态就不会得到任何改善。

对于依靠梯度反向传播的神经网络而言,参数更新的动力完全来自于损失函数。占总量 98% 的优势样本支配了每一次前向传播与反向传播的梯度方向,网络自然会把几乎所有的表达容量(Representation Capacity)倾注在优势特征空间的细微差别上。至于那 2% 的少数样本,模型只需要把它们当成偶尔出现的异常波动即可,甚至只要通过死记硬背就能将局部损失降下来。

更具有隐蔽性的是:如果原始的数据收集过程本身就带有采样偏差,那么无论你在本地如何严格地执行随机切分(Train/Val/Test Split),切出来的测试集都无法戳破这个幻觉。

用概率符号来表达,原始数据采集过程决定了样本池服从某种倾斜分布 \( P_{\text{sample}}(X) \)。由于训练集和测试集都是从这个倾斜的池子里随机抽取的,它们确实满足独立同分布假设:

$$ P_{\text{train}}(X, Y) = P_{\text{test}}(X, Y) = P_{\text{sample}}(X, Y) $$

测试集在这一刻交出 98% 的高分,只能证明模型在 \( P_{\text{sample}} \) 这个局限的观察窗口内具备极好的泛化能力。但在更广阔的现实服务总体 \( P_{\text{real}}(X) \) 中,那些因为采样偏差而处于大片未覆盖区域的人群,他们的真实体验早已支离破碎。

数据量大,绝不等于数据覆盖充分。

伪相关:模型到底依赖了什么信号?
#

除了样本数量的失衡,数据中还潜藏着更隐蔽的关联陷阱:Spurious Correlation(伪相关)。

在深度学习的分类任务中,模型的目标非常单纯——在特征空间中寻找任何能够最小化交叉熵损失的有效统计模式。然而,由于深度神经网络具备极强的特征提取能力,它往往倾向于走“捷径”(Shortcut Learning),抓住那些与目标标签高度共现、但在因果逻辑上完全站不住脚的背景信号。

经典的动物图像分类就是一个生动的例子:在标准的图像数据集中,牧场上的牛通常都出现在绿油油的草地背景中;而骆驼则绝大多数出现在黄色的沙漠或沙滩上。

对于卷积神经网络而言,提取大面积绿色的颜色直方图和草地纹理,在计算复杂度和梯度下降难度上,远比精准定位牛的四肢、犄角和躯干轮廓要轻松得多。经过多轮迭代,网络很可能会把“草地背景”学成判断“牛”的关键正向特征。

当测试集依然来自于草地上的牛时,模型能给出极其自信的正确预测。但只要让一头牛站在海滩上,或者让一只狗站在草地上,模型的预测就会立刻崩溃。

这里需要厘清一个概念边界:Spurious Correlation 与 Sampling Bias 并不是一回事。

  • Sampling Bias 关注的是“哪些数据进入了样本池,样本池的群体比例是否代表真实世界”;
  • Spurious Correlation 关注的是“在给定的数据中,模型究竟利用了何种非本质的关联来走捷径”。

但它们之间又存在着紧密的纽带:正是因为采样机制在特定子空间上的单一性,才人为制造并固化了这些虚假的相关性。

需要保持理性的是:我们不能极端地认为“所有非因果的统计相关性都不可用”。在现实工程中,纯粹基于因果图的严格建模往往成本极高,大量的统计关联在很多工业预测场景中确实表现出了稳定的预测价值。

真正需要我们警惕的,是那些一旦迁移到开放环境就会彻底失效、或者与我们真正的业务决策意图完全背道而驰的脆弱关联。

而当这种伪相关与社会决策、人类福利交织在一起时,它所引发的后果就不再只是“把沙滩上的牛认成狗”那么简单了。

医疗算法案例:当优化目标本身出现错位
#

在学习算法偏差的过程中,最让我震撼、也是最能展现算法系统深层隐患的,是发表在顶级期刊《Science》上的一篇真实研究。

2019 年,Ziad Obermeyer 等人在《Science》上发表了题为 Dissecting racial bias in an algorithm used to manage the health of populations(DOI: 10.1126/science.aax2342)的重磅论文。

这项研究深入剖析了一套在美国商业医疗体系中被广泛使用的商业风险预测算法。这套算法影响着全美数百万乃至上千万患者的医疗资源分配。

这项研究的推导逻辑极为严密,值得我们顺着研究者的思路一步步拆解:

第一步:真实的业务需求是什么?
#

医疗系统和保险机构的初衷非常崇高:识别出那些健康状况最差、患有多种复杂慢性病、最需要额外医疗照护(High-Risk Care Management)的重症患者。

为这些患者提前分配专职护士、定制随访计划并提供额外的医疗资源,不仅能挽救生命,还能防止病情恶化导致的急诊住院。因此,业务真正想要度量的目标是:患者真实的健康需求(Healthcare Need)或疾病负担(Illness Burden)。

第二步:真实需求无法直接测量,于是寻找代理目标
#

一个人的“健康需求”是一个极其复杂的综合概念,包含多种慢性病进展、疼痛感受、生活自理能力等,在结构化数据库中根本没有一个现成的纯数值字段可以直接用来当训练 Label。

于是,算法设计者做出了一个在商业和工程上看起来极其自然的决定:使用患者未来一年的总医疗费用支出(Healthcare Cost)作为代理目标(Proxy Target)。

背后的商业直觉看似天衣无缝:身体越差、健康需求越大的病人,去医院的频次自然越高,使用的药物和治疗手段越多,产生的账面医疗费用自然也就越高。用未来支出当作训练标签,既有现成的账单数据,又有清晰连续的监督信号。

第三步:代理目标背后致命的隐含假设
#

这个转化过程其实悄悄植入了一个极其脆弱的前提假设:

相近的真实健康需求,能够通过相近的账面医疗支出如实反映出来。

第四步:现实世界无情地击碎了假设
#

然而在真实的医疗与社会经济环境中,这个假设完全不成立。

不同群体获得优质医疗资源的可及性存在巨大落差:

  • 拥有完善商业医保、收入水平较高、周边医疗资源丰富的群体,稍微感到不适就会前往诊所做全面体检,按时配药,账面上产生的医疗支出很高;
  • 而由于历史贫困、缺乏充分医保覆盖、或者对医疗机构信任度较低的弱势群体(在论文的研究语境下主要是黑人患者),往往面临更高的就医自付门槛与更少的就诊机会。即使身体已经罹患多种严重慢性病,只要还能忍受,他们就不会走进医院,实际产生的账单支出被系统性地严重压低。

这就导致了一个荒谬的现实扭曲:在相同的真实健康需求下,黑人患者产生的平均医疗费用,远低于白人患者。

第五步:模型完美地学错了方向
#

当算法工程师在这个数据集上训练模型时,监督学习的机制运转得挑不出任何毛病:模型利用过去的人口学特征、历史就诊记录,以极高的准确度和极小的均方误差,成功预测了患者“未来一年会花多少医疗费用”。

从机器学习系统的指标来看,模型甚至可以算作优化成功的典范。

然而,当这个“高精度”的支出预测模型被直接拿来充当“健康需求”并决定谁能获得额外医疗照护时,灾难发生了:

医疗风险算法中真实需求与代理目标的错位

研究者通过核查患者真实的生理指标发现:在算法给出的相同风险评分节点上,黑人患者实际罹患的慢性病数量(如高血压、糖尿病并发症等)明显高于白人患者。 算法把大量真正病入膏肓的弱势群体挡在了额外照护计划之外,因为根据模型预测,他们“未来产生的账单开销不够多”。

论文中给出了一个震撼的测算:在该算法实际使用的筛选规则下,入选额外照护计划的患者中,黑人患者仅占 17.7%。而当研究者纠正了这种代理目标偏差,直接使用多项真实健康指标(如未受控慢性病数量)重新构建算法后,入选照护计划的黑人患者比例跃升到了 46.5%。

这意味着,原先有将近三分之二本该获得救助的重症黑人患者,被这套在统计指标上表现完美的算法隐蔽地剥夺了救治机会。

这项研究成为了我理解算法系统的一个重要思想转折点:

模型并没有把它的训练目标预测错,它把账面支出预测得精准极了。真正的问题在于,我们一开始就给模型挑了一个根本无法反映真实业务意图的代理目标。

机器忠诚地执行了我们的损失函数,但它不知道这个目标从一开始就跑偏了。

招聘思想实验:历史录用率 98% 的模型算不算好模型?
#

顺着 Obermeyer 的案例,我在学习过程中做了一个关于简历初筛模型的思想实验。这个实验彻底颠覆了我最初对算法偏差的直觉理解。

假设我们受命开发一套自动化简历初筛系统,希望从海量的求职申请中筛选出优秀的候选人。

系统的特征输入包含:毕业学校(School)、实习经历(Internship)、项目经验(Projects)、工作年限以及技术技能等。

我们手头拥有公司过去五年的数万份历史应聘记录。为了快速启动监督学习,最唾手可得的训练标签就是:该候选人在历史上最终是否被录用(Label = 1 表示录用,0 表示未录用)。

假设经过几轮特征工程与深层网络训练,模型在严格划分的历史测试集上交出了一份惊人的成绩单:Accuracy 达到了 98%。(需要说明:这里的 98% 是思想实验中的设定数值,用来探讨极端理想的统计指标)。

在刚开始思考这个案例时,我做了一个假设:假设这家公司在过去几年的招聘文化中,面试官普遍存在某种名校偏好——他们特别倾向于录用 A 大学的毕业生,而对 B 大学的毕业生非常苛刻。

于是,历史数据中呈现出强烈的统计偏向:A 大学的毕业生历史录用率极高。

模型经过训练后,自然敏锐地捕捉到了这一规律:在推理时,只要看到来自 A 大学,打分就极高;看到来自 B 大学,哪怕其他各项经历非常优秀,打分也很低。

我最初的直觉误区:Spurious Correlation
#

我当时的第一反应是:这不就是前面学过的 Spurious Correlation 吗?

我以为:学校背景和真实的工作能力之间只是一种弱相关或者伪相关,模型把学校当成了捷径,忽略了更本质的编程能力与项目深度。

但后来我反复推敲,发现这个归因并不准确。

如果这项算法任务的定义从一开始就是**“预测过去那批老面试官会不会录用这个人”**,那么学校根本就不是什么伪相关,而是货真价实、解释力极强的因果驱动因素!因为过去的面试官在决策时就是严重依赖学校背景做决定的。如果目标是模拟历史面试官的行为,模型准确率做到 98%,不仅没有学偏,反而极其精准地复刻了人类的行为模式。

这让我意识到,真正的问题根本不是伪相关,而是更深层的:Label Bias(标签偏差)。

我们真正关心的业务目标是:候选人入职后是否具备解决实际工程问题的真实能力(Competency)。

而我们丢给模型去拟合的训练标签,却是:历史面试官主观决策下的录用结果(Historical Hiring Decision)。

历史录用结果,根本不等于真实工作能力。

这是两套完全不同的概率分布:

  • 模型学到的是条件概率 \( P(\text{Historical Decision} \mid X) \);
  • 业务真正需要的是条件概率 \( P(\text{True Competency} \mid X) \)。

模型成功将前者推向了 98% 的极高泛化准确率,但它对后者可能完全一无所知。

招聘筛选算法中特征、标签与真实业务目标的映射鸿沟

为什么不能把这个问题归结为 Overfitting?
#

有人可能会问:这算不算模型的过拟合(Overfitting)?

完全不算。

过拟合的经典定义是模型记住了训练集中的特定样本噪声,导致在独立同分布的未见测试集上误差激增。但在我们的实验设定中,测试集同样抽样自历史招聘记录,模型在测试集上依然稳定交出 98% 的超高准确率。

模型并没有过拟合,它非常成功地在整个数据分布内泛化了历史招聘偏见。

这正是算法偏差最棘手的地方:传统的机器学习防御机制(交叉验证、L2 正则化、Dropout、早停法)都是为了防止模型过拟合而设计的。它们能保证模型精准地泛化数据池里的规律,但对“规律本身是不是有毒的”,这套统计防线完全失灵。

删掉 school 特征,就能阻断偏差吗?
#

意识到模型严重依赖毕业院校后,一个最直接的工程冲动是:我们在特征预处理阶段,直接把 school 这一列 Drop 掉,不给模型看学校,问题不就解决了吗?

在机器学习系统设计中,这种做法被称为 Fairness through Unawareness(通过盲化实现公平)。

但只要在真实的特征管道中做过工程,就会发现这个想法有多天真。

在现代特征工程中,哪怕你删除了直接的敏感特征 school,候选人的特征空间里依然留存着大量的关联特征:

  • 实习单位(特定企业更偏好向特定高校提供实习名额);
  • 开源项目协作圈(特定国家实验室或高校实验室的项目);
  • 专业技能组合、导师姓名、甚至撰写经历时的措辞风格。

这些特征在统计上与学校背景高度关联,被称为 Proxy Features(代理特征)。

深度神经网络拥有上百万甚至上亿的参数容量,极擅长在多维离散特征空间中提取高阶交叉项。即便剥离了显式的学校字段,网络完全能够通过“某特定实验室的项目 + 某特定企业的实习 + 某特定地区的技能关键词”这一组特征的线性组合,以极高的置信度隐式重构出该候选人的学校与社会阶层背景。

但更致命的一点在于:我们甚至不能简单地把所有与学校相关的特征全部粗暴删掉。

因为候选人在校期间写出的高质量论文、做出的扎实工程项目,这些确实是评估其未来工作能力的关键证据。如果我们把一切与教育背景有统计关联的特征统统抹杀,模型的预测能力本身也会彻底塌陷。

更深层的一刀在于:即便我们发明了某种神奇的表征隔离算法,彻底抹除了特征层对学校的一切隐式推断,我们依然没有碰触到问题的核心。

因为历史训练标签里的偏见还在那里。历史面试官在给非名校候选人打上“未录用(0)”时,这个有偏的标签就已经被永久固化在训练数据中了。

删除特征试图解决的是输入端的信息泄露,而 Label Bias 根植于监督信号的价值错位。两者根本不在一个层面上。

改用工作绩效作为标签,问题就解决了吗?
#

推导到这里,自然的下一步思考是:

既然“历史是否被录用”是一个有毒的标签,那我们能不能放弃这个标签,换一个更接近业务本质的监督信号?

比如:使用候选人入职一年后的实际工作绩效(Job Performance Rating)作为训练标签。

绩效评分能够直接反映员工在岗位上的真实产出、代码质量与业务贡献,这显然比面试官一眼定生死的初筛标签要客观得多。

这个思路确实更靠近真实目标了,但它立刻将我们推向了统计学中的另一个经典困境:Selection Bias(选择偏差)。

可以看一个具体的数字推导: 假设在过去五年中:

  • 来自 A 大学的申请者有 500 人,历史面试官录用了其中的 400 人;
  • 来自 B 大学的申请者同样有 500 人,历史面试官仅录用了其中的 50 人。

现在我们试图用“入职一年后的绩效评分”来构建训练集。问题立刻暴露无遗:

我们只能观测到那被录用的 400 名 A 校员工和 50 名 B 校员工的真实绩效。

那 450 名被拒之门外的 B 校申请者,如果在进入公司后得到充分的资源支持,他们的真实绩效会是多少?系统里是一片空白。

在因果推断中,这被称为反事实(Counterfactual)的缺失。

由于历史录用决策本身存在偏见,能够存活下来并产生“绩效标签”的样本,已经经历了一轮强烈的选择性过滤。那 50 名被录用的 B 校候选人,很可能必须展现出远超常人的极端天赋才能打破偏见被破格录用;而 400 名 A 校候选人中则可能包含了大量中规中矩的普通人。

如果我们直接在这些带有选择偏差的样本上训练预测模型,模型学到的条件概率分布依然是被严重扭曲的。

更危险的是,这种选择偏差会顺理成章地演变成算法工程中最令人担忧的系统性恶疾:Feedback Loop(数据反馈循环)。

算法决策与数据反馈闭环机制

这个闭环的运转机制令人不寒而栗:

  1. 历史偏见阶段:过往的人工筛选偏好录用 A 校毕业生,产生倾斜的样本库;
  2. 选择性观测阶段:只有被录用者能产生绩效数据,未被录用者的才华永远无法被系统观测;
  3. 算法训练阶段:模型在这批有偏的截断数据上训练,将 A 校与成功结果牢牢绑定;
  4. 决策部署阶段:算法上线后,以冷酷的自动化效率拒绝几乎所有 B 校申请者;
  5. 偏见强化阶段:在未来的新一轮数据沉淀中,B 校毕业生的入职人数进一步归零,历史偏见被算法系统以“科学理性”的名义自我实现、无限放大并彻底固化。

算法不仅继承了历史的偏见,更通过自动化决策切断了系统自我纠偏的一切可能性。

偏差不再是一个静态的特征缺陷,它已经内化成了整个数据生成管道与社会决策流程之间的共生循环。

算法公平性:相同的准确率就是公平吗?
#

既然单纯追求全局准确率无法保证公平,甚至可能掩盖严重的系统性偏差,那么在算法系统设计中,我们究竟应该如何衡量公平?

是不是只要让模型对所有群体的准确率完全一致,系统就称得上公平了?

答案依然是否定的。

我们可以用医疗筛查场景做一个简单的说明。假设我们在两个不同的人群(群体 X 和群体 Y)上部署肺癌早期筛查模型。模型的全局准确率在两个群体上都达到了极高的 90%。

但在错误分类的内部构成上,却截然不同:

  • 在群体 X 中,10% 的错误全部来自于假阳性(False Positive):健康人被误判为可疑病变,需要进一步做低剂量的无创 CT 复查;
  • 在群体 Y 中,10% 的错误全部来自于假阴性(False Negative):真实的早期肿瘤被模型漏诊为完全健康,患者错失了最佳手术干预窗口。

从数学指标上看,两个群体的 Accuracy 完全相等,都是 90%。但在真实的人间悲剧中,假阴性意味着生命的消逝,假阳性仅仅带来一次额外的复查。

不同类型的错误,在现实世界中背负着完全不对等的经济、社会与生命代价。

因此,在算法公平性(Algorithmic Fairness)的研究领域中,研究者们提出了更细粒度的评估维度:

  • Demographic Parity(人口统计均等,也称统计均等):要求无论候选人属于哪一个敏感群体,模型做出正面决策(如通过初筛、发放贷款)的比例必须完全相同。它的直觉是完全无视历史背景,追求结果层面的绝对分布一致。
  • Equal Opportunity(机会均等):由 Moritz Hardt 等人在 2016 年提出,它退后了一步,要求在**真正具备胜任力(真实标签为正)**的优质候选人中,不同群体被模型正确召回(True Positive Rate / Recall)的概率必须相等。它的核心直觉是:只要一个候选人真的能把工作做好,他被算法选中的机会就不应该因为群体属性而打折。

需要特别强调的是:公平性绝不意味着要求模型在任何场景下对所有人交出一模一样的预测数值。

不同的公平性定义之间往往存在着深刻的内在冲突。深入的理论研究早已证明,除了一些极其极端的退化情况,不同的公平性数学准则在统计上通常是互斥的。

作为工程师,我们不需要去死记硬背复杂的公平性定理证明,但必须树立一个心智基准:不存在一种脱离具体业务场景、放之四海皆准的纯数学公平标准。 每一个指标的选择,本质上都是在不同群体的利益、不同错误的代价以及业务的生存发展之间做艰难而严谨的权衡。

与 Distribution Shift 的异同
#

把算法偏差梳理到这里,有必要把它与上一篇讨论的 Distribution Shift(分布偏移)放在一起做个对照。

在刚接触这两个概念时,我曾有一段时间把它们在直觉上混在了一起:既然都是“模型在某些样本上表现糟糕”,它们是不是一回事?

仔细剖析后会发现,这两个概念关注的核心问题完全不同:

比较维度Distribution Shift(分布偏移)Algorithmic Bias(算法偏差)
关注核心训练分布 \( P_{\text{train}} \) 与部署分布 \( P_{\text{deploy}} \) 之间的时间演化或空间跨度变化模型是否对不同人群或亚群体产生系统性的、不对等的性能差距或决策危害
环境假设重点关注环境不平稳、分布漂移下的鲁棒性与泛化能力关注决策系统的公平性、价值对齐与社会影响
IID 下的表现在严格满足 IID 假设的环境中,理论上不发生分布偏移问题即使训练集与测试集严格满足 IID 假设,算法偏差依然可以全盘存在

区分这两者最锋利的一刀在于:Algorithmic Bias 完全不需要任何分布偏移作为前提。

如果一家公司在过去十年里的招聘偏好稳定不变,未来十年也维持原样;如果测试集是从过去五年的数据池里严格随机抽取的——环境绝对平稳,分布完全相同。然而,这个模型依然在系统性地排斥某些高校、某些肤色或某些性别的候选人。

分布偏移考验的是模型应对“未知变化”的技术底线;而算法偏差考验的是系统复现“历史既成事实”的道德与业务底线。

两者完全可以在同一个系统里叠加发生,但绝不能混为一谈。

从 ML Infra 视角重新审视模型质量
#

作为一个长期从事机器学习基础设施(ML Infra)和系统工程的工程师,我的日常工作通常被一系列极其硬核的指标所占据:

  • 训练端:集群算力利用率(MFU)、通信拓扑效率、梯度数值稳定性、Loss 收敛速度;
  • 推理端:P99 端到端延迟、并发 QPS、显存占用优化、动态 Batching 吞吐;
  • 运维端:服务的可用性 SLA、权重文件的版本管理、输入特征的 Schema 校验。

在以往的交付标准中,只要一个模型在训练集上顺利收敛,离线 Validation/Test 指标达到交付阈值,通过了浮点数值一致性验证,且在线上能够稳定跑出极低的延迟和极高的吞吐,这个模型在工程维度上就算是“完美交付”了。

然而,对算法偏差的理解彻底重构了我对**模型质量(Model Quality)**的认知层级。

一个在软硬件层面稳定到极致的系统,完全有可能正在以极高的计算效率,稳定、高效且精准地产生系统性偏见。

站在系统工程的视角,真正健全的模型质量应当由下至上包含四个层次:

1┌────────────────────────────────────────────────────────┐
2│ 第四层:现实社会影响与分群公平度(Impact & Fairness)  │
3├────────────────────────────────────────────────────────┤
4│ 第三层:业务真实目标一致性(Objective Alignment)       │
5├────────────────────────────────────────────────────────┤
6│ 第二层:分布外与长尾泛化力(Out-of-Distribution Robust)│
7├────────────────────────────────────────────────────────┤
8│ 第一层:数学优化与计算正确性(Optimization & Systems) │
9└────────────────────────────────────────────────────────┘
  1. 第一层:数学优化与计算工程正确性。模型是否实现了预期的损失函数最小化?权重更新是否平稳?服务延迟与吞吐是否达标?
  2. 第二层:统计泛化与鲁棒性。模型能否在独立留出的测试集上保持高准确率?面对环境的分布偏移与噪声扰动,能否维持泛化底线?
  3. 第三层:优化目标与业务真实意图的一致性。我们写进代码里的 Loss 和监督 Label,究竟是不是业务真正要解决的问题?我们是否用易于获得的账面费用绑架了患者的健康需求?是否用历史录用偏好绑架了候选人的真实能力?
  4. 第四层:系统决策在不同群体上的实际影响与公平度。全局的高准确率是否掩盖了细分少数群体的灾难性错误?模型的输出在现实社会中会如何重构资源分配?是否正在形成自我强化的有害反馈闭环?

面对这四个层次,显然不可能要求 ML Infra 工程师去包揽所有业务与伦理的决策。但对于构建平台系统的工程师而言,理解这一图景至关重要:

我们不仅要为算法提供高效训练的大集群,更应当在特征平台中支持细粒度的分群切片审计,在模型评估系统中默认支持多维度的性能分布分析,在服务监控大盘上建立对输出决策分布与反馈截断的长周期跟踪。

没有工程层面的支撑,上层的算法审计只能是空中楼阁;而缺乏上层对算法偏差的敬畏,工程系统做得越快越稳,可能造成的隐性损害反而越深。

写在最后
#

回到本文最开头抛出的那个疑问:

一个离线准确率高达 98% 的模型,为什么仍然可能是不公平的?

顺着 MIT 6.S191 Lecture 6 的脉络一路推导下来,我脑子里的认知转变可以收拢为四个递进的层次:

第一层,全局宏观的高准确率,常常以牺牲少数群体的利益为代价。 加权平均是一把极其锋利的双刃剑,它能把极端恶劣的分群错误率完全稀释在庞大的多数样本中。

第二层,强大的泛化能力,不仅能泛化客观规律,更能完美泛化历史偏见。 一个没有过拟合的模型,完全可能在严格的测试集上极其精准地复现出历史决策中所有的陈旧偏见。

第三层,算法最大的盲区往往不在于网络架构或优化器,而在于我们为它挑选的目标本身。 机器学习系统只负责解答我们向它提出的数学问题。如果我们因为客观现实的度量困难,草率地把真实目标偷换成了有偏差的代理目标,模型优化得越成功,现实决策偏离得就越离谱。

第四层,算法偏差不是某个单独特征的孤立缺陷,而是贯穿在从数据采样、标签定义、选择性观测到决策反馈的整条流水线之中。 简单地删掉敏感特征或者盲目堆砌数据量,根本无法触及问题的根基。

机器学习能够以令人惊叹的数学精度帮我们优化一个目标,

但它永远无法替我们回答:这个目标从一开始究竟是否值得优化。

参考资料
#

Related

从随机标签实验重新理解深度学习泛化:能记住,为什么还能泛化?

起因 # 看 6.S191 的课程内容时,讲到 generalization 相关的话题,提到了一篇 2017 年的论文。 说实话,我以前对"泛化"这件事没有太深入地想过。教科书上的经典说法——模型越复杂越容易过拟合,要用正则化控制复杂度——我一直就这么接受下来了。L1、L2、Dropout 这些方法背后的直觉也说得通:限制模型的有效复杂度,不让它过度拟合训练数据中的噪声。没觉得有什么问题。