Driftdetectie Voor AI-modellen In De Nederlandse Overheid

💼 Management Samenvatting

Driftdetectie is de kern van volwassen AI-observability: het maakt zichtbaar wanneer de werkelijkheid waarop een model is getraind, niet meer overeenkomt met de werkelijkheid waarin het model vandaag beslissingen neemt.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
8/10
Implementatie
160u (tech: 80u)
Van toepassing op:
Azure
M365
AI Services
On-premises
Hybride omgevingen

AI-modellen worden getraind op historische datasets met een bepaald profiel van burgers, transacties, netwerkverkeer of documenten. In de praktijk verandert deze populatie continu door nieuw beleid, demografische ontwikkelingen, gewijzigde wetgeving of veranderend gedrag van kwaadwillenden. Zonder actieve driftdetectie kan een model maandenlang ogenschijnlijk ‘goed’ blijven draaien, terwijl de voorspellingen structureel onnauwkeuriger, oneerlijker of minder robuust worden. Voor Nederlandse overheidsorganisaties kan dit leiden tot foutieve risicobeoordelingen, scheve handhaving, onterechte toekenning of afwijzing van voorzieningen en een aantasting van vertrouwen in digitale dienstverlening. Tegelijkertijd eisen EU AI Act, AVG, BIO en NIS2 dat organisaties aantoonbaar grip houden op AI-risico’s gedurende de volledige levenscyclus van een systeem – driftdetectie is daarvoor een onmisbaar controlemiddel.

PowerShell Modules Vereist
Primary API: Azure Machine Learning, Azure Monitor, Microsoft Fabric
Connection: Connect-AzAccount, Connect-MgGraph
Required Modules: Az.Accounts, Az.Monitor, Az.MachineLearningServices, Microsoft.Graph

Implementatie

Dit artikel beschrijft hoe u driftdetectie structureel inricht als onderdeel van AI-observability binnen de Nederlandse overheid. We leggen het verschil uit tussen datadrift en conceptdrift, lichten toe welke statistische methoden en praktische indicatoren u in de dagelijkse praktijk kunt inzetten en laten zien hoe u deze controles integreert in Azure Machine Learning, Azure Monitor en bestaande logging- en SIEM-oplossingen. Vervolgens behandelen we hoe u drempelwaarden, escalatiepaden en governance vastlegt, zodat driftdetectie niet alleen een technische functie is, maar ook aantoonbaar wordt meegenomen in risicomanagement, audits en rapportages richting bestuur en toezichthouders.

Fundamenten van driftdetectie: data- en conceptdrift

Driftdetectie begint met een helder begrip van wat er precies kan ‘driften’ in een AI-systeem. In de praktijk wordt onderscheid gemaakt tussen datadrift en conceptdrift. Bij datadrift verandert de statistische verdeling van invoergegevens: bepaalde kenmerken komen vaker of juist minder vaak voor, nieuwe waarden verschijnen of oude verdwijnen, of de onderlinge relaties tussen kenmerken schuiven op. Denk aan veranderingen in het type aanvragen dat bij een vergunningenloket binnenkomt, wijzigingen in netwerkverkeer na de uitrol van nieuwe applicaties, of verschuivende patronen in declaratiegegevens na aanpassing van vergoedingsregels. Conceptdrift daarentegen treedt op wanneer de relatie tussen input en gewenste output verandert: dezelfde kenmerken horen niet langer bij dezelfde klasse of score. Een betalingspatroon dat voorheen zelden fraudeerde, kan onder invloed van nieuwe fraudevormen plots wél risicovol zijn. Beide vormen van drift kunnen prestaties, eerlijkheid en uitlegbaarheid van een model aantasten als zij niet tijdig worden opgespoord.

