What actually goes with X: a pairing reference from 63,696 recipes
If you want to know what goes with lamb, you can ask a book assembled from chef interviews — expert, useful, and unfalsifiable. Or you can count. We counted: 63,696 recipes, 974 ingredients, and for each of 150 common ingredients, the eight partners that co-occur with it most disproportionately. Every number below has a definition, a script, and an n.
The statistic is pointwise mutual information: how many times more often two ingredients share a recipe than they would if cooks combined things at random — PPMI = max(0, ln(count(A,B)·N / (count(A)·count(B)))), all counts over the same N = 63,696 recipes. We also print lift (ePMI), which reads directly as “×chance,” and n, the number of recipes containing the pair. Nothing is published below a floor of n ≥ 20 recipes per pair and 100 per ingredient — 9,333 pairs among 268 ingredients qualify.
What this is a record of
Co-occurrence is a record of what cooks actually do — not proof of what tastes good. A high PPMI means many recipe authors made the same choice; that conflates deliciousness with popularity, tradition, and what was cheap in 1955 (cream of chicken soup + margarine sits in the top 20, n=25). Read the reference as ethnography, not judgment.
And a word about “scientific” food pairing. The popular theory that ingredients pair well when they share aroma compounds (Ahn et al., 2011) is weaker than its fame: in Ahn’s own data the effect’s z-score drops below 2 after removing 13 frequent ingredients appearing in 74.4% of recipes; two controlled sensory studies (Kort et al. 2010, n=50; Eschevins et al. 2018, n=53) found no effect in human preference; and the effect inverts across Indian regional cuisines (Jain, Rakhi & Bagler, PLOS ONE 2015 — Maharashtrian cuisine at Z = −52.0). Palate ships an aroma-compound channel itself, so we have an interest in the theory being true — which is exactly why we lead with the counting instead and treat aroma overlap as a contested, minor channel.
One-sided devotions
PPMI is symmetric, but rankings are not: an ingredient’s favorite partner can barely notice it back. Canola oil’s best partner is garlic; garlic ranks canola oil 105th. Yellow onion’s best partner is carrot — mirepoix, seen from the onion’s side.
| ingredient | its #1 partner | PPMI | n | rank in the partner's own list |
|---|---|---|---|---|
| canola oil | garlic | 0.42 | 54 | #105 |
| whiskey | cocoa | 0.58 | 20 | #29 |
| dijon mustard | olive oil | 0.98 | 68 | #25 |
| chicken stock | thyme | 1.16 | 22 | #22 |
| yellow onion | carrot | 1.19 | 25 | #19 |
| bread crumb | parmesan cheese | 1.02 | 29 | #18 |
| brussel sprout | pepper | 0.59 | 29 | #18 |
| lean beef | onion | 0.77 | 72 | #16 |
The reference: 150 ingredients, top 8 partners each
Ingredients are alphabetical; jump by letter below, or use your browser’s find-in-page. Each partner is shown as name · PPMI (n=pair recipes). df = recipes containing the ingredient at all. Staples (salt, sugar, flour, water), generic category tokens, and near-duplicate name pairs are excluded — the reasons and measurements are in the results file and the limitations below.
Honest limitations
- The corpus is Western-skewed and one source dominates. 63,696 recipes = 5,296 parsed + 1,081 hand-curated + 57,319 from the recipe dataset published with Ahn et al.’s 2011 paper. That last slice is 90% of the data and is largely North American and European. The absence of a pairing here proves nothing except who wrote the recipes down.
- Salt, sugar, flour and water are excluded on a measurement. Whether a source transcribes these staples is a recording convention, not a pairing choice: salt appears in 75.9% of Palate’s consistently-transcribed live corpus but only 4.8% of this merged corpus — 15.8× under-recorded (sugar 24.6×, flour 15.5×, water 9.5×). An under-recorded count mechanically inflates every PPMI the token touches.
- The vocabulary carries its sources’ quirks. “Wheat” mostly means wheat flour; “lovage” often stands where a cook would say celery leaf; “celery oil” is a compound-database token, not a thing in your pantry. We publish the tokens as-is rather than silently renaming them.
- PPMI favors the rare end even above the floor. A niche pair at n=22 can outrank garlic + oregano (n=2,627) because common ingredients’ huge counts divide the score down. It measures surprise, not volume — read PPMI and n together.
- Near-duplicate names are excluded wherever one name contains the other (whiskey / bourbon whiskey, bay / bay leaf). This guard is conservative: it also costs a few real compounds (peanut / peanut butter).
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/piece4_pairing_reference.py python analysis/instrument_room/scripts/piece4_figures.py
Input: data/recipe_corpus/aroma/cooccurrence_v2.npz (read-only; raw pair counts, per-ingredient recipe counts, N). Every number on this page is in analysis/instrument_room/results/piece4_pairing_reference.json.