These probabilities are bimodal: a base is confidently coding or confidently not. Averaging a bin therefore lands on a value almost no base holds. A column that is 20% exon reads as 0.2, which looks like background, while the binary view fires on the same column because some base there really is near 1. The two views contradicted each other and **both were right** — neither could say "mostly background, with a real peak in it".
## What changed
The binned probability view is now a 2D histogram: one column per position bin, colour showing how many bases fall in each probability band. It bins `max(P_positive, P_negative)` — the same value the threshold and the binary labels are computed from — so the two views finally agree. A thin line keeps the mean for continuity.
Below the binning threshold nothing changes: every base still gets its own point, per strand.
## Evidence
On a real segment at 578 bases per column:
| position | mean line | actual bases |
|---|---|---|
| 50,286 | 0.215…
14 days ago
Fold the views into one panel, right-size the controls, and open Database from a group (#7)