指南
跨群體的公平性
一個模型可以在每個群體上都達到準確率門檻,卻仍然對其中一個更嚴苛:偽陰性多一倍,或者選中率只有一半。oloproof fairness 讀取一份已判定案例的檔案,並詢問各群體之間相差多遠。它用與其他所有規則相同的四種狀態作答。均等(parity)方法已於 2026 年 11 月 3 日通過獨立稽核准入,條件即本頁所述:案例彼此獨立,群體事先宣告,每條規則針對其屬性已記錄的案例,均等以你的標籤為準來衡量。
檔案與宣告
一個 CSV 或 JSONL 檔案,每個案例一列:一個 id、標籤(0 或 1)、預測(0 或 1,系統沒有給出時留空)、選擇性的機率,以及每個受保護屬性一欄。
fairness:
name: loan-screen
cases: decided.csv
label: label
prediction: prediction
probability: score
attributes:
sex: [female, male]
age_band: [under_30, 30_to_60, over_60]
intersections:
- [sex, age_band]
min_cell: 30
rules:
- {id: fnr-by-sex, rate: false_negative, attribute: sex, max_group_gap: 0.05}
- {id: fnr-crossed, rate: false_negative, attribute: [sex, age_band], max_group_gap: 0.10}oloproof fairness fairness.yaml --policy release.yaml --json區間假定每個案例都是不同的人。用 unit: person_id 指定識別人的欄位,一個人有多個案例的檔案會被拒絕;不指定時,回答會寫明這一假定。
比率是以下之一:error、false_positive(以標籤為 0 的案例為分母)、false_negative(以標籤為 1 的案例為分母)或 selection(預測為 1,以所有案例為分母)。在讀取檔案之前先指定群體。每條規則只讀取其自身屬性以已宣告值記錄的案例;缺少某個屬性的案例會被排除在使用該屬性的規則之外,但保留在其他規則中,每個答案都會計數它排除了什麼以及原因。當某些人比其他人更常缺少某個屬性時,答案針對的是記錄了該屬性的案例,那是另一個母體:先讀計數,再讀結論。排除的案例超過檔案 max_left_out(預設 10%;在規則上設定)的規則讀作 INSUFFICIENT_EVIDENCE,因為已記錄的案例可能不再代表其餘案例。結束代碼取最差規則的代碼:0 PASS,1 FAIL,3 INSUFFICIENT_EVIDENCE,4 MANUAL_REVIEW。
它如何判定
每個群體的比率得到 Oloproof 用於單一比率的精確區間,其水準為錯誤預算除以已宣告群體的數量。任意兩個群體之間的每個差值都由這些區間同時界定,因此任何一對都不需要單獨校正。當每個差距的上端都不超過門檻時,max_group_gap 規則通過;當某個差距的整個區間都高於門檻時,規則失敗。缺失的預測留在其群體中,並以最差值計數。
小群體與交叉群體
交叉兩個屬性會使單元成倍增加,其中一些會很小。有預測的案例數少於 min_cell 的單元(缺少預測的案例不計入其中)會在自己的一列回報為 INSUFFICIENT_EVIDENCE,在劃分中仍被計數,並阻止規則通過,因為最大的差距可能就在那裡。為該單元收集更多案例,或在執行之前宣告一個更粗的交叉。
下限與差距
用 worst_group 設定每個群體都必須達到的下限(「每個地區至少解決 80%」),用 max_group_gap 設定群體之間距離的上限(「偽陰性相差至多五個百分點」)。要求結果無偏的治理要求,就你選擇的比率而言,部分由差距來佐證;要求每個群體都獲得良好服務的要求,由下限來佐證。兩者單獨都不能表明系統是公平的。大多數系統兩者都需要。
依群體的校準
有機率欄時,會針對每個屬性和每個已宣告的交叉回報各群體的期望校準誤差,按機率劃分為 calibration_bins 個等寬分箱(預設 10 個)。它從不作為把關:沒有已准入的方法能界定它,而且在小群體中它雜訊很大。
它無法告訴你的
- 應該讓哪個比率相等才算公平:這是你的決定,值得與你選擇的屬性一起記錄下來。
- 關於你未宣告的群體的任何事情,或關於被計數兩次的人(一個人,多個案例)。
- 校準在群體之間的差異是否超出偶然。
- 標籤本身是否有偏:均等是相對於你帶來的標籤來衡量的。