Bias & Fairness Auditor
Production-ready ML fairness auditing with bias detection, mitigation strategies, and regulatory compliance checking.
Features
- Fairness Metrics: 16+ metrics including demographic parity, equalized odds, disparate impact
- Data Bias Detection: Selection bias, representation bias, label bias, proxy detection
- Model Auditing: Comprehensive fairness analysis across protected groups
- Bias Mitigation: Pre-processing, in-processing, and post-processing strategies
- Compliance Checking: ECOA, EEOC, GDPR fairness, EU AI Act support
- Intersectional Analysis: Multi-attribute fairness evaluation
- Zero Dependencies Core: Works without heavy ML libraries
Installation
pip install bias-fairness-auditor # Core (zero deps)
pip install bias-fairness-auditor[ml] # With ML libraries
pip install bias-fairness-auditor[full] # All features
Quick Start
Basic Model Audit
from bias_fairness_auditor import FairnessAuditor, AuditConfig
# Configure audit
config = AuditConfig(
protected_attributes=["gender", "race"],
fairness_threshold=0.8
)
auditor = FairnessAuditor(config)
# Audit model predictions
report = auditor.audit_model(
predictions=[1, 0, 1, 1, 0, 1, 0, 0],
actuals=[1, 0, 1, 0, 0, 1, 1, 0],
protected_attributes={
"gender": ["M", "F", "M", "F", "M", "F", "M", "F"]
}
)
print(f"Overall fairness: {report.overall_fairness_score:.2%}")
for score in report.fairness_scores:
status = "✓" if score.is_fair else "✗"
print(f"{status} {score.metric.value}: {score.value:.3f}")
Data Bias Analysis
from bias_fairness_auditor import FairnessAuditor
auditor = FairnessAuditor()
data = [
{"gender": "M", "age": 35, "income": 75000, "approved": True},
{"gender": "F", "age": 28, "income": 65000, "approved": False},
# ... more records
]
report = auditor.audit_data(
data=data,
label_column="approved",
protected_columns=["gender", "age"]
)
print(f"Bias instances found: {len(report.bias_instances)}")
for bias in report.bias_instances:
print(f" {bias.severity.value}: {bias.description}")
Bias Mitigation
from bias_fairness_auditor import FairnessAuditor, MitigationType
auditor = FairnessAuditor()
# Apply reweighting
result = auditor.mitigate(
strategy=MitigationType.REWEIGHTING,
data=training_data,
labels=labels,
protected_column="gender"
)
weights = result.metadata["weights"]
# Use weights in model training
Compliance Checking
from bias_fairness_auditor import (
FairnessAuditor, AuditConfig, ComplianceStandard
)
config = AuditConfig(
compliance_standards=[
ComplianceStandard.ECOA,
ComplianceStandard.EEOC
]
)
auditor = FairnessAuditor(config)
result = auditor.full_audit(data, "label", predictions, ["gender"])
for compliance in result.compliance_results:
status = "PASS" if compliance.is_compliant else "FAIL"
print(f"{compliance.standard.value}: {status}")
Fairness Metrics
| Metric | Description | Threshold |
|---|---|---|
| Demographic Parity | Equal positive rates | ≥ 0.8 |
| Disparate Impact | 4/5 rule compliance | ≥ 0.8 |
| Equalized Odds | Equal TPR and FPR | ≤ 0.2 diff |
| Equal Opportunity | Equal TPR | ≤ 0.2 diff |
| Predictive Parity | Equal precision | ≤ 0.2 diff |
| Calibration | Probability accuracy | ECE ≤ 0.1 |
Bias Types Detected
- Selection Bias
- Sampling Bias
- Measurement Bias
- Label Bias
- Historical Bias
- Representation Bias
- Proxy Bias
- Algorithmic Bias
API Reference
FairnessAuditor
auditor = FairnessAuditor(config: Optional[AuditConfig] = None)
# Data audit
data_report = auditor.audit_data(data, label_column, protected_columns)
# Model audit
model_report = auditor.audit_model(predictions, actuals, protected_attributes)
# Full audit
result = auditor.full_audit(data, label_column, predictions, protected_columns)
# Mitigation
mitigation = auditor.mitigate(strategy, data, labels, protected_column)
AuditConfig
config = AuditConfig(
protected_attributes=[ProtectedAttribute.GENDER],
privileged_groups={ProtectedAttribute.GENDER: ["M"]},
unprivileged_groups={ProtectedAttribute.GENDER: ["F"]},
fairness_metrics=[FairnessMetric.DEMOGRAPHIC_PARITY],
fairness_threshold=0.8,
disparate_impact_threshold=0.8,
compliance_standards=[ComplianceStandard.ECOA]
)
License
MIT License - Pranay M
Metadata
Release files for bias-fairness-auditor 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| bias_fairness_auditor-0.1.0.tar.gz | 16.6 kB | Without provenance | Details for bias_fairness_auditor-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| bias_fairness_auditor-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for bias_fairness_auditor-0.1.0-py3-none-any.whl |
Total release size: 30.1 kB
Release files / bias_fairness_auditor-0.1.0.tar.gz
| Download URL | bias_fairness_auditor-0.1.0.tar.gz |
|---|---|
| Size | 16.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d947265a9a686afbf3f9f62f54dea2d0ca7e76552a6aa6f6a594e9bff285196e
|
|
BLAKE2b-256 checksum How to use checksums |
e79ff04cb619953d4112191bea7a0942df83a873feebbc286c0895d67ab2ae30
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Release files / bias_fairness_auditor-0.1.0-py3-none-any.whl
| Download URL | bias_fairness_auditor-0.1.0-py3-none-any.whl |
|---|---|
| Size | 13.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2a1217c91b10649037f35d683fc17772a0bb5da5245bdda0d18565c76bba48c5
|
|
BLAKE2b-256 checksum How to use checksums |
7248a541dbb9631af4ee9f80b499524ea798e4112d62b82ce90c4d6ba699e6a4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Security for bias-fairness-auditor 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.