Palate

The Instrument Room

Flavor provinces: the map that replaces cuisine labels

Piece 1 measured that nationality words carry almost no flavor information. Fair question in response: if the cuisine map is wrong, what map does the data support? We took the same co-occurrence graph as Piece 4 — 268 common ingredients, 6,022 affinity edges over 63,696 recipes — and handed it to a community-detection algorithm with no labels, no geography, and no model’s opinion. It found six provinces. None of them is a country.

The honest headline comes first, though: the algorithm does not return one answer. Louvain community detection is seed-dependent — across 5 seeds we measured agreement of only ARI 0.71–0.85, with 5 communities under some seeds and 6 under others. So we publish the stable core: the 231 of 268 ingredients (86%) that land in the same group under every seed. The other 37 are reported as border country, not silently assigned.

2026-07-26T12:19:18.035422 image/svg+xml Matplotlib v3.11.0, https://matplotlib.org/ 0 20 40 60 chicken broth celery oregano fennel olive oil basil rosemary thyme n = 76 thyme · rosemary · basil 0 10 20 30 40 walnut pecan pineapple strawberry raisin cherry cinnamon vanilla n = 69 vanilla · cinnamon · cherry 0 20 40 sesame seed enokidake soy sauce shiitake sesame oil radish soybean sake n = 29 sake · soybean · radish 0 10 20 30 season salt tomato paste sour cream white rice tomato sauce green pepper paprika worcestershire sauce n = 26 worcestershire sauce · paprika · green pepper 0 10 20 mango lime cumin turmeric fenugreek coriander cilantro lime juice n = 16 lime juice · cilantro · coriander 0 5 10 15 lovage crab horseradish celery oil vinegar tabasco pepper tamarind mustard n = 15 mustard · tamarind · tabasco pepper Six flavor provinces, named by their own members Louvain communities on the PPMI co-occurrence graph (268 ingredients, 6,022 edges over 63,696 recipes). The partition is seed-dependent (ARI 0.71–0.85 across 5 seeds), so only the stable core is shown: the 231 ingredients that co-cluster under every seed. Bars rank members within a province by total PPMI to co-members — each card has its own scale; compare within a card, not across cards. 63,696 recipes (5,296 parsed + 1,081 curated + 57,319 research corpus, Western-skewed) · piece6_flavor_provinces.py
The six stable provinces, each named by its own top-three members (highest total PPMI to co-members — never a hand-written cuisine name). Whole-partition modularity 0.40 at resolution 1; each card's bars are a ranking within that province.

The six provinces

Full membership for every province is in the results file; the cards above show the anchors. What the map says, qualitatively: the savory European pantry refuses to split into “Italian” and “French” (one 76-ingredient fabric); the sweet/savory line is the strongest border in the data; the East Asian pantry (n=29) is the tightest province by more than double; the statistic rediscovered mid-century American convenience cooking (worcestershire · paprika · green pepper, n=26) without being told; lime · cilantro · cumin ingredients that a cuisine atlas files under both “Mexican” and “Indian” share one province (n=16); and a pickling-and-brine counter (mustard · tamarind · tabasco, n=15 — dill, horseradish, vinegar, beet, salmon, crab) emerged that no cuisine name covers.

Provinces = meet cells with n ≥ 15 that survive all 5 Louvain seeds. Names are data-derived from the members themselves.
provincentop members by total PPMI to co-members
the thyme · rosemary · basil province76thyme, rosemary, basil, olive oil, fennel, oregano
the vanilla · cinnamon · cherry province69vanilla, cinnamon, cherry, raisin, strawberry, pineapple
the sake · soybean · radish province29sake, soybean, radish, sesame oil, shiitake, soy sauce
the worcestershire sauce · paprika · green pepper province26worcestershire sauce, paprika, green pepper, tomato sauce, white rice, sour cream
the lime juice · cilantro · coriander province16lime juice, cilantro, coriander, fenugreek, turmeric, cumin
the mustard · tamarind · tabasco pepper province15mustard, tamarind, tabasco pepper, vinegar, celery oil, horseradish

