SlowGuess/NeurIPS_2023_OCR huggingface dataset:
Figure 10: Histograms of p-values of the conditional independencies in (9) and (10) over 100 bootstrap runs for  $\mathbf{b} = \{\# \text{ of people financially dependent on the applicant, applicant's savings}\}$ , Algorithm 1 results in  $\mathbf{z}^{(i)} = \{\text{purpose for which the credit was needed, applicant's checking account status with the bank}\}$ .
G.5 Adult dataset
The Adult dataset [Kohavi and Becker, 1996] is used for income analysis where the goal is to predict whether an individual's income is more than $50,000 using 14 demographic and socio-economic features. The sensitive attribute  $t$  is the individual's sex, either male or female. Further, the categorical attributes are one-hot encoded. As with German Credit dataset, we apply Algorithm 1 with  $n_r = 100$  and  $p_v = 0.1$  where we search for a set  $\mathbf{z} = (\mathbf{z}^{(o)}, \mathbf{z}^{(i)})$  of size at most 3 under the following two assumptions on the set of all children  $\mathbf{b}$  of  $t$ : (1)  $\mathbf{b} = \{\# \text{individual's relationship status (which includes wife/husband)}\}$  and (2)  $\mathbf{b} = \{\# \text{individual's relationship status (which includes wife/husband), individual's occupation}\}$ . In either case, Algorithm 1 was unable to find a suitable  $\mathbf{z}$  satisfying  $\mathbf{b} \perp_p y | \mathbf{z}, t$ . This suggests that in this dataset, there may not be any non-child descendants of the sensitive attribute, which is required for our criterion to hold.
G.6 Licenses
In this work, we used a workstation with an AMD Ryzen Threadripper 3990X 64-Core Processor (128 threads in total) with 256 GB RAM and 2x Nvidia RTX 3090 GPUs. However, our simulations only used the CPU resources of the workstation.
We mainly relied on the following Python repositories — (a) networkx (https://networkx.org), (b) causal-learn (https://causal-learn.readthedocs.io/en/latest/), (c) RCoT [Strobl et al., 2019b] and (d) ridgeCV, (https://github.com/scikit-learn/scikit-learn/tree/15a949460/sklearn/linear_model/_ridge.py). We did not modify any of the code under licenses; we only installed these repositories as packages.
In addition to these, we used two public datasets (a) German Credit dataset (https://archive.ics.uci.edu/ml/datasets/statlog+ (german+credit+data)) and (b) Adult dataset (https://archive.ics.uci.edu/ml/datasets/adult). These datasets are commonly used benchmark datasets for causal fairness, which is why we chose them for our comparisons.
Figure 11: The SMCMs used in Section 4.2 to compare Algorithm 1 with the Baseline that uses  $\mathbf{b}$  for front-door adjustment. These are the 6 out of the 100 random graphs in Section 4.1 for  $p = 10$ ,  $d = 2$ , and  $q = 1.0$  where our approach was successful indicating existence of  $\mathbf{z} = (\mathbf{z}^{(i)}, \mathbf{z}^{(o)})$  such that the conditional independence statements in Theorem 3.2 hold.