Which ingredients decide the dish
Put a flour tortilla on the counter and the question of what you are making is mostly settled. Put down an onion and you have said nothing at all. That difference is real and it is measurable — and it turns out to be one of the more useful things an ingredient can tell you.
We labelled every recipe in the corpus — 3,018 of them — with the form of dish it is: 22 forms, from soup and stir-fry to taco/wrap and an honest main (other). Then, for each of the 400 most common ingredients, we asked how much knowing it is in the pot narrows down what the pot is. The answer is the entropy of that distribution, and it splits the pantry cleanly: spaghetti scores 0.81 on a 0–1 scale where 1 means fully decisive; water scores 0.09. The median ingredient sits at 0.30.
In one paragraph
Over 3,018 recipes labelled with 22 dish forms, the entropy of P(dish form | ingredient) separates the pantry into ingredients that decide the dish and ingredients that decide nothing: spaghetti scores 0.81 on a 0–1 commitment scale (1 = fully decisive) against water at 0.09, with a median of 0.30 across the 212 ingredients appearing in at least 25 recipes. How strongly an ingredient tastes is essentially unrelated to how much it decides — Spearman ρ = -0.02 between measured flavor carry and commitment, across 209 ingredients. A Naive Bayes over ingredient presence names the form at 45.9% top-1 / 73.1% top-3 (5-fold, n=3,018, 22 classes, majority baseline 13.5%), and its errors concentrate in pairs of forms that share a shopping list and differ only in what the cook does: soup and stew trade places 16.6% of the time.
Brittle and flexible are not opinions
The top of the ladder holds no surprises, and that is the point — the statistic recovers what a cook already knows without being told any of it. Nobody had to write down that a tortilla means tacos. What the measurement adds is an ordering for the enormous middle, where intuition goes vague. Half the pantry scores below 0.30: knowing it is present leaves most of the question open.
Notice what the deciding ingredients have in common. They are almost all structural — the thing the dish is built on or served in. The ingredients that decide nothing are the ones a recipe can always reach for: water, salt, garlic, oil, an egg. Those appear in hundreds or thousands of recipes precisely because they belong everywhere.
| decides the dish | lock | in n recipes | its most over-represented form |
|---|---|---|---|
| spaghetti | 0.81 | 36 | pasta — 86% of its dishes, 16.8× the base rate |
| flour tortilla | 0.79 | 35 | taco/wrap — 86% of its dishes, 24.2× the base rate |
| vanilla extract | 0.75 | 81 | dessert — 83% of its dishes, 11.6× the base rate |
| powdered sugar | 0.74 | 47 | dessert — 77% of its dishes, 10.7× the base rate |
| rice noodle | 0.68 | 33 | noodles — 55% of its dishes, 22.6× the base rate |
| condensed milk | 0.67 | 29 | dessert — 66% of its dishes, 9.2× the base rate |
| ricotta | 0.66 | 26 | pasta — 73% of its dishes, 14.2× the base rate |
| corn tortilla | 0.64 | 61 | taco/wrap — 72% of its dishes, 20.3× the base rate |
| orange zest | 0.62 | 27 | dessert — 67% of its dishes, 9.3× the base rate |
| salmon | 0.62 | 55 | hearty main — 67% of its dishes, 5.0× the base rate |
| onion powder | 0.62 | 35 | hearty main — 69% of its dishes, 5.1× the base rate |
| long grain basmati rice | 0.62 | 32 | rice dish — 59% of its dishes, 10.5× the base rate |
| decides nothing | lock | in n recipes | its most over-represented form |
|---|---|---|---|
| water | 0.09 | 777 | soup — 12% of its dishes, 1.2× the base rate |
| salt | 0.09 | 1879 | hearty main — 17% of its dishes, 1.2× the base rate |
| egg | 0.10 | 587 | main (other) — 9% of its dishes, 3.1× the base rate |
| lime juice | 0.13 | 181 | taco/wrap — 12% of its dishes, 3.3× the base rate |
| pork | 0.13 | 89 | soup — 19% of its dishes, 1.9× the base rate |
| lard | 0.15 | 59 | snack — 12% of its dishes, 3.9× the base rate |
| oil | 0.15 | 192 | curry — 10% of its dishes, 2.6× the base rate |
| garlic | 0.16 | 1679 | hearty main — 19% of its dishes, 1.4× the base rate |
| flour | 0.16 | 438 | dessert — 16% of its dishes, 2.2× the base rate |
| shrimp | 0.16 | 169 | noodles — 11% of its dishes, 4.4× the base rate |
| vegetable oil | 0.16 | 539 | stir-fry — 13% of its dishes, 3.7× the base rate |
| sunflower oil | 0.16 | 69 | casserole/bake — 9% of its dishes, 3.5× the base rate |
Loud is not the same as decisive
Palate already measures how strongly each ingredient speaks: potency times the magnitude of its 18-note flavor profile, the same arithmetic the engine uses to build a dish’s X-ray. It would be reasonable to assume the loud ingredients are also the deciding ones. They are not. Across the 209 ingredients where both numbers exist, the rank correlation between flavor carry and structure lock is ρ = -0.02 — no relationship at all.
Structure and cuisine are more related — ρ = 0.47 across 212 ingredients — but still far from the same measurement. Fish sauce will tell you which half of the world you are cooking in and nothing whatsoever about what you are cooking.
| loud, decides nothing | flavor carry (percentile) | structure lock |
|---|---|---|
| lime juice | 98% | 0.13 |
| lemon juice | 97% | 0.22 |
| soy sauce | 96% | 0.22 |
| fish sauce | 100% | 0.23 |
| tomato sauce | 89% | 0.25 |
| sesame oil | 83% | 0.27 |
| quiet, decides the dish | flavor carry (percentile) | structure lock |
|---|---|---|
| spaghetti | 2% | 0.81 |
| flour tortilla | 11% | 0.79 |
| rice noodle | 2% | 0.68 |
| ricotta | 30% | 0.66 |
| corn tortilla | 20% | 0.64 |
| onion powder | 20% | 0.62 |
Reading the whole plate
Taking all of a recipe’s ingredients at once, a Naive Bayes gets the form right 45.9% of the time and has it in its top three 73.1% of the time — 22 classes, held out, n=3,018, against a majority baseline of 13.5%. That is a real signal from an arithmetic you could do on paper.
It is also weaker than the same model reading the corpus’s own ten coarse categories — 63.4% top-1 / 87.8% top-3, majority baseline 58.9% — which is the honest price of asking a harder question. Ten categories are mostly “is this dinner or is it pudding”. Twenty-two forms ask what kind of dinner.
The easy forms are the ones with a structural ingredient you can buy: dessert, taco/wrap, pasta, curry, stir-fry. The hard ones are the ones defined by serving context or by cooking method — side, snack, appetizer, main (other) — where no purchase betrays the answer.
What a shopping list cannot see
The errors are not scattered. They collect into a handful of specific pairs, and the pairs are legible: soup and stew trade places 16.6% of the time — 104 of 625 recipes. hearty main and stir-fry swap 10.1% of the time. Bread and dessert. Appetizer and snack.
Every one of those pairs is two dishes with the same shopping list. A soup and a stew are the same chicken, the same carrot, the same stock — what separates them is how much liquid stayed in the pot and how long it stayed on the heat. A roast and a stir-fry are the same chicken and the same pepper; what separates them is whether the pan was hot and the pieces were small. Nothing in an ingredient list records what the cook did. A model that reads only what you bought is blind to it by construction — and technique is precisely what Palate’s recipe stategraphs carry and this model does not read. That is not a flaw to apologise for; it is a measurement of where the next model has to look.
| form | held-out recall | n |
|---|---|---|
| dessert | 94% | 216 |
| taco/wrap | 79% | 107 |
| pasta | 78% | 155 |
| stir-fry | 76% | 106 |
| curry | 76% | 122 |
| noodles | 67% | 73 |
| bread | 54% | 83 |
| drink | 53% | 80 |
| stew | 46% | 327 |
| hearty main | 45% | 407 |
| salad | 38% | 129 |
| sandwich | 34% | 47 |
| soup | 32% | 298 |
| rice dish | 29% | 171 |
| casserole/bake | 25% | 75 |
| appetizer | 24% | 169 |
| snack | 20% | 93 |
| side | 15% | 169 |
| main (other) | 14% | 91 |
| sauce/condiment | 12% | 65 |
| dumpling | 0% | 29 |
| pizza | 0% | 6 |
How few ingredients is enough?
Guessing from a finished recipe is not how cooking works. A cook has two or three things on the counter and has not decided yet. Scoring held-out recipes on only their first few listed ingredients shows how quickly the picture resolves — and it resolves faster than the full-recipe number suggests you should expect. With 3 ingredients down, the right form is the model’s first guess 35% of the time and in its top three 60% of the time.
This measurement is also why the shipped model counts only what is present rather than also counting what is absent. On complete recipes the two versions are a coin toss (46.1% against 45.9%), but a count-the-absences model reads the 397 unused ingredients on a three-item board as genuinely absent rather than not-yet-added, and its accuracy at that point collapses to 20%. Both curves are published.
| ingredients on the board | top-1 | top-3 | n |
|---|---|---|---|
| 1 | 24% | 47% | 3,018 |
| 2 | 30% | 55% | 3,018 |
| 3 | 35% | 60% | 3,018 |
| 5 | 40% | 65% | 3,018 |
| 8 | 43% | 70% | 3,018 |
Honest limitations
- The dish-form labels were written by a language model, once, and frozen. Every non-main recipe keeps the corpus’s own category; the 1,778 main courses were read by Claude subagents against a fixed 15-form rubric with an explicit precedence order, and their verbatim output is committed alongside the sidecar. It is a careful reading, not a ground truth. A human taxonomist would disagree at the boundaries — is a fricassee a stew or a plated chicken? is a wonton soup a soup or a dumpling? — and those boundaries are exactly where the model’s errors sit. A deterministic title-mining cross-check reaches 990 of the mains and agrees with the labels 84% of the time; every class of disagreement is published with the sidecar.
- Commitment measures convention, not necessity. A high structure lock says recipe authors mostly use this ingredient in one kind of dish. It does not say the ingredient belongs only there, and it is a fact about this corpus — which is Western-skewed — rather than about cooking. Rice noodles score 0.68 here; against a corpus written in Hanoi they would score far lower, because there would be far more kinds of dish to put them in.
- Entropy is normalised, so the number depends on the label set. Every lock is 1 − H/log(22). Split curry into six regional forms and every curry ingredient would score lower without a single recipe changing. Comparisons within this page are sound; comparisons across taxonomies are not.
- Two forms are too small to learn. Pizza has 6 held-out examples and dumpling has 29; both score zero recall. With classes that small, a model that never predicts them loses almost nothing, so it never predicts them. They are printed rather than quietly dropped from the average.
- Flavor carry does not resolve for every ingredient. 394 of 400 vocabulary ingredients (99%) link to a rated registry entry; the rest carry a null rather than an estimate and are excluded from the correlation.
- The model is deliberately the simplest thing that works. Naive Bayes assumes ingredients are independent given the dish, which is plainly false — that is why it is here. It is the floor a better model has to clear, published with its number so the comparison is possible. It reads only presence: never quantity, never order, never technique.
- This piece reads a different corpus cut than its neighbours. 3,018 recipes (v18), where the rest of the Instrument Room publishes the 2,345-recipe v17. The labels are keyed to v18 recipe ids; mixing the two would silently drop 673 recipes.
The data
Every number on this page is a deterministic measurement over the same recipe corpus — nothing here was estimated or embellished. Want to check the work, or run your own analysis? A 250-dish sample of the corpus — ingredients, 18-note flavor profiles, timing, macros — is free to download.
Get the datasetCite this
Palate, “Which ingredients decide the dish,” https://palate.kitchen/instrument/which-ingredients-decide-the-dish — include the date you accessed it.
The measurements on this page are free to quote with attribution to Palate. The downloadable 250-dish sample dataset on /data is licensed CC BY-NC 4.0.