Lønna til norske utviklere i 2025
- 17. September 2025 (modified 18. September 2025)
- #datascience
I denne artikkelen skal vi gå gjennom betraktninger og metoder for å lage en lønnskalkulator for IT-utviklere. Utålmodige lesere kan gå rett til Lønnskalkulatoren og se hovedfunnene i figuren nedenfor.
Nettsiden kode24 har lenge hatt årlige spørreundersøkelser om lønn og publisert data i etterkant. Vi kan finne datasett for 2021, 2022, 2023, 2024 og 2025 på nettsidene.
Jeg har tidligere gjort flere analyser av spørreundersøkelsene:
- I 2021 gjorde jeg en analyse i det probabilistiske programmeringsspråket Stan
- I 2023 brukte jeg generaliserte additive modeller
- I 2024 gjentok jeg analysen fra 2023 med det nye datasettet
- Basert på 2024-tallene hjalp jeg også til med å lage kodejobb.no’s Lønnskalkulator 2024
Det meste som kan sies har blitt sagt: konsulenter tjener noe mer enn fast ansatte, bosatte i Oslo får en lønnspremie, ledere og arkitekter tjener mest, kjønn er (heldigvis) ubetydelig, og antall år med erfaring dominerer alle andre variabler. Størsteparten av variasjonen i lønn skyldes variabler som spørreundersøkelsene ikke plukker opp. Til sammen forklarer variablene i lønnsundersøkelsene mellom 30% og 50% av variasjonen i lønna; hvor mye avhenger av datasettet og modellen. Les mine tidligere analyser for en nøye gjennomgang.
Årets pro-bono bidrag til IT-miljøet blir å slå sammen alle datasettene og lage en robust lønnskalulator. Den er robust fordi den (1) baserer seg på nesten ti tusen observasjoner og (2) tar automatisk høyde for lønnsvekst i fremtiden.
Datasett
Det er fem datasett for fem ulike år. “Data engineering” er alltid mer jobb enn man håper, og innsatsen for å slå sammen disse datasettene var ikke noe unntak. Jeg måtte:
- Sammenstille lønnstall på format som
600 000med600.000,00 krog lignende. - Sammenstille små variasjoner i spørsmålene fra år til år, f.eks.
I hvilket fylke ligger jobben din?ogI hvilket fylke jobber du?. - Ta hensyn til at det noen år var spurt om lønn med bonus og andre år lønn uten bonus. Dette fikser jeg med en latent variabel i modelleringen, men vi går ikke inn på det i denne artikkelen.
- Fjerne tvilsomme observasjoner (omtrent 1.5% av dataene, der lønn var under 400 TNOK eller over 2000 TNOK).
- Noen har sannsynligvis tolket spørsmålet “Hvor mange års relevant, formell utdannelse har du?” til å inkludere barneskolen, ungdomsskolen og VGS. Dette må fikses etter beste evne (jeg håper og tror ingen har vært student på et universitet i mer enn femten år).
- Ta hensyn til regionreformen og dens delvise omgjørelse.
- Slå sammen fagdisipliner, f.eks. var
arkitekturet alternativ noen år, mens det hetarkitektandre år. - Slå sammen spørsmål: tidligere var jobb (in-house, konsulent, osv.) og sektor (privat, offentlig) to spørsmål—nå er det slått sammen til ett spørsmål.
Etter en grundig datavask står vi igjen med 9610 observasjoner. En del av disse er nok de samme personene som svarer på nytt, men det tenker jeg at er greit i denne sammenhengen. Som alltid er det masse forbehold: dataene er selvrapporterte, kode24’s lesere er ikke representative for utviklere generelt, osv. Nedenfor er lønn og erfaring visualisert for alle årene.

Medianlønna har økt de siste fem årene, men det har også gjennomsnittlig erfaring blant kode24’s lesere.
| år | erfaring | lønn |
|---|---|---|
| 2021 | 8.2 | 690 |
| 2022 | 8.3 | 725 |
| 2023 | 8.8 | 790 |
| 2024 | 8.5 | 850 |
| 2025 | 9.4 | 880 |
En regresjon på log-lønna avslører at den gjennomsnittlige lønnsveksten har vært omtrent 6.4% de siste årene, men dette tar ikke hensyn til at erfaringen også har økt. Om vi korrigerer for dette blir lønnsøkningen omtrent 5.1% per år.
Lønnskalkulatorer
En kalkulator implementerer vanligvis en kjent formel. For eksempel implementerer en skattekalkulator formelen for skatt (noe som kan være utfordrende å finne ut av). På samme måte kan en lønnskalkulator implementere “formelen for lønn”, men den vet vi ikke hva er. Derfor må vi først bruke en modell til å lære en formel fra datasettet, og deretter implementere denne. Et alternativ er å ikke implementere noen formel i det hele tatt, men heller bruke en såkalt ikke-parametrisk modell og vise brukeren sammenlignbare personer. Vi skal se på disse to alternativene i denne artikkelen, men det finnes andre muligheter også.
Uansett fremgangsmåte bør en god kalkulator:
- Predikere godt. Estimert lønn bør matche faktisk lønn for så mange som mulig. Dette kan kryssvalideres.
- Kommunisere usikkerheten. I dette datasettet har hver prediksjon stor usikkerhet, og det må brukeren forstå.
Ikke-parametriske modeller
Anta at en typisk utvikler ønsker å vite hva han eller hun kan forvente å tjene:
{'år': 2025, 'fylke': 'Oslo', 'jobb': 'in-house, privat sektor',
'erfaring': 6, 'utdannelse': 3, 'fag': 'Fullstack'}
K-nærmeste naboer
Vi kan bruke K-nærmeste naboer med \(k=10\) på 2025-data for å vise ti personer som ligner. Disse er
| erfaring | utdannelse | fylke | jobb | fag | lønn |
|---|---|---|---|---|---|
| 5 | 3 | Oslo | in-house, privat sektor | Fullstack | 775 |
| 7 | 3 | Oslo | in-house, privat sektor | Fullstack | 803 |
| 6 | 3 | Oslo | in-house, privat sektor | Fullstack | 819 |
| 5 | 3 | Oslo | in-house, privat sektor | Fullstack | 877 |
| 6 | 3 | Oslo | in-house, privat sektor | Fullstack | 895 |
| 6 | 3 | Oslo | in-house, privat sektor | Fullstack | 900 |
| 6 | 3 | Oslo | in-house, privat sektor | Fullstack | 914.375 |
| 5 | 3 | Oslo | in-house, privat sektor | Fullstack | 950 |
| 6 | 3 | Oslo | in-house, privat sektor | Fullstack | 1000 |
| 6 | 3 | Oslo | in-house, privat sektor | Fullstack | 1400 |
Her var vi heldige, fordi det er mange personer i Oslo med lignende egenskaper. Medianlønna blant disse ti personene er 897 TNOK, og 80% ligger i intervallet mellom 800 og 1040 TNOK.
Beslutningstre
Dersom vi bruker et beslutningstre i stedet, får vi følgende tabell. Modellen er satt til å alltid returnere minst ti personer, og for denne spørringen returnerer den 15. Sammenlignet med K-nærmeste naboer er beslutningstreet mer opptatt av erfaring, og mindre opptatt av fag og jobb.
| erfaring | utdannelse | fylke | jobb | fag | lønn |
|---|---|---|---|---|---|
| 6 | 3 | Oslo | frilans / selvstendig næringsdrivende | DevOps og Automatisering | 500 |
| 6 | 3 | Oslo | in-house, privat sektor | UX og Design | 650 |
| 6 | 3 | Oslo | konsulent | Ledelse | 735 |
| 6 | 3 | Oslo | konsulent | Frontend | 780 |
| 6 | 3 | Oslo | in-house, privat sektor | Fullstack | 819 |
| 6 | 3 | Oslo | konsulent | Testing | 830 |
| 6 | 3 | Oslo | in-house, privat sektor | Fullstack | 895 |
| 6 | 3 | Oslo | in-house, privat sektor | Frontend | 900 |
| 6 | 3 | Oslo | in-house, privat sektor | Fullstack | 900 |
| 6 | 3 | Oslo | in-house, privat sektor | Fullstack | 914.375 |
| 6 | 3 | Oslo | konsulent | Fullstack | 918 |
| 6 | 3 | Oslo | konsulent | Frontend | 940 |
| 6 | 3 | Oslo | in-house, privat sektor | Fullstack | 1000 |
| 6 | 3 | Oslo | in-house, privat sektor | Fullstack | 1400 |
| 6 | 3 | Oslo | konsulent | Fullstack | 1400 |
Medianlønna blant disse 15 personene er 900 TNOK, og 80% ligger i intervallet mellom 684 og 1240 TNOK.
Sammenligning: K-nærmeste naboer vs. beslutningstre
Vi kan sammenligne Mean Absolute Error (MAE) på en 10-folds kryssvalidering for å se hvor mange personer modellen bør returnere for å gi gode prediksjoner.

Vi observerer at:
- Beslutningstrær er klart bedre enn K-nærmeste naboer, med lavere MAE over hele linja.
- Så lenge vi returnerer omtrent 20 personer så får vi gode prediksjoner.
- Jo flere personer vi returnerer, desto bedre kan vi estimere et intervall og si noe om lønnspennet.
Grunnen til at beslutningstrær er bedre enn K-nærmeste naboer er fordi førstnevnte automatisk velger hvilke variabler som er viktige (erfaring er helt klart viktigst), mens sistnevnte må gå like langt ut i alle dimensjoner for å finne naboer.
Både K-nærmeste naboer og beslutningstrær har noen felles svakheter i denne problemstillingen:
- Nær endepunktene i hver variabel er de nødt til å se innover for å gjøre prediksjoner. For eksempel, dersom man har 45 års erfaring vil modellen ikke finne noen personer som har mer erfaring, kun personer som har mindre erfaring. Det samme gjelder de som har null år med erfaring eller null år med utdannelse. Dette er spesielt kritisk i høye dimensjoner, fordi da er sannsynligvis alle datapunktene nær endepunktene—jo flere ting vi måler, desto mer er alle mennesker ulike på hver sin måte!
- Vi brukte 2025-data til nå, men vi ønsker å bruke hele datasettet. Vi vet at tidligere år har lavere lønn på grunn av generell lønnsøkning i samfunnet, men 2025-tallene er nær endepunktet på variabelen “år”. Derfor vil modellene ofte kun hente informasjon fra 2025 og ikke bruke hele datasettet. Begge modellen er lokale heller enn globale, og evner ikke å bruke informasjon fra tidligere år på en god måte.
Parametriske modeller
En parametrisk modell lærer parametrene i en formel som beskriver et datasett. Fordelen er at hele datasettet kan komprimeres ned til én kort formel som beskriver sammenhengene. Ulempen er at man må selv spesifisere en fornuftig formel. Parametriske modeller er globale og ekstrapolerer vanligvis godt, og dette er en fordel i vår sammenheng—spesielt med tanke på årstall inn i fremtiden og lønnsinflasjon.
Første idé er å bruke en Ridge-modell og minimere
og dette er et godt utgangspunkt som gir helt kurante resultater. Høyere-ordens polynomer er vanligvis ingen god idé, fordi de kan overtilpasse og svinge voldsomt. Det er derfor viktig å plotte polynomet (noe som ble gjort men ikke er med i artikkelen).
Hvordan kan vi forbedre denne modellen? For det første vil vi finne medianlønna heller enn gjennomsnittslønna, fordi medianen er mindre påvirket av ekstreme observasjoner og er ofte et bedre valg i slike sammenhenger. Det var derfor vi brukte Mean Absolute Error (MAE) heller enn Mean Squared Error (MSE) tidligere; MAE er minimert av medianen.
For det andre er en tradisjonell regresjonsmodell påvirket av feil i absolutte tall, mens multiplikative feil gir mer mening i lønnssammenheng. Med andre ord, å bomme med 100 TNOK når lønna er 500 TNOK er en stor feil, mens å bomme med 100 TNOK når lønna er 1200 TNOK er ikke like ille, fordi det er en mindre multiplikativ feil.
Vi endrer modellen til å bruke en \(\ell_1\)-norm på likelihood-leddet og tilpasse log-lønn heller enn lønn:
Dette minner om en Lasso, men med normene byttet om: vi har \(\ell_1\)-norm på likelihood-leddet og \(\ell_2\)-norm på regulariseringsleddet. Her er koeffisientene i modellen (klikk på figuren for å se større versjon):
Legg merke til at lønnsveksten estimeres til 5.1% per år.
Å sammenligne mellom kategorier innebærer å konvertere prosentene til relative tall, ikke å legge dem sammen additivt. For eksempel, dersom man går fra en in-house offentlig stilling til å bli konsulent, kan man forvente en lønnsøkning på omtrent
Her er residualene til modellen:

Dette er relativt pene residualer, fordi det ikke er stor endring i residualene over lønnsintervallet, såkalt heteroskadist… hetroskedasisti…. heteroskedastisitet. Polynomet som ble brukt var et fjerdegradspolynom, som på grunn av regularisering oppfører seg pent når erfaring er mellom null og førti år.
La oss kjøre vår “typiske” utvikler gjennom alle tre modellene:
{'år': 2025, 'fylke': 'Oslo', 'jobb': 'in-house, privat sektor',
'erfaring': 6, 'utdannelse': 3, 'fag': 'Fullstack'}
Vi observerer noe ulike estimater av medianlønn og intervaller fra de ulike modellene:
- KNN: 897 TNOK med 80% intervall mellom 800 og 1040 TNOK.
- Tre: 900 TNOK med 80% intervall mellom 684 og 1240 TNOK.
- Lineær modell: 918 TNOK med 80% intervall mellom 748 og 1136 TNOK.
Intervallene fra de ikke-parametriske modellene (KNN og tre) er mindre robuste, ettersom de er basert på henholdsvis 10 og 15 observasjoner. Intervallet fra den lineære modellen er basert på alle datapunktene, og har høyere kvalitet.
La oss nå sammenligne MAE for alle modellene, samt en svak dummy-modell som alltid predikerer medianen og en kraftig gradient boosting modell.
| Modell / Metrikk | MAE |
|---|---|
| Dummy | 202 |
| KNN | 152 |
| Tre | 128 |
| Lineær | 119 |
| Gradient boosting | 114 |
Gradient boosting har lavest MAE, men den lineære modellen er bare marginalt verre. Likevel har den noen klare fordeler:
- Det estimerte intervallet (usikkerheten) er nok mer robust og realistisk.
- Den er veldig enkel å implementere i Javascript. Man bruker bare formelen.
Oppsummering
Kode24 har gjort en kjempejobb med å samle inn og publisere data på utvikleres lønn. I denne artikkelen kombinerte vi fem år med lønnsdata til ett datasett med 9610 observasjoner, etter datavask og sammenstilling av variabler på tvers av år.
Vi sammenlignet to ulike tilnærminger til lønnskalkulatorer:
- Ikke-parametriske modeller (KNN og beslutningstrær) som viser faktiske, sammenlignbare personer
- Parametriske modeller (log-lineær regresjon med \(\ell_1\)-loss) som bruker en global formel
Den enkle log-lineære modellen (MAE: 119) presterte bedre enn de to ikke-parametriske modellene, fordi MAE var lavere og intervallene var mer robuste. Faktisk hadde modellen nesten like lav MAE som gradient boosting (MAE: 114), men med fordelen av å være tolkbar og enkel å implementere i JavaScript. Beslutningstrær var gode for å finne sammenlignbare personer, betydelig bedre enn K-nærmeste naboer.
Når det gjelder metodikk for lønnskalkulatorer er lærdommen klar: prioriter enkelhet og transparens. Brukere trenger to ting: (1) fornuftige prediksjoner og (2) ærlig kommunikasjon om usikkerheten. Kalkulatoren implementerer den enkle lineære modellen.
Selv om jeg fulgte bud (5) og bud (9) har jeg dårlig samvittighet for å ha brukt et fjerdegradspolynom i modelleringen uten progressiv regularisering—men jeg slapp unna med det på partial dependence plottet. Aldri igjen.
