Palantir 的亚洲歧视案例:概率是如何计算的?

机器算法验证 可能性 p 值 列联表 合法的
2022-02-06 17:14:48

我读了这篇关于 Palantir 案的文章,其中劳工部指控他们歧视亚洲人。有谁知道他们从哪里得到这些概率估计?

我在 (a) 项中没有得到 1/741。

(a) 对于 QA 工程师职位,Palantir 从 730 多名合格的申请人(其中约 77% 是亚洲人)中聘用了 6 名非亚洲申请人和仅 1 名亚洲申请人。OFCCP 计算的不利影响超过三个标准差。这个结果是偶然发生的可能性大约是 741 分之一。

(b) 对于软件工程师职位,Palantir 从 1,160 多名合格的应聘者中(其中约 85% 是亚洲人)聘用了 14 名非亚洲应聘者和仅 11 名亚洲应聘者。OFCCP 计算的不利影响超过五个标准差。这一结果是偶然发生的可能性约为 340 万分之一。

(c) 对于 QA Engineer Intern 职位,Palantir 从 130 多名合格的申请人中(其中大约 73% 是亚洲人)聘用了 17 名非亚洲申请人,而只有 4 名亚洲申请人。OFCCP 计算的不利影响超过六个标准差。这个结果是偶然发生的可能性大约是十亿分之一。

2个回答

我将从歧视案件的经验中对此进行逆向工程。我绝对可以确定“741 中的一个”等值的来源然而,在翻译过程中丢失了太多信息,以至于我的其余重建依赖于看到人们如何在法庭环境中进行统计。我只能猜测一些细节。


自 1960 年代通过反歧视法(标题 VI)以来,美国的法院已经学会了查看 p 值并将它们与的阈值进行比较。他们还学会了查看标准化效应,通常称为“标准差”,并将它们与“两到三个标准差”的阈值进行比较。为了确立歧视诉讼的表面证据,原告通常会尝试进行统计计算,显示超过这些阈值的“不同影响”。如果不能支持这样的计算,案件通常无法推进。0.050.01

原告的统计专家经常试图用这些熟悉的术语来表达他们的结果。一些专家进行了一项统计检验,其中零假设表示“没有不利影响”,假设雇佣决定纯粹是随机的,不受员工任何其他特征的影响。(它是单尾还是双尾替代方案可能取决于专家和情况。)然后他们将此测试的 p 值转换为许多“标准偏差”,方法是将其引用到标准正态分布 - -即使标准 Normal 与原始测试无关。 他们希望通过这种迂回的方式将自己的结论清楚地传达给法官。

可以在列联表中总结的数据的首选检验是 Fisher 精确检验。在其名称中出现“Exact”特别令原告满意,因为它意味着已做出无错误的统计确定(无论可能是什么!)。

那么,这就是我对劳工部计算的(推测性重建)。

  1. 他们运行了 Fisher 精确检验或类似的方法(例如通过随机化确定 p 值该测试假设 Matthew Gunn 的回答中描述的超几何分布。(对于涉及此投诉的少数人,超几何分布不能很好地近似为正态分布。)χ2

  2. 他们将其 p 值转换为正常的 Z 分数(“标准偏差数”)。

  3. 他们将 Z 分数四舍五入到最接近的整数:“超过三个标准偏差”、“超过五个标准偏差”和“超过六个标准偏差”。(因为这些 Z 分数中的一些四舍五入更多的标准偏差,我不能证明“超过”是合理的;我所能做的就是引用它。)

  4. 在投诉中,这些积分 Z 分数被转换回 p 值!再次使用标准正态分布。

  5. 这些 p 值被描述为(可以说是以一种误导的方式)“这个结果是偶然发生的可能性”。

为了支持这一推测,请注意三个实例中 Fisher 精确检验的 p 值大约为这些基于假设池分别对应于“超过”这些数字的正常 Z 分数为1/12801/5650001/58000000730116013073011601303.164.64, 和5.52,四舍五入时分别是三个、五个和六个标准差,正是投诉中出现的数字。它们对应于(单尾)正态 p 值1/741,1/3500000, 和1/1000000000:正是投诉中引用的价值观。


这是一些R用于执行这些计算的代码。

f <- function(total, percent.asian, hired.asian, hired.non.asian) {
  asian <- round(percent.asian/100 * total)
  non.asian <- total-asian
  x <- matrix(c(asian-hired.asian, non.asian-hired.non.asian, hired.asian, hired.non.asian),
              nrow = 2,
              dimnames=list(Race=c("Asian", "non-Asian"),
                            Status=c("Not hired", "Hired")))
  s <- fisher.test(x)
  s$p.value
}
1/pnorm(round(qnorm(f(730, 77, 1, 6))))
1/pnorm(round(qnorm(f(1160, 85, 11, 14))))
1/pnorm(round(qnorm(f(130, 73, 4, 17))))

如何使用超几何分布正确计算 pval:

绘画k成功n没有替换的试验K中的成功N总项目将遵循超几何分布

对于单向测试,在 MATLAB 中,您可以调用pval = hygecdf(k, N, K, n);或 在这种情况下pval = hygecdf(1, 730, 562, 7)约为 0.0007839。

平均值和标准差由下式给出:

μ=nKNs=nKNNKNNnN1
因此,我们在平均值之外是 -3.957 个标准差。

我尝试了各种方法来复制 p 值(例如超几何 cdf,χ2测试,z-test),但我无法得到完全匹配。(更新:WHuber 的答案有一个算法可以产生完全匹配......这是可怕的东西!)

寻找 OFCCP 可能使用的公式,我看到的这个网站可能会有所帮助:http ://www.hr-software.net/EmploymentStatistics/DisparateImpact.htm

一些计算的总结:

Number and methodPart APart BPart CPVal from hypergeometric CDF7.839e-041.77e-061.72e-08χ2 stat15.6833.6837.16χ2 pval7.49e-056.47e-091.09e-09Pval from above document.001352.94e-071.00e-09

为了χ2stat 我使用了标准(expectedactual)2expected超过四个细胞。