Esta página aún no está traducida. Estás leyendo la versión en inglés.

Cannibalization

Estimate how many visits a new store would take from existing stores of the same category, including your own, and how to read the impact table.

Cannibalization is the share of a new store’s visits that comes out of existing stores rather than from new demand. For multi-unit operators it is often the deciding number: a location forecast at 400 visits a day is much less attractive if 250 of them come from your own store two kilometers away.

MapDove computes cannibalization as part of every Huff forecast. There is no separate endpoint — the impacted list and total_cannibalized_daily are returned by POST /api/v1/sdss/huff and inside each site of POST /api/v1/sdss/compare-sites.

How it is computed

The Huff model is run twice for the city and category:

  1. Before — existing stores only. Each store j gets expected demand E_j_before.
  2. After — existing stores plus the candidate. Each existing store gets E_j_after, which is lower wherever the candidate competes for the same hexes.

The change is converted to visits with the same calibration factor k used for the forecast:

Δ_j      = k · (E_j_after − E_j_before)          daily visits
Δ%_j     = 100 · (E_j_after − E_j_before) / E_j_before
total    = −Σ_j Δ_j
  • k — visits per unit of modeled demand, fitted on observed visits of existing stores (last 90 days).
  • Δ_j is negative for stores that lose visits.
  • total_cannibalized_daily is reported as a positive number of daily visits lost across all existing stores.

The impact table

impacted lists up to 10 stores with the largest losses (losses smaller than half a visit per day are omitted), ordered from most to least affected:

Field Meaning
place_id, name, lng, lat The affected store
distance_km Straight-line distance from the candidate
current_daily_visits Observed average daily visits, last 90 days
delta_daily_visits Expected change in daily visits (negative = loss)
delta_pct Expected change in percent

Reading the results

Transfer ratio. Divide total_cannibalized_daily by predicted_daily_visits. In a gravity model with an outside option, part of the candidate’s visits are “new” — demand that previously went to the outside option because no store was close enough — and part is transferred from competitors.

  • A ratio near 1.0 means the candidate mostly reshuffles existing visits: the area is already well served.
  • A ratio well below 1.0 means the candidate unlocks underserved demand — consistent with a high demand-gap criterion in suitability.

Own-brand impact. Filter impacted to your own brand’s stores (their names start with the brand name in the demo data). Net incremental visits for your network are:

net = predicted_daily_visits − Σ_(own stores) |Δ_j|

Percent vs absolute. A small store losing 15% may be in more trouble than a large one losing 40 visits. Look at both columns.

Distance pattern. Losses usually fall off with distance, but strong stores further away can lose more visits in absolute terms than weak stores nearby, because they have more to lose.

Example

A coffee candidate in Mueller (Austin), 1,800 sq ft, brand strength 1.1:

Store Distance Current Δ / day Δ %
Bean Republic · Mueller 0.6 km 412 −58 −14.1%
Mueller Roasters 1.1 km 296 −37 −12.5%
Daily Ritual · Hyde Park 2.4 km 351 −21 −6.0%

If the forecast is 380 daily visits and total cannibalization 190, half the candidate’s traffic is transferred. If the operator is Bean Republic, its own Mueller store absorbs 58 of those. (Figures illustrative, from the demo dataset.)

Limitations

  • Only stores of the same category are affected; a new café does not cannibalize a bakery counter in a grocery store.
  • The model assumes existing stores do not react (no price or format response).
  • Calibration uses one k per city and category, so very strong or very weak stores may be over- or under-stated.
  • All visits are synthetic (Demo data).