先看一个很常见的场景:有人提交了一份申请,几分钟后收到系统回复——“综合评分不足”。他打客服电话问为什么,对方也说不出具体哪一条没达标,只能重复那句评分不足。事情到这里并没有结束,真正的问题才刚刚开始:这套打分规则,是怎么被写进去的。
想说清楚“公平”,先得说清楚跟谁比
关于算法公平的讨论,经常在第一步就卡住。同一份模型,如果按不同群体的通过比例来看,可能被认为不平衡;如果按误差率来看,又是另一幅样子;如果看分数是否在不同群体间具有可比含义,结论还会再变一次。这几种衡量方式在数学上常常互相冲突,想让它们同时成立,多数时候做不到。
所以真正可操作的问题,不是笼统地问“它公平吗”,而是把条件补齐:跟谁比、在哪一个维度上比、允许多大的偏差、由谁来认定这个偏差可以接受。问题问得含糊,答案就只能含糊。
历史会顺着数据流进模型
模型学到的是过去发生过什么。招聘筛选、内容推荐、资源分配,只要训练数据来自真实世界,过去那些未必合理的决定就会被当作规律吸收进去。更麻烦的是,模型往往比人更“稳定”地执行这些规律,效率越高,偏差被复制的速度也越快。
还有一类隐蔽的入口,叫代理变量。邮编、设备型号、填写表单的时间、甚至提交时的网络环境,单看都像是中性信息,但组合起来常常间接指向群体身份。把它们当作普通特征喂进模型,表面上没有使用敏感信息,实际上该有的关联一点没少。做算法公平的检查时,这类变量值得单独拿出来看。
偏差一旦进入回路,会自己确认自己
推荐和排序类的系统还有个特殊之处:输出会改变输入。系统给了曝光,用户产生行为,行为又成为下一轮训练的数据。如果第一轮的分发就偏了,后面拿到的数据只会继续证明这个偏向是对的。这种反馈回路不是靠上线前跑一次评估能发现的,它需要在上线之后持续观察。
能落地的部分,其实很朴素
把公平当成一项工程要求,要做的事并不神秘:
- 记录数据来源和特征取舍的理由,尤其是那些说不清用途却相关性很强的字段;
- 对敏感属性做代理检测,而不是只看有没有直接使用;
- 评估时按群体分别看误差,而不是只看总体指标好看;
- 保留人工复核与申诉入口,让被拒绝的人能拿到一句具体解释;
- 把模型的适用边界写进文档,说明它在什么条件下不该被使用。
这些做法都不新鲜,难的是坚持。算法公平更像一项长期的运维工作,而不是交付前签个字的一次验收。模型会更新,数据分布会漂移,业务目标会调整,任何一次改动都可能让之前的结论失效。
有些取舍,技术决定不了
还有一种期待需要提前说清楚:技术不能替人做完价值判断。资源有限的时候,放宽某一处的门槛,往往意味着另一处的标准要跟着变。谁来做这个决定、依据是什么、事后怎么向受影响的人交代,这些属于治理范畴。技术能做的是把不同选择的后果算清楚、摆出来,而不是替人拍板。
回到开头那通电话。一个人被系统拒绝时,至少应该有人能告诉他,是哪条规则起了作用,以及他可以怎么改。这比在报告里写一句“模型已通过公平性评估”,要有意义得多。