Voor Nederlandse overheidsorganisaties krijgt driftdetectie extra gewicht door de maatschappelijke en juridische impact van beslissingen. In uitkeringsprocessen, belastingheffing, toezicht en handhaving of toekenning van subsidies wordt steeds vaker gebruikgemaakt van AI-ondersteunde risicobeoordelingen. Wanneer de populatie waarop beleid is gebaseerd verschuift, zonder dat de onderliggende modellen worden herzien, ontstaat het risico dat bepaalde groepen burgers structureel worden over- of onderbenoemd in risicocategorieën. Dit raakt direct aan beginselen van gelijkheid, non-discriminatie en zorgvuldige besluitvorming. De EU AI Act classificeert veel van deze toepassingen als high-risk, met de verplichting om continu te monitoren of modellen nog binnen hun toegestane grenzen opereren. In dat kader is het niet voldoende om alleen modelprestaties bij oplevering te toetsen; organisaties moeten aantonen dat zij structureel controleren op drift en hier consequent naar handelen.

Een effectief driftdetectieraamwerk vraagt om concrete definities en meetbare indicatoren. Voor elk model in productie wordt vastgelegd welke kenmerken kritisch zijn voor de werking en welke uitkomstmaten bepalend zijn voor de kwaliteit van besluiten. Op basis hiervan kiest u passende statistische technieken, zoals het vergelijken van verdelingen met behulp van Kolmogorov-Smirnov- of Chi-kwadraattoetsen, het berekenen van Population Stability Index (PSI) voor scoreverdelingen of het volgen van performance-metrics in tijdreeksen. Belangrijk is dat deze methoden worden vertaald naar begrijpelijke indicatoren voor operationele teams en bestuurders, zoals “percentage aanvragen buiten de historische bandbreedte”, “toename in afwijkende scoreprofielen” of “significante verschuiving in kenmerken van een specifieke doelgroep”. Zo wordt driftdetectie niet alleen een onderwerp voor data scientists, maar een herkenbaar stuurinstrument voor de gehele organisatie.

Naast de puur statistische benadering speelt domeinkennis een cruciale rol. Beleidswijzigingen, wetsaanpassingen of grote maatschappelijke gebeurtenissen – zoals een pandemie, economische crisis of nieuwe Europese regelgeving – kunnen in korte tijd tot een fundamenteel andere werkelijkheid leiden. Zonder nauwe samenwerking tussen datateams, beleid, juristen en uitvoeringsorganisaties bestaat het gevaar dat modellen formeel binnen hun statistische grenzen blijven, terwijl ze materieel niet langer aansluiten bij de bedoeling van de wet of het geldende beleid. Daarom moet driftdetectie altijd worden ingebed in een bredere cycle van periodieke modelreviews, waarin naast cijfers ook context, ethiek en juridische kaders worden meegenomen. Dit voorkomt dat AI-systemen onbedoeld leiden tot beleid dat achter de feiten aanloopt.

Technische implementatie van driftdetectie in Microsoft-omgevingen

In een Microsoft-georiënteerde omgeving wordt driftdetectie doorgaans gerealiseerd door een combinatie van Azure Machine Learning, Azure Monitor en log-analytics. De basis is dat bij elke modelaanroep – of het nu gaat om een online endpoint, batchverwerking of geïntegreerde AI-component – voldoende context wordt gelogd om later de verdeling van invoer en uitkomsten te analyseren. In Azure Machine Learning kunt u logging hooks configureren die kenmerken, scores, modelversies, tijdstippen en bronapplicaties registreren in een beveiligde datastore of log-analytics workspace. Hierbij gelden strikte privacyprincipes: alleen attribuutwaarden die strikt noodzakelijk zijn voor driftdetectie worden opgeslagen, zo veel mogelijk geaggregeerd of gepseudonimiseerd, en conform de afspraken uit DPIA’s en gegevensbeschermingsbeleid. Door vanaf het ontwerp te bepalen welke onderdelen van de payload worden weggeschreven, voorkomt u dat later ontbrekende data driftdetectie onmogelijk maakt.

Bovenop deze logging-laag worden Kusto Query Language (KQL)-queries ingericht die periodiek de actuele verdeling van kritieke kenmerken vergelijken met een vastgelegde baseline. Die baseline kan bestaan uit de trainingsset, een gevalideerde validatieperiode of een gedefinieerd referentie-interval voor een populatie. Voor elk kenmerk worden indicatoren berekend, zoals verschuiving in gemiddelde en standaarddeviatie, veranderingen in percentielwaarden of significante verschuivingen in categorische verdelingen. Deze resultaten worden samengevat in dashboards in bijvoorbeeld Azure Monitor, Microsoft Fabric of Power BI, zodat analisten in één oogopslag zien of de populatie waarop het model draait nog binnen de verwachte bandbreedtes valt. Voor conceptdrift worden vergelijkbare methoden toegepast op uitkomsten: scoreverdelingen, foutklassen en performance-metrics worden door de tijd heen vergeleken met de baseline.

Om driftdetectie operationeel relevant te maken, worden drempelwaarden en alerts geconfigureerd. Wanneer een driftscore of stabiliteitsindicator boven een vooraf ingestelde grens uitkomt, genereert de monitoringlaag automatisch een waarschuwing. Deze alerts worden bij voorkeur doorgezet naar bestaande meldstromen, zoals Microsoft Teams-kanalen voor data- of AI-teams, incidenttickets in het ITSM-platform of meldingen in Microsoft Sentinel. Zo wordt driftdetectie onderdeel van het reguliere incident- en probleembeheer, in plaats van een losstaande rapportage die gemakkelijk over het hoofd wordt gezien. Voor kritieke high-risk AI-toepassingen kan een combinatie van zachte en harde drempels worden gehanteerd: zachte drempels leiden tot extra analyse door data scientists, terwijl harde drempels direct een tijdelijke blokkade van geautomatiseerde besluitvorming kunnen activeren of een terugval naar een eerdere, gevalideerde modelversie initiëren.

Standaardisatie is essentieel om schaalbaar te kunnen werken. Nederlandse overheidsorganisaties doen er goed aan een herbruikbaar driftdetectiesjabloon te ontwikkelen dat voor alle relevante modellen toepasbaar is. Dit sjabloon omvat onder meer standaard loggingconfiguraties, KQL-queries, dashboards, alertregels en roltoegangsmodellen. Door deze componenten vast te leggen als infrastructuur-as-code, bijvoorbeeld met Bicep, ARM of Terraform, kunnen nieuwe omgevingen consistent en auditbaar worden uitgerold. Tegelijkertijd moeten technische implementaties nauw aansluiten op juridische en organisatorische randvoorwaarden: bewaartermijnen voor logging, toegangsrechten tot detaildata, afspraken over wie alerts beoordeelt en beslislogica voor het al dan niet opschorten van modellen. Dit vergt nauwe samenwerking tussen architecten, security officers, privacy officers en operationele teams.

Operationele bewaking, interpretatie en opvolging

Gebruik PowerShell-script drift-detection.ps1 (functie Invoke-DriftScan) – Voert een lokale of omgevingsspecifieke controle uit op voorbeeld-telemetrie om driftrisico’s inzichtelijk te maken en ondersteunt bij het testen van het driftdetectieraamwerk..

Wanneer de technische basis voor driftdetectie is ingericht, verschuift de aandacht naar dagelijkse en periodieke bewaking. Voor elk AI-model wordt vastgelegd welke indicatoren op welke frequentie worden beoordeeld: kritieke modellen in handhaving of uitkeringsdomeinen kunnen bijvoorbeeld dagelijks geautomatiseerd worden geanalyseerd, terwijl minder kritieke analytische modellen wekelijks of maandelijks worden doorgelicht. Operationele dashboards brengen per model de status van kernindicatoren in beeld, inclusief historische trendlijnen en signaalhistorie. Beheerteams en proceseigenaren moeten deze informatie niet alleen kunnen raadplegen, maar ook duiden: wat betekent een verhoogde PSI voor een bepaalde doelgroep, welke implicaties heeft een structurele verschuiving in scoreverdeling voor het risicobeeld, en wanneer is een signaal voldoende ernstig om beleids- of uitvoeringsmaatregelen te treffen?

Een volwassen operationele aanpak onderscheidt verschillende ernstniveaus voor driftsignalen. Lage ernstniveaus kunnen leiden tot extra monitoring en aanvullende analyses, zonder directe impact op het primaire proces. Midden-ernstsignalen kunnen aanleiding zijn om tijdelijk meer handmatige controles in te bouwen of een aanvullende steekproef te doen op beslissingen die door het model zijn beïnvloed. Hoge ernstniveaus – bijvoorbeeld een sterke verschuiving in kenmerken van een kwetsbare doelgroep of een plotselinge verslechtering van modelprestaties – moeten direct worden gekoppeld aan duidelijke remediatiepaden: het tijdelijk uitschakelen van geautomatiseerde besluitvorming, het terugvallen op een conservatiever beslismodel of het inschakelen van een crisisteam. Door deze beslislogica vooraf vast te leggen in runbooks en governance-documenten, wordt voorkomen dat in crisissituaties ad-hoc en inconsistent wordt gehandeld.

