# Fairness Testing and Measurement - Quantifying Equity **Last updated:** 2026-04 **Status:** GA **Category:** Responsible AI & Governance --- ## Introduksjon Fairness testing og measurement er kritiske disipliner for å kvantifisere og redusere bias i AI-systemer. Når AI-modeller tar beslutninger som påvirker mennesker — fra låneinnvilgelser til sykdomsdiagnostikk — må vi kunne måle om disse systemene behandler alle grupper rettferdig. Microsoft sin tilnærming til fairness testing bygger på prinsippet om **group fairness**, som identifiserer hvilke grupper av individer som står i fare for å oppleve skade fra AI-systemet. Dette operasjonaliseres gjennom: 1. **Identifikasjon av sensitive features** — attributter som kjønn, alder, etnisitet, geografi 2. **Disparity metrics** — kvantitative mål på forskjeller i modellprestasjon mellom grupper 3. **Parity constraints** — krav til at modellen skal oppføre seg sammenlignbart på tvers av grupper 4. **Mitigation algorithms** — teknikker for å redusere oppdagede forskjeller **Verified** (Microsoft Learn, 2026-02): Azure Machine Learning Responsible AI dashboard tilbyr fairness assessment som en kjernekomponent i model lifecycle management. ### To hovedtyper av AI-skapt skade | Skadetype | Definisjon | Eksempel | |-----------|------------|----------| | **Allocation harm** | Systemet gir eller nekter muligheter, ressurser eller informasjon til visse grupper | Lånemodell som er bedre til å velge gode kandidater fra én etnisk gruppe enn en annen | | **Quality-of-service harm** | Systemet fungerer dårligere for én gruppe enn en annen | Voice recognition som feiler oftere for kvinner enn menn | --- ## Kjernekomponenter ### Fairlearn Open-Source Package **Verified** (Microsoft Learn, fairlearn.org): Fairlearn er Microsoft sitt primære open-source bibliotek for fairness assessment og mitigation. Det er integrert i Azure Machine Learning Responsible AI dashboard. | Komponent | Funksjon | |-----------|----------| | **Disparity metrics** | Sammenligner modellprestasjon mellom grupper | | **Mitigation algorithms** | Reduction og post-processing teknikker | | **Dashboard integration** | Visualisering i Azure ML Studio | | **Parity constraints** | Demographic parity, equalized odds, equal opportunity, bounded group loss | ### Disparity Metrics — Kvantifisering av Ulikhet **To hovedklasser av disparity metrics:** #### 1. Disparity i Model Performance Måler forskjellen i ytelsesmetrikker på tvers av subgrupper: | Metrikk | Definisjon | Modelltype | |---------|------------|------------| | Disparity in accuracy | Forskjell i nøyaktighet mellom grupper | Classification | | Disparity in error rate | Forskjell i feilrate mellom grupper | Classification | | Disparity in precision | Forskjell i presisjon mellom grupper | Classification | | Disparity in recall | Forskjell i recall mellom grupper | Classification | | Disparity in MAE | Forskjell i mean absolute error mellom grupper | Regression | **Målemåter:** Kan uttrykkes som ratio (max/min) eller difference (max - min). #### 2. Disparity i Selection Rate **Selection rate** = andelen datapunkter klassifisert som 1 (i binary classification) eller distribusjon av prediksjoner (i regression). **Eksempel:** Disparity i loan approval rate — forskjell i godkjenningsrate mellom demografiske grupper. ### Fairness Metrics for Responsible AI Scorecard **Verified** (Azure ML SDK/CLI documentation, 2026-02): Ved generering av Responsible AI scorecard kan du konfigurere fairness assessment med disse metrikkene: | Metric | fairness_evaluation_kind | Definition | Model type | |--------|-------------------------|------------|------------| | `accuracy_score` | difference | Maksimal forskjell i accuracy mellom to grupper | Classification | | `accuracy_score` | ratio | Minimum ratio i accuracy mellom to grupper | Classification | | `precision_score` | difference | Maksimal forskjell i precision mellom to grupper | Classification | | `precision_score` | ratio | Maksimal ratio i precision mellom to grupper | Classification | | `recall_score` | difference | Maksimal forskjell i recall mellom to grupper | Classification | | `recall_score` | ratio | Maksimal ratio i recall mellom to grupper | Classification | | `f1_score` | difference | Maksimal forskjell i F1 mellom to grupper | Classification | | `f1_score` | ratio | Maksimal ratio i F1 mellom to grupper | Classification | | `error_rate` | difference | Maksimal forskjell i error rate mellom to grupper | Classification | | `error_rate` | ratio | Maksimal ratio i error rate mellom to grupper | Classification | | `selection_rate` | difference | Maksimal forskjell i selection rate mellom to grupper | Classification | | `selection_rate` | ratio | Maksimal ratio i selection rate mellom to grupper | Classification | | `mean_absolute_error` | difference | Maksimal forskjell i MAE mellom to grupper | Regression | | `mean_absolute_error` | ratio | Maksimal ratio i MAE mellom to grupper | Regression | | `mean_squared_error` | difference | Maksimal forskjell i MSE mellom to grupper | Regression | | `mean_squared_error` | ratio | Maksimal ratio i MSE mellom to grupper | Regression | **Viktig:** Valg av `difference` vs. `ratio` påvirker skalaen av target-verdien. Ved setting av thresholds: - Difference: Typisk målsetning ≤ 0.05 (5% forskjell) - Ratio: Typisk målsetning ≥ 0.80 (80% ratio) ### Databricks Data Quality Monitoring — Fairness Metrics **Verified** (Databricks documentation, 2026-02): For classification models i Databricks kan du overvåke fairness med disse metrikkene: | Metrikk | Definisjon | Referanse | |---------|------------|-----------| | `predictive_parity` | Sammenligner modellens precision mellom grupper | [Fairness Definitions Explained, Verma & Rubin 2018](http://fairware.cs.umass.edu/papers/Verma.pdf) | | `predictive_equality` | Sammenligner false positive rates mellom grupper | Wikipedia: Fairness (machine learning) | | `equal_opportunity` | Måler om en label blir predikert like godt for begge grupper | [Equality of Opportunity in Supervised Learning](https://arxiv.org/abs/1610.02413) | | `statistical_parity` | Måler forskjell i predikerte outcomes mellom grupper | Fairness literature | **Oppsett:** ```python slicing_exprs = ["age < 25"] # Protected group = True, unprotected = False ``` --- ## Arkitekturmønstre ### Pattern 1: Responsible AI Dashboard — Model Overview Component **Verified** (Azure ML, GA): Model Overview-komponenten i Responsible AI dashboard genererer performance metrics for hele datasettet og identifiserte kohorter, med breakdown på sensitive features. **Workflow:** 1. **Opprett dashboard constructor** — last inn model, training dataset, test dataset 2. **Spesifiser sensitive features** — f.eks. `categorical_column_names: '["gender", "age_group", "ethnicity"]'` 3. **Konfigurer fairness assessment** — velg metrics og target thresholds 4. **Generer fairness heat map** — visualiser disparity across cohorts 5. **Eksporter Responsible AI scorecard** — PDF med fairness insights for stakeholders **YAML eksempel:** ```yaml create_rai_job: type: command component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_insight_constructor/versions/ inputs: title: "Fairness Assessment - Loan Approval Model" task_type: classification model_input: type: mlflow_model path: azureml:loan_model:1 train_dataset: ${{parent.inputs.train_data}} test_dataset: ${{parent.inputs.test_data}} target_column_name: "approved" categorical_column_names: '["gender", "ethnicity", "age_group"]' ``` **Scorecard configuration (JSON):** ```json { "Model": { "ModelName": "Loan Approval Classifier", "ModelType": "Classification" }, "Fairness": { "metric": ["accuracy_score", "selection_rate"], "sensitive_features": ["gender", "ethnicity"], "fairness_evaluation_kind": "difference", "threshold": "<=0.05" } } ``` ### Pattern 2: Fairness Mitigation med Parity Constraints **Verified** (Fairlearn documentation, Azure ML): Etter å ha identifisert fairness issues, bruk mitigation algorithms. #### Parity Constraints | Constraint | Formål | ML Task | Algoritme | |------------|--------|---------|-----------| | **Demographic parity** | Mitigere allocation harms | Binary classification, regression | `ExponentiatedGradient`, `GridSearch` | | **Equalized odds** | Diagnostisere allocation og quality-of-service harms | Binary classification | `ExponentiatedGradient`, `GridSearch`, `ThresholdOptimizer` | | **Equal opportunity** | Diagnostisere allocation og quality-of-service harms | Binary classification | `ThresholdOptimizer` | | **Bounded group loss** | Mitigere quality-of-service harms | Regression | `GridSearch` | #### Mitigation Algorithms | Algoritme | Type | Beskrivelse | Sensitive Features | Parity Constraints | |-----------|------|-------------|-------------------|-------------------| | `ExponentiatedGradient` | Reduction | Black-box approach — retrainer modellen med reweighted datasets | Categorical | Demographic parity, equalized odds | | `GridSearch` | Reduction | Grid-search over reweighted models | Binary | Demographic parity, equalized odds, bounded group loss | | `ThresholdOptimizer` | Post-processing | Justerer decision thresholds for å enforces fairness | Categorical | Demographic parity, equalized odds | **Python eksempel (Fairlearn mitigation):** ```python from fairlearn.reductions import ExponentiatedGradient, DemographicParity from sklearn.linear_model import LogisticRegression # Define constraint constraint = DemographicParity() # Mitigate unfairness mitigator = ExponentiatedGradient( estimator=LogisticRegression(), constraints=constraint ) mitigator.fit(X_train, y_train, sensitive_features=A_train) y_pred_mitigated = mitigator.predict(X_test) ``` ### Pattern 3: MLflow GenAI Evaluation med Custom Fairness Scorers **Verified** (Databricks MLflow documentation): For generative AI kan du definere custom fairness scorers. **Python eksempel:** ```python from mlflow.genai.scorers import scorer from mlflow.entities import Feedback, AssessmentSource @scorer def fairness_scorer(inputs, outputs, context): # Custom logic to assess fairness in LLM outputs protected_group_mentions = check_demographic_representation(outputs) score = calculate_fairness_score(protected_group_mentions) return Feedback( value=score, rationale=f"Protected group representation: {protected_group_mentions}", source=AssessmentSource( source_type="CODE", source_id="fairness_checker_v1" ) ) ``` ### Pattern 4: Azure AI Foundry — Hate and Unfairness Evaluator **Verified** (Azure AI Evaluation SDK, 2026-02): For Azure OpenAI og generative modeller. **Python eksempel:** ```python from azure.identity import DefaultAzureCredential from azure.ai.evaluation import HateUnfairnessEvaluator azure_ai_project = { "subscription_id": os.environ.get("AZURE_SUBSCRIPTION_ID"), "resource_group_name": os.environ.get("AZURE_RESOURCE_GROUP_NAME"), "project_name": os.environ.get("AZURE_PROJECT_NAME"), } credential = DefaultAzureCredential() hate_unfairness_eval = HateUnfairnessEvaluator( azure_ai_project=azure_ai_project, credential=credential, threshold=1 ) result = hate_unfairness_eval( query="What is the capital of France?", response="Paris", ) ``` --- ## Beslutningsveiledning ### Når bruke hvilken metrikk? | Scenario | Anbefalt metrikk | Begrunnelse | |----------|------------------|-------------| | Låneinnvilgelser, ansettelser | Selection rate (difference) | Direkte måler allocation harm — forskjell i positive outcomes | | Diagnosemodeller | Equalized odds (recall, precision) | Kritisk at både sensitivity og specificity er like på tvers av grupper | | Prisestimering | MAE/MSE (difference) | Viktig at gjennomsnittlig feil er lik for alle grupper | | Risk scoring | Predictive parity | Sikrer at precision er lik — positive predictions er like pålitelige | ### Velg mellom Difference og Ratio | Evaluation Kind | Når bruke | Eksempel threshold | |-----------------|-----------|-------------------| | **Difference** (max - min) | Når absolutte gap er viktig | ≤ 0.05 (5% forskjell) | | **Ratio** (min/max) | Når relativ forskjell er viktig | ≥ 0.80 (80% ratio) | **Baseline:** Difference er ofte enklere å tolke for stakeholders. ### Fairness vs. Performance Trade-off **Viktig:** Mange fairness metrics kan ikke tilfredsstilles samtidig. Du må gjøre trade-offs basert på: 1. **Business domain** — hva er konsekvensene av false positives vs. false negatives? 2. **Legal requirements** — diskrimineringslover i Norge/EU (GDPR, AI Act) 3. **Stakeholder input** — kvalitativ analyse med domeneeksperter 4. **Performance tolerance** — hvor mye accuracy tap aksepterer du for å oppnå fairness? **Decision tree:** ``` Er dette en high-stakes decision? (lån, jobb, helse) ├── Ja → Bruk strenge fairness thresholds (difference ≤ 0.03) │ → Vurder post-processing (ThresholdOptimizer) │ → Dokumenter i ADR └── Nei → Bruk moderate thresholds (difference ≤ 0.05) → Vurder reduction methods (ExponentiatedGradient) ``` --- ## Integrasjon med Microsoft-stakken ### Azure Machine Learning | Komponent | Fairness Capability | Status | |-----------|-------------------|--------| | **Responsible AI dashboard** | Model overview med fairness metrics | GA | | **Fairlearn integration** | Disparity metrics og mitigation | GA | | **Scorecard PDF export** | Fairness insights for stakeholders | Preview | | **MLflow model registry** | Logg fairness metrics som model metadata | GA | **Workflow:** 1. **Tren modell** → registrer i MLflow format med sklearn flavor 2. **Opprett RAI dashboard** → konfigurer sensitive features og metrics 3. **Analyser results** → identifiser cohorts med høyest disparity 4. **Appliser mitigation** → retrain med Fairlearn algorithms 5. **Generer scorecard** → eksporter PDF med fairness target values 6. **Deployment gate** → beslutning basert på fairness thresholds ### Azure AI Foundry **Verified** (Azure AI Foundry documentation, 2026-02): | Capability | Beskrivelse | Status | |------------|-------------|--------| | `HateUnfairnessEvaluator` | Content safety evaluator for generative models | GA | | Responsible AI dashboard integration | Lenke RAI insights til model endpoints | GA | | Content filtering | Pre-trained filters for hate, fairness, violence | GA | **Bruk sammen med Azure OpenAI:** - Evaluate generated content for bias before deployment - Monitor production traffic for fairness degradation - Implement human-in-the-loop review for high-risk scenarios ### Power Platform AI Builder **Baseline:** AI Builder bruker samme Responsible AI prinsipper, men fairness testing er mer begrenset: - **Pre-built models**: Fairness testing utført av Microsoft - **Custom models**: Ingen innebygd fairness assessment UI (per 2026-02) - **Workaround**: Eksporter predictions til Azure ML for fairness analysis --- ## Offentlig sektor (Norge) ### Juridiske rammeverk | Regelverk | Relevans for Fairness | Krav | |-----------|----------------------|------| | **EU AI Act** | Høy-risiko AI-systemer må undergå fairness testing | Dokumentert bias testing, adverse impact analysis | | **GDPR** | Automatiserte beslutninger må kunne forklares | Fairness som del av "meaningful information" | | **Likestillingsloven** | Forbud mot indirekte diskriminering | Disparity metrics for kjønn | | **Diskrimineringsloven** | Forbud mot etnisitet-, alders-, funksjonsnedsettelsesdiskriminering | Fairness testing for alle beskyttede grupper | ### Anbefalte praksis for norsk offentlig sektor 1. **Identifiser sensitive features tidlig** — dokumenter i PVK (personvernkonsekvensutredning) 2. **Sett fairness thresholds** — strengere enn privat sektor (≤ 0.03 difference) 3. **Dokumenter trade-offs** — bruk ADR for fairness vs. performance decisions 4. **Etabler governance** — fairness review som deployment gate 5. **Kontinuerlig overvåking** — fairness metrics i production dashboards **Eksempel: NAV AI-system** - **Sensitive features:** Kjønn, alder, innvandrerbakgrunn, funksjonsnedsettelse - **Metrics:** Selection rate (difference), predictive parity - **Threshold:** ≤ 0.02 (2% forskjell) - **Mitigation:** ThresholdOptimizer med manual review layer ### Datatilgang og representativitet **Utfordring:** Norske datasett kan være for små til å oppdage disparity i minoritetsgrupper. **Løsninger:** - **Oversampling** — bruk synthetic data generation (men dokumenter bias risk) - **Intersectional analysis** — test ikke bare enkeltdimensjoner (kjønn), men kombinasjoner (kjønn + alder + geografi) - **External validation** — test på EU-datasett hvis norske data mangler --- ## Kostnad og lisensiering ### Azure Machine Learning Responsible AI Dashboard **Verified** (Azure pricing, 2026-02): | Komponent | Kostnad | Lisens | |-----------|---------|--------| | Fairlearn (open-source) | Gratis | MIT License | | RAI dashboard compute | Standard Azure ML compute pricing | Betales per compute time | | Scorecard generation | Inkludert i RAI pipeline | Ingen ekstra kostnad | **Estimat for fairness testing pipeline:** - **Compute:** Standard_DS3_v2 (4 cores, 14 GB RAM) - **Runtime:** 15-30 min per model - **Kostnad:** ~10-20 NOK per run **Total TCO for årlig fairness monitoring (12 models, monthly testing):** - Compute: ~2000-3000 NOK/år - Storage (dashboard artifacts): ~100 NOK/år ### Azure AI Foundry — Content Safety Evaluators | Evaluator | Pricing Model | Estimat | |-----------|---------------|---------| | `HateUnfairnessEvaluator` | Per 1000 transactions | ~5 NOK per 1000 eval calls | | Content filtering (Azure OpenAI) | Inkludert i token pricing | Ingen ekstra kostnad | ### Databricks — Data Quality Monitoring **Baseline:** Fairness metrics i Databricks er del av Lakehouse monitoring feature. - **Requires:** Databricks Premium eller Enterprise tier - **Kostnad:** Inkludert i tier pricing (ingen per-metric charge) --- ## For arkitekten (Cosmo) ### 1. Fairness er ikke kun teknisk — det er sosio-teknisk **Viktig:** Kvantitative fairness metrics fanger ikke aspekter som rettferdighet, due process, og kontekstuell hensiktsmessighet. Du må alltid kombinere metrics med kvalitativ analyse. **Anbefalinger til kunden:** - "Fairness assessment krever domeneekspertise. Hvilke grupper er i risiko for skade i deres brukstilfelle?" - "Fairlearn kan identifisere disparity, men ikke fortelle om det er 'rettferdig'. Vi må involvere stakeholders." ### 2. Trade-offs er uunngåelige Du kan ikke tilfredsstille alle fairness metrics samtidig (mathematical impossibility results, [Kleinberg et al. 2016](https://arxiv.org/abs/1609.05807)). **Spørsmål å stille kunden:** - "Hva er viktigst: lik accuracy på tvers av grupper, eller lik false positive rate?" - "Er det verre å feilaktig nekte noen (false negative) eller feilaktig godkjenne (false positive)?" - "Hva er lovkravene i deres domene? (EU AI Act, diskrimineringsloven)" **Dokumenter i ADR:** - Hvilke fairness metrics som ble valgt - Hvilke ble nedprioritert, og hvorfor - Performance vs. fairness trade-off ### 3. Velg riktig mitigation strategi | Scenario | Anbefalt strategi | Begrunnelse | |----------|------------------|-------------| | Må re-deploy modellen hyppig | **Post-processing** (`ThresholdOptimizer`) | Rask, ingen retraining, fleksibel | | Har tid til retraining | **Reduction** (`ExponentiatedGradient`) | Bedre performance, men tregere | | Multi-class problem | **One-vs-Rest + post-processing** | Fairlearn støtter primært binary classification | | High-stakes decision | **Hybrid approach** — reduction + human review | Kombinerer automatisering med oversikt | ### 4. Fairness i produksjon — overvåking er kritisk Fairness degradation kan skje over tid (data drift, population shift). **Implementer:** - **Fairness metrics i monitoring dashboard** — track disparity over time - **Alerting** — trigger hvis disparity overskrider threshold - **Retraining triggers** — automatisk re-evaluate når data distribution endres **Azure ML løsning:** - Bruk Azure ML model monitoring med custom metrics - Logg fairness metrics til Application Insights - Sett opp Azure Monitor alerts for fairness thresholds ### 5. Generative AI fairness — nye utfordringer **Baseline:** Tradisjonelle fairness metrics (demographic parity, equalized odds) er designet for discriminative models. For generative AI: **Nye metrics:** - **Representation fairness** — er alle grupper representert i generated content? - **Stereotyping detection** — genererer modellen stereotype outputs? - **Toxicity disparity** — er hate speech mer vanlig for visse grupper? **Verktøy:** - `HateUnfairnessEvaluator` (Azure AI Evaluation) - Custom MLflow scorers med LLM-as-a-judge - Human-in-the-loop review (obligatorisk for high-stakes) ### 6. Offentlig sektor — strengere krav For norske offentlige myndigheter: **Obligatoriske tiltak:** - **PVK (personvernkonsekvensutredning)** — fairness testing som del av prosessen - **Diskrimineringsanalyse** — dokumenter testing for alle beskyttede grupper - **Transparensrapport** — publiser fairness metrics (i tråd med AI Act) - **Klageadgang** — mekanisme for å utfordre automated decisions **Arkitektur-implikasjoner:** - Lag audit trail for alle fairness tests - Eksporter Responsible AI scorecards som PDF for juridisk dokumentasjon - Implementer "right to explanation" — link model predictions til fairness analysis ### 7. Skill mellom fairness testing (development) og fairness monitoring (production) | Fase | Mål | Verktøy | Frekvens | |------|-----|---------|----------| | **Development** | Identifiser og mitiger bias før deployment | Responsible AI dashboard, Fairlearn mitigation | Per model version | | **Production** | Detect fairness degradation over tid | Azure ML monitoring, custom metrics | Continuous (weekly/monthly) | --- *(Verified MCP 2026-04)* ## Kilder og verifisering ### Microsoft Learn Documentation (Verified) 1. **Model performance and fairness** — Azure Machine Learning https://learn.microsoft.com/en-us/azure/machine-learning/concept-fairness-ml?view=azureml-api-2 Status: GA | Verifisert: 2026-02 2. **Generate Responsible AI insights with YAML and Python** https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-insights-sdk-cli?view=azureml-api-2 Status: GA | Verifisert: 2026-02 3. **Monitor fairness and bias for classification models** — Databricks https://learn.microsoft.com/en-us/azure/databricks/data-quality-monitoring/data-profiling/fairness-bias Status: GA | Verifisert: 2026-02 4. **Responsible AI dashboard** — Azure Machine Learning https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?view=azureml-api-2 Status: GA | Verifisert: 2026-02 5. **Azure AI Evaluation SDK** — HateUnfairnessEvaluator https://learn.microsoft.com/en-us/python/api/azure-ai-evaluation/azure.ai.evaluation.hateunfairnessevaluator?view=azure-python Status: GA | Verifisert: 2026-02 ### Akademiske kilder (Baseline) 6. **Fairness Definitions Explained** — Verma & Rubin (2018) http://fairware.cs.umass.edu/papers/Verma.pdf Kilde: Databricks documentation reference 7. **Equality of Opportunity in Supervised Learning** — Hardt, Price & Srebro (2016) https://arxiv.org/abs/1610.02413 Kilde: Fairlearn mitigation algorithms 8. **A Reductions Approach to Fair Classification** — Agarwal et al. (2018) https://arxiv.org/abs/1803.02453 Kilde: Fairlearn ExponentiatedGradient algorithm ### Open-Source (Verified) 9. **Fairlearn** — Microsoft open-source fairness toolkit https://fairlearn.org/ License: MIT | Verifisert: 2026-02 ### Code Samples (Verified) 10. **Azure AI Evaluation Python SDK examples** https://learn.microsoft.com/en-us/python/api/azure-ai-evaluation/ Language: Python | Verifisert: 2026-02 --- **Confidence level:** High (95%) - Fairness metrics, Fairlearn integration, RAI dashboard: Verified via Microsoft Learn - Mitigation algorithms: Verified via Fairlearn documentation og Azure ML examples - Generative AI evaluators: Verified via Azure AI Evaluation SDK documentation - Databricks metrics: Verified via Databricks documentation **Sist verifisert:** 2026-02-04