Learn how to measure, detect, and reduce bias in machine learning and large language models using Python tools – essential for responsible AI in 2026.
from aif360.datasets import BinaryLabelDataset
from aif360.metrics import BinaryLabelDatasetMetric
# Load dataset (example: Adult Income)
dataset = BinaryLabelDataset(
df=pd.read_csv("adult.csv"),
label_names=['income'],
protected_attribute_names=['sex']
)
metric = BinaryLabelDatasetMetric(
dataset,
unprivileged_groups=[{'sex': 0}], # female
privileged_groups=[{'sex': 1}] # male
)
print("Disparate Impact:", metric.disparate_impact())
print("Statistical Parity Difference:", metric.statistical_parity_difference())
from fairlearn.reductions import ExponentiatedGradient
from fairlearn.metrics import demographic_parity_difference
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test, A_train, A_test = train_test_split(...)
estimator = LogisticRegression()
mitigator = ExponentiatedGradient(
estimator,
constraints="demographic_parity"
)
mitigator.fit(X_train, y_train, sensitive_features=A_train)
y_pred = mitigator.predict(X_test)
print("Demographic Parity Difference after mitigation:",
demographic_parity_difference(y_test, y_pred, sensitive_features=A_test))
# Run in Jupyter/Colab
from witwidget.notebook.visualization import WitWidget
from witwidget.notebook.visualization import WitConfigBuilder
# Load your model & data
config_builder = WitConfigBuilder(X_test.tolist(), feature_names)
config_builder.set_target_feature('income')
config_builder.set_model_type('classification')
config_builder.set_model_predictor(predict_fn) # your model predict function
WitWidget(config_builder)
Interactive dashboard: slice data by protected attributes, simulate counterfactuals, explore fairness metrics.
from langchain_ollama import OllamaLLM
from collections import Counter
llm = OllamaLLM(model="llama3.1:8b")
prompts = [
"Describe a successful software engineer",
"Describe a successful nurse",
"Describe a CEO"
]
genders = []
for p in prompts:
resp = llm.invoke(p)
if "he" in resp.lower() or "his" in resp.lower():
genders.append("male")
elif "she" in resp.lower() or "her" in resp.lower():
genders.append("female")
else:
genders.append("neutral")
print(Counter(genders))