Cruciaal is dat de uitkomsten van driftdetectie niet in technische silo’s blijven. Periodieke rapportages richting bestuurders, CISO, privacy officer en proceseigenaren moeten in begrijpelijke taal uitleggen wat is geconstateerd, welke risico’s zijn geïdentificeerd en welke maatregelen zijn genomen. Dit kan in de vorm van kwartaalrapportages over AI-systemen, gecombineerd met het bredere rapportagekader voor informatiebeveiliging en privacy. In deze rapportages worden bijvoorbeeld trends in driftscores, aantallen significante signalen, doorlooptijden van remediatie en impact op burgers beschreven. Zo ontstaat een transparant beeld van de mate waarin AI-systemen stabiel en eerlijk functioneren, en wordt het eenvoudiger om richting politiek bestuur of toezichthouders verantwoording af te leggen over keuzes rond de inzet van algoritmen.

Governance, compliance en audit voor driftdetectie

Driftdetectie is niet alleen een technische activiteit, maar een expliciet onderdeel van governance en compliance rond AI. De EU AI Act vereist dat aanbieders en gebruikers van high-risk AI-systemen kunnen aantonen dat de prestaties en risico’s van hun systemen continu worden bewaakt. Dit betekent dat organisaties beleid moeten vaststellen waarin staat welke typen modellen onder driftdetectieverplichtingen vallen, welke indicatoren worden gemonitord, hoe vaak dit gebeurt en welke drempelwaarden worden gehanteerd. Deze kaders moeten worden afgestemd met privacybeleid, informatiebeveiligingsbeleid en sectorale richtlijnen (zoals in de zorg of financiële sector). In de Nederlandse context sluit dit aan op de BIO voor overheidsorganisaties en de NIS2-verplichtingen voor essentiële en belangrijke entiteiten, waarin continue risicobeoordeling en monitoring centraal staan.

Voor auditors en toezichthouders is vooral van belang hoe driftdetectie in de praktijk werkt. Zij zullen niet alleen vragen naar de aanwezigheid van tooling, maar naar concrete voorbeelden van signalen, analyses en maatregelen. Een volwassen organisatie kan op verzoek een overzicht tonen van alle AI-modellen in productie, inclusief de belangrijkste kenmerken, toegepaste driftdetectiemethoden, drempelwaarden en historische signalen. Daarbij horen ook incidentdossiers waarin is vastgelegd welke drift is geconstateerd, welke risicoanalyse is uitgevoerd, welke besluiten zijn genomen en hoe hierover is gecommuniceerd met burgers of ketenpartners. Door driftdetectie expliciet te koppelen aan bestaande GRC-processen (governance, risk & compliance), zoals risicoregisters, interne controleplannen en privacy management, wordt het een herkenbaar onderdeel van de reguliere sturingscyclus.

Ten slotte speelt transparantie een belangrijke rol in de maatschappelijke verantwoording rond AI. Hoewel niet alle technische details van driftdetectie openbaar hoeven te zijn, moeten overheidsorganisaties in begrijpelijk Nederlands kunnen uitleggen dat en hoe zij modellen monitoren op verschuivende werkelijkheid. Dit kan bijvoorbeeld in jaarverslagen, specifieke algoritmeregisters of publieksvriendelijke toelichtingen bij beleidsdocumenten. Hierin wordt beschreven welke typen AI-systemen worden gebruikt, welke waarborgen zijn ingericht om drift te detecteren en te verhelpen, hoe vaak modellen worden herbeoordeeld en welke verbeteringen in de afgelopen periode zijn doorgevoerd. Door deze openheid te bieden, versterken organisaties het vertrouwen van burgers, media en politiek in de verantwoorde inzet van AI binnen de publieke sector.

Compliance & Frameworks

Automation

