The inference chain
For each vessel arriving at or departing from a monitored port: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.
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.
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).When a vessel has a hydrostatic profile on file, Overwatch uses the full displacement table and trim model to produce a higher-confidence estimate. Water density at the port is factored in when available. Vessels without a profile fall back to the standard DWT-based approximation.What we validate against
| Source | Frequency | What it confirms |
|---|---|---|
| USDA Grain Transportation Report | Weekly | Grain volumes at US ports (corn, wheat, soy) |
| EIA petroleum data | Weekly | Crude oil and refined product flows |
| Port authority statistics | Monthly–quarterly | Total throughput by port |
| UN Comtrade | Monthly | Bilateral trade flows for cross-check |
| Mirror data | Annual | Exporter-reported vs importer-reported volumes — large gaps signal misclassification or trade re-routing |
/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
Hydrostatic estimation
For vessels with a hydrostatic profile, Overwatch uses a multi-factor estimation path that produces more accurate cargo figures than the standard DWT-based method:- Displacement table lookup — the vessel’s hydrostatic rows map draft readings to displacement tonnage, accounting for hull geometry.
- Trim correction — a trim model adjusts the estimate for the difference between fore and aft drafts at arrival and departure.
- Water density adjustment — local water density measurements at the port correct for the difference between freshwater and saltwater displacement.
hydrostatic_method, hydrostatic_confidence, and hydrostatic_confidence_score fields on vessel visit records. See the estimates API for details.
Water density sources
Each port’s surface water density is refreshed monthly and used directly in the displacement step above. The ingestion picks the most accurate source available per port:| Tier | Source | Coverage | Notes |
|---|---|---|---|
| 1 | NOAA CO-OPS real-time water temperature + climatological salinity | US ports with a confirmed CO-OPS temperature gauge (New Orleans, Houston, Baltimore, Norfolk, Los Angeles) | Live temperature from a station inside the port approach paired with the regional climatological salinity for that water body. CO-OPS does not publish reliable real-time salinity at most open-ocean and Gulf stations, so salinity is always climatological. |
| 2 | Published climatological constants — slug override | Ports in unusual water bodies (Yamal/Arctic, Persian Gulf interior, Strait of Hormuz, Red Sea, Black Sea, English Channel) | Hand-tuned T/S for enclosed seas, Arctic ports, and high-salinity basins where a country-level mean would be misleading. |
| 3 | Published climatological constants — country | All other ports globally | Per-country regional means derived from WOA23 published surface climatology and NOAA Atlas 14. Currently covers USA, Brazil, Australia, Russia, Qatar, South Africa, the UAE, Iran, Saudi Arabia, Singapore, China, Oman, the Netherlands, Germany, Belgium, France, and Romania, with a global default for everything else. |
noaa_coops:<station>+climato_sal or climato:<slug-or-country>), so cargo estimates remain reproducible against the exact water density value that was used at the time.
The pipeline runs on the 1st of each month at 03:30 UTC, and rows older than 90 days are pruned automatically. Water density only changes meaningfully on a seasonal cycle, so a monthly refresh is sufficient for hydrostatic accuracy without introducing churn into historical estimates.
Historical vessel visits are periodically re-estimated as new hydrostatic profiles become available. If you notice cargo figures change for past visits, this is expected — the re-estimation improves accuracy for vessels that previously lacked profile data.
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