Sikre testdata som ivaretar personvern for NAV
Kundecase
Med maskinlæring har twoday hjulpet NAV med å gjøre test til en fest med syntetiske data som ivaretar sikkerheten til kontaktene.
NAV har brukt svært mye tid og ressurser på å opprette testdata tidligere. Nå er denne prosessen blitt drastisk mye raskere, ved at du kan generere opp til 10.000 syntetiske personer på noen få minutter.
I tillegg til denne besparelsen i tid og ressurser er dataene helt sikre og umulig å spore tilbake til enkeltpersoner. På den måten sørges det for at man bevarer personvernet til enkeltpersoner og man kan trygt teste på disse dataene.
Syntetiske testdata brukes ikke bare i form av systemutvikling og testing, men også for opplæring av saksbehandlere i NAV. Slik kan opplæring skje uten at det må gjennomføres tungvinte sikkerhetstiltak, eller at ekte brukere får brev i posten basert på hva som har skjedd i et treningscenario.
Behovet
NAV har et stort behov for å teste datasystemene sine, og det med så reelle data som mulig. NAV har laget testdata en stund, men dette har blitt gjort manuelt og det skalerer ganske dårlig, da dette er en svært tidkrevende jobb. Samtidig gjorde det at løsningen var personavhengig, da det var to personer som lagde disse dataene.
Ved å lage syntetiske testdata kunne NAV bli mindre sårbare. Sammen med sitt interne behov for å effektivisere testdata-prosessen, kom GDPR inn i bildet. NAV så da muligheten til å få flere ressurser til å utvikle en effektiv løsning for å generere syntetiske testdata.
NAV ønsket å se om det var mulig å populere sitt tjenestebaserte personsystem (TPS) med full-syntetiske data. TPS er NAV sin versjon av folkeregisteret. De hadde behov for å lage data som var statistisk like de originale dataene, men samtidig umulig å spore tilbake til enkeltpersoner. Dette gjør de originale dataene sikrere og testdataene mer virkelighetsnære.
Grunnlaget for dette ønsket var at det er raskere og mer effektivt å bruke syntetiske testdata, enn å bruke kopi av produksjonsdata. I stedet for å bestille testdata fra noen som sitter og lager disse til et formål de ikke er så godt kjent med, kan man nå selv lage disse testdataene eller finne de i Mini-Norge.
Løsningen for å dekke dette behovet var å opprette tre basisløsninger for syntetiske testdata i NAV:
1. Mini-Norge:
Det har blitt opprettet et Mini-Norge. En basispopulasjon som er tilgjengelig og “levende” i syntetiske miljøer. De maskinlærte modellene genererer syntetiske testdata med de samme egenskapene som det opprinnelige datasettet.
For å lage Mini-Norge tok man 100.000 personer og innvandret inn i løsningen, og slik lage en statistisk representativ befolkning. Disse fikk norsk statsborgerskap, nye bosteder, og vi opprettet blant annet person-relasjoner, arbeidsgiver- og arbeids-historikk. Alt dette er data som er viktig for NAV for å utbetale ytelser og behandle de søknadene NAV får. For at Mini-Norge skal være relevant for testerne gjøres det endringer i systemet hver dag via en orkestrator, slik at dataen blir så representativt likt NAVs løsninger som mulig. Ved å for eksempel syntetisere fødsler og skilsmisser gjøres miljøet relevant for testerne av feks Foreldrepengeløsningen..
Nå har Mini-Norge vokst og det er oppe i 150.000 syntetiske personer i løsningen.
2. Dolly
Dette er en selvbetjeningsløsning som demokratiserer hvordan NAV lager syntetiske testdata. Løsningen gjør at alle kan opprette og skreddersy syntetiske data etter deres behov, ved å legge inn ulike egenskaper. For eksempel dersom man ønsker å teste en uvanlig situasjon kan du opprette testdata for denne situasjonen og så kjøre test på dette. Eksempelvis trenger Foreldrepengeprosjektet å teste hva som skjer når tvillinger er født i to forskjellige år, på hver sin side av nyttårsaften. Testdata for dette kan enkelt opprettes i Dolly. Man kan også opprette grupper på de testdataene man legger inn.
3. Orkestrator
Dette er en applikasjon for forvaltning av syntetiske data. Denne holder styr på de fiktive personer og deres tilknyttede personinformasjon. Det fordi vi hele tiden må sjekke om disses fødselsnummer ikke er i bruk og faktisk valideres som et korrekt fødselsnummer. Orkestratorens oppgave er å holde personene i mini-Norge levende ved f. eks å gifte personer, føde nye personer, gi/ta jobben til folk, gjøre folk syke, flytte mennesker inn og ut av institusjoner osv.
Prosessen
Syntetiske grunndata fra de maskinlærte modellene ovenfor distribueres gjennom eksisterende forretningslogikk. NAV hadde 1200 databasetabeller i sitt system som kalles Arena. For å kunne lage syntetiske testdata trengte man en oversikt over disse tabellene. Derfor så man på hvor dataene kommer inn, hvor går data ut og hva må man legge på her for å kunne jobbe med maskinlæring? En verdikjedetilnærming ble derfor løsningen for å skape seg oversikt.
Syntetisering basert på maskinlæring
Tilstand 1: Vi har masse rå produksjonsdata som er mer eller mindre tilgjengelig, som vi gjør en analyseprosess på. Dersom det trengs kan vi gå inn å se på alle dataene, men ofte trenger vi kun å se på databasestrukturen og hvordan det ser ut.
Vi gjør så et uttrekk av de dataene, der vi stripper de for all direkte identifiserende informasjon og kapper halene på distribusjonene. Så det vi sitter igjen med er en anonym samling med data.
Tilstand 2: Denne samlingen med data går da til tilstand to. Her blir de kvernet på en maskinlæringsløsning for å kunne ta steget videre til tilstand 3. En typisk algoritme her er et beslutningstre (Decision Tree) som ligger i bunn og bestemmer hvordan datastrukturen skal se ut. Decision Tree er den algoritmen vi har brukt mest, men vi bruker også Synthpop, BeAn, PerlinNoise, CHAR-RNN, Random Forest.
Tilstand 3: Her blir dataene til frittstående syntetiske data som vi nå knar sammen igjen. Vi må tillegge dataene en fiktiv person, fordi det ikke er hensiktsmessig å ha en rekke hendelser dersom de ikke er knyttet til folk. Vi spør da Orkestratoren om å få et fødselsnummer og et navn.
Tilstand 4: Når vi så har satt sammen disse dataene igjen så dytter vi det inn i de registrene der det var meningen de skulle i utgangspunktet. Disse registrene sørger så for at alle nedstrømsapplikasjoner får høre om dette helt automatisk.
På den måten slipper vi å knote i de 40.000 datatabellene rundt om i hele NAV, så får vi mye gratis ved å ta i bruk forretningslogikk. En utfordring på prosjektet har vært å få alle systemene til å snakke godt sammen. Det finnes ikke en standardisert bruk av samme teknologi i systemene hos NAV. Løsningen på dette har vært å legge inn syntetiske testdata i de eksisterende systemene. Dette er et arbeid som fortsatt pågår.
NAV vant prisen for innebygd personvern
Datatilsynets delte ut prisen for “Innebygd personvern i praksis” våren 2020. Målet var å løfte frem gode eksempler på praktisk implementering av innebygd personvern og personvern som standardinnstilling. Gleden sto i taket da det ble kjent at det var NAV som vant med bidraget "Gjør test til en fest! Løsning og metode for syntetiske testdata". Løsningen og metoden som NAV har utviklet i samarbeid med twoday.
Teknologi som har blitt brukt
Python
De aller fleste maskinlærings biblioteker er utviklet i Python, noe som gjorde det naturlig å utvikle denne løsningen i dette språket. Løsningene på NAV blir stort sett skrevet i Java, og det var lite støtte for Python i NAV sitt utviklingsmiljø. Dette førte til at vi måtte sette opp vår egen infrastruktur for å tilrettelegge for utvikling i Python på NAV sin plattform. Vi har utviklet en løsning der dette har blitt tatt høyde for, og vi kan integrere løsningen på samme plattform som de andre applikasjonene i NAV blir utviklet på, noe som fører til sømløs integrasjon mellom nye og eksisterende applikasjoner.
Java
De ulike syntetiske pakkene blir utviklet som stand-alone applikasjoner i Python, og det var et ønske fra NAV at generering av all syntetisk data skulle være tilgjengelig gjennom et REST-API utviklet i Java for lettere vedlikehold og videreutvikling i fremtiden. Under utviklingen av REST-applikasjonen, møtte vi utfordringer knyttet til NAV sin deployment-plattform i form av ressursbruk, noe som gjorde at vi utviklet funksjonalitet i REST-laget for å optimalisere ressursbruk i plattformen. NAV vurderer nå å integrere optimaliseringsfunksjonaliteten i selve plattformen da dette ga stor verdi for NAV.
BEAN
Står for Beyond Anonymous. Et abstraksjonslag på toppen av Decision Trees og Regression Trees. Dette laget tar seg av oppsett av tremodellene ved å spesifisere metadata på en enkel og konsis måte.
Random Forest
Maskinlæringsmetode som er en variant av decision-trees. Brukes også for generering av syntetiske data.
Neural Networks, PyTorch (RNNs, CHAR-RNN, Variational autoencoders, Generative Adversarial Networks)
Vi har eksperimentert med ulike typer nevrale nett for generering av syntetisk data. I noen synt-pakker bruker vi ulike implementasjoner av Recurrent Neural Networks for å generere syntetisk data. Det har også blitt gjort eksperimenter der vi implementerte en Variational Autoencoder for å kunne generere syntetiske data på store datasett med mange variabler. Motivasjonen for dette er at modellene fra BEAN blir veldig store hvis det er mange kolonner og avhengigheter i datasettet. Ved å benytte nevrale nett, kan vi minske størrelsen på modellen betydelig, noe som vil øke hastigheten på generering av syntetisk data.
Det er også et pågående eksperiment der vi prøver å utvikle en løsning for å generere syntetiske data ved hjelp av Generative Adverserial Networks. Løsningene med nevrale nett er hovedsakelig utviklet med PyTorch, et rammeverk utviklet av Facebook. Vi har også brukt Tensorflow.
SciKit Learn
SciKit Learn er et maskinlærings-rammeverk der mye av logikken er abstrahert bort for enkel og rask utvikling. Dette rammeverket er mye brukt i BEAN, og tilbyr stort sett generelle maskinlæringsmetoder.
Decision Trees
Dette er selve kjernen i BEAN. Decision Trees gjør avgjørelser basert på avhengigheter, noe som gjør det mulig å generere syntetisk data som har avhengigheter i datasettet.