This repository contains the code and reproduction scripts for the ACM FAccT 2026 paper "Privilege Scores". The project implements privilege scores (PS), privilege score contributions (PSCs), and related simulation and real-world experiments for mortgage and law-school admission settings.
If you use this code or build on the method, please cite:
@inproceedings{bothmann2026privilege,
author = {Bothmann, Ludwig and Boustani, Philip A. and Alvarez, Jose M. and Casalicchio, Giuseppe and Bischl, Bernd and Dandl, Susanne},
title = {Privilege Scores},
year = {2026},
isbn = {979-8-4007-2596-8/2026/06},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
doi = {10.1145/3805689.3812340},
booktitle = {The 2026 ACM Conference on Fairness, Accountability, and Transparency (FAccT '26)},
location = {Montreal, QC, Canada},
series = {FAccT '26}
}Create and activate a conda environment, then install R:
conda create --name priv_scores
conda activate priv_scores
conda install -c conda-forge r-base r-essentialsInstall the R packages used by the active simulation, real-data, and result scripts:
conda install -c conda-forge r-mlr3 r-mlr3learners r-mlr3tuning r-mlr3tuningspaces r-simcausal r-ggplot2 r-dplyr r-tidyr r-gridextra r-cowplot r-ggdist r-ggridges r-ranger r-r.utils r-rhpcblasctl r-lgr r-data.table r-rstan r-xtable r-mgcv r-knitr r-kableextra r-stargazer r-fairmodelsfairadapt is not currently available from conda-forge, so install it from R:
R -q -e "install.packages('fairadapt', repos = 'https://cloud.r-project.org')"The repository separates full experiment runs from paper-output scripts. The
main_* scripts rerun experiments and write timestamped .RData result files.
The results_* scripts load saved result objects and reproduce paper-facing
tables, plots, and diagnostics.
The simulation scripts are organized as:
code/
|-- main_sim_study.R # full simulation run
|-- results_sim_study.R # simulation tables and diagnostics
`-- shared helper layer
Run the full simulation study:
Rscript code/main_sim_study.RThe default command-line arguments are:
Rscript code/main_sim_study.R --M 100 --n_train 1000 --B 100 --num_cores 4 --n_evals 30 --german_scm_version "standard" --misspec_type "None" --thr_type "adaptive" --verbose FALSETo reproduce simulation tables and diagnostics from saved results, run:
Rscript code/results_sim_study.RHMDA data are not distributed with this repository. Download the 2022 loan-level
files from the HMDA Data Browser
and save them under data/real/hmda/ with the following filenames (expected by the code):
county_36061_loan_types_1.csvfor New York County, NY,state_WI_loan_types_1.csvfor Wisconsin,state_LA.csvfor Louisiana.
The HMDA mortgage scripts are organized as:
code/
|-- main_real_mortgage.R # full HMDA run
|-- results_real_mortgage-short.R # main paper HMDA plots and tables
|-- results_real_mortgage.R # extended HMDA summaries
`-- shared helper layer
The full HMDA run expects the raw HMDA files described in
code/main_real_mortgage.R and in the paper. Run the full mortgage experiment
with:
Rscript code/main_real_mortgage.RThe default command-line arguments are:
Rscript code/main_real_mortgage.R --B 100 --num_cores 3 --n_evals 25 --eiko FALSE --small FALSE --location "ny" --verbose TRUETo reproduce the main mortgage plots and tables from saved results, run:
Rscript code/results_real_mortgage-short.RFor the broader mortgage result summaries, run:
Rscript code/results_real_mortgage.RLaw School data are not distributed with this repository. Download the data from
Law School Admissions Bar Passage on Kaggle
and save the CSV under data/real/ as bar_pass_prediction.csv.
The Law School scripts are organized as:
code/
|-- main_real_lawschool.R # full Law School run
|-- results_real_lawschool.R # Law School plots and tables
`-- shared helper layer
Run the full Law School experiment:
Rscript code/main_real_lawschool.RThe default command-line arguments are:
Rscript code/main_real_lawschool.R --R 3 --B 100 --num_cores 3 --n_evals 25 --bell_dummy TRUE --verbose TRUE --pa "race"To reproduce Law School plots and tables from saved results, run:
Rscript code/results_real_lawschool.R