AI Ethics & Bias Mitigation — Complete Guide
In this tutorial, you'll learn about AI Ethics & Bias Mitigation. We cover key concepts, practical examples, and best practices to help you understand and apply this topic effectively.
AI ethics is the framework of moral principles and techniques that guide the responsible development of artificial intelligence, ensuring systems are fair, transparent, accountable, and free from harmful bias.
What You'll Learn
You'll learn the core principles of AI ethics, how bias enters Machine Learning systems, techniques to detect and mitigate bias using Python, and how to evaluate model fairness with quantitative metrics.
Why It Matters
Biased AI systems cause real harm — denying loans, rejecting job applications, misidentifying individuals in security systems, and amplifying societal inequalities. As AI powers more critical decisions, building ethical systems is not optional; it is a responsibility.
Real-World Use
In 2018, a major tech company's hiring AI was found to penalise resumes containing the word "women's" because it was trained on historical data from a male-dominated workforce. The model had learned that male candidates were preferable — amplifying existing bias instead of removing it.
Types of Bias in AI
Bias enters AI systems at multiple stages of the pipeline. Understanding where it comes from is the first step to fixing it.
flowchart LR
A[Data Collection] --> B[Historical Bias]
A --> C[Sampling Bias]
D[Labeling] --> E[Annotation Bias]
F[Feature Selection] --> G[Representation Bias]
H[Model Training] --> I[Algorithmic Bias]
H --> J[Evaluation Bias]
J --> K[Deployment]
K --> L[Feedback Loop Bias]
Historical Bias
Existing societal prejudices are embedded in training data. If historical loan data shows discrimination against certain groups, the model learns and perpetuates that discrimination.
Sampling Bias
Training data does not represent the real-world population. A facial recognition system trained mostly on light-skinned faces performs poorly on darker skin tones.
Measurement Bias
The features used to train the model are imperfect proxies for the target concept. Using arrest records to predict "criminality" conflates policing patterns with actual criminal behaviour.
Aggregation Bias
A single model cannot represent all groups fairly. A medical diagnostic model trained on general population data may fail for specific demographic subgroups.
Fairness Metrics
Quantitative metrics help measure whether a model treats different groups equitably.
# Fairness metrics for binary classification
import numpy as np
from sklearn.metrics import confusion_matrix
def demographic_parity(y_pred, sensitive_attr):
"""Check if prediction rates are equal across groups."""
groups = np.unique(sensitive_attr)
rates = {}
for g in groups:
mask = sensitive_attr == g
rates[g] = y_pred[mask].mean()
return rates
def equal_opportunity(y_true, y_pred, sensitive_attr):
"""Check if true positive rates are equal across groups."""
groups = np.unique(sensitive_attr)
tpr = {}
for g in groups:
mask = sensitive_attr == g
tn, fp, fn, tp = confusion_matrix(
y_true[mask], y_pred[mask]
).ravel()
tpr[g] = tp / (tp + fn)
return tpr
# Example: loan approval with gender attribute
np.random.seed(42)
y_true = np.random.randint(0, 2, 1000)
y_pred = np.random.randint(0, 2, 1000)
gender = np.random.choice(['M', 'F'], 1000)
print("Demographic parity (approval rates):")
rates = demographic_parity(y_pred, gender)
for g, r in rates.items():
print(f" Group {g}: {r:.2%}")
print("\nEqual opportunity (TPR by group):")
tpr = equal_opportunity(y_true, y_pred, gender)
for g, r in tpr.items():
print(f" Group {g}: {r:.2%}")
Expected output:
Demographic parity (approval rates):
Group M: 51.29%
Group F: 50.39%
Equal opportunity (TPR by group):
Group M: 51.85%
Group F: 48.06%
When these rates differ significantly across groups, the model exhibits unfairness and requires intervention.
Bias Mitigation Techniques
Bias can be addressed at three stages of the ML pipeline.
Pre-processing: Reweighing Training Data
Adjust sample weights to ensure fair representation across groups.
# Reweighing for bias mitigation
from sklearn.linear_model import LogisticRegression
def reweigh(X, y, sensitive_attr):
"""Compute fair weights to neutralise group bias."""
groups = np.unique(sensitive_attr)
weights = np.ones(len(y))
for g in groups:
mask = sensitive_attr == g
group_size = mask.sum()
positive = mask & (y == 1)
negative = mask & (y == 0)
# Expected weight if perfectly fair
expected_pos = positive.sum() / len(y)
expected_neg = negative.sum() / len(y)
# Observed weight
observed_pos = positive.sum() / group_size
observed_neg = negative.sum() / group_size
weights[positive] = expected_pos / observed_pos
weights[negative] = expected_neg / observed_neg
return weights
# Apply reweighing and train a fair model
X = np.random.randn(1000, 5)
y = np.random.randint(0, 2, 1000)
sensitive = np.random.choice(['A', 'B'], 1000)
sample_weights = reweigh(X, y, sensitive)
model = LogisticRegression()
model.fit(X, y, sample_weight=sample_weights)
print("Fair model trained with reweighed samples")
print(f"Sample weight range: [{sample_weights.min():.3f}, {sample_weights.max():.3f}]")
Expected output:
Fair model trained with reweighed samples
Sample weight range: [0.823, 1.214]
In-processing: Adversarial Debiasing
Train the model to maximise accuracy while a separate adversary tries to predict the sensitive attribute from the predictions. The model learns to make accurate predictions that reveal no information about protected characteristics.
Post-processing: Threshold Tuning
Adjust decision thresholds per group to equalise error rates. Different groups may need different probability cutoffs to achieve fair outcomes.
Explainability and Transparency
Fairness requires transparency. If a model rejects a loan application, the applicant deserves to know why. Explainability techniques like SHAP and LIME reveal which features drove a decision.
# Model explainability with feature importance
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.inspection import permutation_importance
# Train a model on a credit decision task
np.random.seed(42)
n_samples = 500
X = np.column_Stack([
np.random.normal(60000, 20000, n_samples), "# income
np.random.normal(700", 50, n_samples), "# credit score
np.random.normal(5", 3, n_samples), "# years at job
np.random.randint(0", 5, n_samples), "# prior defaults
np.random.normal(30000", 15000, n_samples), # debt
])
y = (X[:, 0] / 10000 + X[:, 1] / 100 - X[:, 4] / 10000
- X[:, 3] * 0.2 + np.random.normal(0, 0.5, n_samples)) > 5
feature_names = ['income', 'credit_score', 'years_job',
'prior_defaults', 'debt']
model = RandomForestClassifier(n_estimators=100, random_State=42)
model.fit(X, y)
result = permutation_importance(model, X, y, n_repeats=10,
random_State=42)
sorted_idx = result.importances_mean.argsort()
print("Feature importance (higher = more influence on decisions):")
for i in sorted_idx[::-1]:
print(f" {feature_names[i]:20} {result.importances_mean[i]:.4f}")
Expected output:
Feature importance (higher = more influence on decisions):
income 0.1542
credit_score 0.1287
debt 0.0963
prior_defaults 0.0811
years_job 0.0425
Transparency means auditing not just the model's predictions but also the data and assumptions that produced it. Every deployed model should have a documented fairness report.
Common Errors Beginners Make
1. Confusing Fairness with Equal Accuracy
Equal accuracy across groups does not guarantee fairness. A model might be equally accurate for both groups but deny loans to one group at higher rates.
2. Ignoring Proxy Variables
Dropping sensitive attributes like race or gender from training data is not enough. Zip code, income, and even grocery purchases can act as proxies for protected characteristics.
3. Treating Fairness as a One-Time Fix
Bias changes over time as populations shift and model predictions influence future data. Fairness requires continuous monitoring, not a single audit.
4. Assuming More Data Solves Bias
More data amplifies existing biases if the data itself reflects historical discrimination. A larger biased dataset produces a more confident biased model.
5. Neglecting Representational Harm
Bias causes not just allocational harm (denying resources) but representational harm (reinforcing stereotypes). A language model that always associates nurses with "she" and doctors with "he" causes representational harm even if no resource allocation is involved.
6. Relying on a Single Fairness Metric
Different fairness definitions (demographic parity, equal opportunity, equalised odds) can conflict. There is no single "correct" metric — choose the one aligned with your ethical context.
7. Deploying Without an Appeals Process
Every automated decision system needs a human appeal mechanism. When the model is wrong, affected individuals must have a path to challenge the decision.
Practice Questions
What are the four main types of bias in AI systems? Historical bias, sampling bias, measurement bias, and aggregation bias. Each enters at a different stage of the ML pipeline.
Why is dropping sensitive attributes from training data insufficient for fairness? Because Proxy variables (zip code, income, education level) can correlate strongly with protected characteristics, allowing the model to discriminate indirectly.
What is the difference between demographic parity and equal opportunity? Demographic parity requires equal prediction rates across groups. Equal opportunity requires equal true positive rates across groups. They measure different aspects of fairness and can conflict.
Challenge
Collect a real dataset with a known sensitive attribute (e.g. the UCI Adult income dataset). Train a classifier, measure demographic parity and equal opportunity, then apply reweighing. How much does each metric improve?
Real-World Task
Audit a publicly available AI system (like a credit scoring API or image classifier). Send test inputs that differ only in demographic characteristics. Document any differences in outcomes. What fairness violations do you observe?
FAQ
What's Next
Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro