Hedonisch woningprijsmodel
Vrijwel alle bedragen die in RSopen aan woningen hangen komen uit één statistisch model: een hedonische prijsfunctie die waargenomen transactieprijzen verklaart uit kenmerken van de woning en van haar locatie. Die functie levert de verwervingskosten van de bestaande voorraad, de verwachte verkoopopbrengst van nieuwbouw per ontwikkelpakket, en de euro-waardering in verschillende effectindicatoren. Deze pagina beschrijft de specificatie, de variabelen, de manier waarop de coëfficiënten het model in komen, en de aannames bij elke toepassing.
De schatting zelf gebeurt buiten RSopen, in de PriceIndices-pipeline. Hoe die pipeline werkt (van ruwe NVM-levering tot coëfficiëntenbestand) staat beschreven in de PriceIndices-wiki; de methodische basis is Claassens en Koomen (2017).
Waar het model in RSopen wordt gebruikt
| Toepassing | Wat het model levert | Waar |
|---|---|---|
| Verwervingskosten | Waarde van de bestaande woningvoorraad per cel, als kostenpost in het exploitatiesaldo | Geschiktheid, Uitwerking wonen |
| Nieuwbouwopbrengsten | Verkoopprijs per woning per ontwikkelpakket per cel, als opbrengstenpost | Geschiktheid, Uitwerking wonen |
| Uitkoopkosten nieuwe natuur | Dezelfde verwervingskostenkaart, als indicator | Uitkoop en sloopkosten nieuwe natuur |
| Waardeniveau nieuwbouw | Prijs per woning maal gerealiseerde nieuwbouw, als indicator | Woningwaarde nieuwbouw |
| Waardering groenverandering | De natuur- en waterterm uit de prijsfunctie, toegepast op de verandering tussen basisjaar en zichtjaar | Woningwaarde agv groenveranderingen |
Het model is dus zowel sturend (het bepaalt via het exploitatiesaldo wáár gebouwd wordt) als evaluerend (het beprijst achteraf wat er is gebeurd). Die dubbelrol stelt een eis aan de variabelenkeuze: alle verklarende variabelen moeten ook in een zichtjaar bekend of redelijkerwijs constant zijn.
Specificatie en schatting
De prijsfunctie is een semi-logaritmisch regressiemodel (OLS) waarin de natuurlijke logaritme van de transactieprijs wordt verklaard uit woningkenmerken, locatiekenmerken en het transactiejaar:
ln(prijs) = constante
+ woningkenmerken (woonoppervlak, perceel, kamers, onderhoud, hoogbouw, bouwperiode)
+ locatiekenmerken (voorzieningen, reistijden, natuur en water nabij)
+ transactiejaar-dummy's
+ storingsterm
Het model is apart geschat per woningtype (WP4): vrijstaand, twee onder een kap, rijtjeswoning en appartement. Alle coëfficiënten, ook die van de locatievariabelen, verschillen dus per woningtype. Databron zijn de koopwoningtransacties van de NVM over de periode 2000 tot en met 2023: circa 0,6 miljoen transacties voor vrijstaande woningen, 0,6 miljoen voor twee-onder-een-kapwoningen, 1,6 miljoen voor rijtjeswoningen en 1,1 miljoen voor appartementen. De schatting gebruikt heteroskedastie-robuuste standaardfouten (HC1).
Door de semi-logaritmische vorm werkt elke term multiplicatief door in de prijs: een coëfficiënt b bij een dummyvariabele geeft een prijseffect van exp(b) - 1, en de coëfficiënt bij een gelogaritmeerde variabele is een elasticiteit. Dit betekent ook dat een prijseffect (zoals de aanwezigheid van natuur) in euro’s meeschaalt met de volledige woningprijs: dezelfde procentuele opslag levert bij een dure woning meer euro’s op dan bij een goedkope.
Variabelen
| Variabele | Omschrijving | Toelichting |
|---|---|---|
lnsize | log woonoppervlak (m2) | |
lnlotsize | log perceeloppervlak (m2) | alleen bij de eengezinstypen |
nrooms | aantal kamers | |
d_maintgood | onderhoudsstaat goed (dummy) | onbekend telt als niet-goed |
d_highrise | hoogbouw (dummy) | alleen bij appartementen; pandhoogte vanaf 15 m |
construction_period | bouwperiode, 8 klassen (dummy’s) | referentie: bouwjaar na 2001 |
trans_year | transactiejaar (dummy’s 2001 t/m 2023) | referentie: 2000; vormt de prijsindex |
uai_2012 | stedelijke attractiviteitsindex (UAI, netwerkgebaseerd) | potentiaal van winkels, horeca/bijeenkomst en monumenten over netwerkafstand; zeer lokaal niveau |
lntt_500k_2024 | log reistijd per auto (minuten) tot 500.000 inwoners | landsdeelniveau, Randstad versus daarbuiten; raster 2024 |
lntt_ovknoop | log reistijd per auto (minuten) tot dichtstbijzijnde OV-knooppunt | regionaal niveau; knooppunten 2026 |
fr_natuur_tot2500m | aandeel natuur (0 tot 1) binnen 2,5 km | LGN2024, hedonische natuurdefinitie (bos, duin, heide, moeras, natuurgras; exclusief stadsgroen en landbouw) |
fr_water_500m | aandeel water (0 tot 1) binnen 500 m | LGN2024, zoet en zout |
De precieze definitie en berekening van de twee groenblauwvariabelen staat in Spatial variabelen op de PriceIndices-wiki. Die definitie moet identiek blijven aan de toepassing in RSopen (cfg/main/Classifications/Grondgebruik.dms, IsNatuur_hedonisch en IsWater_hedonisch); zie Woningwaarde agv groenveranderingen.
Keuze van de locatievariabelen
In Claassens en Koomen (2017) lag de nadruk op het verklaren van waargenomen prijzen en zijn deels andere locatiefactoren gebruikt. Voor het beprijzen van toekomstige allocatie zijn alleen variabelen bruikbaar die ook in een zichtjaar bekend zijn of redelijkerwijs constant verondersteld kunnen worden. Variabelen als het aandeel landbouw- of woongebied in de gemeente (dat verandert juist door de allocatie) en het gemiddeld inkomen vielen daardoor af. De analyse is daarom opnieuw uitgevoerd met de variabelenset van Broitman & Koomen (2015).
De locatievariabelen zijn gekozen omdat ze prijsvariatie op verschillende schaalniveaus verklaren: de UAI op zeer lokaal niveau (voorzieningen in de directe omgeving), de reistijd tot een OV-knooppunt op regionaal niveau, en de reistijd tot 500.000 inwoners op landsdeelniveau (Randstad versus de rest van Nederland). De natuur- en waterfracties (issue #566, spec rs_groen) waarderen de groenblauwe omgeving: natuur op wandel- en fietsafstand (schijf 0 tot 2,5 km, naar Daams et al. 2016) en water in de directe omgeving (0 tot 500 m).
Fracties van stadsgroen, landbouw en bermgroen binnen 500 m zijn getest maar bewust weggelaten: hun coëfficiënten bleken buurtopbouw te meten in plaats van groenwaardering (negatieve tekens bij stedelijke woningtypen). De geteste varianten blijven als sensitiviteit beschikbaar; zie R-pipeline.
De drie bereikbaarheids- en voorzieningenvariabelen corresponderen een op een met wegingsfactoren in de ontwikkelpakketten (Tabel 7 in Uitwerking wonen); de natuur- en waterterm hebben geen ontwikkelpakket-weging.
Waarom geen fixed effects
In hedonische analyses worden vaak gebiedsgebonden fixed effects (gemeente, wijk of postcodegebied) opgenomen om niet-waargenomen locatiekwaliteit af te vangen. Daar is hier bewust van afgezien, om drie redenen:
- Het doel is prijzen voorspellen op plekken waar nu geen of andere woningen staan. Voor onbebouwde locaties bestaat geen geschatte fixed effect, en het overnemen van het effect van een omliggend gebied zou een precisie suggereren die er niet is.
- Gebiedsgebonden fixed effects zouden een groot deel van de ruimtelijke prijsvariatie absorberen die het model juist nodig heeft om te sturen. De geschiktheid moet verschillen tussen locaties herleiden tot interpreteerbare, in het model bekende factoren (bereikbaarheid, voorzieningen, groen); met fixed effects zou dat ruimtelijke patroon in niet-interpreteerbare constanten per gebied zitten.
- Sommige locatiekenmerken veranderen tijdens de simulatie, zoals het voorzieningenniveau (UAI) en groen nabij. Hun prijseffect moet expliciet geschat zijn om scenario-effecten te kunnen doorrekenen, bijvoorbeeld de waardering van nieuw groen in de indicator Woningwaarde agv groenveranderingen.
Fixed effects voor de tijd zitten wel in het model: de transactiejaar-dummy’s vangen de landelijke prijsontwikkeling af en vormen per woningtype de prijsindex. De overige coëfficiënten zijn daardoor geschoond voor het prijspeil van het transactiejaar. De keerzijde van het weglaten van gebiedsgebonden fixed effects is dat de locatiecoëfficiënten mede niet-waargenomen omgevingskwaliteit kunnen oppikken die met de opgenomen variabelen samenhangt; de coëfficiënten zijn dus associaties en geen causale effecten.
Van schatting naar model
De schattingsuitvoer wordt per woningtype als csv-bestand aangeleverd (Estimates_<datum>_<spec>_<type>.csv, met per variabele de coëfficiënt, standaardfout, t- en p-waarde en het 95%-betrouwbaarheidsinterval). Het inlezen gebeurt in BaseData/Suitabilities/Wonen/PrijsIndex (cfg/main/BaseData/Suitabilities/PrijsIndex.dms):
ModelParameters/NVM_filedate(momenteel20260711, sinds juli 2026 ders_groen-set met natuur- en waterfracties) bepaalt welke bestandsdatum van de coëfficiënten wordt gebruikt.- De R-pipeline levert schone termnamen; alleen de bouwperiode- en transactiejaar-dummies worden hernoemd naar modelnamen (
bouwperiode_va2002wordtd_constrgt2001,trans_year_2023wordtY2023). Overige termen matchen een op een met de whitelistClassifications/Vastgoed/HouseCharacteristics_src. ModelParameters/NVM_coeff_Year(momenteel2023) bepaalt welke jaardummy als prijspeil wordt gehanteerd.
Naast de coëfficiënten leest het model uit dezelfde NVM-data afgeleide gemiddelde woningkenmerken per woningtype in (RegionalAvgCharacteristics): gemiddeld perceeloppervlak, aantal kamers, aandeel goed onderhouden en aandeel hoogbouw, landelijk en regionaal. Deze gemiddelden worden gebruikt waar kenmerken van individuele woningen niet bekend zijn (zie de verwervingskosten hieronder).
Het volledige stappenplan bij een nieuwe schattingsronde staat in Koppeling met RuimteScanner.
Geschatte natuur- en watercoëfficiënten
Ter illustratie de twee groenblauwtermen uit run Estimates_20260711 (spec rs_groen):
| WP4 | natuur (0 tot 2500 m) | water (0 tot 500 m) |
|---|---|---|
| appartement | +0,44 | +0,63 |
| rijtjeswoning | +0,43 | +0,33 |
| twee-onder-een-kap | +0,63 | +0,42 |
| vrijstaand | +0,47 | +0,54 |
Interpretatie: 10 procentpunt meer natuur binnen 2,5 km komt overeen met circa 4,4 tot 6,5 procent hogere woningprijs; 10 procentpunt meer water binnen 500 m met circa 3,3 tot 6,5 procent. Alle vier de coëfficiënten zijn sterk significant.
Toepassing 1: potentiële opbrengsten van nieuwbouw
Het template Woningwaarde_OP_T (cfg/main/Templates/Suitabilities/Woningwaarde.dms) berekent per ontwikkelpakket (OP) en per cel een nieuwbouwprijs per woning door de prijsfunctie in te vullen met de kenmerken van het pakket en van de locatie:
prijs per woning = exp( constante
+ hoogbouw(OP) x b_hoogbouw
+ ln(woonoppervlak(OP)) x b_lnsize
+ ln(tuinoppervlak(OP)) x b_lnlotsize
+ kamers(OP) x b_kamers
+ 1 x b_onderhoud_goed
+ 1 x b_bouwjaar_na_2001
+ 1 x b_prijspeiljaar
+ w_voorz(OP) x UAI(cel) x b_uai
+ w_natniv(OP) x ln(reistijd_500k) x b_500k
+ w_natov(OP) x ln(reistijd_ovknoop) x b_ovknoop
+ fr_natuur_2500m(cel, basisjaar) x b_natuur
+ fr_water_500m(cel, basisjaar) x b_water
- correctie gemiddeld wegingseffect )
De invulling en aannames:
- Het woningtype (WP4) is een ingesteld kenmerk van het ontwikkelpakket (Woonpand type in Tabel 7) en bepaalt welke coëfficiëntenset wordt gebruikt.
- De woningkenmerken komen uit het ontwikkelpakket: woonoppervlak, aantal kamers en de hoogbouw-indicator. Het tuinoppervlak per woning wordt afgeleid als de uitgeefbare buitenruimte van het pakket gedeeld door het aantal woningen.
- Voor nieuwbouw wordt aangenomen dat de onderhoudsstaat goed is en de bouwperiode na 2001 valt (beide dummy’s op 1). Het prijspeil is het jaar
NVM_coeff_Yearvia de bijbehorende jaardummy. - De wegingsfactoren uit het ontwikkelpakket (Tabel 7) schalen de bijdrage van de drie bereikbaarheids- en voorzieningenvariabelen: een weging groter dan 1 laat een pakket sterker reageren op die factor, zodat bijvoorbeeld zeer stedelijke pakketten vooral op locaties met veel voorzieningen renderen. Om te voorkomen dat een weging ongelijk aan 1 ook het nationale prijsniveau van het pakket opdrijft, wordt per gewogen term het gemiddelde extra effect over de beschikbare cellen weer afgetrokken (de correctieterm in de formule). De weging verschuift zo alleen de relatieve aantrekkelijkheid tussen locaties.
- De natuur- en waterfracties hebben geen ontwikkelpakket-weging en worden bevroren op het basisjaar ingevuld: locaties bij bestaande natuur of bestaand water krijgen een reëel hogere verwachte opbrengst, maar de termen bewegen niet mee met de allocatie zelf (dat zou endogeen zijn). De waardering van de verandering gebeurt achteraf in Woningwaarde agv groenveranderingen.
- De UAI-coëfficiënt is geschat op het UAI-raster van 2012 (netwerkgebaseerd); in het model wordt een op de BAG gebaseerde, zelf berekende UAI ingevuld (potentiaal van winkels, bijeenkomst- en logiesfuncties en monumentale panden binnen 5 km), zodat dezelfde maat binnen het model beschikbaar is.
- Cellen zonder locatiegegevens krijgen de gemiddelde prijs per woning van dat pakket over Nederland (issue #595).
- De uitkomst staat op het prijspeil van
NVM_coeff_Yearen wordt met een landelijke factor (WoningPrijsVerandering_..., op basis van de gemiddelde verkoopprijs van bestaande koopwoningen, CBS) geschaald naar het startjaar van het model.
De opbrengst per cel is vervolgens de prijs per woning maal de dichtheid van het pakket (woningen per hectare) maal het aantal hectare per cel. Deze opbrengsten worden eenmalig per variant berekend, op basis van de startsituatie, en als tif weggeschreven (VariantData/Vastgoed/Opbrengsten_perOP/). In de geschiktheid per zichtjaar verandert daarna alleen het beschikbaarheidsmasker. Naast de gewogen prijs berekent het template ook een variant zonder wegingsfactoren (Prijs_perWoning_zWeging); die wordt gebruikt in de indicatoren.
Toepassing 2: verwervingskosten van bestaande woningen
Voor de verwervingskosten wordt dezelfde prijsfunctie toegepast op de bestaande voorraad (Woningwaarde_perWoningType_T en BaseData/Suitabilities/Wonen/Verwervingskosten):
- Per woningtype en per cel wordt de prijsfunctie ingevuld met het gemiddelde woonoppervlak van de woon-verblijfsobjecten van dat type in die cel, uit de BAG. Deze oppervlakten worden afgekapt op 10 tot 500 m2 om de invloed van registratiefouten te beperken.
- Voor kenmerken die niet in de BAG staan (perceeloppervlak, aantal kamers, onderhoudsstaat, hoogbouw) worden de regionale gemiddelden per woningtype uit de NVM-data ingevuld. De onderhoudsstaat is dus het regionale aandeel goed onderhouden woningen, niet een aanname van 100 procent zoals bij nieuwbouw.
- De bouwperiode-dummy’s worden niet ingevuld, waarmee impliciet de referentieklasse (bouwjaar na 2001) geldt. Omdat de bouwperiode-coëfficiënten voor oudere klassen overwegend negatief zijn, benadert dit de waarde van de oude voorraad eerder aan de hoge kant; voor een uitkoopkostenpost is dat een voorzichtige keuze.
- Elk woon-verblijfsobject krijgt de prijs van zijn woningtype in zijn cel; sommatie over de verblijfsobjecten geeft de totale verwervingskosten voor woningen per cel. Deze post is gelijk voor alle ontwikkelpakketten.
- Voor niet-woningen is een hedonische schatting niet goed mogelijk vanwege de heterogeniteit van commercieel vastgoed. Daar wordt per cel het maximum genomen van de totale WOZ-waarde (2017) en een kental van 10.000 euro per m2 (geïndexeerd met de bouwkostenindex).
In het exploitatiesaldo wordt op de verwervingskosten van woningen eventueel nog een waardevermindering door funderingsschade in mindering gebracht, afhankelijk van de variantinstellingen. Dezelfde verwervingskostenkaart wordt hergebruikt in de indicator Uitkoop en sloopkosten nieuwe natuur.
Toepassing 3: waardering van veranderingen
De derde toepassing draait de prijsfunctie niet om een niveau te bepalen, maar een verschil. In Woningwaarde agv groenveranderingen wordt de hedonische prijs eerst zonder de natuur- en watertermen bepaald (P_rest), waarna beide jaren met hun eigen fracties worden ingevuld:
P_basis = P_rest x exp( b_natuur x fr_natuur_basis + b_water x fr_water_basis )
P_zicht = P_rest x exp( b_natuur x fr_natuur_zicht + b_water x fr_water_zicht )
dWaarde = P_zicht - P_basis
Doordat dezelfde P_rest voor beide jaren wordt gebruikt, valt alle prijsvariatie behalve natuur en water weg. Dit is precies de arbeidsdeling met de allocatie: de geschiktheid waardeert bestaand groenblauw (bevroren op het basisjaar, om endogeniteit te vermijden), de indicator waardeert de verandering.
Aannames en beperkingen
- De functie is geschat op transacties van koopwoningen. Ook sociale-huurpakketten worden met deze functie gewaardeerd; er is geen aparte huur- of beleggingswaardefunctie. De opbrengst van een sociale-huurpakket is dus een koopwaarde-proxy.
- Binnen een woningtype zijn de coëfficiënten constant over heel Nederland; ruimtelijke prijsverschillen lopen volledig via de vijf locatievariabelen. Zonder gebiedsgebonden fixed effects kunnen die coëfficiënten mede samenhangende, niet-waargenomen omgevingskwaliteit weerspiegelen.
- De coëfficiënten zijn associaties, geen causale effecten. De betalingsbereidheid is geschat op historische transacties; aanname is dat die overdraagbaar is naar de zichtjaarsituatie.
- De locatievariabelen zijn statisch: de reistijd tot OV-knooppunten is gebaseerd op de knooppunten van 2026, de reistijd tot 500.000 inwoners op het autonetwerk en de CBS-bevolkingsvierkanten van 2024, en de natuur- en waterfracties op LGN2024. De opbrengsten worden eenmalig per variant op de startsituatie bepaald en veranderen niet per zichtjaar.
- De ruimtelijke variabelen zijn voor de hele transactieperiode 2000 tot en met 2023 op één vintage gemeten. Voor persistente kenmerken (natuur, water, reistijden) is dat een beperkte meetfout, maar rond uitbreidingswijken kan de omgeving van vroege transacties afwijken.
- Alle prijzen staan op het prijspeil van
NVM_coeff_Yearen worden met een landelijke factor naar het startjaar gebracht; regionale verschillen in prijsontwikkeling na dat jaar blijven buiten beeld. Toekomstige zichtjaren rekenen in het prijspeil van het startjaar, er wordt geen reële prijsstijging verondersteld. - De verwervingskosten gebruiken celgemiddelden en regionale gemiddelde kenmerken in plaats van individuele woningkenmerken; binnen een cel wordt de heterogeniteit van de voorraad dus afgevlakt.
- De definities van de ruimtelijke variabelen moeten identiek blijven tussen schatting (PriceIndices) en toepassing (RSopen); anders zijn de coëfficiënten niet overdraagbaar. Dat geldt in het bijzonder voor de natuur- en waterdefinitie en de gebruikte kernels.
Configuratie
| Onderdeel | Locatie |
|---|---|
| Inlezen coëfficiënten | cfg/main/BaseData/Suitabilities/PrijsIndex.dms (BaseData/Suitabilities/Wonen/PrijsIndex) |
| Toegestane termnamen | cfg/main/Classifications/Vastgoed.dms (HouseCharacteristics_src) |
| Nieuwbouwprijs per OP | cfg/main/Templates/Suitabilities/Woningwaarde.dms (Woningwaarde_OP_T) |
| Prijs zonder natuur en water | cfg/main/Templates/Suitabilities/Woningwaarde_perWoningType_zonderGroen.dms |
| Verwervingskosten | BaseData/Suitabilities/Wonen/Verwervingskosten |
| Modelparameters | NVM_filedate, NVM_coeff_Year |
| Schattingscode | PriceIndices (repo), PriceIndices-wiki (documentatie) |
Literatuur
- Claassens, J., & Koomen, E. (2017). Constructing high-resolution housing price indices for the Netherlands. SPINlab Research Memorandum SL-14.
- Broitman, D., & Koomen, E. (2015). Residential density change: densification and urban expansion. Computers, Environment and Urban Systems, 54, 32-46.
- Daams, M. N., Sijtsma, F. J., & van der Vlist, A. J. (2016). The Effect of Natural Space on Nearby Property Prices. Land Economics, 92(3), 389-410.
- Luttik, J. (2000). The value of trees, water and open space as reflected by house prices in the Netherlands. Landscape and Urban Planning, 48, 161-167.
- Zie verder Referenties.