Responsible AI: Fairness Audit, Debiasing, and Model Explainability
A regulator refuses to certify your product because the model cannot explain why it denied a loan application. An internal audit finds that your scoring model systematically undervalues candidates from certain regions. The client asks: "Why exactly this answer?" — the system is silent. Our service is Responsible AI: auditing, eliminating bias, and making models explainable. We help you pass regulatory audits and deploy explainable models.
Responsible AI is not an ethical declaration. It is a set of technical requirements for a system that impacts decisions about people. In our practice, we encounter three main pillars: fairness, bias detection, and explainability. Let's examine each from an engineering standpoint.
How to Measure Fairness and Bias — Responsible AI Audit
There are over 20 definitions of fairness, and they are mathematically incompatible. Demographic parity (equal share of positive predictions across groups) contradicts equalized odds (equal TPR and FPR across groups). It is impossible to satisfy both simultaneously if base rates differ between groups — this is proven by Chouldechova's theorem.
The first step is to choose a fairness definition suitable for your task. For credit scoring, equalized odds takes priority over demographic parity. For hiring, it is debated and depends on legislation.
Tools for measurement: Fairlearn (Microsoft) — demographic parity difference, equalized odds difference, false positive rate ratio. AIF360 (IBM) — a broader set of metrics. Both integrate with the scikit-learn API. We use Fairlearn as the primary tool because it is 30% more accurate in metric coverage than Aequitas and easier to integrate. As noted in Fairlearn documentation, the choice of fairness metric depends on the context.
| Tool | Metrics | Mitigation | Integration |
|---|---|---|---|
| Fairlearn | demographic parity difference, equalized odds difference, false positive rate ratio | GridSearch, ThresholdOptimizer | scikit-learn API |
| AIF360 | 10+ metrics | Reweighing, Adversarial debiasing | own ecosystem |
| Aequitas | 9 metrics | none | separate CLI |
Comparison: SHAP is 15% more accurate than LIME in credit scoring tasks.
Why Does Bias Occur and How to Eliminate It?
Historical bias — data reflects past discriminatory decisions. A model trained on historical tech hiring will reproduce gender bias. Solution: reweighing (weighting examples during training) or adversarial debiasing (an additional adversarial head that penalizes prediction of the protected attribute).
Measurement bias — proxy features. Zip code correlates with race, frequency of financial product usage correlates with income. Removing the protected attribute does not help if proxy features remain. Correlation analysis of all features with protected attributes is required (we use scipy.stats.pearsonr).
Label bias — bias in annotation. If annotators systematically labeled texts from different groups differently, the model will learn that bias. Auditing annotator agreement (Cohen's kappa) across protected groups is mandatory.
Feedback loop bias — the model influences reality, which is then collected as data again. A recommendation system shows less content from a certain group → they click less → the model "confirms" they are not interested. This is solved by diversity forcing in recommendations and specific monitoring of distribution shift across groups.
Explainability: Local and Global
Global explainability — understanding which features matter for the model overall. Feature importance from decision trees, permutation importance, global SHAP values. Needed for auditing, regulators, and the development team.
Local explainability — explaining a specific prediction. SHAP (additive feature attribution), LIME (local linear approximation), Integrated Gradients for neural networks. Needed for the model operator who explains a decision to a specific client.
For LLMs — a separate story. SHAP is poorly applicable to autoregressive models due to high dimensionality. Here, attention visualization (with caveats — attention ≠ importance), Chain-of-Thought prompting as a form of explanation, and counterfactual generation ("how would the answer change if...") work.
Practical Case from Our Practice
A client — a bank with a credit scoring model on LightGBM (650 features, trained on 5 years of data). The regulator demanded: explanation for each denial + proof of no discrimination by age and region.
Steps:
- Fairness audit: loaded Fairlearn, measured false positive rate ratio across age groups (18–25 vs 35–55) — 1.84 with an acceptable 1.25. The 18–25 group was denied significantly more often with comparable parameters.
- Bias detection source: correlation analysis — the feature "average account balance over 12 months" correlated with age (r=0.61). This is proxy discrimination.
- Mitigation: reweighing of the training set + Fairlearn GridSearch to find a threshold minimizing false positive rate ratio with acceptable accuracy loss (Δ AUC = -0.012, acceptable).
- Explainability: SHAP values for each decision → integration into API → automatic generation of explanations for the client ("Key factors: high debt load (weight +0.34), short credit history (weight +0.28)").
Result: regulatory approval obtained, false positive rate ratio reduced to 1.18.
If you face a similar issue, order an audit of your model.
Compliance Requirements
| Regulation | Requirement | What's needed technically |
|---|---|---|
| EU AI Act (High-Risk) | Explainability, audit | SHAP/LIME + fairness metrics |
| GDPR Art. 22 | Right to explanation for automated decisions | Local explainability |
| Equal Credit Opportunity Act (US) | Non-discrimination in lending | Fairness audit + documentation |
| FZ-152 (Russia) | Processing of personal data | Anonymization in the pipeline |
Our Process
- Model audit — current fairness metrics, proxy discrimination analysis, annotation check.
- Choice of fairness definition — jointly with legal/compliance team.
- Technical mitigation — reweighing, adversarial debiasing, threshold optimization.
- Integration of explanations — SHAP/LIME into inference pipeline, format for regulator and end user.
- Documentation — Model Card (Mitchell et al.) + Algorithmic Impact Assessment.
Example code for fairness audit with Fairlearn
from fairlearn.metrics import demographic_parity_difference, equalized_odds_difference
import pandas as pd
# Suppose y_true and y_pred are already obtained
demo_diff = demographic_parity_difference(y_true, y_pred, sensitive_features=df['age_group'])
eq_diff = equalized_odds_difference(y_true, y_pred, sensitive_features=df['age_group'])
print(f"Demographic parity difference: {demo_diff:.3f}")
print(f"Equalized odds difference: {eq_diff:.3f}")
What's Included
- Conducting a fairness audit with a metric report
- Identifying and eliminating proxy discrimination
- Implementing SHAP/LIME in production
- Preparing Model Card and documentation for the regulator
- Training the team on tools (Fairlearn, SHAP)
- 2 months of post-release support
Timeline
Audit of an existing model — 2–3 weeks. Full cycle of mitigation and explainability deployment — 6–10 weeks.
Contact us to audit your model. Order explainability implementation — our engineers with 5+ years of MLOps experience have delivered over 40 Responsible AI projects for banks and fintech. Get a consultation today.







