# Embrapa FEBR (SiBCS) v0.9.27 benchmark — 2026-05-03

A/B at SiBCS Order + Subordem level on the FEBR `febr-superconjunto.txt`
sample (n=554 after quality filter, requiring `clay_pct` populated).
v0.9.27 wires `normalise_febr_sibcs()` into `benchmark_run_classification`
so FEBR-style ALL-CAPS singular labels ("NEOSSOLO LITOLICO") compare
correctly against soilKey's Title Case plural output ("Neossolos
Litolicos"). Without this normaliser, prior v0.9.26 reported 0%
trivially because of label-format mismatch.

## Results

| Level    | v0.9.23 baseline | v0.9.27 | Delta |
|----------|---:|---:|---:|
| **Order**    | 54.70 % | **56.68 %** (CI 52.7-60.6) | **+1.98 pp** |
| **Subordem** | -- | 9.93 % (CI 7.4-12.5) | (new measurement) |

## Why the v0.9.27 Order lift

The argic clay-increase canonicalisation in v0.9.23 already gave
the bulk of the SiBCS Order gains (40.6 % → 54.7 %, +14.1 pp).
The v0.9.24-27 changes (aquic tightening, KST canonicaliser,
clay-films-test) further polished the classification:

- v0.9.24 aquic + oxyaquic tightening reduced false-positive
  hidromórficos (Gleissolos, Espodossolos with hidromorfismo
  sporious) at the SiBCS Order level.
- v0.9.27 KST 13ed clay-films gate is USDA-only and orthogonal
  to SiBCS, so the +1.98 pp here is mostly attributable to
  v0.9.24's tightening on aquic conditions which influences
  Gleissolo / Plintossolo F? differential at SiBCS.

## Subordem 9.93 % (first measurement)

The 9.93 % at Subordem (Ordem + 2nd-level qualifier) is the
benchmark's first measurement at this granularity. It maps roughly
to the USDA Suborder level (17.84 %) but with a different
taxonomic structure -- SiBCS uses the subordem qualifier
(Vermelho / Amarelo / Acinzentado / etc.) which depends on
Munsell hue, value, and chroma at the diagnostic-B horizon depth.
The lower number relative to USDA Suborder reflects two facts:

1. FEBR's reference Subordem labels are ALL-CAPS strings
   ("LATOSSOLO VERMELHO") that we now successfully normalise to
   "Latossolos Vermelhos" -- but only after stripping accents and
   pluralising. Edge cases (compound qualifiers like
   "VERMELHO-AMARELO") may still mis-tokenise.
2. Munsell hue parsing in the FEBR loader is incomplete --
   `febr-superconjunto.txt` ships hue strings ("10YR", "7.5YR")
   that we do parse, but the per-horizon Munsell value/chroma
   columns have substantial NA gaps in the FEBR snapshot.

Both items are roadmap candidates for v0.9.28+ if Embrapa Subordem
becomes a priority benchmark axis.

## Reproducibility

```r
library(soilKey)
peds <- load_febr_pedons(
  path = "<path>/embrapa_bdsolos/febr-superconjunto.txt", verbose = FALSE)

# Quality filter
keep <- vapply(peds, function(p) {
  hz <- p$horizons
  if (is.null(hz) || nrow(hz) == 0) return(FALSE)
  any(!is.na(hz$clay_pct))
}, logical(1))
peds <- peds[keep]

for (lvl in c("order", "subordem")) {
  res <- benchmark_run_classification(peds, system = "sibcs",
                                         level = lvl, boot_n = 500L)
  cat(sprintf("SiBCS %-10s n=%d  top1=%.4f  CI=[%.3f, %.3f]\n",
                lvl, res$n_evaluated, res$accuracy_top1,
                res$accuracy_ci[1], res$accuracy_ci[2]))
}
```
