2026-10-06

6 min lesing

Knut Ole Thoreplass

Slik er tallene bygget

Tallene på faktaportalen skal stå seg selv om databasen, analyseverktøyet og språkmodellen bak dem byttes ut. Introduksjon til en serie om arkitektur for dataplattform og AI.

Foto: Lucas Kepner / Unsplash

Introduksjon til serien «Arkitektur som tåler å bli byttet ut»

Tallene på faktaportalen skal stå seg selv om verktøyene bak dem byttes ut. Portalens register har 470 nøkkeltall fordelt på 114 temaer, hentet fra 146 navngitte tabeller, registre og rapporter. Noen av dem er hentet ut av PDF-er med kunstig intelligens. Denne artikkelen forklarer hvordan vi holder tallene uavhengige av hvilken database, hvilket analyseverktøy eller hvilken språkmodell vi bruker i dag.

Victor Coustenoble kaller prinsippet optionality: retten, men ikke plikten, til å ombestemme seg senere uten å starte på nytt [1]. For en statistikkportal betyr det noe ganske konkret. Det skal ikke være verktøyet som avgjør hva et tall er.

Denne artikkelen er skrevet for deg som leser tallene. Resten av serien er for dem som bygger slike løsninger: den tar ett lag av arkitekturen om gangen, viser alternativene fra åpen kildekode til de tre store skyene, og spør hva som må stå fast når verktøyet byttes. Oversikten over lagene står på faktaportalen.no/fag/arkitektur.

Kilden er fasiten, ikke verktøyet

Hvert nøkkeltall skal ha to merkelapper: hvilken kilde det kommer fra, og hvilken periode det gjelder. Kilden står på temaet, og alle de 114 temaene har minst én. Perioden står på 444 av de 470 nøkkeltallene. De 26 uten er for det meste regler og navn, som aldersgrensene for pensjonsuttak og hvilken diagnosegruppe som er størst, men også noen satser og endringstall. En automatisk test stopper oss hvis andelen med periode faller under 80 prosent, men den holder ikke et enkelt tall tilbake. Der begge merkelappene er på plass, er tallet etterprøvbart for leseren, uansett hvilket system som har behandlet det.

Kildene er mange, men noen bærer mer enn andre. NVE ligger bak 10 temaer og Statnett bak 8. SSB-tabell 13931 og Finans Norge ligger bak 7 hver. Vi fører en oversikt over hvilke temaer som hviler på hvilken kilde. Hvis en kilde endrer en tabell, kan vi slå opp hvilke sider som blir berørt.

Det er dette som gjør verktøyene utskiftbare. Hvis vi bytter database eller analyseplattform, skal tallet fortsatt kunne følges tilbake til den samme tabellen hos SSB, NAV eller NVE. Kilden hos produsenten er fasiten. Det vi bruker imellom, er bare transport.

Definisjonene eies av portalen

Formatet er sjelden problemet. Problemet er hva et ord betyr. Data kan flyttes mellom systemer på en ettermiddag, men hvis betydningen av «mottaker» eller «full uføregrad» ligger gjemt i et verktøy, følger den ikke med.

To eksempler fra portalen viser hvorfor:

  • Arbeidsavklaringspenger. NAV teller mottakere på to måter. Den brede gruppen er alle NAV har registrert med nedsatt arbeidsevne. Den smale gruppen er de av dem som faktisk fikk utbetalt arbeidsavklaringspenger den måneden. Tallene kan ikke blandes.
  • Uføretrygd. NAVs notater har brukt tre betegnelser på ytelsen. Fra 2011 til 2014 het den uførepensjon, og notatene fra de årene oppgir ikke uføregrad konsekvent. Derfor har serien for uføregrad store hull der: ingen punkter i 2011 og bare fire fra 2012 til 2014. Det er ikke en feil i uttrekket.

Forklaringene ligger i faste forklaringsbokser på sidene for AAP og uføretrygd. De samme forklaringene gis når en AI-assistent spør portalen gjennom MCP-serveren. Begrepene er portalens egne, ikke verktøyets.

Tallene skal kunne gjenskapes

Om vi kan bytte verktøy, avhenger av om vi kan sjekke at tallene blir de samme etterpå. Derfor regner vi ut endringen fra de uttrukne mottakertallene og sammenligner med endringen NAV selv oppgir i notatet. Også det tallet er hentet ut av modellen, så dette er en kontroll av at de to stemmer med hverandre, ikke en ny lesing av PDF-en.

