Sådan laver vi et datastudie: metoden bag "1.000 danske parcelhuse"
Dette dokument beskriver, hvordan energianalyse.dk regner en stikprøve af danske bygninger igennem og gør resultatet til tal, der kan citeres. Det første studie (oktober 2026) regnede 1.000 tilfældigt udvalgte fritliggende enfamiliehuse igennem; metoden er bygget, så de næste studier (etageejendomme, mark-solceller på fri jord) kan følge samme opskrift. Studiets egne tal står på studiesiden og i den anonymiserede CSV; her står kun metoden.
1. Grundprincippet: én sandhed
Hvert tal, der kan citeres, er beregnet af et værktøj og låst af en test. Ingen tal skrives i hånden. Kæden er:
- Stikprøven trækkes af værktøjet med et fast tilfældighedsfrø og gemmes som en udvalgsfil (adresser, kvoter, reserver, vægte).
- Beregningen sker gennem præcis den motor, boligejeren får gratis på siden: hvert hus sendes ind ad den offentlige beregningsvej (ingen parallel model, ingen særlige indstillinger), og motorens fulde svar gemmes som råsvar.
- Udtrækket: hver række i studiets datafil udledes af husets råsvar gennem én funktion, så en kolonne kun kan betyde én ting.
- Rapporten: tal-blokken i studiets markdown, studiesidens JSON og den anonymiserede CSV genereres fra datafilen.
- Testen (gaten) genregner hele kæden fra råsvarene og fejler ved enhver afvigelse: en ændret celle, et tal i teksten uden dækning, en tankestreg, et scenarie uden sine forbehold, et landstal uden sin kilde.
Kommandoen verify i studiets værktøj kører præcis den kontrol: SHA256 af hvert råsvar mod listen, hver kolonne genudledt fra råsvaret, udvalget genregnet fra reserve-reglen, tal-blokken genregnet, den anonymiserede fil og scenarie-filen genregnet, og hver kilde til landets tal til stede i teksten.
2. Stikprøven
Populationen er defineret af et register, ikke af os: for parcelhuse er det Bygnings- og Boligregistret (BBR) med anvendelseskode 120 (fritliggende enfamiliehus), status opført.
Vægtning. Danmarks Statistiks boligopgørelse (BOL101: beboede boliger efter område og anvendelse, nyeste år) giver antallet af beboede parcel- og stuehuse i hver af de 98 kommuner. Hver kommune får en kvote efter største-rest-metoden (Hamiltons metode), så stikprøven ligger, hvor husene ligger; summen af kvoterne er stikprøvens størrelse.
Trækket i kommunen. Datafordelerens BBR-GraphQL sorterer en side efter bygningens tilfældige UUID, så den første side (1.000 bygninger) er en tilfældig delmængde af kommunens huse. Siden blandes med et frø pr. kommune, dubletter på samme adgangsadresse fjernes, registreringer med boligareal under 25 m2 fjernes (fejlregistreringer), og de første huse op til kvoten er primære; de næste (mindst tre, ellers tre femtedele af kvoten) er reserver i trækkets orden.
Reserve-reglen. Et svar tæller kun, når det er brugbart: beregningen lykkedes, motorens hovedbygning er et hus af den rigtige type (en adresse, hvis hovedbygning i motoren blev et udhus, tæller ikke), svaret er fra studiets systemmodel, og motoren fandt et hus at regne på (elforbrug og varmebehov begge over nul; et hus med opvarmet areal nul i registret giver et tomt svar). En primær adresse, der fejler eller er ubrugelig, erstattes af den næste reserve i samme kommune i trækkets orden; kvoten pr. kommune holdes præcis, og en anden kommunes hus bruges aldrig. Reglen er én funktion i værktøjet, og testen kontrollerer, at datafilens huse er præcis dem, reglen vælger ud fra svarlageret.
Kontrol af repræsentativitet. Regionernes andel af stikprøven sammenlignes med Danmarks Statistiks andele; husenes alder (fire årsbånd) ligeså. Afvigelser på få procentpoint er forventelige; større afvigelser tyder på en skævhed i trækket.
3. Motoren, modellen og prisgrundlaget
Samme motor som boligejeren. Hvert hus regnes gennem den offentlige beregningsvej (poll-protokollen) med to eksplicitte valg: systemmodellen og ejerformen. Alt andet er motorens standard: husets egne data (BBR, energimærke, Danmarks Højdemodel med tagflader og skygge, luftfoto, netselskabets tariffer), solen time for time i vejråret fra PVGIS på hver tagflade, elpriserne fra de seneste tolv hele måneder i husets prisområde lagt på vejrårets timer med rangbevarende afbildning, og en blandet heltals-optimering over årets 8.760 timer. Metoden i sin helhed står i METHODOLOGY.md (engelsk).
Systemmodellen i parcelhusstudiet er Optimin, den gratis boligejer-pakke: solceller kun på tagets bedste flader og dimensioneret til husets eget elforbrug, ingen mark og ingen vind, batteri og varmepumpe kun når de betaler sig. Valget af model afgør, hvad studiet kan sige: Optimin sizer til eget forbrug, så studiet måler et økonomisk potentiale for husstanden, ikke et udbud til nettet.
Prisgrundlaget er leverandørkatalogets listepriser inkl. moms, montage og tilmelding, uden tilskud, regnet for en privat boligejer. Et hus, hvor intet anlæg slår at lade være over 20 år (motorens nutidsværdi-gulv), tæller som "byg intet".
Definitioner, der skal holdes konstante:
- "Betaler sig" = positiv nutidsværdi over 20 år med udskiftninger, restværdi og realrente = motoren bygger noget. Det er den samme mængde huse.
- "Tjent hjem inden for N år" = den simple tilbagebetaling (investering delt med første års besparelse), som motoren viser den med én decimal, er højst N år. Ved grænsen tæller husets viste tal: et hus med 10,04 år vises som 10,0 og tæller med inden for 10 år. Forskellen er få huse ud af tusind og ændrer ikke de afrundede andele.
- Medianerne (investering, besparelse, tilbagebetaling, nutidsværdi) er hver sin median over husene med anlæg, ikke ét hus.
- Varmepumpens effekt er termisk afgivet effekt; batteriet er en pakkekonsekvens af hybridinverter plus batteri i kataloget.
4. Systemdata pr. hus
Fra hvert råsvars energibalance udledes årsenergier for huset før og efter: solproduktion fra det nye anlæg (husets produktion efter minus før, så et anlæg i forvejen ikke tælles med), eget forbrug af solstrøm (produktion minus salg minus afkortet), salg til nettet, batteriets op- og afladning, den nye varmepumpes el inkl. dens elpatron, og køb fra nettet før og efter. Fra timeserierne udledes købet i aftentimerne, det største time-træk fra nettet, vinterkøbet og batteriets opladningstimer. Alle disse kolonner genudledes af testen fra råsvarene.
5. Skalering til landet og usikkerhed
Simpel skalering. Hvert hus i stikprøven står for N/n huse, hvor N er landets antal beboede parcel- og stuehuse (Danmarks Statistik) og n stikprøvens størrelse. Et landstal er stikprøvens sum for de huse, der indgår i scenariet, gange skalaen.
Kommunevægte som kontrol. Den implicitte vægt for et hus i kommune k er kommunens parcelhuse delt med dens kvote. Begge metoder regnes; afvigelsen rapporteres og skal være lille (brøkdele af en procent for de store scenarier).
Bootstrap-interval. Usikkerheden er et 95 %-interval fra 2.000 gentræk af stikprøven med tilbagelægning med fast frø, så intervallet er deterministisk og testen kan genregne det. For andele gives desuden den binomiale normalapproksimation. Stikprøven er kvoteret på kommune, ikke simpelt tilfældig, så intervallerne er vejledende.
Scenarier (adoptionsniveauer). Et scenarie er en delmængde af stikprøvens huse, skaleret til landet: husene med tilbagebetaling inden for 8 år, inden for 10 år, og alle huse, hvor et anlæg betaler sig over 20 år (= alle huse, motoren bygger). For hvert niveau opgøres huse, ny solcelleeffekt, de nye anlægs produktion, ændringen i eget forbrug og salg, batterikapacitet og afladning, varmepumper (antal, termisk effekt, elforbrug), køb fra nettet før og efter, investering, besparelse og CO2, hver med sit bootstrap-interval. Scenariernes produktion sammenlignes på årsbasis med landets elforbrug, dagens solcelleproduktion og den registrerede solcelleeffekt.
Landets tal hentes af værktøjet fra Energinets åbne data (Energi Data Service: registreret solcelleeffekt pr. kommune, nyeste måned; årets målte produktion, forbrug og udveksling) og suppleres med Energistyrelsens energistatistik og Energinets redegørelse for elforsyningssikkerhed. Hvert tal gemmes med kilde, url og dato, og testen kræver, at hvert tal står i rapporten med sin kildelinje.
6. Hvad tallene kan bære, og hvad de ikke kan (regnskabet)
Studiet er en én-hus-model uden samtidighed, med perfekt fremsyn, ét vejrår, dagens priser holdt flade, skønnet forbrug i de fleste huse og uden tilskud. Det afgør, hvad der må siges:
Kan siges: andelen af huse, hvor et anlæg betaler sig, og hvor det er tjent hjem inden for N år; medianerne hus for hus; fordelinger på region, alder og opvarmning med deres intervaller; de nye anlægs årsproduktion og husenes eget forbrug og køb fra nettet før og efter som årsenergi; skalerede landstal som et økonomisk potentiale ved dagens priser med interval; sammenligningen med landets årsenergi.
Kan ikke siges: at husene aflaster elnettet, eller en aflastning i MW (husets største time-træk fra nettet stiger med et batteri, fordi det lader om natten; der er ingen samtidighed i modellen); at husene øger forsyningsudbuddet eller sænker Danmarks importbehov (Optimin sizer til eget forbrug; Energinets importbehov er effekt i knaphedstimer om vinteren, hvor solceller producerer lidt); nødstrøm, resiliens eller ø-drift (tilvalget var slået fra); hjælp i en vinterkrise; "så meget sparer du i praksis" (perfekt fremsyn er en øvre grænse); tal med tilskud; rigtige husstandes målte forbrug; et landsgennemsnit for installatørpriser; en færdig dimensionering.
Forbehold, der altid følger scenarierne: årlig energi er ikke effekt i knaphedstimerne; et batteri dimensioneret til eget forbrug sælger ikke til nettet og hæver husets spidstræk; varmepumperne er ny ellast, mest om vinteren; én-hus-model uden samtidighed; et økonomisk potentiale ved dagens priser, hverken prognose eller teknisk potentiale. Sætningerne står ordret i værktøjet, og testen kræver dem i rapporten, hver gang scenarierne vises.
7. Udgivelsesformatet
- Studiesiden (to døre, én side): ruten i appen og det forudrendrede dokument, samme komponent, alle tal fra den genererede JSON. Tabeller pr. region, alder og opvarmning, systemdata, scenarierne med forbehold og kilder, metode og stikprøven mod landet.
- Den anonymiserede CSV (den offentlige fil): ét hus pr. række uden adresse, adresse-id, postnummer, kommune og præcist opførelsesår; boligareal rundet til 10 m2 og loftet ved 300; rækkefølgen følger de ikke-identificerende kolonner. Den fulde fil med adresser er intern, og råsvarene (der bærer ejeroplysninger fra tinglysningen) ligger uden for repoet med en SHA256-liste, så hvert tal kan genregnes uden gensolve.
- Pressesiden med studiets boilerplate, citatform og skærmbilleder; pressematerialets tal står mellem markører og kontrolleres mod tal-blokken.
- Tal-blokken i studiets markdown er kilden til alle citater; teksten uden for blokken må ikke bære et procent- eller kronetal, der ikke står i blokken.
8. Stabilitetskontrol: en ny runde
Et studie står stærkere, når en ny, uafhængig stikprøve giver det samme. Opskriften: et nyt frø, mindst 200 nye huse trukket med samme regel (ingen af første rundes adresser), samme motor og samme prisvindue, samme udtræk og samme definitioner. Andelene i runde 2 sammenlignes med runde 1 med deres binomiale intervaller: ligger runde 2 inden for runde 1's interval (og omvendt), er fundet stabilt; ligger de uden for, undersøges årsagen (motorversion, prisvindue, trækket), før noget citeres. Runde 2 får sit eget værktøj og sin egen rapport og rører ikke første rundes filer; første rundes tal ændres aldrig af en senere runde.
9. Opskrift til de næste studier
Hvert nyt studie følger de samme fem trin (stikprøve, beregning gennem den offentlige vej, udtræk gennem én dør, rapport fra datafilen, test der genregner alt) og skriver sine definitioner op, før det regner.
Etageejendomme
- Population: BBR anvendelseskoder 140 (etagebolig-bygning, flerfamiliehus) og evt. 130 (række-, kæde- og dobbelthus) som eget studie; status opført. Enheden er bygningen (ejendommen), ikke lejligheden: ét hus pr. adgangsadresse med bygningens samlede boligareal og antal boliger (BBR enhedstal).
- Vægtning: Danmarks Statistik BOL101 med anvendelse etageboliger (og rækkehuse som egen kategori), beboede boliger pr. kommune; kvoter efter største-rest-metoden som i dag. Skaleringen til landet sker i antal bygninger, som kræver antal bygninger pr. kommune fra BBR (DST tæller boliger): tæl BBR-bygningerne pr. kommune ved udtrækket og gem tallet i udvalgsfilen.
- Model og ejerform: husstandsmodellen passer ikke; brug Standard (taget fyldt, eget forbrug for hele ejendommen) med ejerformen andelsboligforening eller almen boligorganisation efter BBR's ejerforhold, så moms, afgift og skat følger ejerformen. Fællesmåling (ejendomsafregning) er en forudsætning, der skal siges højt.
- Hvad motoren skal kunne: ejendommens fælles elforbrug og lejlighedernes forbrug skal kunne lægges sammen (fællesmåling), varme typisk fjernvarme (ingen varmepumpe-historie i de fleste), taget er fladt eller lavt skrånende (tagformen fra højdemodellen skal håndtere flade tage med opstilling i rækker), og et større anlæg kan ramme netselskabets grænser. Ejerformens regler er i motoren i dag; fællesmålingen som antagelse skal kunne vælges eksplicit.
- Hvad der kan siges: andelen af ejendomme, hvor et taganlæg betaler sig ved fællesmåling, kWp pr. ejendom, besparelse pr. bolig; aldrig "pr. lejlighed i praksis" uden fællesmåling.
Mark-solceller på fri jord
- Population: matrikler, ikke bygninger. Kandidater: landbrugsjord i landzone uden fredning, beskyttelseslinjer, Natura 2000, §3-natur, fredskov og kystnære zoner, og med en afstand til nærmeste netstation inden for motorens grænse. Datasæt: Matriklen (Geodatastyrelsen, Datafordeleren), Plandata (zonestatus, lokalplaner), Landbrugsstyrelsens markkort (IMK, hvilke marker er i omdrift), Danmarks Miljøportal (beskyttet natur), Energinets og netselskabernes kapacitetskort (tilslutningsmulighed).
- Trækket: matrikler pr. kommune med et seedet træk som i dag, kvoteret efter kommunens areal af landbrugsjord (Danmarks Statistik AFG07 eller IMK's markareal), mindst et par hektar sammenhængende.
- Model og ejerform: Optimax mark (feltet fyldt op til kapacitetsloftet) med ejerformen virksomhed eller landbrug (ex moms, afskrivning), prisperspektivet listepris; salg til nettet er her hele pointen, så Rc (systemvenlighed) og produktionsprofilen skal rapporteres.
- Hvad motoren skal kunne: et felt uden forbrug (ren eksport) skal kunne regnes med en nettilslutningspris, der følger afstanden til nettet og kapacitetskortet; producentbetalingen og tilslutningsreglerne skal være i prisgrundlaget; skyggen fra læhegn og terrænet fra højdemodellen skal regnes for marken, ikke taget.
- Hvad der kan siges: GWh pr. hektar, kr. pr. MWh produceret, andelen af marker med positiv nutidsværdi ved dagens priser; aldrig "forsyningssikkerhed" uden effekt i knaphedstimerne, aldrig et landstal uden nettilslutning som bindende forudsætning.
Fælles for begge
| Parcelhuse (gjort) | Etageejendomme | Mark-solceller på fri jord | |
|---|---|---|---|
| Enhed | Bygning (BBR 120) | Bygning (BBR 140, evt. 130 som eget studie) | Matrikel i landzone |
| Register til trækket | BBR via Datafordeleren | BBR via Datafordeleren | Matriklen, Plandata, IMK, Miljøportalen, kapacitetskort |
| Vægt pr. kommune | DST BOL101, beboede parcel- og stuehuse | DST BOL101, beboede etageboliger; BBR-bygninger pr. kommune til skaleringen | Landbrugsareal pr. kommune (DST AFG07 eller IMK) |
| Model | Optimin (eget forbrug) | Standard (taget fyldt, fællesmåling) | Optimax mark (feltet fyldt, salg til nettet) |
| Ejerform | Privat boligejer | Andelsboligforening eller almen efter BBR | Virksomhed eller landbrug (ex moms) |
| Motoren skal kunne | Det den kan i dag | Fællesmåling som eksplicit antagelse, flade tage i rækker | Felt uden forbrug med nettilslutningspris efter afstand og kapacitetskort |
| Må siges | Potentiale for husstanden, årsenergi | Potentiale ved fællesmåling, pr. ejendom og pr. bolig | GWh pr. hektar, kr. pr. MWh, andel med positiv nutidsværdi |
| Må ikke siges | Aflastning af nettet, forsyningsudbud | Pr. lejlighed uden fællesmåling | Forsyningssikkerhed uden effekt i knaphedstimer, landstal uden nettilslutning |
- Skriv tiers (hvem bygger) og sammenligningsgrundlag (landets tal med kilder) op, før runden regnes.
- Brug samme landstal-fil og samme kildeprincip (værktøjet henter, filen bærer kilde, url og dato).
- Kør en runde 2 med nyt frø, før tallene citeres som stabile.
10. Filer og kommandoer (parcelhusstudiet)
tools/datastudie_2026_10.py:sample(stikprøven),solve(beregningen gennem backendens API),report(CSV, anonym CSV, SHA256-liste, scenarie-JSON, markdown; kræver råsvarene),kilder(landets tal fra Energinets åbne data og rapporttallene),verify(hele kæden genregnet; exit 1 ved drift).docs/marketing/datastudie-2026-10.md(tal-blokken),-anonym.csv(den offentlige fil),-udvalg.json(stikprøven),-raasvar.sha256,-scenarier.json,-landstal.json.tools/datastudie-json.mjs(studiesidens JSON fra CSV'en, scenarie- og landstal-filen),tools/prerender-pages.mjs(studiesiden, pressesiden og dette dokument som forudrendrede sider).- Tests i
backend/app/engine/models/_tests.py:test_datastudie_2026_10,test_datastudie_2026_10_anonym_og_raasvar,test_datastudie_2026_10_landet_og_net,test_datastudie_2026_10_verify,test_datastudie_2026_10_scenarier,test_datastudie_page_json,test_datastudie_page_structure,test_presskit_figures,test_studie_metode_doc.