A well-stocked pantry is not a sufficient one
Two questions a cook can actually ask a recipe corpus. First: if I stock the most common ingredients, how much of the cookbook opens up? Second: when a recipe calls for cumin, how much cumin is that, really?
The answers are on opposite ends of satisfying. The first is a wall. The second is the most useful table we have made.
The pantry paradox
Own the 50 most common ingredients and you hold 51% of every ingredient line in the corpus — and can cook 1 of 2,345 recipes start to finish. Stretch to 200 and you hold 77% of the lines and 8.8% of the recipes.
| pantry size | of all ingredient lines | recipes you can finish | within 3 items |
|---|---|---|---|
| 20 | 34% | 0 (0.0%) | 7% |
| 50 | 51% | 1 (0.0%) | 17% |
| 100 | 65% | 17 (0.7%) | 45% |
| 200 | 77% | 207 (8.8%) | 72% |
| 300 | 83% | 436 (18.6%) | 83% |
| 500 | 90% | 889 (37.9%) | 93% |
To complete half the corpus you would need 637 ingredients in the cupboard. The gap between “I recognise everything in this recipe” and “I can cook it tonight” is the entire experience of owning a cookbook, and it is a long way from closing. The column worth watching is the last one: being within three items is where a shopping trip turns into dinner.
How much is a lot?
Every recipe in the corpus that uses an ingredient, expressed as grams per kilogram of finished dish, so a big pot and a small one are comparable. 28 ingredients clear the 15-recipe floor.
The column to read is the spread — the p90 divided by the p10. Black pepper and garlic sit near 4×: there is a right amount and cooks broadly agree on it. Sugar is 50× and vegetable oil 30×, because those are not doses — they are roles. A seasoning in one dish and the medium in another.
| ingredient | p10 | median | p90 | spread | n |
|---|---|---|---|---|---|
| dried leaf oregano | 0.26 | 0.58 | 2.26 | 8.6× | 166 |
| thyme | 0.32 | 0.62 | 1.70 | 5.4× | 132 |
| rosemary | 0.40 | 1.03 | 3.80 | 9.4× | 35 |
| red chili flakes | 0.47 | 1.05 | 2.43 | 5.2× | 149 |
| cayenne pepper | 0.44 | 1.06 | 11.85 | 27.0× | 183 |
| black pepper | 0.58 | 1.16 | 2.32 | 4.0× | 703 |
| cinnamon | 0.60 | 1.48 | 4.98 | 8.4× | 193 |
| turmeric | 1.13 | 1.97 | 3.81 | 3.4× | 132 |
| smoked paprika | 1.38 | 2.44 | 10.61 | 7.7× | 162 |
| salt | 1.32 | 2.59 | 6.12 | 4.6× | 1271 |
| cumin | 1.21 | 2.80 | 6.42 | 5.3× | 351 |
| sesame oil | 1.39 | 3.98 | 20.11 | 14.5× | 49 |
| garlic | 2.51 | 4.98 | 10.16 | 4.0× | 1373 |
| chili powder | 1.66 | 5.58 | 13.14 | 7.9× | 76 |
| dijon mustard | 1.70 | 7.41 | 21.90 | 12.9× | 51 |
| ginger | 3.23 | 7.80 | 13.94 | 4.3× | 312 |
| apple cider vinegar | 3.76 | 9.86 | 47.36 | 12.6× | 57 |
| tomato paste | 5.36 | 10.26 | 24.31 | 4.5× | 168 |
| rice wine vinegar | 4.09 | 10.64 | 24.53 | 6.0× | 122 |
| fish sauce | 7.63 | 16.93 | 32.12 | 4.2× | 133 |
| soy sauce | 6.21 | 17.27 | 42.69 | 6.9× | 202 |
| olive oil | 7.62 | 18.47 | 52.59 | 6.9× | 562 |
| lemon juice | 6.48 | 19.27 | 57.36 | 8.9× | 246 |
| vegetable oil | 7.37 | 19.42 | 223.04 | 30.3× | 511 |
| unsalted butter | 8.69 | 20.78 | 60.25 | 6.9× | 294 |
| sugar | 2.46 | 24.73 | 122.14 | 49.6× | 312 |
| butter | 12.33 | 28.94 | 89.52 | 7.3× | 217 |
| honey | 7.12 | 29.37 | 96.57 | 13.6× | 86 |
Honest limitations
- Ingredient names are matched exactly, so variants count separately — “butter” and “unsalted butter” are two rows, and the pantry curve treats them as two things to own. That makes the pantry numbers a touch pessimistic and the dosage rows cleaner; both effects are real and neither is hidden.
- Grams come from the engine’s unit conversion. A recipe saying “1 onion” becomes 110 g by a standard piece weight, not by weighing. For dosage medians across hundreds of recipes this is fine; for any single recipe it is an estimate.
- The dosage denominator is total ingredient mass, not the weight of what reaches the plate — water that boils off is still in it. Treat the numbers as comparable to each other rather than as absolute concentrations.
- ~40% of the corpus is project-authored, which may use more regular quantities than recipes in the wild.
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/piece9_pantry_and_dosage.py python analysis/instrument_room/scripts/piece9_figures.py
Input: prototype/web/src/data/sample_corpus_v17.json (read-only). Every number on this page is in analysis/instrument_room/results/piece9_pantry_and_dosage.json.