population Residents per hex, Kontur redistributed onto building footprints. | usable modeled | 78.3% of cells | Kontur Population Dataset (SA extract, release 20231101) derived |
affluence_index MODELLED affluence, 0–100 (DATA_STRATEGY §2.3). Land value + POI affluence mix + plot spaciousness + dwelling scale. NOT income and NOT a measurement — there is no open income dataset for KSA at usable granularity. | usable modeled | 29.6% of cells | siteselect affluence model (modelled composite) derived |
poi_counts {category: count} of open, countable POIs. | usable | 100.0% of cells | staging.poi_unified (SS-1-05) + staging.poi_brand (SS-1-06) ODbL-1.0 |
brand_presence {brand_id: count} after Arabic/English brand normalization. | usable | 100.0% of cells | staging.poi_unified (SS-1-05) + staging.poi_brand (SS-1-06) ODbL-1.0 |
road_class_mix {osm highway class: metres in the hex}, from OSM ways clipped to the cell polygon. | usable | 100.0% of cells | OpenStreetMap (Geofabrik gcc-states extract) ODbL-1.0 |
junction_density Street intersections per km² — OSM nodes with ≥3 incident edges on the public street network, over the true cell area. | usable | 100.0% of cells | OpenStreetMap (Geofabrik gcc-states extract) ODbL-1.0 |
traffic_exposure MODELED. Σ(clipped length × class weight × carriageway factor), in primary-arterial-equivalent metres. See baseline.road_classes. | usable modeled | 100.0% of cells | OpenStreetMap (Geofabrik gcc-states extract) ODbL-1.0 |
transit_stops Public transport stop places whose point falls in the hex. | usable | 100.0% of cells | OpenStreetMap (Geofabrik gcc-states extract) ODbL-1.0 |
footfall_value MODELED, UNCALIBRATED. 0–100 footfall proxy index (DATA_STRATEGY §5 option A): category-weighted POI density, traffic exposure, junction density, built-up intensity and anchor proximity. Res 9 only — the index is normalised against the cell population it is computed over, so a res-8 value would not be comparable. Not a visitor count. See baseline.footfall_weights. | usable modeled | 100.0% of cells | siteselect footfall proxy (proxy) ODbL-1.0 |
footfall_confidence Weight of evidence behind footfall_value, not probability of correctness. Capped at 0.5 while footfall_source='proxy' so an uncalibrated model cannot be mistaken for a purchased panel. | usable modeled | 100.0% of cells | siteselect.compose_footfall ODbL-1.0 |
land_value_sqm SAR/m² land value from srem.moj.gov.sa — the median of a district's monthly transaction prices over a trailing 12-month window, inherited by every res-9 cell in that district. ⚠️ DISTRICT granularity stored per hex: within-district variation is absent, and 46.4% of res-9 cells are NULL because no SREM transaction in the window reached them. Uncovered cells are NOT imputed. See baseline.compose_land_value. | usable | 46.4% of cells | SREM — Saudi Real Estate Market (Ministry of Justice) Saudi-Open-Data |
built_up_pct Percent of sampled GHS-BUILT-S pixel area that is built surface. | usable | 100.0% of cells | GHSL GHS-BUILT-S R2023A (E2020, 100 m) EC-JRC-Free |
building_count Overture building footprints whose centroid falls in the hex. | usable | 100.0% of cells | Overture Maps — buildings ODbL-1.0 |
footprint_area_sqm Total building footprint area in the hex. | usable | 100.0% of cells | Overture Maps — buildings ODbL-1.0 |
pop_age_0_14 Residents aged 0–14, population × WorldPop band share. the composer flagged this column as spatially constant across the region: a real quantity, but identical in every location, so it cannot rank one against another | no spatial signal modeled | 78.3% of cells | WorldPop 2020 unconstrained age/sex structure (SAU) share × dasymetric population CC-BY-4.0 |
pop_age_15_29 Residents aged 15–29, population × WorldPop band share. the composer flagged this column as spatially constant across the region: a real quantity, but identical in every location, so it cannot rank one against another | no spatial signal modeled | 78.3% of cells | WorldPop 2020 unconstrained age/sex structure (SAU) share × dasymetric population CC-BY-4.0 |
pop_age_30_44 Residents aged 30–44, population × WorldPop band share. the composer flagged this column as spatially constant across the region: a real quantity, but identical in every location, so it cannot rank one against another | no spatial signal modeled | 78.3% of cells | WorldPop 2020 unconstrained age/sex structure (SAU) share × dasymetric population CC-BY-4.0 |
pop_age_45_64 Residents aged 45–64, population × WorldPop band share. the composer flagged this column as spatially constant across the region: a real quantity, but identical in every location, so it cannot rank one against another | no spatial signal modeled | 78.3% of cells | WorldPop 2020 unconstrained age/sex structure (SAU) share × dasymetric population CC-BY-4.0 |
pop_age_65_plus Residents aged 65+, population × WorldPop band share. the composer flagged this column as spatially constant across the region: a real quantity, but identical in every location, so it cannot rank one against another | no spatial signal modeled | 78.3% of cells | WorldPop 2020 unconstrained age/sex structure (SAU) share × dasymetric population CC-BY-4.0 |
households Households per hex. The only household source available is a GASTAT governorate total. Distributing it by a constant households-per-person ratio yields a column that is a scalar multiple of `population` — no spatial signal, no information, but it looks like a measurement and would be weighted as one. A NULL column is honest; a constant-ratio one is not. | unavailable | — | — |
daytime_pop_index Daytime vs residential population (DATA_STRATEGY §2.2). DATA_STRATEGY §2.2 needs five inputs. SS-2-04 delivered two (transit_stops, traffic_exposure); retail GLA is unavailable (SS-1-15) and school/university capacity is not ingested. | unavailable | — | — |
spend_potential SAR/year spend potential = population × age propensity × affluence × HES basket. Two of its four factors are still unavailable. The GASTAT Household Expenditure Survey category basket was not obtained, so there is no basket to multiply by; and the age propensity term would multiply through a spatially constant age structure (SS-1-12 — exactly one distinct 65+ share across all 55,230 hexes). What is left is population × affluence × a constant, published in SAR — a currency-denominated restatement of two columns that already exist, and the currency is what would make it read as a measurement. | unavailable | — | — |
retail_gla_sqm Gross leasable retail area. Requires building height or storey count. 169 of 756,675 Overture buildings carry a height and 397 carry explicit levels — 0.06% of the stock. Extrapolating GLA from that is fiction, not sparsity (SS-1-15). | unavailable | — | — |
footfall_source 'proxy' | 'telco' | 'card' | 'sdk'. Which of DATA_STRATEGY §5's options produced footfall_value; 'proxy' until a panel is purchased. this column records where a value came from rather than measuring the place; it is not a factor | provenance label | 100.0% of cells | siteselect.compose_footfall ODbL-1.0 |