Bias RCA Scan

We have 2 RCA type tests for bias:

  • scan_bias_sources

  • scan_bias_metrics_rca

scan_bias_sources is described in more detail in this section. The auto option means that it essentially acts as an RCA scan, but there are multiple types of issues that it searches for.

scan_bias_metrics_rca is a typical RCA scan.

An example config file is as below:

{
    "dataset": {
        "label": "income",
        "bias_params": {
            "protected": "gender",
            "privileged": 1,
            "unprivileged": 0,
            "positive_outcome_label": 1,
            "negative_outcome_label": 0
        },
        "train_valid_test_splits": [0.0, 1.0, 0.0],
        "remove_protected_from_features": true
    },
	
	"scan_bias_metrics": {
        "thresholds": {
            "equal_opportunity": [0.0, 0.2],
            "demographic_parity": [0.0, 0.2],
            "equal_odds_tnr":  [0.0, 0.2], 
			"individual_fairness": [0.0, 0.2], 
			"equal_odds_tpr": [0.0, 0.2] 
			
        }
    },
    "scan_bias_metrics_rca": {
        "thresholds": {
            "demographic_parity": [0.0, 0.3]           
        },
        "metric_filter": ["demographic_parity"],
        "ignore_lower_threshold": true,
        "ignore_upper_threshold": false, 
	"minimum_segment_size": 1000
    }
	
}

The syntax to run the scan after logging the model and dataset is the following:

snapshot.scan_bias_metrics_rca()

Like with all RCA scans the principle behind the scan is that it searches through different combinations of records and it finds those combinations for which the metric is outside the thresholds. As per the usual scans, you can set the thresholds for what constitutes an issue for your use case. You can also filter out the metrics you want/do not want RCA for, using for example:

"metric_filter": ["accuracy", "true_pos_rate"]

To make the metrics per group meaningful, it assigns a minimum number of records that constitutes a group, but you can change this by using the following syntax/parameter as per config example above:

"minimum_segment_size": 1000

You can also forgo checking for issues below lower threshold or above higher threshold if you want to using this syntax:

"ignore_lower_threshold": true

The minimum segment size will impact the results. We recommend setting the minimum segment size at 2% of the sample size. However if 2% is less than a significant segment size for your sample (e.g. less than 1000), please increase it. By default the scans use 2% of your sample size.

At the moment we only have results retrieval through the IDE and by snapshot using the following syntax and then call each of the elements.

(segments_bias, issues_bias, issue_summary_bias)  = snapshot.scan_bias_metrics_rca()

The end results give business rules to the segments to help you understand the records you’re having an issue with.

We are working to add more retrieval methods.

Out of the box you can scan for the following metrics:

  1. Equal Opportunity: measures the difference in true positive rate between a privileged demographic group and an unprivileged demographic group.

  2. Demographic Parity: measures the difference between number of positive labels out of total from a privileged demographic group vs. a unprivileged demographic group)

  3. Equal Odds TNR: measures the difference between true negative rate - privileged vs. unprivileged. The full measure in the literature looks for an optimal point where the difference in true positive rate between demographic groups as well as the difference in true negative rate between demographic groups are both minimized.

  4. Individual Fairness: measures whether individuals with similar features observe the same model responses

This test pipeline is experimental.

Last updated