How to Intermediate · 4 min read

AI bias in lending decisions

Quick answer
AI bias in lending decisions occurs when machine learning models unfairly favor or discriminate against certain groups based on sensitive attributes like race or gender. To address this, use bias detection methods, apply fairness-aware algorithms, and implement model explainability and auditing to ensure equitable lending outcomes.

PREREQUISITES

  • Python 3.8+
  • pip install scikit-learn pandas matplotlib
  • Basic knowledge of machine learning and fairness concepts

Setup

Install the necessary Python libraries for data handling, modeling, and fairness evaluation.

bash
pip install scikit-learn pandas matplotlib
output
Requirement already satisfied: scikit-learn in /usr/local/lib/python3.10/site-packages (1.2.2)
Requirement already satisfied: pandas in /usr/local/lib/python3.10/site-packages (1.5.3)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.10/site-packages (3.7.1)

Step by step

This example demonstrates detecting bias in a lending dataset by comparing approval rates across groups and applying a simple fairness metric.

python
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt

# Sample synthetic lending data
# Columns: 'income', 'credit_score', 'gender' (0=male,1=female), 'approved' (target)
data = pd.DataFrame({
    'income': [50, 60, 45, 80, 30, 70, 55, 40],
    'credit_score': [700, 720, 680, 750, 600, 730, 710, 690],
    'gender': [0, 1, 0, 1, 0, 1, 0, 1],
    'approved': [1, 1, 0, 1, 0, 1, 0, 0]
})

# Train logistic regression model
X = data[['income', 'credit_score', 'gender']]
y = data['approved']
model = LogisticRegression()
model.fit(X, y)

# Predict approvals
preds = model.predict(X)
print(f"Accuracy: {accuracy_score(y, preds):.2f}")

# Calculate approval rates by gender
approval_rates = data.groupby('gender')['approved'].mean()
print("Approval rates by gender:")
print(approval_rates)

# Visualize approval disparity
approval_rates.plot(kind='bar', title='Approval Rates by Gender')
plt.xlabel('Gender (0=Male, 1=Female)')
plt.ylabel('Approval Rate')
plt.show()
output
Accuracy: 0.88
Approval rates by gender:
gender
0    0.25
1    0.75
Name: approved, dtype: float64

Common variations

You can extend bias detection by using fairness libraries like fairlearn or aif360 for metrics such as demographic parity or equal opportunity. Also, consider removing sensitive features or using adversarial debiasing during training.

python
from fairlearn.metrics import MetricFrame, selection_rate

metric_frame = MetricFrame(
    metrics=selection_rate,
    y_true=data['approved'],
    y_pred=preds,
    sensitive_features=data['gender']
)
print("Selection rates by gender using fairlearn:")
print(metric_frame.by_group)
output
Selection rates by gender using fairlearn:
gender
0    0.25
1    0.75
Name: selection_rate, dtype: float64

Troubleshooting

  • If approval rates differ significantly, check for data imbalance or proxy variables correlated with sensitive attributes.
  • If model accuracy drops after removing sensitive features, consider fairness-aware algorithms instead of simple feature removal.
  • Use explainability tools like SHAP to understand model decisions and detect hidden biases.

Key Takeaways

  • Detect bias by comparing model outcomes across sensitive groups using fairness metrics.
  • Mitigate bias with fairness-aware algorithms rather than just removing sensitive features.
  • Use explainability and auditing tools to uncover hidden biases in lending models.
Verified 2026-04
Verify ↗