|
| 1 | +# Aroma-head audit — where more data buys more heads |
| 2 | + |
| 3 | +An honest look at the aroma model: which odor descriptors we can predict from structure today, |
| 4 | +which are *just* out of reach, and exactly what data would unlock more. Regenerate the numbers |
| 5 | +with `python training/train_aroma.py` (deterministic, `random_state=42`). |
| 6 | + |
| 7 | +**Bar:** an odor descriptor ships as a head only if it has **≥ 10 positive examples** and clears |
| 8 | +**CV-AUROC ≥ 0.70** (5-fold). Of **57** candidate descriptors in the current public-domain corpus |
| 9 | +(981 labelled molecules): **24 ship**, **2 were evaluated and dropped**, **31 were skipped for too |
| 10 | +few positives**. |
| 11 | + |
| 12 | +## 1. The 24 shipping heads (for reference) |
| 13 | + |
| 14 | +AUROC 0.711 → 0.975. The weakest are small-sample (`grassy` 0.711 / n=10, `woody` 0.759 / n=12, |
| 15 | +`green` 0.773 / n=13) — they ship, but their AUROC estimates are high-variance at n≈10–13, so more |
| 16 | +data would **robustify** them, not just add new ones. |
| 17 | + |
| 18 | +## 2. Evaluated but dropped — the true near-misses |
| 19 | + |
| 20 | +| descriptor | n_pos | CV-AUROC | verdict | |
| 21 | +|---|---|---|---| |
| 22 | +| **spicy** | 16 | 0.674 | **Chase it.** Just under the bar with modest data — a handful more labelled "spicy" molecules will likely push it over 0.70. Best quick win. | |
| 23 | +| **sweet** (odor) | 185 | 0.666 | **Not a data problem.** Plenty of examples, still not learnable from fingerprints — "smells sweet" is structurally diffuse. Needs a richer representation (a GNN, see the model task) or stays documented-only. | |
| 24 | + |
| 25 | +**This settles the "sweet" question.** *Taste*-sweet is a trained head (from ChemTastesDB, learnable); |
| 26 | +*odor*-sweet is **not** a head — it was tried (185 positives) and only reached 0.666. So the two "sweet" |
| 27 | +signals are genuinely different, and the app already reflects that: the card shows `sweet` only under |
| 28 | +**TASTE MODEL**; there is no predicted `sweet` aroma. The clarity fix is purely labelling — never imply a |
| 29 | +*predicted* sweet aroma; where "sweet" appears as a note it is documented-only. |
| 30 | + |
| 31 | +## 3. Skipped for too few positives — the real opportunity (n_pos < 10) |
| 32 | + |
| 33 | +These have no head *at all* because they can't even be evaluated at the 10-positive bar. This is where |
| 34 | +data collection has the highest leverage. |
| 35 | + |
| 36 | +- **Near the threshold (n_pos 5–9)** — a few more examples each and they get evaluated, several likely |
| 37 | + clearing 0.70: |
| 38 | + `winey(9) · buttery(8) · onion(8) · herbal(7) · balsamic(7) · honey(7) · fresh(7) · musky(7) · |
| 39 | + vegetable(7) · caramel(6) · coconut(6) · anise(6) · burnt(6) · tarry(6) · apple(5)` |
| 40 | +- **Very sparse (n_pos 1–4)** — need substantial data: |
| 41 | + `vanilla(4) · banana(4) · meaty(4) · nutty(3) · clove(3) · cheesy(3) · waxy(3) · soapy(3) · |
| 42 | + creamy(2) · fecal(2) · smoky(1) · cherry(1) · cinnamon(1) · coffee(1) · cocoa(1)` |
| 43 | + |
| 44 | +**This explains the "coconut — no clean carrier, data-gated" message**: `coconut` has only **6** labelled |
| 45 | +positives, below the bar, so no head exists to predict or suggest it. The classic carrier |
| 46 | +(γ-nonalactone) simply isn't labelled "coconut" enough times in the clean public set. |
| 47 | + |
| 48 | +## 4. The plan (owner: Aaron / `area:training`) |
| 49 | + |
| 50 | +1. **Quick win:** collect a modest set of labelled **`spicy`** molecules → re-train → likely a 25th head. |
| 51 | +2. **Highest leverage:** push the **n_pos 5–9** descriptors over 10 (especially `caramel, coconut, honey, |
| 52 | + buttery, herbal, balsamic, vanilla`) — small, targeted labelling unlocks a batch of new heads and, |
| 53 | + downstream, real gap-analysis carriers for those notes (fixes the "data-gated" suggestions). |
| 54 | +3. **Not a data fix:** `sweet`-odor (and other diffuse percepts) — revisit with a **GNN / learned |
| 55 | + representation**, not more fingerprint data. |
| 56 | +4. **Robustify:** add examples for the fragile shipping heads (`grassy, woody, green, rose, rancid, pine`). |
| 57 | + |
| 58 | +Only truly-open (CC-BY / public-domain) odor data or the customer's own labels — never the restricted |
| 59 | +GS-LF / Leffingwell sets in the commercial edition (see `docs/DATA-SOURCES.md`). |
0 commit comments