Files
MushroomEmpire/BIAS_ANALYSIS_GUIDE.md

9.3 KiB

Enhanced Bias & Fairness Analysis Guide

Overview

The Nordic Privacy AI platform now includes a comprehensive, adaptive bias and fairness analysis system that works accurately across all types of datasets, including:

  • Small datasets (< 100 samples)
  • Imbalanced groups
  • Multiple protected attributes
  • Binary and multi-class targets
  • High-cardinality features
  • Missing data

Key Enhancements

1. Adaptive Fairness Thresholds

The system automatically adjusts fairness thresholds based on dataset characteristics:

  • Sample Size Factor: Relaxes thresholds for small sample sizes
  • Group Imbalance Factor: Adjusts for unequal group sizes
  • Dynamic Thresholds:
    • Disparate Impact: 0.7-0.8 (adapts to data)
    • Statistical Parity: 0.1-0.15 (adapts to data)
    • Equal Opportunity: 0.1-0.15 (adapts to data)

2. Comprehensive Fairness Metrics

Individual Metrics (6 types analyzed):

  1. Disparate Impact Ratio (4/5ths rule)

    • Measures: min_rate / max_rate across all groups
    • Fair range: 0.8 - 1.25 (or adaptive)
    • Higher weight in overall score
  2. Statistical Parity Difference

    • Measures: Absolute difference in positive rates
    • Fair threshold: < 0.1 (or adaptive)
    • Ensures equal selection rates
  3. Equal Opportunity (TPR equality)

    • Measures: Difference in True Positive Rates
    • Fair threshold: < 0.1 (or adaptive)
    • Ensures equal recall across groups
  4. Equalized Odds (TPR + FPR equality)

    • Measures: Both TPR and FPR differences
    • Fair threshold: < 0.1 (or adaptive)
    • Most comprehensive fairness criterion
  5. Predictive Parity (Precision equality)

    • Measures: Difference in precision across groups
    • Fair threshold: < 0.1
    • Ensures positive predictions are equally accurate
  6. Calibration (FNR equality)

    • Measures: Difference in False Negative Rates
    • Fair threshold: < 0.1
    • Ensures balanced error rates

Group-Level Metrics (per demographic group):

  • Positive Rate
  • Selection Rate
  • True Positive Rate (TPR/Recall/Sensitivity)
  • False Positive Rate (FPR)
  • True Negative Rate (TNR/Specificity)
  • False Negative Rate (FNR)
  • Precision (PPV)
  • F1 Score
  • Accuracy
  • Sample Size & Distribution

3. Weighted Bias Scoring

The overall bias score (0-1, higher = more bias) is calculated using:

Overall Score = Weighted Average of:
  - Disparate Impact (weight: 1.5x sample_weight)
  - Statistical Parity (weight: 1.0x sample_weight)
  - Equal Opportunity (weight: 1.0x sample_weight)
  - Equalized Odds (weight: 0.8x sample_weight)
  - Predictive Parity (weight: 0.7x sample_weight)
  - Calibration (weight: 0.7x sample_weight)

Sample weight = min(1.0, total_samples / 100)

4. Intelligent Violation Detection

Violations are categorized by severity:

  • CRITICAL: di_value < 0.5, or deviation > 50%
  • HIGH: di_value < 0.6, or deviation > 30%
  • MEDIUM: di_value < 0.7, or deviation > 15%
  • LOW: Minor deviations

Each violation includes:

  • Affected groups
  • Specific measurements
  • Actionable recommendations
  • Context-aware severity assessment

5. Robust Data Handling

Missing Values:

  • Numerical: Filled with median
  • Categorical: Filled with mode or 'Unknown'
  • Comprehensive logging

Data Type Detection:

  • Binary detection (0/1, Yes/No)
  • Small discrete values (< 10 unique)
  • High cardinality warnings (> 50 categories)
  • Mixed type handling

Target Encoding:

  • Automatic categorical → numeric conversion
  • Binary value normalization
  • Clear encoding maps printed

Class Imbalance:

  • Stratified splitting when appropriate
  • Minimum class size validation
  • Balanced metrics calculation

6. Enhanced Reporting

Each analysis includes:

