Urban Knowledge Graph — How 200K entities and 1.49M edges weave Singapore's urban fabric
Place-to-place relationships. How businesses interact — compete, synergize, substitute, and co-locate.
COMPETES_WITH (503K) · SYNERGIZES_WITH (263K) · SUBSTITUTES_FOR (150K) · EXIT_FRONTAGE (3K) · VOID_DECK_OF (22K)
Embedding captures: competitors R²=0.77, category separability 310x
Containment and classification. Every place knows its hex, its subzone, and its category. Queries traverse up and down.
LOCATED_IN (175K) · IS_A (175K) · PARENT_OF (7.3K) · PART_OF (7.3K)
Enables: cross-level queries, category classification 69.8% accuracy
Places connected to demand generators — MRT exits, hawker centres, malls, schools. The "why is this cafe here?" layer.
ANCHORED_BY (108K) · WALK_CATCHMENT (6.6K) · SERVES (6.8K)
Embedding captures: anchor_score R²=0.91 — near-perfect
Rail topology, bus feeders, commute flows, expressway corridors. How people MOVE — the skeleton the commercial flesh hangs on.
CONNECTS_TO (2.3K) · FEEDS_INTO (1.3K) · SAME_CORRIDOR (1.9K) · EXPRESSWAY (1.5K)
Embedding captures: transit_taps R²=0.65, transit_score R²=0.66
Adjacency with direction (N/S/E/W), road connectivity, barriers (expressways/canals), and coastline. The physical fabric.
ADJACENT_TO (24K) · N/S/E/W_OF (3.3K) · ROAD_CONNECTED (1K) · COASTAL (83)
Embedding captures: walkability R²=0.90, ecosystem R²=0.83
How things CHANGE across space — price contours, density waves, height skylines, commercial intensity. The urban texture.
COMMERCIAL_GRADIENT (4.2K) · HEIGHT (2.5K) · DENSITY (2.1K) · PRICE (437)
Enables: development front detection, gentrification boundaries
Where demand exists but supply doesn't. Gap edges, oversupply flags, demand leak paths, comparable neighborhoods.
UNDERSUPPLIED (1.3K) · OVERSUPPLIED (637) · COMPARABLE_TO (2.7K) · DEMAND_LEAKS_TO (116) · WORKER_INFLOW (589)
Embedding captures: demand_context R²=0.88, pull_residential R²=0.89
Cluster membership, land-use transitions, development fronts. The macro-patterns that shape Singapore's urban evolution.
SAME_CLUSTER (5.3K) · DEVELOPMENT_FRONT (3K) · LU_TRANSITION (904) · SYNERGY_PAIR · SUBSTITUTES
Embedding captures: archetype NMI=0.36, population R²=0.78
Encodes WHERE — walkability, population, ecosystem, transit reach. Trained on hierarchy + spatial + transit edges.
walkability R²=0.90
ecosystem R²=0.83
population R²=0.78
Encodes WHAT — category, competition, demand match, synergy. Trained on commercial + supply-demand edges.
category accuracy 69.8%
separability 310x
anchor R²=0.91
Concatenation of both heads. Used for similarity search, brand expansion, anomaly detection, and scenario simulation.
demand_context R²=0.88
competitors R²=0.77
survivability R²=0.48
What this graph tells us about Toa Payoh Central
5,179 competition edges mean 1,460 places compete intensely within 500m — this is a saturated commercial centre (ecosystem 0.86). Saizeriya has 85 restaurant competitors. Toa Payoh Mall has 57 retail competitors.
2,138 synergy edges show cafes benefiting from offices, health clinics clustering together, hawkers drawing foot traffic that spills to retail. The food ecosystem (hawker + cafe + restaurant) synergizes with the education cluster (tuition centres).
737 void deck edges — half the places are in HDB void decks with captive demand from the 111 blocks above. This is the SGP-specific pattern: barbers, TCM clinics, provision shops serving residents who literally walk downstairs.
1,231 anchor edges connect places to 2 MRT stations (Toa Payoh + Braddell), 20 bus stops, and the hawker centre. The transit funnel through Toa Payoh MRT drives 183K daily taps — the primary demand generator.
36 adjacency edges to 6 neighbors (Balestier, Boon Teck, Braddell, TP West). Price/height gradients show Toa Payoh is a local peak — commercial intensity drops in every direction.