Character grouping diagnostic v8
Primary snapshot: v8_2_clause_guard_dominance (data/odour_character_labels_v8_2_clause_guard_dominance.jsonl).
Verdict
Character verdict: discriminative-weak. Under the corrected 26-class unthresholded prevalence metric, mean cosine distance is 0.080 and mean JS divergence is 0.044 bits. This supports weak but genuine distributional separation, suitable only as a secondary axis pending human decision.
Artifact. The perfect superclass Jaccard is mechanical: 1.000 = all genres have identical thresholded superclass active sets, NOT improved discrimination. After collapse, every genre profile contains every available superclass, so set-presence Jaccard has no room to differ. Distributional class-count metrics are not perfect (26-class all-labelled mean cosine 0.905; 26-class >=3-label mean cosine 0.858), so the prior character-is-non-discriminative verdict is retracted.
| Axis |
classes |
mean pairwise Jaccard |
delta vs 26 |
| 26-class |
26 |
0.793 |
baseline |
| six_superclass |
5 |
1.000 |
+0.207 |
| eight_superclass |
8 |
1.000 |
+0.207 |
Superclass Sets Compared
six_superclass
amber_oriental: animalic_spicy_smoky, balsamic_woody_mossy, edible_gourmand, floral, fresh_citrus_green
citrus_cologne: animalic_spicy_smoky, balsamic_woody_mossy, edible_gourmand, floral, fresh_citrus_green
floral_woody: animalic_spicy_smoky, balsamic_woody_mossy, edible_gourmand, floral, fresh_citrus_green
fougere: animalic_spicy_smoky, balsamic_woody_mossy, edible_gourmand, floral, fresh_citrus_green
wildcard: animalic_spicy_smoky, balsamic_woody_mossy, edible_gourmand, floral, fresh_citrus_green
eight_superclass
amber_oriental: animalic_musk_smoke, aromatic_cool_herbal, balsamic_woody_mossy, floral, fresh_citrus_green_fruit, gourmand_sweet, savory_phenolic, spice
citrus_cologne: animalic_musk_smoke, aromatic_cool_herbal, balsamic_woody_mossy, floral, fresh_citrus_green_fruit, gourmand_sweet, savory_phenolic, spice
floral_woody: animalic_musk_smoke, aromatic_cool_herbal, balsamic_woody_mossy, floral, fresh_citrus_green_fruit, gourmand_sweet, savory_phenolic, spice
fougere: animalic_musk_smoke, aromatic_cool_herbal, balsamic_woody_mossy, floral, fresh_citrus_green_fruit, gourmand_sweet, savory_phenolic, spice
wildcard: animalic_musk_smoke, aromatic_cool_herbal, balsamic_woody_mossy, floral, fresh_citrus_green_fruit, gourmand_sweet, savory_phenolic, spice
Label Density
| Axis |
avg distinct classes / labelled formula |
avg labelled materials / labelled formula |
| 26-class |
2.31 |
2.05 |
| six_superclass |
1.78 |
2.05 |
| eight_superclass |
1.94 |
2.05 |
Corrected Distributional Metrics
| Axis |
mean cosine, all labelled |
mean cosine, >=3 classes |
material-level mean cosine |
| 26-class |
0.905 |
0.858 |
0.999 |
| six_superclass |
0.942 |
0.934 |
1.000 |
| eight_superclass |
0.926 |
0.900 |
1.000 |
Lower cosine means more genre-profile separation. The 26-class axis keeps the strongest separation; collapsing to superclasses weakens it and made presence-Jaccard unusable. best_grouping is null unless a grouped axis materially improves on 26-class; the lowest grouped Jaccard is only recorded as lowest_jaccard_grouping for audit.
Unthresholded Prevalence Distributional Metric
This is the corrected character discrimination test. Vectors retain the raw per-genre prevalence of each class before any active-set thresholding; cosine is reported as distance (1 - similarity) and JS divergence is reported in bits.
| Axis |
classes |
mean cosine distance |
mean JS divergence (bits) |
| 26-class |
26 |
0.080 |
0.044 |
| six_superclass |
5 |
0.015 |
0.007 |
| eight_superclass |
8 |
0.023 |
0.010 |
26-class cosine distance
| Genre |
amber_oriental |
citrus_cologne |
floral_woody |
fougere |
wildcard |
amber_oriental |
0.000 |
0.043 |
0.027 |
0.007 |
0.162 |
citrus_cologne |
0.043 |
0.000 |
0.013 |
0.044 |
0.145 |
floral_woody |
0.027 |
0.013 |
0.000 |
0.024 |
0.167 |
fougere |
0.007 |
0.044 |
0.024 |
0.000 |
0.170 |
wildcard |
0.162 |
0.145 |
0.167 |
0.170 |
0.000 |
26-class JS divergence (bits)
| Genre |
amber_oriental |
citrus_cologne |
floral_woody |
fougere |
wildcard |
amber_oriental |
0.000 |
0.033 |
0.016 |
0.005 |
0.077 |
citrus_cologne |
0.033 |
0.000 |
0.013 |
0.033 |
0.078 |
floral_woody |
0.016 |
0.013 |
0.000 |
0.014 |
0.082 |
fougere |
0.005 |
0.033 |
0.014 |
0.000 |
0.087 |
wildcard |
0.077 |
0.078 |
0.082 |
0.087 |
0.000 |
six_superclass cosine distance
| Genre |
amber_oriental |
citrus_cologne |
floral_woody |
fougere |
wildcard |
amber_oriental |
0.000 |
0.002 |
0.003 |
0.001 |
0.030 |
citrus_cologne |
0.002 |
0.000 |
0.004 |
0.002 |
0.033 |
floral_woody |
0.003 |
0.004 |
0.000 |
0.003 |
0.047 |
fougere |
0.001 |
0.002 |
0.003 |
0.000 |
0.026 |
wildcard |
0.030 |
0.033 |
0.047 |
0.026 |
0.000 |
six_superclass JS divergence (bits)
| Genre |
amber_oriental |
citrus_cologne |
floral_woody |
fougere |
wildcard |
amber_oriental |
0.000 |
0.001 |
0.002 |
0.001 |
0.012 |
citrus_cologne |
0.001 |
0.000 |
0.002 |
0.002 |
0.015 |
floral_woody |
0.002 |
0.002 |
0.000 |
0.002 |
0.021 |
fougere |
0.001 |
0.002 |
0.002 |
0.000 |
0.011 |
wildcard |
0.012 |
0.015 |
0.021 |
0.011 |
0.000 |
eight_superclass cosine distance
| Genre |
amber_oriental |
citrus_cologne |
floral_woody |
fougere |
wildcard |
amber_oriental |
0.000 |
0.006 |
0.007 |
0.002 |
0.043 |
citrus_cologne |
0.006 |
0.000 |
0.003 |
0.008 |
0.047 |
floral_woody |
0.007 |
0.003 |
0.000 |
0.010 |
0.062 |
fougere |
0.002 |
0.008 |
0.010 |
0.000 |
0.043 |
wildcard |
0.043 |
0.047 |
0.062 |
0.043 |
0.000 |
eight_superclass JS divergence (bits)
| Genre |
amber_oriental |
citrus_cologne |
floral_woody |
fougere |
wildcard |
amber_oriental |
0.000 |
0.003 |
0.003 |
0.001 |
0.020 |
citrus_cologne |
0.003 |
0.000 |
0.002 |
0.004 |
0.020 |
floral_woody |
0.003 |
0.002 |
0.000 |
0.005 |
0.026 |
fougere |
0.001 |
0.004 |
0.005 |
0.000 |
0.020 |
wildcard |
0.020 |
0.020 |
0.026 |
0.020 |
0.000 |
Threshold Sensitivity
| Grouping |
activity threshold |
mean pairwise Jaccard |
| six_superclass |
5% |
1.000 |
| six_superclass |
10% |
1.000 |
| six_superclass |
15% |
0.880 |
| eight_superclass |
5% |
1.000 |
| eight_superclass |
10% |
0.868 |
| eight_superclass |
15% |
0.886 |
Recommendation: Retract the superclass presence-Jaccard conclusion: the 1.000 is a collapse/presence artifact, not proof that character is dead. Keep corrected distributional metrics as the circuit-breaker. Under unthresholded prevalence vectors, 26-class character shows weak but nonzero profile separation (mean cosine distance 0.080; mean JS divergence 0.044 bits; presence-Jaccard baseline 0.793, best collapsed presence-Jaccard 1.000). Recommended direction: character may resume only at 26-class granularity under distributional and well-labelled filters; do not use superclass presence-Jaccard for go/no-go decisions.
Character verdict policy: Character profiles are weakly but genuinely separated at 26-class granularity. Superclass collapse remains non-discriminative and threshold-driven. Character may resume only as a secondary axis gated by this distributional metric; presence-Jaccard must not be used again as the circuit-breaker.
Substantivity remains confirmed and publishable independent of this character diagnostic. Next human decision: ship substantivity, resume character only under the corrected 26-class distributional circuit-breaker, or park character for a trajectory-proportion pivot.
No new sourcing, label expansion, dataset assembly, training, or upload was performed.