For uføretrygd fra 2018 til 2022 har vi 19 kvartaler i serien. I 18 av dem oppgir NAV en endring vi kan sammenligne med. Alle 18 ligger innenfor toleransen på ett prosentpoeng, og 17 av dem avviker med 0,05 prosentpoeng eller mindre. Unntaket er første kvartal 2021, med et avvik på 0,62 prosentpoeng. Fjerde kvartal 2020 mangler i serien, så her kunne vi ikke regne endring fra kvartalet før og måtte sammenligne med samme kvartal året før i stedet.

Ellers i de to seriene, for uføretrygd og arbeidsavklaringspenger, har vi seks kvartaler der tallene ikke lar seg gjenskape. I fem av dem mangler kvartalet NAV sammenligner med, i serien vi regner fra. De står oppført med begrunnelse.

Vi følger også med på hvor ferske dataene er. Hvert datasett har en forventet oppdateringsfrekvens. Per 6. oktober 2026 var 24 av 67 datasett eldre enn kjøreplanen tilsier. Som oftest betyr det at kilden ikke har publisert noe nytt, ikke at vi har latt være å hente. At et datasett er eldre enn forventet, betyr heller ikke at tallene er feil. Det betyr at leseren bør se på perioden tallet gjelder, og det er grunnen til at perioden står ved tallet.

AI henter ut, AI er ikke kilden

NAV har publisert statistikknotater om uføretrygd siden 2004, de fleste som PDF. Portalen har 77 slike notater. En språkmodell leser dem og trekker ut tall og nøkkelfunn til en tabell på analyseplattformen Databricks. Notatene om arbeidsavklaringspenger fra 2016 til 2025 behandles på samme måte.

Uttrekket gjøres med de innebygde AI-funksjonene i Databricks SQL. Funksjonen ai_parse_document gjør PDF-en om til tekst, og ai_extract henter ut tallene etter en feltliste og en instruks vi har skrevet, blant annet om at uføretrygd, uførepensjon og uføreytelser er navn på samme ytelse. En tredje funksjon, ai_gen, skriver de korte oppsummeringene på notatkortene. De er ikke kontrollert på samme måte. Koden vår navngir ingen bestemt språkmodell. Hvilken modell som svarer, avgjør Databricks, ikke vi. Den kan altså bli byttet uten at vi gjør noe.

Modellen er et verktøy for å hente ut tall. Den er ikke kilden. Hvert tall som hentes ut, får med lenken til PDF-en på nav.no og perioden det gjelder, og mottakertallene kontrolleres mot endringen NAV selv oppgir, slik det er beskrevet over. Kontrollen kjøres automatisk hver gang koden bak portalen testes.

Vi viser også hvor uttrekket kommer til kort. Etter justering av instruksjonene til modellen fikk vi uføregrad ut av 51,9 prosent av notatene, men diagnosegrupper står igjen for bare 3,9 prosent av notatene i datafila, selv om rundt 60 prosent omtaler dem. Noe av tapet skyldes en feil i vår egen behandling. Vi bruker derfor ikke diagnosene i grafer eller nøkkeltall, bare som merkelapper på de få notatkortene der de kom ut.

Dette er optionality i praksis. Hvis vi bytter språkmodell eller plattform, kjører vi uttrekket på nytt og gjentar de samme kontrollene. Det nye verktøyet må klare dem like godt som det gamle.

Hva du kan lene deg på

Du kan lene deg på at hvert tall kan følges tilbake til produsenten, og at perioden står ved nesten alle. Du kan også lene deg på at AAP og uføretrygd forklares likt på sidene og overfor en AI-assistent, og at mottakertallene i de AI-uttrukne seriene er kontrollert mot endringene NAV selv oppgir.

Du kan ikke lene deg på at alt er like ferskt. Portalen blander årlige, kvartalsvise og daglige tall. Sammenlign derfor aldri to tall uten å se på periodene først.

Verktøyene bak portalen kommer til å bli byttet ut. Tallene skal stå seg likevel.

Første del handler om lagring, tabellformat og katalog.

Kilder

  1. Victor Coustenoble: «After 25 Years in Data, I Only Bet on One Thing: Optionality», 5. oktober 2026. Fransk versjon på Medium.
Hva synes du?