What is AI Bias Auditing?
AI bias auditing is the systematic process of examining machine learning models and AI systems to identify, measure, and mitigate unfair outcomes across different demographic groups. In 2026, as AI systems increasingly influence critical decisions in hiring, lending, healthcare, and criminal justice, bias auditing has become a regulatory requirement in many jurisdictions and an ethical imperative for responsible AI development.
According to NIST's AI Risk Management Framework, bias in AI can manifest in multiple ways: from skewed training data and flawed algorithmic design to biased human feedback and deployment contexts. The consequences range from perpetuating historical discrimination to creating new forms of algorithmic harm that disproportionately affect marginalized communities.
This comprehensive guide will walk you through the essential tools, methodologies, and best practices for conducting thorough AI bias audits in 2026, whether you're a data scientist, ML engineer, compliance officer, or product manager.
"Bias auditing isn't a one-time checkbox exercise—it's an ongoing commitment to fairness that must be embedded throughout the entire AI lifecycle, from data collection to model deployment and monitoring."
Dr. Timnit Gebru, Founder of Distributed AI Research Institute (DAIR)
Why Audit AI for Bias?
The imperative for bias auditing has intensified in 2026 due to several converging factors:
- Regulatory Compliance: The EU AI Act, New York City's AI hiring law (Local Law 144), and similar regulations now mandate bias audits for high-risk AI systems
- Reputational Risk: High-profile bias incidents can severely damage brand trust and market value
- Legal Liability: Organizations face increasing litigation for discriminatory AI outcomes
- Ethical Responsibility: Building fair AI is fundamental to responsible innovation
- Business Performance: Biased models often underperform on diverse populations, limiting market reach
Research from MIT and Stanford has consistently shown that facial recognition systems, for example, exhibit error rate disparities of up to 34% between demographic groups, demonstrating the tangible impact of unaddressed bias.
Prerequisites
Before beginning your bias audit, ensure you have:
- Technical Skills: Basic Python programming, familiarity with machine learning concepts, and understanding of statistical metrics
- Tools: Python 3.8+, Jupyter Notebook or similar environment, access to your model and training data
- Documentation: Model cards, data sheets, and development documentation
- Stakeholder Buy-in: Support from leadership and cross-functional teams
- Protected Attributes: Clear identification of sensitive features (race, gender, age, etc.) relevant to your use case
Step 1: Define Fairness Metrics and Audit Scope
The first critical step is determining what "fairness" means for your specific AI system. In 2026, we recognize that fairness is context-dependent and often involves trade-offs between different mathematical definitions.
Common Fairness Metrics
According to fairness research, key metrics include:
- Demographic Parity: Equal positive prediction rates across groups
- Equalized Odds: Equal true positive and false positive rates across groups
- Equal Opportunity: Equal true positive rates for all groups
- Predictive Parity: Equal positive predictive value across groups
- Calibration: Predictions equally accurate across groups
# Example: Defining fairness metrics in Python
import pandas as pd
import numpy as np
def demographic_parity(y_pred, sensitive_attr):
"""
Calculate demographic parity difference.
Returns difference in positive prediction rates between groups.
"""
groups = pd.Series(sensitive_attr).unique()
rates = {}
for group in groups:
mask = sensitive_attr == group
rates[group] = y_pred[mask].mean()
return max(rates.values()) - min(rates.values())
def equalized_odds(y_true, y_pred, sensitive_attr):
"""
Calculate equalized odds difference.
Returns max difference in TPR and FPR across groups.
"""
groups = pd.Series(sensitive_attr).unique()
tpr_diff = []
fpr_diff = []
for group in groups:
mask = sensitive_attr == group
tp = ((y_true[mask] == 1) & (y_pred[mask] == 1)).sum()
fp = ((y_true[mask] == 0) & (y_pred[mask] == 1)).sum()
tn = ((y_true[mask] == 0) & (y_pred[mask] == 0)).sum()
fn = ((y_true[mask] == 1) & (y_pred[mask] == 0)).sum()
tpr = tp / (tp + fn) if (tp + fn) > 0 else 0
fpr = fp / (fp + tn) if (fp + tn) > 0 else 0
tpr_diff.append(tpr)
fpr_diff.append(fpr)
return max(max(tpr_diff) - min(tpr_diff),
max(fpr_diff) - min(fpr_diff))
[Screenshot: Dashboard showing multiple fairness metrics side-by-side for comparison]
Step 2: Set Up Bias Detection Tools
In 2026, several mature open-source and commercial tools are available for bias auditing. Here are the most widely adopted:
AI Fairness 360 (AIF360)
Developed by IBM Research, AIF360 is the most comprehensive open-source toolkit for bias detection and mitigation.
# Install AIF360
pip install aif360
# Basic bias detection workflow
from aif360.datasets import BinaryLabelDataset
from aif360.metrics import BinaryLabelDatasetMetric
from aif360.algorithms.preprocessing import Reweighing
# Load your dataset
# Assume df is your pandas DataFrame with features, labels, and protected attributes
dataset = BinaryLabelDataset(
df=df,
label_names=['outcome'],
protected_attribute_names=['gender', 'race'],
favorable_label=1,
unfavorable_label=0
)
# Calculate bias metrics
metric = BinaryLabelDatasetMetric(
dataset,
unprivileged_groups=[{'gender': 0}],
privileged_groups=[{'gender': 1}]
)
print(f"Disparate Impact: {metric.disparate_impact()}")
print(f"Statistical Parity Difference: {metric.statistical_parity_difference()}")
print(f"Mean Difference: {metric.mean_difference()}")
Fairlearn
Microsoft's Fairlearn focuses on assessing and improving fairness in machine learning models.
# Install Fairlearn
pip install fairlearn
from fairlearn.metrics import MetricFrame, selection_rate
from sklearn.metrics import accuracy_score, precision_score
# Create a MetricFrame to analyze metrics by group
metric_frame = MetricFrame(
metrics={
'accuracy': accuracy_score,
'precision': precision_score,
'selection_rate': selection_rate
},
y_true=y_test,
y_pred=y_pred,
sensitive_features=sensitive_features_test
)
# View overall metrics
print(metric_frame.overall)
# View metrics by group
print(metric_frame.by_group)
# Visualize disparities
metric_frame.by_group.plot.bar(
subplots=True,
layout=[3, 1],
figsize=(12, 8),
title="Model Performance by Protected Group"
)
[Screenshot: Fairlearn dashboard showing performance disparities across demographic groups]
What-If Tool (WIT)
Google's What-If Tool provides interactive visualizations for model understanding and fairness analysis.
Aequitas
The Aequitas toolkit from the University of Chicago specializes in fairness audits for decision-making systems.
"The choice of fairness metric should be driven by the specific harms you're trying to prevent and the stakeholders affected by your AI system. There's no universal fairness metric that works for all contexts."
Dr. Solon Barocas, Principal Researcher at Microsoft Research and Cornell University
Step 3: Conduct Data Bias Analysis
Before auditing model predictions, examine your training data for bias. According to research on dataset bias, data issues are the root cause of most AI fairness problems.
Key Data Bias Checks
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 1. Representation Analysis
def analyze_representation(df, protected_attr):
"""
Check if all groups are adequately represented in the dataset.
"""
print("=== Representation Analysis ===")
counts = df[protected_attr].value_counts()
percentages = df[protected_attr].value_counts(normalize=True) * 100
print(f"\nAbsolute counts:\n{counts}")
print(f"\nPercentages:\n{percentages}")
# Visualize
plt.figure(figsize=(10, 6))
percentages.plot(kind='bar')
plt.title(f'Distribution of {protected_attr}')
plt.ylabel('Percentage')
plt.axhline(y=100/len(counts), color='r', linestyle='--',
label='Equal representation')
plt.legend()
plt.show()
return counts, percentages
# 2. Label Distribution Analysis
def analyze_label_distribution(df, protected_attr, label_col):
"""
Check if positive/negative labels are equally distributed across groups.
"""
print("\n=== Label Distribution Analysis ===")
cross_tab = pd.crosstab(
df[protected_attr],
df[label_col],
normalize='index'
) * 100
print(cross_tab)
# Visualize
cross_tab.plot(kind='bar', figsize=(10, 6))
plt.title(f'Label Distribution by {protected_attr}')
plt.ylabel('Percentage')
plt.legend(title=label_col)
plt.show()
return cross_tab
# 3. Feature Correlation Analysis
def analyze_feature_correlation(df, protected_attrs, features):
"""
Identify features that correlate strongly with protected attributes.
"""
print("\n=== Feature Correlation Analysis ===")
# Encode protected attributes numerically if needed
df_encoded = df.copy()
for attr in protected_attrs:
if df[attr].dtype == 'object':
df_encoded[attr] = pd.Categorical(df[attr]).codes
# Calculate correlations
correlations = df_encoded[features + protected_attrs].corr()
protected_correlations = correlations.loc[features, protected_attrs]
print(protected_correlations)
# Visualize
plt.figure(figsize=(10, 8))
sns.heatmap(protected_correlations, annot=True, cmap='coolwarm', center=0)
plt.title('Feature Correlations with Protected Attributes')
plt.tight_layout()
plt.show()
return protected_correlations
# Execute analysis
representation = analyze_representation(df, 'gender')
label_dist = analyze_label_distribution(df, 'gender', 'approved')
correlations = analyze_feature_correlation(
df,
['gender', 'race'],
['income', 'credit_score', 'employment_length']
)
[Screenshot: Heatmap showing correlations between features and protected attributes]
Step 4: Audit Model Predictions
Now audit your trained model's predictions for bias using the tools and metrics defined earlier.
Comprehensive Model Audit Workflow
from sklearn.model_selection import train_test_split
from fairlearn.metrics import MetricFrame, demographic_parity_difference
from fairlearn.metrics import equalized_odds_difference
import pandas as pd
# Assume you have a trained model and test data
X_test, y_test, sensitive_features_test = load_test_data()
y_pred = model.predict(X_test)
# 1. Overall Performance
from sklearn.metrics import classification_report
print("=== Overall Model Performance ===")
print(classification_report(y_test, y_pred))
# 2. Disaggregated Performance Analysis
print("\n=== Performance by Protected Group ===")
metric_frame = MetricFrame(
metrics={
'accuracy': accuracy_score,
'precision': precision_score,
'recall': recall_score,
'f1': f1_score,
'selection_rate': selection_rate
},
y_true=y_test,
y_pred=y_pred,
sensitive_features=sensitive_features_test
)
print(metric_frame.by_group)
# 3. Fairness Metrics
print("\n=== Fairness Metrics ===")
dp_diff = demographic_parity_difference(
y_test, y_pred, sensitive_features=sensitive_features_test
)
eo_diff = equalized_odds_difference(
y_test, y_pred, sensitive_features=sensitive_features_test
)
print(f"Demographic Parity Difference: {dp_diff:.4f}")
print(f"Equalized Odds Difference: {eo_diff:.4f}")
# Interpret results
if abs(dp_diff) > 0.1:
print("⚠️ WARNING: Significant demographic parity violation detected")
if abs(eo_diff) > 0.1:
print("⚠️ WARNING: Significant equalized odds violation detected")
# 4. Confusion Matrix by Group
from sklearn.metrics import confusion_matrix
for group in sensitive_features_test.unique():
mask = sensitive_features_test == group
cm = confusion_matrix(y_test[mask], y_pred[mask])
print(f"\nConfusion Matrix for {group}:")
print(cm)
Intersectional Analysis
In 2026, best practices require examining intersectional bias—how multiple protected attributes interact. Research has shown that bias can be amplified at intersections (e.g., Black women may face different bias patterns than Black men or white women).
# Intersectional fairness analysis
def intersectional_analysis(y_true, y_pred, sensitive_features_df):
"""
Analyze fairness across intersections of multiple protected attributes.
"""
# Create intersectional groups
sensitive_features_df['intersection'] = (
sensitive_features_df.astype(str)
.agg('-'.join, axis=1)
)
# Calculate metrics for each intersection
metric_frame = MetricFrame(
metrics={
'accuracy': accuracy_score,
'selection_rate': selection_rate,
'tpr': lambda y_t, y_p: recall_score(y_t, y_p, pos_label=1),
'fpr': lambda y_t, y_p: (
confusion_matrix(y_t, y_p)[0, 1] /
confusion_matrix(y_t, y_p)[0].sum()
)
},
y_true=y_true,
y_pred=y_pred,
sensitive_features=sensitive_features_df['intersection']
)
return metric_frame.by_group
# Execute intersectional analysis
intersectional_results = intersectional_analysis(
y_test,
y_pred,
sensitive_features_test[['gender', 'race']]
)
print(intersectional_results)
[Screenshot: Intersectional analysis showing performance across gender-race combinations]
Step 5: Advanced Bias Detection Techniques
Counterfactual Fairness Testing
Test whether changing only a protected attribute (while keeping everything else constant) would change the model's prediction.
def counterfactual_fairness_test(model, X_test, protected_feature, values):
"""
Test if model predictions change when only protected attribute changes.
"""
results = []
for idx, row in X_test.iterrows():
original_pred = model.predict([row])[0]
for value in values:
# Create counterfactual instance
counterfactual = row.copy()
counterfactual[protected_feature] = value
cf_pred = model.predict([counterfactual])[0]
if cf_pred != original_pred:
results.append({
'index': idx,
'original_value': row[protected_feature],
'original_pred': original_pred,
'counterfactual_value': value,
'counterfactual_pred': cf_pred
})
flip_rate = len(results) / len(X_test)
print(f"Prediction flip rate: {flip_rate:.2%}")
return pd.DataFrame(results)
# Execute test
flips = counterfactual_fairness_test(
model,
X_test,
'gender',
['male', 'female', 'non-binary']
)
Slice-Based Analysis
According to Google Research, examining model performance on specific data slices can reveal hidden biases.
from sklearn.metrics import accuracy_score
import pandas as pd
def slice_based_analysis(X_test, y_test, y_pred, slice_features):
"""
Analyze model performance across different data slices.
"""
results = []
# Analyze each feature
for feature in slice_features:
for value in X_test[feature].unique():
mask = X_test[feature] == value
slice_size = mask.sum()
if slice_size < 10: # Skip small slices
continue
slice_accuracy = accuracy_score(y_test[mask], y_pred[mask])
results.append({
'feature': feature,
'value': value,
'size': slice_size,
'accuracy': slice_accuracy
})
results_df = pd.DataFrame(results)
# Identify underperforming slices
overall_accuracy = accuracy_score(y_test, y_pred)
results_df['accuracy_gap'] = results_df['accuracy'] - overall_accuracy
print("\nTop 10 Underperforming Slices:")
print(results_df.nsmallest(10, 'accuracy_gap'))
return results_df
# Execute slice analysis
slice_results = slice_based_analysis(
X_test, y_test, y_pred,
slice_features=['age_group', 'income_bracket', 'region']
)
"Effective bias auditing requires going beyond aggregate metrics to examine performance on granular subgroups and edge cases. The biases that matter most often hide in the intersections and long tail of your data distribution."
Dr. Rediet Abebe, Assistant Professor at UC Berkeley and Co-founder of Black in AI
Step 6: Document Findings and Create Audit Reports
Comprehensive documentation is essential for regulatory compliance, internal review, and stakeholder communication. In 2026, Model Cards and audit reports should include:
Audit Report Template
# Generate comprehensive audit report
from datetime import datetime
import json
def generate_audit_report(model_name, metrics, fairness_results,
data_analysis, recommendations):
"""
Generate a structured bias audit report.
"""
report = {
'audit_metadata': {
'model_name': model_name,
'audit_date': datetime.now().isoformat(),
'auditor': 'Your Name/Team',
'audit_framework': 'AIF360 + Fairlearn',
'version': '1.0'
},
'executive_summary': {
'overall_fairness_score': calculate_fairness_score(fairness_results),
'critical_issues': identify_critical_issues(fairness_results),
'recommendation_priority': 'High/Medium/Low'
},
'data_analysis': {
'dataset_size': data_analysis['size'],
'representation_issues': data_analysis['representation'],
'label_bias': data_analysis['label_distribution']
},
'model_performance': {
'overall_metrics': metrics['overall'],
'disaggregated_metrics': metrics['by_group']
},
'fairness_metrics': {
'demographic_parity': fairness_results['dp'],
'equalized_odds': fairness_results['eo'],
'equal_opportunity': fairness_results['eop']
},
'intersectional_analysis': fairness_results['intersectional'],
'recommendations': recommendations,
'mitigation_strategies': generate_mitigation_strategies(fairness_results)
}
# Save as JSON
with open(f'bias_audit_report_{model_name}_{datetime.now().strftime("%Y%m%d")}.json', 'w') as f:
json.dump(report, f, indent=2)
# Generate human-readable HTML report
html_report = generate_html_report(report)
return report, html_report
[Screenshot: Example bias audit report dashboard with key metrics highlighted]
Tips & Best Practices
1. Establish Fairness Thresholds Early
Define acceptable fairness metric ranges before building your model. According to Partnership on AI guidance, common thresholds include:
- Demographic parity difference: ≤ 0.1 (10%)
- Equalized odds difference: ≤ 0.1 (10%)
- Disparate impact ratio: ≥ 0.8 (80% rule from EEOC)
2. Involve Diverse Stakeholders
Include affected communities, domain experts, ethicists, and legal counsel in defining fairness requirements and interpreting audit results.
3. Automate Continuous Monitoring
# Set up automated bias monitoring
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import timedelta
def run_bias_audit():
"""Automated bias audit function."""
# Load latest model predictions
predictions = load_recent_predictions()
# Calculate fairness metrics
metrics = calculate_fairness_metrics(predictions)
# Check thresholds
if metrics['demographic_parity'] > 0.1:
send_alert('Demographic parity threshold exceeded')
# Log to monitoring system
log_metrics_to_dashboard(metrics)
# Schedule weekly bias audits
dag = DAG(
'bias_monitoring',
default_args={'start_date': datetime(2026, 1, 1)},
schedule_interval=timedelta(weeks=1)
)
audit_task = PythonOperator(
task_id='run_bias_audit',
python_callable=run_bias_audit,
dag=dag
)
4. Use Multiple Fairness Metrics
No single metric captures all aspects of fairness. Always evaluate multiple metrics and understand their trade-offs.
5. Test Edge Cases and Rare Subgroups
Bias often manifests most severely in underrepresented groups. Ensure your audit includes sufficient samples from all relevant subgroups.
6. Document Limitations and Assumptions
Be transparent about what your audit does and doesn't cover, including:
- Protected attributes examined vs. those not available
- Fairness metrics used and their limitations
- Sample size constraints for subgroup analysis
- Temporal validity of audit results
Common Issues & Troubleshooting
Issue 1: Missing Protected Attribute Data
Problem: Your dataset lacks demographic information needed for bias auditing.
Solutions:
- Use proxy variables cautiously (e.g., ZIP code for race), but document limitations
- Conduct external validation studies with labeled data
- Use unsupervised fairness methods that don't require protected attributes
- Implement voluntary demographic data collection with privacy safeguards
Issue 2: Fairness-Accuracy Trade-offs
Problem: Improving fairness metrics reduces overall model accuracy.
Solutions:
- Collect more diverse training data to improve representation
- Use fairness-aware training algorithms (e.g., adversarial debiasing)
- Apply post-processing techniques like threshold optimization
- Consider whether the accuracy loss is acceptable given fairness gains
# Example: Threshold optimization for fairness
from fairlearn.postprocessing import ThresholdOptimizer
# Train a threshold optimizer
threshold_optimizer = ThresholdOptimizer(
estimator=base_model,
constraints='equalized_odds',
objective='accuracy_score'
)
threshold_optimizer.fit(
X_train, y_train,
sensitive_features=sensitive_features_train
)
# Get fair predictions
y_pred_fair = threshold_optimizer.predict(
X_test,
sensitive_features=sensitive_features_test
)
Issue 3: Intersectional Bias with Small Sample Sizes
Problem: Some intersectional groups have too few samples for reliable metrics.
Solutions:
- Use bootstrapping or statistical techniques to estimate confidence intervals
- Aggregate closely related subgroups when appropriate
- Focus qualitative analysis on small groups
- Acknowledge limitations in your audit report
Issue 4: Conflicting Fairness Metrics
Problem: Different fairness metrics give contradictory results (this is mathematically inevitable in many cases).
Solutions:
- Prioritize metrics based on use case and stakeholder input
- Understand that perfect fairness across all metrics is often impossible
- Document the trade-offs and rationale for your choices
- Consider context-specific harm reduction rather than mathematical optimization
Issue 5: Bias in Feedback Loops
Problem: Model predictions influence future training data, amplifying bias over time.
Solutions:
- Implement regular retraining with diverse data sources
- Monitor data distribution shifts over time
- Use exploration strategies to ensure diverse outcomes
- Conduct longitudinal bias audits to detect drift
Advanced Methodologies
Causal Fairness Analysis
In 2026, causal inference methods are increasingly used to understand the mechanisms behind bias. Tools like DoWhy and EconML enable causal fairness analysis.
import dowhy
from dowhy import CausalModel
# Define causal graph
model = CausalModel(
data=df,
treatment='protected_attribute',
outcome='model_prediction',
common_causes=['feature1', 'feature2'],
instruments=['instrument_variable']
)
# Identify causal effect
identified_estimand = model.identify_effect()
# Estimate causal effect
estimate = model.estimate_effect(
identified_estimand,
method_name="backdoor.propensity_score_matching"
)
print(f"Causal effect of protected attribute: {estimate.value}")
Adversarial Bias Testing
Use adversarial techniques to proactively discover bias vulnerabilities.
from aif360.algorithms.inprocessing import AdversarialDebiasing
import tensorflow as tf
# Train adversarially debiased model
adversarial_model = AdversarialDebiasing(
privileged_groups=[{'gender': 1}],
unprivileged_groups=[{'gender': 0}],
scope_name='adversarial_debiasing',
debias=True,
sess=tf.Session()
)
adversarial_model.fit(dataset_train)
debiased_predictions = adversarial_model.predict(dataset_test)
Regulatory Compliance Checklist
For 2026 regulatory requirements, ensure your audit includes:
- ☐ Documentation of all protected attributes considered
- ☐ Justification for fairness metrics selected
- ☐ Disaggregated performance metrics by group
- ☐ Intersectional analysis where sample sizes permit
- ☐ Counterfactual fairness testing results
- ☐ Data bias analysis and mitigation steps
- ☐ Model card with fairness considerations
- ☐ Audit trail with timestamps and versioning
- ☐ Stakeholder consultation documentation
- ☐ Remediation plan for identified issues
- ☐ Schedule for ongoing monitoring
Conclusion and Next Steps
Auditing AI for bias is not a one-time activity but an ongoing commitment that must be integrated throughout the AI lifecycle. In 2026, as AI systems become more sophisticated and widely deployed, rigorous bias auditing has evolved from a best practice to a legal and ethical imperative.
Key takeaways from this guide:
- Start with clear fairness definitions aligned with your use case and stakeholder values
- Use multiple tools and metrics to get a comprehensive view of bias
- Examine data bias before model bias—garbage in, garbage out applies to fairness
- Conduct intersectional analysis to uncover hidden disparities
- Document everything for compliance, accountability, and continuous improvement
- Implement automated monitoring to catch bias drift in production
Recommended Next Steps
- Immediate: Run a baseline bias audit on your highest-risk AI systems using the tools and code examples in this guide
- Short-term (1-3 months): Establish fairness thresholds, implement automated monitoring, and create audit documentation templates
- Medium-term (3-6 months): Integrate bias testing into your ML development pipeline, train your team on fairness concepts, and establish a cross-functional AI ethics review board
- Long-term (6-12 months): Develop organization-wide AI fairness standards, contribute to industry benchmarks, and publish transparency reports
Additional Resources
- NIST AI Risk Management Framework - Comprehensive guidance on AI risk management including bias
- Google's Responsible AI Practices - Industry best practices and case studies
- Partnership on AI - Multi-stakeholder resources and research
- Fairness and Machine Learning by Barocas, Hardt, and Narayanan - Comprehensive textbook (free online)
Remember: Perfect fairness may be mathematically impossible, but that doesn't absolve us of the responsibility to understand, measure, and mitigate bias in AI systems. The goal is continuous improvement and transparency about limitations.
This guide reflects best practices as of April 2026. AI fairness is a rapidly evolving field—stay current with the latest research, tools, and regulatory requirements.
References
- National Institute of Standards and Technology (NIST) - AI Risk Management Framework
- Barocas, S., Hardt, M., & Narayanan, A. - Fairness and Machine Learning: Limitations and Opportunities
- Verma, S., & Rubin, J. - Fairness Definitions Explained (ACM/IEEE Conference)
- IBM Research - AI Fairness 360 Open Source Toolkit
- Microsoft - Fairlearn: A toolkit for assessing and improving fairness in AI
- Google PAIR - What-If Tool for ML interpretability
- University of Chicago - Aequitas: Bias and Fairness Audit Toolkit
- Torralba, A., & Efros, A. A. - Unbiased Look at Dataset Bias (MIT CSAIL)
- Google Research - Slice-based Learning: A programming model for residual learning in critical data slices
- Google - Model Cards for Model Reporting
- Partnership on AI - Responsible AI Resources
- Microsoft Research - DoWhy: Causal inference library
- Microsoft Research - EconML: Econometric Machine Learning
- Google AI - Responsible AI Practices
Cover image: AI generated image by Google Imagen