# 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