{
  "overall_bias_score": 0.954,
  "fairness_metrics": {
    "Gender": {
      "disparate_impact": {
        "value": 0.276,
        "threshold": 0.8,
        "fair": false,
        "min_group": "Female",
        "max_group": "Male",
        "min_rate": 0.25,
        "max_rate": 0.906
      },
      "statistical_parity_difference": {...},
      "equal_opportunity_difference": {...},
      "equalized_odds": {...},
      "predictive_parity": {...},
      "calibration": {...},
      "attribute_fairness_score": 0.89,
      "group_metrics": {
        "Male": {
          "positive_rate": 0.906,
          "tpr": 0.95,
          "fpr": 0.03,
          "precision": 0.92,
          "f1_score": 0.93,
          "sample_size": 450
        },
        "Female": {...}
      },
      "sample_statistics": {
        "total_samples": 500,
        "min_group_size": 50,
        "max_group_size": 450,
        "imbalance_ratio": 0.11,
        "num_groups": 2
      }
    }
  },
  "fairness_violations": [
    {
      "attribute": "Gender",
      "metric": "Disparate Impact",
      "severity": "CRITICAL",
      "value": 0.276,
      "affected_groups": ["Female", "Male"],
      "message": "...",
      "recommendation": "CRITICAL: Group 'Female' has less than half the approval rate..."
    }
  ]
}

Usage Examples

Basic Analysis

from ai_governance import AIGovernanceAnalyzer

# Initialize
analyzer = AIGovernanceAnalyzer()

# Analyze with protected attributes
report = analyzer.analyze(
    df=your_dataframe,
    target_column='ApprovalStatus',
    protected_attributes=['Gender', 'Age', 'Race']
)

# Check bias score
print(f"Bias Score: {report['bias_analysis']['overall_bias_score']:.1%}")

# Review violations
for violation in report['bias_analysis']['fairness_violations']:
    print(f"{violation['severity']}: {violation['message']}")

With Presidio (Enhanced PII Detection)

# Enable Presidio for automatic demographic detection
analyzer = AIGovernanceAnalyzer(use_presidio=True)

API Usage

curl -X POST http://localhost:8000/api/analyze \
  -F "file=@dataset.csv" \
  -F "target_column=Outcome" \
  -F "protected_attributes=Gender,Age"

Interpreting Results

Overall Bias Score

  • < 0.3: Low bias - Excellent fairness
  • 0.3 - 0.5: Moderate bias - Monitor recommended ⚠️
  • > 0.5: High bias - Action required

Disparate Impact

  • 0.8 - 1.25: Fair (4/5ths rule satisfied)
  • < 0.8: Disadvantaged group exists
  • > 1.25: Advantaged group exists

Statistical Parity

  • < 0.1: Fair (similar positive rates)
  • > 0.1: Groups receive different treatment

Recommendations by Severity

CRITICAL

  • DO NOT DEPLOY without remediation
  • Investigate systemic bias sources
  • Review training data representation
  • Implement fairness constraints
  • Consider re-collection if necessary

HIGH

  • Address before deployment
  • Use fairness-aware training methods
  • Implement threshold optimization
  • Regular monitoring required

MEDIUM

  • Monitor closely
  • Consider mitigation strategies
  • Regular fairness audits
  • Document findings

LOW

  • Continue monitoring
  • Maintain fairness standards
  • Periodic reviews

Best Practices

1. Data Collection

  • Ensure representative sampling
  • Balance protected groups when possible
  • Document data sources
  • Check for historical bias

2. Feature Engineering

  • Avoid proxy features for protected attributes
  • Check feature correlations with demographics
  • Use feature importance analysis
  • Consider fairness-aware feature selection

3. Model Training

  • Use fairness-aware algorithms
  • Implement fairness constraints
  • Try multiple fairness definitions
  • Cross-validate with fairness metrics

4. Post-Processing

  • Threshold optimization per group
  • Calibration techniques
  • Reject option classification
  • Regular bias audits

5. Monitoring

  • Track fairness metrics over time
  • Monitor for fairness drift
  • Regular re-evaluation
  • Document all findings

Technical Details

Dependencies

numpy>=1.21.0
pandas>=1.3.0
scikit-learn>=1.0.0
presidio-analyzer>=2.2.0  # Optional
spacy>=3.0.0  # Optional for Presidio

Performance

  • Handles datasets from 50 to 1M+ rows
  • Adaptive algorithms scale with data size
  • Memory-efficient group comparisons
  • Parallel metric calculations

Limitations

  • Requires at least 2 groups per protected attribute
  • Minimum 10 samples per group recommended
  • Binary classification focus (multi-class supported)
  • Assumes independent test set

Troubleshooting

"Insufficient valid groups"

  • Check protected attribute has at least 2 non-null groups
  • Ensure groups appear in test set
  • Increase test_size parameter

"High cardinality warning"

  • Feature has > 50 unique values
  • Consider grouping categories
  • May need feature engineering

"Sample size too small"

  • System adapts automatically
  • Results may be less reliable
  • Consider collecting more data

"Presidio initialization failed"

  • Install: pip install presidio-analyzer spacy
  • Download model: python -m spacy download en_core_web_sm
  • Or use use_presidio=False

References

Support

For issues or questions:

  • Check logs for detailed diagnostic messages
  • Review sample statistics in output
  • Consult violation recommendations
  • Contact: support@nordicprivacyai.com