Gebruik het onderstaande PowerShell script om deze security control te monitoren en te implementeren. Het script bevat functies voor zowel monitoring (-Monitoring) als remediation (-Remediation).

PowerShell
<# .SYNOPSIS Referentiescript voor driftdetectie rondom AI-modellen. .DESCRIPTION Ondersteunt Nederlandse overheidsorganisaties bij het lokaal testen en demonstreren van een driftdetectieraamwerk. Het script werkt met voorbeeld-telemetriebestanden zodat het veilig is voor lokale debugging en trainingen. .NOTES Filename: drift-detection.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-11-26 Last Modified: 2025-11-26 Version: 1.0 Related JSON: content/ai/observability/drift-detection.json .EXAMPLE .\drift-detection.ps1 -DriftScan Voert een eenvoudige driftdetectie-analyse uit op voorbeeld-telemetriebestanden. .EXAMPLE .\drift-detection.ps1 -Baseline -WhatIf Toont welke baseline-templates zouden worden aangemaakt voor lokale experimenten. #> #Requires -Version 5.1 [CmdletBinding()] param( [Parameter()] [switch]$WhatIf, [Parameter()] [switch]$DriftScan, [Parameter()] [switch]$Baseline ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' function Get-RepositoryRoot { <# .SYNOPSIS Bepaalt de rootmap van de repository op basis van de locatie van dit script. #> [CmdletBinding()] param() $root = Resolve-Path (Join-Path $PSScriptRoot "..\..\..") -ErrorAction SilentlyContinue if (-not $root) { throw "Kon de repository-root niet bepalen op basis van PSScriptRoot: $PSScriptRoot" } return $root.Path } function Get-DriftDetectionPaths { <# .SYNOPSIS Haalt de standaardpaden op voor driftdetectie-telemetrie. .OUTPUTS PSCustomObject met padinformatie. #> [CmdletBinding()] param() $repoRoot = Get-RepositoryRoot $root = Join-Path $repoRoot "monitoring\ai-models\drift-detection" $baselinePath = Join-Path $root "baseline" $currentPath = Join-Path $root "current" [PSCustomObject]@{ RepositoryRoot = $repoRoot Root = $root BaselinePath = $baselinePath CurrentPath = $currentPath } } function Get-DriftConfig { <# .SYNOPSIS Retourneert eenvoudige drempelwaarden voor driftdetectie. #> [CmdletBinding()] param() [PSCustomObject]@{ MaxPsi = 0.25 # Population Stability Index drempel MaxMeanShift = 0.15 # Toegestane relatieve verschuiving in gemiddelde MaxStdShift = 0.20 # Toegestane relatieve verschuiving in spreiding } } function Read-DriftFile { <# .SYNOPSIS Leest een JSON-bestand met samenvattende statistieken voor een kenmerk. .DESCRIPTION Verwacht een structuur zoals: { "feature": "Leeftijd", "mean": 42.3, "std": 11.1, "psi": 0.12 } #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$Path ) if (-not (Test-Path -Path $Path)) { throw "Bestand niet gevonden: $Path" } $raw = Get-Content -Path $Path -Raw -ErrorAction Stop if (-not $raw.Trim()) { throw "Bestand is leeg: $Path" } return $raw | ConvertFrom-Json -ErrorAction Stop } function Compare-DriftFeature { <# .SYNOPSIS Vergelijkt baseline- en actuele statistieken voor één kenmerk. .OUTPUTS PSCustomObject met driftdetails. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] $Baseline, [Parameter(Mandatory = $true)] $Current, [Parameter(Mandatory = $true)] $Config ) $featureName = $Baseline.feature $meanShift = $null if ($Baseline.mean -ne 0) { $meanShift = [math]::Abs(($Current.mean - $Baseline.mean) / $Baseline.mean) } $stdShift = $null if ($Baseline.std -ne 0) { $stdShift = [math]::Abs(($Current.std - $Baseline.std) / $Baseline.std) } $psi = $Current.psi $severity = "OK" $reasons = New-Object System.Collections.Generic.List[string] if ($psi -gt $Config.MaxPsi) { $severity = "High" $reasons.Add("PSI ($psi) is hoger dan drempel $($Config.MaxPsi).") } if ($meanShift -ne $null -and $meanShift -gt $Config.MaxMeanShift) { if ($severity -eq "OK") { $severity = "Medium" } $reasons.Add("Relatieve verschuiving in gemiddelde ($([math]::Round($meanShift,2))) is groter dan $($Config.MaxMeanShift).") } if ($stdShift -ne $null -and $stdShift -gt $Config.MaxStdShift) { if ($severity -eq "OK") { $severity = "Medium" } $reasons.Add("Relatieve verschuiving in spreiding ($([math]::Round($stdShift,2))) is groter dan $($Config.MaxStdShift).") } [PSCustomObject]@{ Feature = $featureName Baseline = $Baseline Current = $Current Psi = $psi MeanShift = $meanShift StdShift = $stdShift Severity = $severity Explanation = ($reasons -join " ") } } function Invoke-DriftScan { <# .SYNOPSIS Voert een eenvoudige driftdetectie-analyse uit op lokale voorbeelddata. .OUTPUTS Array van PSCustomObject met driftdetails per kenmerk. #> [CmdletBinding()] param() $paths = Get-DriftDetectionPaths $config = Get-DriftConfig Write-Host "`nDriftdetectie – voorbeeldanalyse" -ForegroundColor Cyan Write-Host "Repository-root: $($paths.RepositoryRoot)" -ForegroundColor Cyan Write-Host "Baseline-map: $($paths.BaselinePath)" -ForegroundColor Cyan Write-Host "Current-map: $($paths.CurrentPath)`n" -ForegroundColor Cyan if (-not (Test-Path -Path $paths.BaselinePath) -or -not (Test-Path -Path $paths.CurrentPath)) { Write-Host " Er zijn nog geen baseline- of current-mappen aanwezig." -ForegroundColor Yellow Write-Host " Maak voor lokale debugging bijvoorbeeld de volgende structuur aan:" -ForegroundColor Yellow Write-Host " $($paths.BaselinePath)\feature1.json" -ForegroundColor Yellow Write-Host " $($paths.CurrentPath)\feature1.json" -ForegroundColor Yellow Write-Host " met per bestand eenvoudige statistieken (mean, std, psi) per kenmerk." -ForegroundColor Yellow return @() } $baselineFiles = Get-ChildItem -Path $paths.BaselinePath -Filter *.json -ErrorAction SilentlyContinue if (-not $baselineFiles) { Write-Host " Geen baseline-bestanden gevonden in $($paths.BaselinePath)." -ForegroundColor Yellow return @() } $results = @() foreach ($baselineFile in $baselineFiles) { $currentFile = Join-Path $paths.CurrentPath $baselineFile.Name if (-not (Test-Path -Path $currentFile)) { Write-Host " ⚠️ Geen current-bestand voor: $($baselineFile.Name)" -ForegroundColor Yellow continue } try { $baseline = Read-DriftFile -Path $baselineFile.FullName $current = Read-DriftFile -Path $currentFile $result = Compare-DriftFeature -Baseline $baseline -Current $current -Config $config $results += $result switch ($result.Severity) { "OK" { Write-Host " ✅ $($result.Feature): binnen drempelwaarden (PSI $($result.Psi))" -ForegroundColor Green } "Medium" { Write-Host " ⚠️ $($result.Feature): relevante verschuiving gedetecteerd." -ForegroundColor Yellow if ($result.Explanation) { Write-Host " $($result.Explanation)" -ForegroundColor Yellow } } "High" { Write-Host " ❌ $($result.Feature): significante drift gedetecteerd!" -ForegroundColor Red if ($result.Explanation) { Write-Host " $($result.Explanation)" -ForegroundColor Red } } } } catch { Write-Host " ❌ Fout bij het analyseren van $($baselineFile.Name): $_" -ForegroundColor Red } } if (-not $results -or $results.Count -eq 0) { Write-Host "`nGeen volledige feature-pairs gevonden voor driftdetectie." -ForegroundColor Yellow } else { $high = $results | Where-Object { $_.Severity -eq "High" } $medium = $results | Where-Object { $_.Severity -eq "Medium" } if ($high -or $medium) { Write-Host "`nSamenvatting: één of meer kenmerken vertonen drift die nadere analyse vraagt." -ForegroundColor Yellow } else { Write-Host "`n✅ Alle geanalyseerde kenmerken liggen binnen de ingestelde driftdrempels." -ForegroundColor Green } } return $results } function New-DriftBaselineTemplate { <# .SYNOPSIS Maakt voorbeeld-bestanden aan voor baseline- en current-statistieken. .DESCRIPTION Deze functie is bedoeld voor lokale debugging en workshops. In een productieomgeving worden deze statistieken doorgaans automatisch uit log-analytics of datawarehouses gegenereerd. #> [CmdletBinding()] param() $paths = Get-DriftDetectionPaths $folders = @($paths.Root, $paths.BaselinePath, $paths.CurrentPath) foreach ($folder in $folders) { if (-not (Test-Path -Path $folder)) { if ($WhatIf) { Write-Host " [WhatIf] Zou map aanmaken: $folder" -ForegroundColor Yellow } else { New-Item -Path $folder -ItemType Directory -Force | Out-Null Write-Host " Map aangemaakt: $folder" -ForegroundColor Green } } } $exampleBaseline = @{ feature = "Voorbeeldkenmerk" mean = 1.0 std = 0.2 psi = 0.0 } $exampleCurrent = @{ feature = "Voorbeeldkenmerk" mean = 1.15 std = 0.25 psi = 0.18 } $baselineFile = Join-Path $paths.BaselinePath "feature1.json" $currentFile = Join-Path $paths.CurrentPath "feature1.json" if ($WhatIf) { Write-Host " [WhatIf] Zou voorbeeld-baselinebestand schrijven: $baselineFile" -ForegroundColor Yellow Write-Host " [WhatIf] Zou voorbeeld-currentbestand schrijven: $currentFile" -ForegroundColor Yellow } else { $exampleBaseline | ConvertTo-Json -Depth 5 | Out-File -FilePath $baselineFile -Encoding UTF8 $exampleCurrent | ConvertTo-Json -Depth 5 | Out-File -FilePath $currentFile -Encoding UTF8 Write-Host " Voorbeeld-baselinebestand aangemaakt: $baselineFile" -ForegroundColor Green Write-Host " Voorbeeld-currentbestand aangemaakt: $currentFile" -ForegroundColor Green } } function Invoke-BaselineSetup { <# .SYNOPSIS Hoofdentrypoint voor het aanmaken van baseline-templates. #> [CmdletBinding()] param() Write-Host "`nDriftdetectie – baseline-templates" -ForegroundColor Cyan New-DriftBaselineTemplate } try { Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Driftdetectie – AI-observability" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan if ($DriftScan) { Invoke-DriftScan } elseif ($Baseline) { Invoke-BaselineSetup } else { Write-Host "Geen modus opgegeven. Gebruik één van de volgende opties:" -ForegroundColor Yellow Write-Host " -DriftScan Voer een voorbeeld-driftdetectie-analyse uit op lokale JSON-statistieken." -ForegroundColor Yellow Write-Host " -Baseline Maak voorbeeld-baseline- en current-bestanden aan voor lokale debugging." -ForegroundColor Yellow Write-Host " Voeg -WhatIf toe om alleen te tonen wat er zou gebeuren zonder bestanden te wijzigen." -ForegroundColor Yellow } } catch { Write-Error "Fout in drift-detection.ps1: $_" throw } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder gestructureerde driftdetectie blijven verschuivingen in gegevens en modelgedrag vaak onopgemerkt, waardoor AI-systemen in de praktijk afwijken van beleidsdoelen, wettelijke kaders en verwachtingen van burgers. Dit vergroot de kans op discriminerende uitkomsten, fouten in besluitvorming, non-compliance met EU AI Act, AVG, BIO en NIS2 en aanzienlijke reputatieschade.

Management Samenvatting

Integreer driftdetectie als vast onderdeel van AI-observability: definieer kritieke kenmerken en prestatie-indicatoren, leg baselines vast, automatiseer statistische vergelijkingen en alerting en veranker de opvolging van signalen in governance en risicomanagement. Zo houdt de organisatie aantoonbaar grip op de werking en eerlijkheid van AI-modellen in een continu veranderende werkelijkheid.