# 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](/etiq-1.x-documentation/scan-types/bias.md#bias-sources-scan). 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.&#x20;

An example config file is as below:

```json
{
    "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:

```python
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"]`&#x20;

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:&#x20;

`"minimum_segment_size": 1000`

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

`"ignore_lower_threshold": true`

{% hint style="warning" %}
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. &#x20;
{% endhint %}

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.etiq.ai/etiq-1.x-documentation/rca/bias-rca-scan.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