The border country

The 37 seed-unstable ingredients are not noise — they are the pantry’s most cosmopolitan citizens, and their refusal to sit in one province is evidence the method is working. A few travel in packs: broccoli + cheddar cheese + cottage cheese + egg noodle; lemongrass + peanut + thai pepper; brown rice + cauliflower; canola oil + garlic; cucumber + vegetable oil; heavy cream + shallot; lamb + saffron; pork + scallop. The rest travel alone: black bean, blue cheese, cabbage, cardamom, chicken, chickpea, chicory, cod, cornstarch, grapefruit, lemon juice, lentil, lettuce, pea, sherry, starch, watercress, yogurt. All are excluded from every published cut (reporting floor n ≥ 15).

How separate are the provinces?

Mean PPMI edge weight within provinces runs 0.30–1.08; between provinces, 0.002–0.20. The weakest coupling in the whole map is dessert shelf ↔ casserole aisle; the strongest bridges are exactly where a cook would guess — the East Asian pantry ↔ the lime-cilantro province, and the brine counter ↔ the European savory pantry.

Mean PPMI edge weight between provinces (absent edges counted as 0). ● marks the diagonal — within-province density. Provinces abbreviated to their first-named member.
mean PPMIthymevanillasakeworcestershire saucelime juicemustard
thyme0.318 ●0.0120.0980.0510.0650.153
vanilla0.0120.304 ●0.0280.0020.0570.038
sake0.0980.0281.084 ●0.0160.1960.125
worcestershire sauce0.0510.0020.0160.568 ●0.0750.010
lime juice0.0650.0570.1960.0750.851 ●0.070
mustard0.1530.0380.1250.0100.0700.846 ●

Honest limitations

  • The corpus is Western-skewed and one source is 90% of it. 63,696 recipes = 5,296 parsed + 1,081 hand-curated + 57,319 from the dataset published with Ahn et al.’s 2011 paper, which is largely North American and European. A West African or Levantine province is absent because the corpus barely wrote those recipes down, not because those pantries lack structure.
  • Community detection is resolution-dependent and partitions are not unique. We ran Louvain at resolution 1 — the default, disclosed, not tuned. Other resolutions would give coarser or finer maps. “Six provinces” is a property of this graph at this resolution, not a law of cooking.
  • The seeds disagree, and we measured it instead of hiding it. ARI 0.71–0.85 across 5 seeds; 5 communities under some seeds, 6 under others. Everything published here survives all runs; the 37 ingredients that don’t are named and excluded. A same-seed rerun is byte-identical (verified in tests), so the instability is the algorithm’s, not the code’s.
  • PPMI favors the rare end. Even above the inherited floors (pair count ≥ 20, both ingredients in ≥ 100 recipes, plus Piece 4’s staple and near-duplicate exclusions), rarer ingredients score proportionally higher, which can pull niche tokens toward the center of small provinces. Every member ships with its df in the results file.
  • Co-occurrence is convention plus popularity, not deliciousness. The worcestershire province is the proof: the statistic faithfully mapped 1955’s casserole aisle. These provinces describe what recipe authors do together, not what belongs together.
  • The vocabulary carries its sources’ quirks. “Celery oil” and “lovage” in the brine province are compound-database tokens standing in for things a cook would name differently. We publish tokens as-is.

Reproduce this

Deterministic, offline, no model calls. Every number on this page is read from the script’s results file — the page cannot state a number the script didn’t produce.

python analysis/instrument_room/scripts/piece6_flavor_provinces.py
python analysis/instrument_room/scripts/piece6_figures.py

Input: data/recipe_corpus/aroma/cooccurrence_v2.npz (read-only). The graph inherits Piece 4's PPMI estimator and floors by importing them. Community detection: networkx louvain_communities, resolution 1.0, seeds 20260726-20260730. Every number on this page is in analysis/instrument_room/results/piece6_flavor_provinces.json.