Skip to content

Publish each head's calibration in the catalog and on its bar - #263

Merged
rvnminers-A-and-N merged 1 commit into
mainfrom
feat/publish-head-calibration
Jul 29, 2026
Merged

rvnminers-A-and-N merged 1 commit into
mainfrom
feat/publish-head-calibration

Conversation

@rvnminers-A-and-N

Copy link
Copy Markdown
Collaborator

#261 gave every head its own threshold and a measured precision, but only a molecule read exposed them. The head catalog β€” the thing you consult to ask how good is this head? β€” still showed AUROC alone, which is exactly the number that hid the problem. ginger reads AUROC 0.979 there while being right 10% of the time when it fires.

/api/heads now carries threshold, precision, recall, n_pos and confident_capable per head, for aroma and mouthfeel alike. A head that fires at 0.16 and is right 6% of the time says so on its own row.

Also a real bug: headBar still hard-coded 0.5 to decide whether a bar was lit, which silently disagreed with the calibrated mouthfeel heads β€” cooling fires at 0.64 and astringent at 0.71, so a 0.55 score was being drawn as firing when the head says it isn't. Bars now read the head's own threshold, show where it sits and how precise it is there, and hatch the fill for indicative heads.

Tox heads keep the flat 0.5 β€” not calibrated, and with hundreds of positives each they were never shy. Taste heads publish an explicit 0.5 rather than null, so consumers never have to guess whether the field is missing or genuinely flat.

Verified: e2e suite 13/13 in isolation; full suite 41/43 with the two known load-flaky compare tests, which pass on their own.

#261 gave every head its own decision threshold and a measured precision, but only a molecule
read exposed them. The head catalog β€” the thing you consult to ask "how good is this head?" β€”
still showed AUROC alone, which is precisely the number that hid the problem: AUROC is computed
on ranking and is blind to class imbalance, so `ginger` reads 0.979 there while being right 10%
of the time when it fires.

/api/heads now carries threshold, precision, recall, n_pos and confident_capable per head, for
aroma and mouthfeel alike. A head that fires at 0.16 and is right 6% of the time says so on its
own row, not only buried inside one molecule's read.

Also fixes headBar, which still hard-coded 0.5 to decide whether a bar was lit. That silently
disagreed with the calibrated mouthfeel heads: `cooling` fires at 0.64 and `astringent` at 0.71,
so a score of 0.55 was being drawn as firing when the head says it is not. Bars now read the
head's own threshold, show where that bar sits and how precise it is there, and hatch the fill
for indicative heads. Tox heads keep the flat 0.5 β€” they are not calibrated and, with hundreds
of positives each, were never shy.

Taste heads are published with an explicit threshold of 0.5 rather than a null, so a consumer
never has to guess whether the field is missing or genuinely flat.

Signed-off-by: Austin L. <86896075+rvnminers-A-and-N@users.noreply.github.com>
@rvnminers-A-and-N rvnminers-A-and-N added area:api ASP.NET Core app, endpoints, auth area:ui React workbench frontend bug Something isn't working labels Jul 29, 2026
@rvnminers-A-and-N
rvnminers-A-and-N merged commit adb0ddd into main Jul 29, 2026
4 checks passed
@rvnminers-A-and-N
rvnminers-A-and-N deleted the feat/publish-head-calibration branch July 29, 2026 16:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:api ASP.NET Core app, endpoints, auth area:ui React workbench frontend bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant