Skip to main content
Axiom Overwatch publishes weekly cargo volume estimates by port. This page explains how those numbers are produced and the validation paths that keep them grounded in reality.

The inference chain

For each vessel arriving at or departing from a monitored port:
1

Identity + dimensions

AIS message identifies the vessel by IMO. We look up its registered DWT, length, beam, and design draft from the global vessel registry.
2

Operational draft

The AIS Type-5 (static report) and Type-1/3 (position) messages include the vessel’s current draft, broadcast by the captain. Differences between design draft and operational draft tell us whether the vessel is loading, unloading, or in ballast.
3

Cargo per voyage

Tonnage carried = f(DWT, draft, hull form) using a hydrostatic curve appropriate for the vessel type (bulker, tanker, container). For bulkers, this is well-modeled with TPC (tonnes per centimetre).
4

Aggregate per port per week

Sum across all departures for the week. Adjust for vessel-type-specific calibration factors derived from historical USDA actuals.

What we validate against

SourceFrequencyWhat it confirms
USDA Grain Transportation ReportWeeklyGrain volumes at US ports (corn, wheat, soy)
EIA petroleum dataWeeklyCrude oil and refined product flows
Port authority statisticsMonthly–quarterlyTotal throughput by port
UN ComtradeMonthlyBilateral trade flows for cross-check
Mirror dataAnnualExporter-reported vs importer-reported volumes — large gaps signal misclassification or trade re-routing
When our estimates diverge from authoritative sources by more than the tier-specific tolerance, the affected port is flagged in /api/v1/anomalies/maturity and a banner appears on the port detail page.

Confidence tiers

Every estimate carries a confidence tier:
  • High — historical agreement with authoritative data within ±5%
  • Medium — within ±15%, or limited authoritative data available
  • Low — within ±30%, or recent calibration changes
  • Indicative — port is too new to validate against history; numbers are model-only

What the model doesn’t see

  • Ship-to-ship transfers in international waters before arrival (we detect these separately under /api/v1/risk/sts, but they reduce arrival-port volume estimates).
  • Captain-falsified draft declarations on AIS. We surface anomalies via /api/v1/risk/mismatches.
  • Container cargo value — we estimate TEU counts, not invoice value.
  • Bagged cargo in general-cargo vessels — TPC is less precise than bulk.

Cross-checks built into the API

  • /api/v1/anomalies — surfaces seasonal and trailing anomalies in the export volumes
  • /api/v1/anomalies/maturity — per-port data sufficiency scores
  • /api/v1/calibration — current calibration factors per vessel type
  • /api/v1/forecasts/accuracy — MAE / MAPE / directional accuracy of forecasts vs actuals
If you’re using Overwatch numbers in regulated reporting (commodity trading, ESG disclosure), pull the calibration + accuracy data alongside the estimates — it shows your auditor we’re not hiding the residuals.