Fairness, Bias, and Equity in Healthcare AI
Module: Healthcare AI | Difficulty: Advanced
Demographic Parity
Equalized Odds
Calibration by Group
Fairness Metrics
| Metric | Definition | Healthcare Context | |--------|-----------|-------------------| | Demographic Parity | Equal prediction rates | Resource allocation | | Equalized Odds | Equal TPR and FPR | Diagnostic accuracy | | Predictive Parity | Equal PPV | Screening programs | | Calibration | Equal reliability | Risk assessment | | Counterfactual Fairness | Consistent under change | Treatment decisions |
import torch
import torch.nn as nn
import numpy as np
class FairnessConstrainedModel(nn.Module):
def __init__(self, input_dim, num_groups=2, lambda_fair=0.1):
super().__init__()
self.feature_net = nn.Sequential(
nn.Linear(input_dim, 128), nn.ReLU(),
nn.Dropout(0.3), nn.Linear(128, 64), nn.ReLU())
self.prediction_head = nn.Linear(64, 1)
self.adversary = nn.Sequential(
nn.Linear(64, 32), nn.ReLU(), nn.Linear(32, num_groups))
self.lambda_fair = lambda_fair
def forward(self, x, return_sensitive=False):
features = self.feature_net(x)
prediction = torch.sigmoid(self.prediction_head(features))
if return_sensitive:
group_pred = self.adversary(features)
return prediction, group_pred, features
return prediction
def compute_fairness_metrics(predictions, labels, groups):
metrics = {}
for g in np.unique(groups):
mask = groups == g
metrics[f'group_{g}_mean_pred'] = predictions[mask].mean()
metrics[f'group_{g}_mean_true'] = labels[mask].mean()
metrics[f'group_{g}_tpr'] = (
((predictions[mask] > 0.5) & (labels[mask] == 1)).sum() /
max((labels[mask] == 1).sum(), 1))
metrics[f'group_{g}_fpr'] = (
((predictions[mask] > 0.5) & (labels[mask] == 0)).sum() /
max((labels[mask] == 0).sum(), 1))
return metrics
model = FairnessConstrainedModel(input_dim=100, lambda_fair=0.1)
x = torch.randn(500, 100)
y = torch.randint(0, 2, (500,)).float()
groups = torch.randint(0, 2, (500,))
pred = model(x)
print(f'Predictions shape: {pred.shape}')
metrics = compute_fairness_metrics(pred.detach().numpy(), y.numpy(), groups.numpy())
for k, v in list(metrics.items())[:4]:
print(f' {k}: {v:.4f}')
Research Insight: Healthcare AI systems often exhibit worse performance for underrepresented groups, exacerbating existing health disparities. The root cause is typically historical bias in training data. Mitigation strategies include reweighting training samples, adversarial debiasing, and post-processing calibration, but each introduces trade-offs between fairness and overall accuracy.