# Bias Detection and Mitigation - Practical Approaches **Last updated:** 2026-02 **Status:** GA **Category:** Responsible AI & Governance --- ## Introduksjon Bias detection og mitigation er kritiske komponenter i utviklingen av rettferdige AI-systemer. Microsoft tilbyr et helhetlig rammeverk for å identifisere, måle og redusere bias gjennom hele AI-livssyklusen – fra datainsamling til produksjonsovervåkning. **To hovedtyper AI-skapt skade:** | Skadetype | Beskrivelse | Eksempel | |-----------|-------------|----------| | **Allocation harm** | Systemet gir eller holder tilbake muligheter, ressurser eller informasjon for bestemte grupper | Lånesystem som favoriserer én demografisk gruppe over andre | | **Quality-of-service harm** | Systemet fungerer dårligere for én gruppe enn en annen | Stemmegjenkenning som feiler oftere for kvinner enn menn | **Viktig prinsipp:** Fairness er en sosio-teknisk utfordring. Kvantitative metrikker fanger ikke alle aspekter av rettferdighet (som rettssikkerhet og prosessuell rettferdighet), og flere fairness-metrikker kan ikke optimaliseres samtidig. --- ## Kjernekomponenter / Nøkkelegenskaper ### 1. Responsible AI Dashboard (Azure Machine Learning) Helhetlig plattform som integrerer seks verktøy for model debugging og bias assessment: | Komponent | Formål | Verktøy | |-----------|--------|---------| | **Model Overview & Fairness** | Evaluerer modellytelse på tvers av sensitive features (kjønn, rase, alder) | [Fairlearn](https://fairlearn.org/) | | **Error Analysis** | Identifiserer feilfordelinger og kohorter med høy feilrate | [Error Analysis](https://erroranalysis.ai/) | | **Data Analysis** | Utforsker datasetdistribusjoner for over-/underrepresentasjon | Azure ML native | | **Model Interpretability** | Forklarer hvilke features som påvirker prediksjoner | [InterpretML](https://interpret.ml/) | | **Counterfactual Analysis** | Viser minimale endringer som gir motsatt prediksjon | [DiCE](https://github.com/interpretml/DiCE) | | **Causal Inference** | Estimerer kausale effekter av intervensjoner | [EconML](https://github.com/Microsoft/EconML) | **Prosess for model debugging:** 1. **Identify** → Finn feil og fairness-problemer (error analysis, fairness metrics) 2. **Diagnose** → Forstå årsakene (data analysis, interpretability, counterfactuals) 3. **Mitigate** → Implementer løsninger (Fairlearn-algoritmer, data rebalancing) ### 2. Fairlearn – Bias Mitigation Framework **Konseptuell tilnærming:** Group fairness – "Hvilke grupper risikerer å oppleve skade?" **Disparity metrics:** | Metrikk-klasse | Måler | Eksempler | |----------------|-------|-----------| | **Model performance disparity** | Forskjeller i ytelse på tvers av grupper | Accuracy rate, error rate, precision, recall, MAE | | **Selection rate disparity** | Forskjeller i positive prediksjoner | Loan approval rate, favorable classification rate | **Parity constraints (paritetsbegrensninger):** | Constraint | Formål | ML-oppgave | Beskrivelse | |------------|--------|------------|-------------| | **Demographic parity** | Reduser allocation harm | Binary classification, regression | Samme andel positive prediksjoner på tvers av grupper | | **Equalized odds** | Diagnostiser allocation og QoS harm | Binary classification | Samme true positive rate og false positive rate | | **Equal opportunity** | Diagnostiser allocation og QoS harm | Binary classification | Samme true positive rate (recall) | | **Bounded group loss** | Reduser QoS harm | Regression | Begrens maksimal loss for hver gruppe | ### 3. Fairlearn Mitigation Algorithms **Type 1: Reduction algorithms (retraining)** | Algoritme | Beskrivelse | ML-task | Sensitive features | Parity constraints | |-----------|-------------|---------|--------------------|--------------------| | `ExponentiatedGradient` | Black-box reductions approach (iterativ gradient-basert) | Binary classification | Categorical | Demographic parity, equalized odds | | `GridSearch` | Grid-search over reweighted datasets | Binary classification / Regression | Binary | Demographic parity, equalized odds / Bounded group loss | **Hvordan det fungerer:** - Tar en eksisterende estimator (f.eks. LightGBM) - Genererer sekvens av retrained modeller med reweighted training data - Bruker upweighting/downweighting av grupper for å redusere disparities - Du velger modell med beste trade-off mellom accuracy og fairness **Type 2: Post-processing algorithms (ingen retraining)** | Algoritme | Beskrivelse | ML-task | Sensitive features | Parity constraints | |-----------|-------------|---------|--------------------|--------------------| | `ThresholdOptimizer` | Justerer decision threshold per gruppe | Binary classification | Categorical | Demographic parity, equalized odds | **Hvordan det fungerer:** - Tar eksisterende classifier og sensitive feature som input - Deriverer monoton transformasjon av prediksjonene - Enforcer fairness constraints uten å retrainere modellen - Raskest og mest fleksibel tilnærming **Viktig advarsel:** Mitigation-algoritmer kan redusere bias, men eliminerer den ikke fullstendig. Utviklere må vurdere om reduksjonen er tilstrekkelig for deres use case. ### 4. Azure AI Content Safety (Runtime Protection) **Formål:** Real-time content filtering for generative AI outputs. **Kategorier som filtreres:** | Kategori | Beskrivelse | Severity levels | |----------|-------------|-----------------| | **Hate & Fairness** | Diskriminerende språk basert på rase, kjønn, religion, funksjonsnivå, etc. | Safe, Low, Medium, High | | **Sexual** | Seksuelt innhold, trakassering, utnyttelse | Safe, Low, Medium, High | | **Violence** | Voldelig innhold, våpen, trusler | Safe, Low, Medium, High | | **Self-harm** | Selvskading, selvmord | Safe, Low, Medium, High | **Default konfigurasjon:** - **Text models:** Medium severity threshold (blokkerer medium og høyere) - **Image models:** Low severity threshold (mer restriktivt) - Content filtering skjer synkront under inferens - Separat fakturering etter [Azure AI Content Safety pricing](https://azure.microsoft.com/pricing/details/cognitive-services/content-safety/) **Tilpasningsmuligheter:** - Configurable filters via "Guardrails & controls" i AI Foundry portal - Custom blocklists (ord/mønstre du vil blokkere) - Meta-prompts (systemmeldinger som guider modelladferd) - Threshold-justering per kategori **Viktig for serverless API deployments:** Content filtering er ikke automatisk aktivert for ikke-Model Inference API. Du må implementere det separat via Azure AI Content Safety SDK. ### 5. Fairness Metrics for Classification Models **Metrics for protected group comparison:** | Metric | Måler | Definisjon | |--------|-------|------------| | `predictive_parity` | Precision-forskjell | Er modellens precision lik på tvers av grupper? | | `predictive_equality` | False positive rate-forskjell | Er false positive rate lik? | | `equal_opportunity` | True positive rate-forskjell | Predikeres positive labels like godt for begge grupper? | | `statistical_parity` | Selection rate-forskjell | Er andelen positive prediksjoner lik? | **Slicing for protected groups:** - Bruk Boolean slice expressions (f.eks. `age < 25`) - Gruppe der expression=True er "protected group" - Gruppe der expression=False er "unprotected group" - Automatisk beregning av comparative metrics **Referanser:** - Wikipedia: [Fairness (machine learning)](https://en.wikipedia.org/wiki/Fairness_(machine_learning)) - Paper: "Fairness Definitions Explained" (Verma & Rubin, 2018) --- ## Arkitekturmønstre ### Mønster 1: Pre-deployment Bias Assessment Pipeline **Workflow:** ``` Training Data → Data Analysis (overrepresentasjon?) ↓ Model Training (baseline) ↓ Fairness Assessment (disparity metrics) ↓ ┌────────────┴────────────┐ ↓ ↓ Acceptable? Unacceptable? ↓ ↓ Deploy model Apply mitigation ↓ GridSearch / ExponentiatedGradient ↓ Retrain & reassess ↓ Select best trade-off model ``` **Implementasjon i Azure ML:** ```python # 1. Create Responsible AI Dashboard from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential ml_client = MLClient(DefaultAzureCredential(), subscription_id, rg, workspace) # 2. Load Fairlearn mitigation component rai_fairness_component = ml_client_registry.components.get( name="microsoft_azureml_rai_tabular_fairness", label="latest" ) # 3. Configure fairness job fairness_job = rai_fairness_component( rai_insights_dashboard=create_rai_job.outputs.rai_insights_dashboard, sensitive_features=["gender", "age", "ethnicity"], fairness_metric_thresholds={ "demographic_parity": 0.05, # Max 5% disparity "equalized_odds": 0.05 } ) ``` **Output:** Responsible AI Scorecard (PDF) for stakeholder sharing. ### Mønster 2: Multi-layered Content Filtering (Runtime) **Defense-in-depth for generative AI:** ``` User Input → Layer 1: Input Filtering ↓ Azure AI Content Safety (Prompt Shield) - Detect jailbreak attempts - Filter hate/sexual/violence content - Apply custom blocklists ↓ Layer 2: Model Inference ↓ Azure OpenAI / Custom Model - Meta-prompts for behavior guidance - Internal monitoring (anomaly detection) ↓ Layer 3: Output Filtering ↓ Azure AI Content Safety (Response Filter) - Content category filtering - Custom validation rules - Compliance checks ↓ Audit Logging (Azure Monitor) ↓ User Output ``` **Implementasjon:** ```python from azure.ai.contentsafety import ContentSafetyClient from azure.ai.contentsafety.models import AnalyzeTextOptions # Input filtering input_analysis = content_safety_client.analyze_text( AnalyzeTextOptions(text=user_input, categories=["Hate", "Violence"]) ) if input_analysis.hate_result.severity >= 2: # Medium or higher return {"blocked": True, "reason": "Hate content detected"} # ... model inference ... # Output filtering output_analysis = content_safety_client.analyze_text( AnalyzeTextOptions(text=model_response, categories=["Hate", "Sexual", "Violence"]) ) if output_analysis.hate_result.severity >= 2: # Apply correction or regenerate pass ``` **Best practices:** - **Input layer:** Rate limiting, schema validation, malicious pattern detection - **Processing layer:** Model monitoring (drift, anomaly), runtime security scanning - **Output layer:** Cross-check mot policies, audit logging, user feedback loop ### Mønster 3: Continuous Fairness Monitoring (Production) **Post-deployment drift detection:** ``` Production Traffic → Inference Logging (Azure ML) ↓ Data Profiling (scheduled) ↓ Fairness Metrics Calculation - Predictive parity - Predictive equality - Equal opportunity - Statistical parity ↓ ┌───────┴────────┐ ↓ ↓ Within thresholds? Exceeds thresholds? ↓ ↓ Continue monitoring Trigger alert ↓ Retrain pipeline ↓ A/B test new model ``` **Databricks-eksempel:** ```python from databricks.data_quality import DataQualityMonitor monitor = DataQualityMonitor.create( table_name="inference_logs", inference_log=True, problem_type="classification", slicing_exprs=["age < 25"], # Protected group ) # Automatic metrics: predictive_parity, predictive_equality, equal_opportunity ``` **Varslingskriterier:** - Disparity metric overstiger threshold (f.eks. >10% difference) - Endring i population distribution (data drift) - User feedback indikerer bias (feedback loop) **Respons:** - Automatisk retraining med oppdatert data - Model rollback til forrige versjon - Human review for root cause analysis ### Mønster 4: Human-in-the-Loop (HITL) Bias Correction **Workflow for sensitive use cases:** ``` Model Prediction → Confidence Threshold Check ↓ High confidence? → Direct output ↓ Low confidence / Sensitive group ↓ Queue for Human Review ↓ Expert annotates - Correct/Incorrect - Bias present? (Y/N) - Recommended label ↓ Feedback to Retraining Pipeline ↓ Fine-tune model on corrected labels ``` **Implementasjon i Copilot Studio:** - **Escalation triggers:** Confidence < 70%, sensitive demographic detected - **Review interface:** Azure ML Human-in-the-Loop labeling - **Feedback loop:** Export corrections → retrain → deploy **Governance layer:** - Ethics committee oversees HITL decisions - Audit trail for all manual interventions - Regular review meetings for pattern analysis --- ## Beslutningsveiledning ### Når bruke hvilken tilnærming? | Scenario | Anbefalt tilnærming | Verktøy | |----------|---------------------|---------| | **Pre-deployment assessment** | Fairlearn + Responsible AI Dashboard | `GridSearch`, `ExponentiatedGradient`, Fairness Assessment | | **Existing model (no retraining)** | Post-processing mitigation | `ThresholdOptimizer` | | **Generative AI (runtime)** | Multi-layered content filtering | Azure AI Content Safety, custom blocklists | | **Production monitoring** | Continuous fairness metrics | Azure ML Inference Logging, Databricks Data Quality Monitor | | **High-stakes decisions** | Human-in-the-Loop | Azure ML HITL, escalation workflows | | **Data imbalance** | Data-level mitigation | Resampling, reweighting, synthetic data (SMOTE) | ### Valg av parity constraint | Use case | Anbefalt constraint | Begrunnelse | |----------|---------------------|-------------| | Lånesøknader | Equalized odds | Både false positives (galt avslag) og false negatives (galt godkjenning) har konsekvenser | | Ansettelse | Demographic parity | Like mange fra hver gruppe bør få tilbud (unngå systematic exclusion) | | Medisinsk diagnose | Equal opportunity | Viktigst at sykdomstilfeller fanges opp likt på tvers av grupper | | Risiko-scoring | Bounded group loss | Begrens maksimal feil per gruppe (unngå katastrofal feil for én gruppe) | ### Trade-off-vurderinger **Accuracy vs. Fairness:** | Scenario | Prioritering | Approach | |----------|--------------|----------| | **Safety-critical (medisin)** | Accuracy > Fairness (men begge viktig) | Start med høy accuracy, juster fairness med `ThresholdOptimizer` | | **Offentlig sektor (NAV, Skatteetaten)** | Fairness ≥ Accuracy | Bruk `GridSearch` med strict fairness constraints | | **Kommersiell (marketing)** | Balansert | `ExponentiatedGradient` med business-driven threshold | **Multiple fairness metrics:** - Kan **ikke** optimalisere alle metrics samtidig (impossibility theorem) - Velg 1-2 primary metrics basert på stakeholder-prioriteringer - Dokumenter trade-offs i ADR (Architecture Decision Record) **Data diversity vs. performance:** - Mer diverse training data → bedre fairness, men kan redusere accuracy kortsiktig - Løsning: Aktiv learning for underrepresenterte grupper, synthetic data augmentation --- ## Integrasjon med Microsoft-stakken ### Azure Machine Learning **Responsible AI Dashboard – komponenter:** | Komponent | SDK-metode | Beskrivelse | |-----------|------------|-------------| | RAI Insights | `RAIInsights.from_model()` | Oppretter dashboard instance | | Fairness Assessment | `add_fairness()` | Legger til fairness metrics | | Error Analysis | `add_error_analysis()` | Tree-based error cohort discovery | | Model Interpretability | `add_explainer()` | SHAP/LIME feature importance | | Counterfactual | `add_counterfactual()` | DiCE-baserte counterfactuals | | Causal Inference | `add_causal()` | EconML treatment effects | **Pipeline-integrasjon:** ```python from responsibleai import RAIInsights rai_insights = RAIInsights( model=trained_model, train=train_data, test=test_data, target_column="outcome", task_type="classification" ) # Add components rai_insights.fairness.add( sensitive_features=["gender", "age_group"], fairness_metrics=["demographic_parity", "equalized_odds"] ) rai_insights.explainer.add() rai_insights.error_analysis.add() # Compute rai_insights.compute() # Save to Azure ML rai_insights.save("rai_dashboard_v1") ``` **Scorecard generation:** ```python from azure.ai.ml.entities import ResponsibleAIScorecardConfig scorecard_config = ResponsibleAIScorecardConfig( model_name="Housing Price Classifier", model_type="classification", metrics={ "accuracy_score": {"threshold": ">=0.85"}, "precision_score": {"threshold": ">=0.80"} }, fairness={ "metric": ["accuracy_score", "selection_rate"], "sensitive_features": ["age_group", "gender"], "fairness_evaluation_kind": "difference", "threshold": "<=0.05" # Max 5% disparity } ) # Generate PDF scorecard ml_client.responsible_ai.scorecard.create( dashboard_name="rai_dashboard_v1", config=scorecard_config ) ``` ### Azure AI Foundry **Content Safety-integrasjon:** 1. **Via serverless API deployment:** - Default content filters aktiveres automatisk - Konfigurerbart via "Guardrails & controls" tab - Medium threshold for text, Low for images 2. **Via standalone Content Safety API:** ```python from azure.ai.contentsafety import ContentSafetyClient client = ContentSafetyClient(endpoint=endpoint, credential=credential) # Analyze text result = client.analyze_text( AnalyzeTextOptions( text=user_input, categories=["Hate", "Sexual", "Violence", "SelfHarm"], blocklist_names=["custom_blocklist"], halt_on_blocklist_hit=True ) ) # Check results if result.hate_result.severity >= 2: # Medium or higher # Block or flag content ``` 3. **Custom categories (preview):** - Define egne kategorier for domene-spesifikk content moderation - Train via Content Safety Studio **Evaluation-integrasjon:** ```python from azure.ai.evaluation import HateUnfairnessEvaluator evaluator = HateUnfairnessEvaluator( azure_ai_project=azure_ai_project, credential=credential, threshold=1 # Severity threshold ) # Evaluate responses result = evaluator( query="What is the capital of France?", response="Paris" ) ``` ### Copilot Studio **Bias mitigation i conversational AI:** 1. **Diverse training data:** - Sørg for at knowledge sources representerer diverse perspektiver - Audit topics for cultural bias - Test med users fra ulike demografiske grupper 2. **Transparency practices:** - Disclose at brukeren snakker med AI - Kommuniser hvordan agenten er designet - Gi opt-out for sensitive topics 3. **Human-in-the-loop:** - Escalation flows for sensitive queries - Human review av flagged conversations - Feedback mechanism for bias reporting 4. **Monitoring:** - Track conversation analytics per user segment - Alert på disparities i satisfaction scores - Regular bias audits av conversation logs **Implementering:** ```yaml # topics/bias-sensitive-topic.yaml triggers: - "loan application" - "credit check" nodes: - id: check_sensitive_features action: call_flow flow: sensitive_feature_detector - id: human_review_gate condition: sensitive_features_detected == true action: escalate_to_human - id: proceed_automated condition: sensitive_features_detected == false action: continue_conversation ``` ### Power Platform AI **AI Builder – fairness considerations:** | Modelltype | Bias-risiko | Mitigation | |------------|-------------|------------| | **Form Processing** | Lav (objektgjenkjenning) | Test på diverse form layouts | | **Text Classification** | Høy (språkavhengig) | Balanced training data, diverse examples | | **Prediction** | Høy (historisk bias) | Feature audit, fairness metrics post-training | | **Object Detection** | Middels | Test på diverse image qualities, lighting | **Best practices:** - **Data audit:** Review training data for representation - **Test cohorts:** Validate modell på underrepresenterte grupper - **Feedback loop:** Users kan flagge incorrect predictions - **Regular retraining:** Incorporate feedback, update data distribution --- ## Offentlig sektor (Norge) ### Juridiske krav og retningslinjer **EU AI Act (gjelder fra 2026):** | Risiko-kategori | Eksempler | Krav | |-----------------|-----------|------| | **Uakseptabel risiko** | Social scoring, subliminal manipulation | Forbudt | | **Høy risiko** | Rekruttering, kreditt-scoring, rettsvesen | Conformity assessment, bias testing, logging, transparency | | **Begrenset risiko** | Chatbots | Transparency disclosure | | **Minimal risiko** | Spam-filtre | Ingen spesifikke krav | **For høy-risiko AI-systemer:** - ✅ **Bias testing påkrevd** før deployment - ✅ **Dokumentasjon** av data sources, mitigation strategies - ✅ **Human oversight** for endelige beslutninger - ✅ **Audit trail** med logging av alle prediksjoner - ✅ **Post-market monitoring** for bias drift **Norsk personopplysningslov (GDPR-implementering):** - **Art. 22:** Rett til ikke å være gjenstand for automatiserte avgjørelser (krever human review for høy-stakes) - **Art. 13-14:** Rett til informasjon om automatisert behandling - **Art. 15:** Rett til innsyn (hvilke data ble brukt?) **Diskrimineringsloven:** - Forbud mot diskriminering på grunnlag av kjønn, etnisitet, religion, funksjonsnivå, etc. - Gjelder også for AI-systemer som påvirker tilgang til tjenester ### NAV, Skatteetaten, offentlige etater – særlige hensyn **Transparenskrav:** | Stakeholder | Informasjonsbehov | Løsning | |-------------|-------------------|---------| | **Innbygger** | Hvorfor fikk jeg dette vedtaket? | Counterfactual explanations, LIME/SHAP | | **Saksbehandler** | Hvilke faktorer vektet modellen? | Feature importance, decision rules | | **Jurist/kontrollorgan** | Er systemet diskriminerende? | Fairness metrics, audit reports | | **Datatilsynet** | Overholdelse av personvern? | Privacy impact assessment, logging | **Anbefalte tiltak:** 1. **Pre-deployment:** - Gjennomfør Responsible AI Impact Assessment (template fra Microsoft) - Fairness testing på alle relevante demografiske grupper - Juridisk review av modellbeslutninger mot diskrimineringsloven - Dokumenter beslutning om acceptable trade-offs i ADR 2. **Deployment:** - **HITL workflow:** Modellen foreslår, menneske beslutter (spesielt for vedtak) - **Explanation requirement:** Alle automatiserte vedtak må ha forklaring - **Opt-out mechanism:** Innbygger kan kreve manuell behandling - **Audit logging:** Full sporbarhet (input, output, timestamp, versjon) 3. **Post-deployment:** - **Quarterly bias audits:** Review fairness metrics per kvartal - **Citizen feedback:** Klageportal for å rapportere opplevd diskriminering - **Model retraining:** Ved detektert bias, retrain med corrected data - **Annual compliance report:** Til Datatilsynet/kontrollorgan **Eksempel – NAV ytelsesberegning:** ```python # Pre-deployment fairness check fairness_report = model_evaluator.assess_fairness( sensitive_features=["gender", "ethnicity", "age", "disability_status"], metrics=["demographic_parity", "equalized_odds"], thresholds={"max_disparity": 0.05} # 5% max difference ) if fairness_report.compliant: # Deploy with HITL deploy_model(human_review_threshold=0.7) else: # Apply mitigation mitigated_model = apply_fairlearn_mitigation( model=original_model, constraint="demographic_parity", sensitive_features=["gender", "ethnicity"] ) ``` **Spesifikke utfordringer:** - **Historisk bias i data:** Tidligere vedtak kan reflektere diskriminering → data cleaning required - **Proxy features:** Features som korrelerer med sensitive attributes (f.eks. postnummer → etnisitet) må håndteres - **Explainability vs. accuracy:** Ofte trade-off – offentlig sektor prioriterer explainability - **Språk/dialekt:** NLP-modeller må fungere likt for alle norske dialekter og minoritetsspråk --- ## Kostnad og lisensiering ### Azure AI Content Safety **Pricing-modell (per 1000 text records):** | Tier | Records/måned | Pris per 1000 records | Totalkostnad (NOK, ca.) | |------|---------------|-----------------------|-------------------------| | **0-1M** | Første 1 million | $1.00 | ~10 000 NOK | | **1M-10M** | Neste 9 millioner | $0.75 | ~67 500 NOK (kumulativ: ~77 500) | | **10M+** | Over 10 millioner | $0.50 | Variable | **Image analysis:** $1.50 per 1000 images (all tiers) **Custom categories (preview):** Separat pricing (kontakt Microsoft) **Viktig:** - Content Safety faktureres **separat** fra Azure OpenAI/model inference - Default content filters på serverless deployments teller mot kvote - Region-basert pricing (US typically lowest) ### Azure Machine Learning – Responsible AI Dashboard **Kostnadsdrivere:** | Komponent | Ressurs | Estimert kostnad | |-----------|---------|------------------| | **Compute for dashboard generation** | Standard_DS3_v2 (4 cores) | ~6 NOK/time | | **Storage (dashboard artifacts)** | Azure Blob Storage | ~0.20 NOK/GB/måned | | **Fairlearn computation** | CPU-intensive (50-100 models for GridSearch) | Variable (~100-500 NOK per run) | | **Scorecard generation** | Minimal (PDF generation) | ~1-5 NOK per scorecard | **Typisk scenario (model fairness assessment):** - **Dashboard generation:** 30 min compute → ~3 NOK - **Storage:** 500 MB artifacts → ~0.10 NOK/måned - **GridSearch mitigation:** 2 timer compute → ~12 NOK - **Total per assessment:** ~15-20 NOK **Skalering:** - Dashboards kan genereres én gang per modellversjon (ikke per inference) - Re-use dashboards på tvers av stakeholders (PDF scorecard) - Batch assessments for multiple models: ~10-15 NOK per modell ### Lisenskrav **Inkludert i Azure ML-lisens:** - Responsible AI Dashboard (no additional license) - Fairlearn (open source, Apache 2.0) - InterpretML, EconML, DiCE (alle open source) **Krever egen lisens:** - Azure AI Content Safety (pay-per-use, ingen base fee) - Azure OpenAI (separate pricing for models) **Copilot Studio:** - Responsible AI features inkludert i standard Copilot Studio-lisens - No per-use charge for bias detection features **Cost optimization tips:** - ✅ Bruk **dev/test compute** for dashboard generation (50% rabatt) - ✅ **Cache dashboards** for re-use (sett lifecycle policy for blobs) - ✅ **Sample data** for initial fairness assessments (test på 10-20% av data først) - ✅ **Spot instances** for Fairlearn GridSearch (kan redusere kostnad med 70-80%) - ⚠️ **Unngå:** Real-time dashboard generation per inference (dyrt, unødvendig) --- ## For arkitekten (Cosmo) ### Når skal du anbefale bias detection/mitigation? **OBLIGATORISK for:** - ✅ Alle høy-risiko AI-systemer (jf. EU AI Act) - ✅ Offentlig sektor-løsninger som påvirker innbyggeres rettigheter (NAV, Skatteetaten) - ✅ HR/rekruttering, kreditt-scoring, forsikring (allocation harm-risk) - ✅ Medisinsk diagnose, treatment recommendation (quality-of-service harm-risk) - ✅ Generative AI med public-facing output (content safety) **ANBEFALT for:** - 🔷 Alle classification/regression-modeller i produksjon - 🔷 Chatbots og conversational AI (transparency + bias monitoring) - 🔷 Systemer som bruker sensitive features (kjønn, rase, alder, etc.) - 🔷 ML-modeller som skal ESG-rapporteres (diversity, fairness metrics) **VALGFRITT (men good practice) for:** - ⚪ Interne verktøy uten bruker-facing beslutninger - ⚪ Low-stakes predictions (f.eks. marketing segmentation) - ⚪ Prototype/POC-fase (men planlegg for pre-prod assessment) ### Spørsmål å stille stakeholders **1. Impact assessment:** - "Hvilke grupper kan påvirkes negativt av modellens feil?" - "Er dette en allocation decision (hvem får tilgang?) eller quality-of-service (fungerer det likt for alle)?" - "Hva er worst-case scenario hvis modellen er biased?" **2. Data representation:** - "Er training data representativ for alle brukergrupper?" - "Finnes det historisk bias i dataene?" (f.eks. tidligere diskriminerende vedtak) - "Har vi nok data for underrepresenterte grupper?" **3. Compliance og juridisk:** - "Gjelder GDPR Art. 22 (automatiserte avgjørelser)?" → Krever human review - "Er dette høy-risiko iht. EU AI Act?" → Fairness testing påkrevd - "Må vi kunne forklare vedtak til innbyggere?" → Transparency requirement **4. Organizational readiness:** - "Hvem er ansvarlig for å håndtere bias alerts?" (governance) - "Har vi prosess for model retraining ved detektert bias?" - "Finnes det feedback-mekanisme for brukere til å rapportere opplevd diskriminering?" ### Arkitekturprinsipper for bias-resilient systems **P1: Fairness by Design** - Inkluder fairness requirements i kravspesifikasjon (ikke etterpå) - Define sensitive features og parity constraints før training - Budget for fairness assessment i prosjektplan (~10-15% av ML-tid) **P2: Multi-layered Defense** - **Data layer:** Audit for bias, resampling/reweighting - **Model layer:** Fairlearn mitigation algorithms - **Runtime layer:** Azure AI Content Safety for generative AI - **Monitoring layer:** Continuous fairness metrics i production **P3: Human Oversight** - HITL workflows for høy-stakes decisions - Ethics committee for edge cases og trade-off decisions - User feedback loop for bias reporting **P4: Transparency og Explainability** - Model interpretability (SHAP/LIME) for alle production models - Counterfactual explanations for adverse decisions - Audit trail: logg input, output, features, version, timestamp **P5: Continuous Monitoring** - Fairness metrics i production dashboards - Alerts for disparity threshold violations - Scheduled bias audits (monthly for high-risk, quarterly for others) ### Common pitfalls og hvordan unngå dem | Pitfall | Symptom | Root cause | Løsning | |---------|---------|------------|---------| | **"Fairness washing"** | High-level commitment, ingen praktisk implementering | Mangler konkrete metrikker og accountability | Define measurable fairness KPIs, assign ownership | | **Oversimplified metrics** | Optimerer én metric, ignorerer trade-offs | Tror én metric = "fair system" | Bruk multiple metrics, dokumenter trade-offs i ADR | | **Post-hoc mitigation only** | Bruker ThresholdOptimizer uten å fikse data issues | Foretrekker quick fix over root cause analysis | Start med data audit, deretter model mitigation | | **Ignoring proxy features** | Fairness på protected features OK, men bias via proxies | F.eks. postnummer korrelerer sterkt med etnisitet | Feature correlation analysis, remove/mitigate proxies | | **Static assessment** | Pre-deployment fairness OK, men bias utvikles over tid | Data distribution endres, ingen monitoring | Continuous fairness monitoring, scheduled retraining | | **Lack of domain expertise** | Teknisk korrekt, men mangler kontekst | ML-engineers designer fairness uten domain input | Involve domain experts + ethics committee i design | ### Decision trees for Cosmo **Tree 1: Velg mitigation strategy** ``` Start: Modell viser bias ↓ Kan vi retrainere modellen? ├─ Nei → ThresholdOptimizer (post-processing) └─ Ja ↓ Er sensitive features binary eller categorical? ├─ Binary → GridSearch (fastest) └─ Categorical → ExponentiatedGradient ↓ Hvor strenge fairness constraints? ├─ Strenge (offentlig sektor) → GridSearch med tight bounds └─ Moderate (kommersiell) → ExponentiatedGradient (bedre accuracy trade-off) ``` **Tree 2: Content Safety konfigurering** ``` Start: Generative AI deployment ↓ Public-facing eller intern? ├─ Intern → Medium threshold (balansert) └─ Public-facing ↓ Målgruppe inkluderer barn/sårbare grupper? ├─ Ja → Low threshold (restriktivt) + custom blocklists └─ Nei → Medium threshold + kategori-spesifikk tuning ↓ Bransjespesifikke krav? ├─ Helsevesen → Strict filtering (all categories) ├─ Finans → Focus: Hate, Violence (compliance) └─ Offentlig sektor → All categories + transparency disclosure ``` **Tree 3: Monitoring strategy** ``` Start: Production deployment ↓ Risikokategori (EU AI Act)? ├─ Høy risiko (rekruttering, kreditt) └─ → Weekly bias audits + real-time alerts ├─ Begrenset risiko (chatbot) └─ → Monthly audits + user feedback review └─ Minimal risiko └─ → Quarterly audits ``` ### Red flags for Cosmo å se etter **I kravspesifikasjon:** - 🚩 Ingen mention av fairness/bias i requirements - 🚩 "Vi har ikke sensitive features" (dobbeltsjekk for proxies) - 🚩 "Testing på overall accuracy holder" (ingen subgroup analysis) **I dataanalyse:** - 🚩 Underrepresenterte grupper (<5% av dataset) - 🚩 Historiske data med kjente bias issues (f.eks. gamle HR-vedtak) - 🚩 Ubalanserte labels på tvers av grupper (f.eks. 80% approval rate for group A, 40% for group B) **I modellutvikling:** - 🚩 Ingen fairness metrics beregnet - 🚩 "Modellen er ferdig, kan vi bare kjøre Fairlearn raskt?" (bias mitigation bør ikke være afterthought) - 🚩 Mangler dokumentasjon av trade-off decisions (accuracy vs. fairness) **I deployment-plan:** - 🚩 Ingen HITL workflow for høy-stakes decisions - 🚩 Mangler monitoring-setup for production fairness metrics - 🚩 Ingen definert prosess for å håndtere bias alerts ### Kostnadsestimering for bias mitigation **Typisk prosjekt (norsk offentlig sektor, classification model):** | Fase | Aktivitet | Tid (timer) | Kostnad (NOK, ca.) | |------|-----------|-------------|--------------------| | **Pre-deployment** | Data audit for bias | 16 | Konsulent: ~20 000 | | | Fairness metrics beregning | 8 | Azure compute: ~50 | | | Fairlearn mitigation (GridSearch) | 4 | Azure compute: ~25 | | | Responsible AI Dashboard | 2 | Azure compute: ~10 | | | Scorecard generering og review | 4 | Konsulent: ~5 000 | | **Deployment** | HITL workflow-implementering | 16 | Utvikler: ~20 000 | | | Monitoring dashboard setup | 8 | Utvikler: ~10 000 | | **Production (årlig)** | Continuous monitoring compute | - | Azure: ~500/måned → 6 000/år | | | Quarterly bias audits | 16/kvartal | Konsulent: ~20 000/år | | | Content Safety (1M requests/mnd) | - | Azure: ~10 000/måned → 120 000/år | | **Total første år** | | | ~201 000 NOK (+ løpende ~146 000/år) | **Cost-benefit:** - **Kostnaden** ved å ikke gjøre bias mitigation: Bøter (GDPR: opp til 4% av omsetning), omdømmetap, juridiske saker - **ROI-perspektiv:** Bias mitigation er **risikoreduseringsaktivitet**, ikke direkte revenue driver --- ## Kilder og verifisering **Microsoft Learn – offisiell dokumentasjon:** 1. **Model performance and fairness (Azure ML)** https://learn.microsoft.com/en-us/azure/machine-learning/concept-fairness-ml Verifisert: 2026-02-03 | Status: GA | Confidence: ✅ High 2. **Responsible AI dashboard** https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard Verifisert: 2026-02-03 | Status: GA | Confidence: ✅ High 3. **Fairlearn mitigation algorithms** https://fairlearn.org/v0.7.0/user_guide/mitigation.html Verifisert: 2026-02-03 | Status: Open source, maintained | Confidence: ✅ High 4. **Azure AI Content Safety overview** https://learn.microsoft.com/en-us/azure/ai-services/content-safety/overview Verifisert: 2026-02-03 | Status: GA | Confidence: ✅ High 5. **Apply responsible AI principles (Copilot Studio)** https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/responsible-ai Verifisert: 2026-02-03 | Status: GA | Confidence: ✅ High 6. **Content filter severity levels** https://learn.microsoft.com/en-us/azure/ai-foundry/openai/concepts/content-filter-severity-levels Verifisert: 2026-02-03 | Status: GA | Confidence: ✅ High 7. **Monitor fairness and bias (Databricks)** https://learn.microsoft.com/en-us/azure/databricks/data-quality-monitoring/data-profiling/fairness-bias Verifisert: 2026-02-03 | Status: GA | Confidence: ✅ High **Microsoft Research papers:** 8. **A Reductions Approach to Fair Classification** (Agarwal et al., 2018) https://arxiv.org/abs/1803.02453 Grunnlag for ExponentiatedGradient og GridSearch algorithms | Confidence: ✅ High 9. **Equality of Opportunity in Supervised Learning** (Hardt et al., 2016) https://arxiv.org/abs/1610.02413 Grunnlag for ThresholdOptimizer | Confidence: ✅ High 10. **Fair Regression: Quantitative Definitions and Reduction-based Algorithms** (Agarwal et al., 2019) https://arxiv.org/abs/1905.12843 Regression fairness med bounded group loss | Confidence: ✅ High **Open source verktøy:** 11. **Fairlearn** – https://fairlearn.org/ Microsoft-supported open source project | Confidence: ✅ High 12. **InterpretML** – https://interpret.ml/ Model interpretability framework | Confidence: ✅ High 13. **EconML** – https://github.com/Microsoft/EconML Causal inference library | Confidence: ✅ High 14. **DiCE** – https://github.com/interpretml/DiCE Counterfactual explanations | Confidence: ✅ High **Standarder og regelverk:** 15. **EU AI Act** (gjelder fra 2026) https://artificialintelligenceact.eu/ Confidence: ✅ High (regulatory requirement) 16. **NIST AI Risk Management Framework** https://www.nist.gov/itl/ai-risk-management-framework Confidence: ✅ High (industry standard) 17. **Microsoft Responsible AI Standard v2** https://blogs.microsoft.com/wp-content/uploads/prod/sites/5/2022/06/Microsoft-Responsible-AI-Standard-v2-General-Requirements-3.pdf Confidence: ✅ High (Microsoft-internt rammeverk) **Pricing og lisensiering:** 18. **Azure AI Content Safety pricing** https://azure.microsoft.com/pricing/details/cognitive-services/content-safety/ Verifisert: 2026-02-03 | Confidence: ✅ High (offerisielle priser) 19. **Azure Machine Learning pricing** https://azure.microsoft.com/pricing/details/machine-learning/ Verifisert: 2026-02-03 | Confidence: ✅ High **Confidence markers brukt:** - ✅ **High:** Offisiell Microsoft-dokumentasjon, peer-reviewed papers, regulatory standards - 🔶 **Medium:** Community-bidrag, third-party case studies (ikke brukt i dette dokumentet) - ⚠️ **Low:** Spekulativt, beta features (ikke brukt i dette dokumentet) **Viktig disclaimer:** - Fairness er en **sosio-teknisk utfordring**, ikke en rent teknisk løsning - Kvantitative metrikker fanger ikke alle aspekter av rettferdighet (justice, due process, cultural context) - Utviklere og organisasjoner må vurdere context-spesifikke trade-offs og ta ansvar for decisions - Dette dokumentet gir tekniske verktøy, men erstatter ikke juridisk rådgivning eller etisk vurdering