一.统计均等差异——算法公平性的第一道防线
1.如何科学地判断算法是否"重男轻女"?
想象一下:你的信贷审批系统,男性通过率80%,女性60%。这算不算性别歧视?
直觉可能欺骗你,但统计学不会。
2.统计均等差异:最简单的公平性指标
统计均等差异的公式很简单:
DPD = |男性批准率 - 女性批准率|
如果:
·男性批准率 = 80%
·女性批准率 = 60%
那么:
DPD = |80% - 60%| = 20%
20%的差异意味着什么?
3.风险等级划分(基于我们的实践经验)
差异程度 风险等级 业务含义
0%-5% 优秀 几乎无差异
5%-10% 良好 轻微差异,可接受
10%-20% 关注 需要分析原因
20%-30% 高风险 建议立即整改
30%-100% 严重风险 可能违反法规
4.不仅仅是计算比例
单纯的数字对比还不够。我们的系统会进行统计显著性检验:
Python
//伪代码示意
from scipy import stats
def 检验性别差异显著性(男性批准数, 男性总数, 女性批准数, 女性总数):
//构建列联表
列联表 = [[男性批准数, 男性总数-男性批准 数],[女性批准数, 女性总数-女性批准数]]
//卡方检验
chi2, p值, 自由度, 期望值 = stats.chi2_contingency(列联表)
return p值 //p<0.05表示差异显著
双重验证机制:
差异大小:20%差异本身已经很大
统计显著性:p值<0.05,说明差异不是偶然的
5.统计均等差异的局限性
这个指标虽然简单直观,但有两个重要缺陷:
·可能"误伤好人":为了达到批准率相同,可能批准不该批的人
·可能"冤枉好人":为了达到批准率相同,可能拒绝该批的人
这就是为什么我们还需要第二道防线——均等几率差异:更严格的公平性标准
二.均等几率差异:更严格的公平性标准
1.不仅要结果公平,还要过程公平
想象两个场景:
·场景A(统计均等达标):
男性批准率:70%,女性批准率:70%
表面公平,但深入分析发现:
合格的男性: 90%被批准
合格的女性: 只有50%被批准
不合格的男性:50%被拒绝
不合格的女性:90%被拒绝
·场景B(统计均等不达标):
男性批准率:80%,女性批准率:60%
表面不公平,但深入分析发现:
合格的男女:都是90%被批准
不合格的男女:都是50%被拒绝
哪个更公平?
显然场景B更公平!这就是均等几率差异要解决的问题。
2.均等几率差异的双重检验
均等几率差异同时检验两个维度:
Python
def 计算均等几率差异(真实标签, 预测标签, 性别数据):
//1. 真阳性率差异(对合格者的公平性)
男性合格者 = 真实标签[(性别=='男') & (真实标签==1)]
女性合格者 = 真实标签[(性别=='女') & (真实标签==1)]
TPR_男 = 预测标签[男性合格者].mean() //男性合格者的批准率
TPR_女 = 预测标签[女性合格者].mean() //女性合格者的批准率
//2. 假阳性率差异(对不合格者的公平性)
男性不合格者 = 真实标签[(性别=='男') & (真实标签==0)]
女性不合格者 = 真实标签[(性别=='女') & (真实标签==0)]
FPR_男 = 预测标签[男性不合格者].mean() //男性不合格者的误批率
FPR_女 = 预测标签[女性不合格者].mean() //女性不合格者的误批率
//取两者中的最大值
return max(abs(TPR_男 - TPR_女),abs(FPR_男 - FPR_女))
3.风险等级划分
均等几率差异 风险等级 含义
0.00-0.03 优秀 几乎完美公平
0.03-0.08 良好 轻微差异
0.08-0.15 关注 需要优化
0.15-0.20 高风险 明显不公平
0.20-1.00 严重风险 严重不公平
4.为什么均等几率更重要?
1)更符合业务逻辑
·不鼓励"一刀切"的公平
·鼓励基于真实还款能力的决策
2)更严格的合规标准
·许多国家监管机构开始关注这一指标
·能更好地保护消费者权益
3)更好的业务平衡
·不过度牺牲准确率
·不过度损害公平性
5.与统计均等的关系
理想状态:
统计均等差异小 且 均等几率差异小 → 真正公平
常见问题:
1.统计均等差异大,均等几率差异小
→ 可能需要调整总体批准率
2.统计均等差异小,均等几率差异大
→ 隐藏的严重问题
3.两者都大
→ 明显歧视,需要立即整改
项目主页:ym-fairscan.cn