Found 33 BBT outlets across 27 hex-8 cells. KOI leads with 10 outlets. Graph profile: BBT shops have 281 synergy edges (co-locate with F&B), 174 substitution edges (compete with other drinks), high transit scores (median 0.66).
Average all BBT outlet embeddings → 128d centroid capturing "what does a successful BBT location look like in graph space?" Then score every hex-8 cell.
Score = embedding similarity (35%) × supply opportunity (25%) × transit impulse (25%) × youth factor (15%) — penalized if already has 3+ BBT shops.
| # | Location | Pop | Transit/day | BBT today | Cafe sat. | MRT | Archetype | Score |
|---|---|---|---|---|---|---|---|---|
| 1 | Matilda, Punggol | 36,021 | 124,648 | 0 | 0.3x | 1 | Dense HDB | 0.800 |
| 2 | Rivervale, Sengkang | 42,874 | 67,688 | 0 | 0.3x | 0 | Dense HDB | 0.770 |
| 3 | Jurong West Central | 48,363 | 95,376 | 0 | 0.2x | 1 | Dense HDB | 0.760 |
| 4 | Hong Kah, Jurong West | 19,370 | 107,795 | 0 | 0.5x | 1 | Dense HDB | 0.746 |
| 5 | Sembawang North | 40,573 | 120,055 | 0 | 0.5x | 1 | Dense HDB | 0.742 |
| 6 | Woodlands East | 44,928 | 131,468 | 0 | 0.5x | 1 | Dense HDB | 0.737 |
| 7 | Kaki Bukit, Bedok | 29,080 | 57,395 | 0 | 0.4x | 1 | Dense HDB | 0.734 |
| 8 | Compassvale, Sengkang | 28,230 | 70,933 | 0 | 0.8x | 2 | Dense HDB | 0.732 |
All top locations are Dense HDB new towns with young populations, MRT stations, and zero existing BBT — massive untapped demand.
| # | Business | Sim to BBT | Current competitors | Risk |
|---|---|---|---|---|
| 1 | NTWU Canteen | 0.945 | 2 | HIGH |
| 2 | Happy Friends Cafe | 0.928 | 2 | HIGH |
| 3 | Kowloon HK Charcoal Roast | 0.917 | 2 | MEDIUM |
| 4 | Kopitiam Corner | 0.917 | 2 | MEDIUM |
| 5 | GoodwithKopi | 0.915 | 1 | MEDIUM |
Low competitor counts (1-2) mean these cafes currently face little competition — a new BBT entrant would be their first serious challenger.
"Where should Starbucks open next?" → Build brand centroid from existing outlets' embeddings → Find hexes with similar graph structure but NO Starbucks → Rank by similarity × (1 − saturation).
Each brand gets DIFFERENT recommendations (Starbucks ≠ KFC ≠ Guardian)
Traverse edges from any place: ANCHORED_BY → transit demand. SYNERGIZES_WITH → cross-category benefit. VOID_DECK_OF → captive HDB demand. Graph tells the STORY, not just numbers.
"What if Braddell MRT closes?" → Remove station edges → Recompute embeddings → Places that shift most = most dependent on that station. Quantifies impact of infrastructure changes.
Follow UNDERSUPPLIED edges → Check DEMAND_LEAKS_TO → If no leak path to neighbor with food, it's a TRUE desert. Filters out Orchard/CBD false positives.
"Is this right for luxury dining?" → Check COMPARABLE_TO edges — are comparables luxury areas? Check PRICE_GRADIENT direction. Check ANCHORED_BY hotels.
Count incoming edges by type: ANCHORED_BY MRT = 35%, VOID_DECK_OF = 25%, SYNERGIZES_WITH offices = 20%. Decomposes demand_context_score into source-by-source attribution.
Compare place embedding to hex embedding. Low similarity = structural misfit. Found: Kovan retail (sim=-0.10) are outliers in a residential zone. Flags risky locations.
Follow DEVELOPMENT_FRONT + COMMERCIAL_GRADIENT increasing + SAME_CLUSTER growth → "Tengah is the next Punggol." Predicts where the city is growing.
Traverse COMPETES_WITH from any place → classify by SYNERGIZES overlap (allies vs threats) + SUBSTITUTES (cross-category). Net position: 46 threats, 12 allies, 27 substitutes.
Same relation schema for SGP + HKG → Train R-GCN on both → "Find the HKG neighborhood most similar to Toa Payoh." Structural patterns (dense residential + transit + food ecosystem) are universal.
| Capability | Flat features (628 columns) | + Plexis graph (1.49M edges) |
|---|---|---|
| Site selection | Same hexes for every brand | Brand-specific: Starbucks ≠ KFC ≠ Guardian |
| Explain WHY | anchor_score=0.72 (a number) | MRT funnel + office synergy + void deck captive demand (a story) |
| Scenario "what if" | Cannot simulate | Remove/add edges → recompute → measure shift |
| Food deserts | Returns CBD (false positive) | UNDERSUPPLIED + no DEMAND_LEAKS_TO = true desert |
| Demand attribution | demand_context=0.8 (one number) | MRT 35% + void deck 25% + office 20% (decomposed) |
| Anomaly detection | No mechanism | Place-hex embedding mismatch = structural misfit |
| Competitive map | competitors_200m=85 (count) | 85 = 46 threats + 12 allies + 27 substitutes |
| Evolution | Nightlight change % | DEVELOPMENT_FRONT + GRADIENT + CLUSTER = growth trajectory |
| Cross-city | Different features per city | Same relation schema → transferable structural patterns |
| Speed | DuckDB <7ms | Cosine similarity 1.6s (both fast enough) |