MCDA weighted overlay for site selection, explained
How MapDove scores every hex for suitability: criteria, min-max normalization, inverted cost criteria, weight sensitivity and spacing of top sites.
A Huff forecast answers a narrow question about one candidate address. Before you can ask it, you need a shortlist. Multi-criteria decision analysis (MCDA) produces that shortlist. It scores every hex cell in a city against the factors that matter for your format, so you can see where to look before you see what a site is worth.
MapDove uses a weighted linear overlay. It is the most transparent form of MCDA: every score can be traced back to a few normalized inputs and the weights you chose. This post covers how it works and how to keep it from misleading you.
The criteria
Each hex (about 0.8 km²) carries nine criteria:
- Population density: residents per km².
- Income: median household income.
- Daytime density: workers and visitors per km².
- Traffic index: relative road and pedestrian activity.
- Growth: projected population growth rate.
- Competition: same-category stores, weighted by a distance-decay kernel
exp(−d / 1.5 km)for every store within 4 km, then log-scaled. Inverted: less is better. - Complementary businesses: nearby categories that send you customers, such as fitness and apparel for coffee or pharmacy and fuel for grocery. Weighted by
exp(−d / 0.8 km)within 2.5 km, also log-scaled. - Rent: the rent index. Inverted.
- Demand gap: demand that is poorly served today (defined below).
The kernels matter. A raw count of competitors within 4 km treats a store next door the same as one at the edge of the radius. With a 1.5 km decay, a competitor 500 m away counts about 0.72, one at 3 km counts about 0.14. Complementary businesses use a tighter 0.8 km kernel, because co-tenancy only helps when people can walk or make a quick stop between stores.
The log transform (ln(1 + x)) stops one dense cluster, such as a downtown core, from flattening every other part of the city to zero.
Min-max normalization, per city
Criteria come in different units: dollars, people per km², index points. Each one is rescaled to 0–1 across all hexes in the selected city:
x_norm = (x − min_city) / (max_city − min_city)
For cost criteria (competition and rent) MapDove uses 1 − x_norm, so a high normalized value always means “better for the site”.
Normalization is per city, so scores are relative to the market. A 0.9 on income in Phoenix and a 0.9 in Miami are not the same dollar figure. Each means “near the top of this city”. Compare rankings within a city. Don’t compare raw scores between cities.
The demand gap criterion
The demand gap combines demand with existing access:
gap = demand_norm × (1 − access_norm)
Demand is population + 0.4 × daytime population. Access is the summed Huff-style utility of existing stores in the category, log-scaled and normalized. A hex with many people and little nearby supply scores high. A dense hex that is already saturated scores low. Of all the criteria, the gap is the one most closely tied to what the Huff model will later reward.
The score
score = 100 × Σ (w_c · x_c) / Σ w_c with w_c ∈ [0, 10]
A weight of 0 removes a criterion. Dividing by the sum of weights keeps every score on 0–100 however many criteria you switch on. That means the ratios between weights are what matter, not their absolute values: weights of 8/4 and 4/2 give the same map.
Weight sensitivity: the part people skip
Weights look like a statement of priorities, but a criterion’s real influence also depends on how much it varies across the city. If almost every hex scores 0.6–0.7 on traffic, a traffic weight of 10 hardly reorders anything. A criterion with values spread from 0 to 1 decides the ranking even at a moderate weight.
Two more traps:
- Correlated criteria double-count. Population density, daytime density and demand gap all carry “lots of people”. Weight all three at 8 and you’ve made a population model with extra steps.
- Outliers compress the scale. A single extreme hex, such as a stadium or an airport, can push everything else into a narrow band. The log scaling on kernel criteria reduces this, but it doesn’t remove it for linear criteria like income.
Here is an illustrative comparison of two hexes under two weight sets:
| Hex | Pop. | Income | Competition (inv.) | Rent (inv.) | Gap | Score A* | Score B** |
|---|---|---|---|---|---|---|---|
| H1 – urban core | 0.92 | 0.70 | 0.20 | 0.15 | 0.30 | 57 | 41 |
| H2 – growth edge | 0.45 | 0.65 | 0.85 | 0.70 | 0.75 | 64 | 70 |
*A: population 8, income 4, competition 4, rent 2, gap 4. **B: population 4, income 4, competition 6, rent 4, gap 8.
H2 wins under both sets, but the margin grows from 7 to 29 points. That is a robust result. When the leader changes under modest weight shifts, the decision depends on the weights, and you need a real conversation about priorities.
A practical routine: change each major weight by ±2, re-run, and see which top sites stay in the top ten. Those are your durable candidates.
Top sites and minimum spacing
The ten highest-scoring hexes are often neighbors on the same street corner. That tells you little. MapDove picks top sites greedily. It takes the best hex, excludes everything within the minimum spacing (1.5 km by default), takes the next best remaining hex, and repeats.
Set the spacing to your format’s trade area scale. About 1–1.5 km works for coffee or quick service in a dense core. 4–6 km or more suits grocery or home improvement. Spacing that is too tight wastes shortlist slots on duplicates. Spacing that is too wide skips good second sites in strong districts.
Practical takeaways
- Start with five or fewer criteria that you can defend to a real estate committee, then add more only if they change the answer.
- Avoid stacking correlated criteria, and remember that only weight ratios matter.
- Run a ±2 sensitivity pass and treat sites that stay near the top as the real shortlist.
- Hand the shortlist to the Huff model. Suitability says where to look. The Huff forecast and compare sites tell you what each site is worth.
See the site suitability docs for the full criteria reference, or try it in Site Selection.
All figures shown on this site come from MapDove’s synthetic demo dataset, modeled from neighborhood-level parameters. No real device data is used.
Back to the blog