Skip to content

Build 12 indicative aroma heads up to confident - #270

Merged
rvnminers-A-and-N merged 1 commit into
mainfrom
data/build-up-indicative-heads
Jul 30, 2026
Merged

Build 12 indicative aroma heads up to confident#270
rvnminers-A-and-N merged 1 commit into
mainfrom
data/build-up-indicative-heads

Conversation

@rvnminers-A-and-N

Copy link
Copy Markdown
Collaborator

Progress on #262 (keeping it open — 60 heads still to go).

heads confident-capable indicative
before 167 94 73
after 166 106 60

Adds structurally diverse public-domain positives for 40 descriptors, covering citrus, almond, bready, earthy, cumin, oregano, thyme, dill, bergamot, violet, soapy, powdery, the berry/tropical set, the spice set, and the fatty/alcoholic ones.

Two findings worth more than the numbers

Probability calibration does not work here — tested first, because it would have been free. CalibratedClassifierCV (isotonic and Platt) lifted fruity 0.40 → 0.62 precision (it has 101 positives) while making fishy 0.46 → 0.33, gardenia 0.33 → 0.21 and marine 0.21 → 0.14 worse. cardamom's apparent 1.00 was one true positive on ten examples. Isotonic regression needs data too, so it can't rescue heads whose problem is missing data.

Adding common molecules actively harms a narrow head. The first pass gave blackberry ethyl butyrate, ethyl hexanoate, linalool and benzaldehyde — present in essentially every fruit. AUROC fell 0.730 → 0.626 and the head dropped off the roster. Stripping those and keeping only distinctive markers (furaneol, methyl anthranilate, 2-heptanone) recovered it to 0.757. Same edit applied to blueberry, guava, passionfruit, melon, mango, cassis.

That refines the #247/#256 method: character-impact means distinctive, not merely present. A molecule occurring in every member of a category teaches the classifier nothing and dilutes what it had.

Heads saved, and one lost honestly

fig and magnolia had slipped under the 0.70 bar as the corpus shifted. Given their documented character chemistry — sesquiterpenes and the creamy lactone for fig, the ocimene/anthranilate set for magnolia — both returned (0.783 and 0.800), with fig now confident-capable at 0.60 precision.

blackberry is the one casualty at 0.696 against a 0.70 bar, after two attempts. Lowering the bar to keep it would be exactly the self-flattery this project has spent five PRs removing, so the bar stays and the head goes. Tracked on #262 for the GNN work.

Verification

  • ruff clean; suite 43 passed
  • corpus: supplement 2,159 associations / 165 descriptors (was 1,938 / 160); aroma_train 2,417 molecules
  • downstream rebuilt: master_enrichment, profile_index (8,841 × 177), flavor_map
  • verified against the running app: 166 aroma heads live, 106 confident-capable, substitutes sane (vanillin → ethylvanillin 0.94, isovanillin 0.93), mouthfeel present on cards

Adds structurally diverse, well-documented public-domain positives for 40 descriptors that were
shipping as INDICATIVE — right less than half the time when they fire, because 11-30 positives
cannot draw a boundary against 2,400 negatives.

  before   167 heads   94 confident-capable   73 indicative
  after    166 heads  106 confident-capable   60 indicative

Two things were learned the hard way and are worth more than the numbers.

PROBABILITY CALIBRATION DOES NOT WORK HERE, and it was tested first because it would have been
free. CalibratedClassifierCV (isotonic and Platt) lifted `fruity` from 0.40 to 0.62 precision — it
has 101 positives — while making `fishy` 0.46->0.33, `gardenia` 0.33->0.21 and `marine` 0.21->0.14
WORSE, and `cardamom`'s apparent 1.00 was a single true positive on ten examples. Isotonic
regression needs data too, so it cannot rescue heads whose problem IS a lack of data; it only adds
variance where variance is already the issue. Recorded on #262 so nobody spends a day on it.

ADDING COMMON MOLECULES ACTIVELY HARMS A NARROW HEAD. The first pass gave `blackberry` ethyl
butyrate, ethyl hexanoate, linalool and benzaldehyde — molecules present in essentially every
fruit. Its AUROC fell 0.730 -> 0.626 and it dropped off the roster entirely. Stripping those and
keeping only the distinctive markers (furaneol, methyl anthranilate, 2-heptanone) recovered it to
0.757. The same edit was applied across blueberry, guava, passionfruit, melon, mango and cassis.

So "more positives" is too crude a rule, and this refines the method from #247 and #256:
character-impact means DISTINCTIVE, not merely present. A molecule that occurs in every member of
a category teaches the classifier nothing and dilutes what it already had.

`fig` and `magnolia` had fallen under the 0.70 bar as the corpus shifted around them; rather than
lose two heads they were given their documented character chemistry — sesquiterpenes and the
creamy lactone for fig, the ocimene/anthranilate floral set for magnolia — and both came back
(0.783 and 0.800), with fig now confident-capable at 0.60 precision.

`blackberry` is the one casualty, at 0.696 against a 0.70 bar after two attempts. Lowering the bar
to keep it would be exactly the self-flattery this project has been removing, so the bar stays and
the head goes. It is tracked on #262 for the GNN work, where a better representation is the
honest next lever.

Corpus: aroma_supplement 2,159 associations across 165 descriptors (was 1,938 / 160);
aroma_train 2,417 molecules. Downstream rebuilt: master_enrichment, profile_index
(8,841 x 177) and flavor_map.

Signed-off-by: Austin L. <86896075+rvnminers-A-and-N@users.noreply.github.com>
@rvnminers-A-and-N rvnminers-A-and-N added area:aroma OpenPOM aroma model + sidecar area:data Datasets, sources, column mapping area:training Python dataset build + model training labels Jul 30, 2026
@rvnminers-A-and-N
rvnminers-A-and-N merged commit d90ce84 into main Jul 30, 2026
4 checks passed
@rvnminers-A-and-N
rvnminers-A-and-N deleted the data/build-up-indicative-heads branch July 30, 2026 10:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:aroma OpenPOM aroma model + sidecar area:data Datasets, sources, column mapping area:training Python dataset build + model training

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant