Huff Probability Model
What It Does
Section titled “What It Does”The Huff model answers: given our restaurant’s size and location, what fraction of nearby diners will choose us over competitors?
It’s based on the core idea that a customer’s probability of choosing any restaurant is proportional to its attractiveness and inversely proportional to the distance to it — summed across all options.
Core Formula
Section titled “Core Formula”P(choose us) = Aᵢ / (Aᵢ + Σ Aⱼ)Where attraction A = size × distance^(-β). Our attraction is computed at 10 m (effectively zero distance). Competitor attractions use actual distances from the API.
Current Implementation
Section titled “Current Implementation”Attraction Calculation
Section titled “Attraction Calculation”Our attraction:
sizeScore = min(10, (floorArea / 800) × 7 + 3)uniqueBonus = 2.5 if cuisines ≤ 1 AND competitors < 5, else 0ourAttraction = (sizeScore + uniqueBonus) × 10^(-β)Competitor attraction (nearest 20):
attraction = 5.0 × max(distance, 50)^(-β)Remaining competitors beyond nearest 20:
Modeled at 1.3 × avg distance of nearest 20, each with attraction 5.0.
Capture Probability
Section titled “Capture Probability”captureProb = (ourAttraction / totalAttraction) × 100Then clamped by maxCapture and floored at 0.5% (previously 5%):
| Competitor count | Max capture |
|---|---|
| ≤ 3 | 55% |
| ≤ 10 | 40% |
| ≤ 30 | 25% |
| ≤ 100 | 10% |
| ≤ 300 | 5% |
| 300+ | 3% |
Output precision: 2 decimal places (e.g. 12.47%).
Beta (Distance Decay)
Section titled “Beta (Distance Decay)”Beta is set by calcBeta() before Huff runs:
| Service model / price | Beta | Decay function |
|---|---|---|
| Delivery | 0.3 | Exponential |
| Takeaway | 0.5 | Exponential |
| High-end HKD 200+ | 2.5 | Power |
| Premium HKD 100-200 | 1.5 | Power |
| Budget / Mid (dine-in) | 0.8 | Exponential |
Data Sources
Section titled “Data Sources”- Floor area: user input (sqft)
- Competitors: FEHD licence database, filtered within 800 m, nearest 20 used directly
- Beta: derived from service model and price band
Interpretation
Section titled “Interpretation”| captureProb | Meaning |
|---|---|
| 40–55% | Near-monopoly — very few nearby competitors |
| 20–40% | Strong position in a competitive market |
| 10–20% | Average for a busy urban district |
| < 10% | Highly competitive environment — differentiation critical |
Known Limitations
Section titled “Known Limitations”- Uses FEHD F&B licences as a proxy for competitor count — excludes unlicensed stalls and hawkers
- All competitors assigned the same baseline attraction (5.0) regardless of size or quality
- Nearest 20 used directly; remainder modeled at a flat 1.3× average distance
- No time-of-day variation (lunch competition may differ from dinner)
Changelog
Section titled “Changelog”| Date | Change |
|---|---|
| 2026-03-25 | Floor lowered from 5% → 0.5%; precision changed to 2 decimal places; granular maxCapture tiers added (55/40/25/10/5/3 based on competitor count) |
| 2026-02-10 | Initial implementation — single 50% cap, 5% floor |