Grain Is 52.2% of All Cargo Calls in Overwatch. Its Low-Confidence Rate Is 5.4x Every Other Commodity Combined.
The Setup
In the last 90 days, 113,476 vessel visits ran through the commodity classifier, and every single one came back with a probable_commodity label — coverage is complete, nothing is left unclassified. But the distribution is lopsided: grain accounts for 59,219 of those visits, 52.2% of all volume, more than double the next-largest category (petroleum, 27,755 visits, 24.5%). Grain's average commodity_confidence is 0.582 — unremarkable on its own, close to several smaller categories. The problem shows up once you split grain's calls by confidence instead of averaging them away.
The Chain
18,865 of the 59,219 grain calls — 31.9% — sit below the 0.5 confidence floor. Petroleum's low-confidence rate is 3.8%. LNG is 12.8%. Containers, 7.1%. Coal, 6.1%. Chemicals, 7.0%. Pool every classified commodity except grain and the combined low-confidence rate is 5.9% — grain's rate is 5.4 times that. The classifier also has an explicit unknown bucket: 15,580 visits, average confidence 0.350, and 100% of them fall below 0.5. unknown behaves exactly like a bucket for genuine uncertainty should — every low-confidence call inside it is labeled as such. Grain doesn't carry that label, but close to a third of its calls score the way unknown calls score.
That split matters because grain isn't a residual category the way unknown is — it's the plurality answer, the one label more vessel visits get than any other. A bucket that large behaving like a partial catch-all changes what "52.2% of visits carry grain" actually means.
The Implication
Any downstream process — compliance screening, commodity-flow reporting, an alert keyed on cargo type — that treats probable_commodity as a flat categorical field inherits an error rate that isn't evenly spread. 18,865 visits, 16.6% of all tracked volume in the window, are grain calls the model itself scores below its own confidence threshold. If even a fraction of those are genuinely uncertain classifications wearing a specific-sounding label instead of "unknown," then reports built on commodity share overstate how much the pipeline actually knows about a sixth of the fleet it's tracking.
What to Watch
Whether grain's share and its low-confidence rate move together as more visits are ingested, or whether the gap closes. Whether a future version of the classifier routes more of these borderline calls to unknown instead of defaulting to grain. Whether commodity_confidence gets surfaced anywhere a downstream consumer can filter on it before trusting the label at face value.
Limitations
This covers a single 90-day window. port_locode is unpopulated for every visit in this window, so no port-level or geographic breakdown is possible — it's not clear whether the pattern concentrates on specific routes or is uniform across the fleet. This reads the model's own confidence output, not ground truth on any individual visit: it says nothing about whether grain classifications are actually wrong, only that a disproportionate share of them are calls the model itself isn't confident in.
Data as of 2026-08-14. Source: vessel_visits (probable_commodity, commodity_confidence), Axiom Overwatch cargo estimation pipeline.