A laden tanker at 14 knots, running VLSFO from Fujairah to Djibouti. 2,222 nautical miles through the Gulf of Oman, the Arabian Sea, the Gulf of Aden, past Bab el-Mandeb. The Voyage Scorer returns a composite risk score of 50 — classified ELEVATED.
The sidebar shows JWC Listed Areas at 100. Sanctions Exposure at 100. Both maxed out. And yet the composite is 50, not 100. If you're an underwriter looking at this output for the first time, that gap deserves an explanation.
This post is that explanation. One voyage, ten signals, and the arithmetic that turns them into a number you can put in a slip.
The ten signals
Every route scored in ArcNautical is evaluated against ten independent intelligence signals. Each signal is spatially queried against the actual route geometry — an A* path through a 0.05-degree ocean grid, not a straight line. A piracy incident 200nm from your track is weighted differently from one sitting directly on it.
Here's what each signal measures, and where the data comes from:
| Signal | What it measures | Primary source |
|---|---|---|
| JWC Listed Areas | Route fraction inside Joint War Committee hull war risk zones | Lloyd's Market Association |
| Piracy Incidents | Armed robbery and piracy events within 80nm of route, 30-day window | IMB ICC, ReCAAP ISC |
| Sanctions Exposure | Transit near sanctioned entities, ports, or jurisdictions | OFAC SDN, UN, OpenSanctions |
| Conflict Events | Armed conflict, protests, military activity near route | GDELT Event Database |
| Country Risk (CII) | Composite instability index for transit countries | GDELT-derived, multi-factor |
| Navigational Warnings | Active NGA broadcast warnings intersecting route corridor | NGA Maritime Safety |
| Marine Weather | Wave height, wind speed, Beaufort hazard along route segments | Open-Meteo Marine API |
| AIS Disruptions | GPS jamming, spoofing, or signal interference zones | AIS anomaly detection |
| Dark Activity | Vessels going dark (AIS off) in route corridor | AIS gap analysis |
| Natural Disasters | Earthquakes, cyclones, volcanic ash, tsunamis near route | GDACS, NHC, USGS, VAAC |
Each signal independently produces a raw score from 0 to 100. Zero means the signal found nothing relevant along the route. A hundred means maximum exposure.
Why the composite isn't an average
The naive approach to combining ten signals would be to average them. If JWC scores 100 and weather scores 15, the average of all ten might land around 30. That's wrong in a specific, dangerous way: it lets calm weather and quiet AIS data dilute the fact that your vessel is transiting a war risk zone.
We use dynamic priority-weighted scoring with active-signal redistribution. That's a mouthful. Here's what it means in practice:
Each signal has a base weight and an active boost. When a signal has real data (events found, non-zero score), it receives its base weight plus the active boost. When a signal returns zero — no piracy incidents near this route, no AIS disruptions detected — it receives only the base weight.
The freed-up weight from inactive signals gets redistributed to active signals proportional to their priority. JWC and piracy have the highest priority (5 and 4). Weather and AIS have the lowest (3 and 1). So when piracy is quiet but JWC is screaming, the JWC signal's effective weight goes up.
Final weights are normalized to sum to 1.0. The composite is the weighted sum of all participating signal scores.
The approximate weights when all ten signals are active:
Dark Activity and Natural Disasters carry similar weight profiles but activate only when relevant data exists along the route.
This is why two signals can score 100 while the composite lands at 50. JWC at ~18% weight with a score of 100 contributes about 18 points. Sanctions at ~10% contributes about 10. That's 28 points from two maxed signals. The remaining 22 or so points come from conflict events, country risk, and other active signals with moderate scores. Signals that returned zero don't dilute the result — they step aside.
Reading the Fujairah-to-Djibouti breakdown
The KPI bar tells the story at a glance:
Data confidence at 100% means all ten data sources were successfully queried. When a source fails (and they do — UKMTO has been returning Cloudflare 403s for weeks), the confidence drops and a warning banner appears. You know exactly which intelligence layers have gaps.
The AI Risk Briefing summarizes the key threats in plain language: elevated piracy and armed robbery in the Gulf of Aden, sanctions exposure from transit through high-risk countries including UAE, Iran, India, Pakistan, Yemen, and Somalia. ETA uncertainty between the 10th and 90th percentiles is only 3 hours — a relatively predictable voyage timeline despite the threat environment.
The CII floor: a safety net for bad data days
There's a failure mode that keeps me up at night. Imagine the IMB piracy feed goes down for 24 hours. ReCAAP times out. GDELT returns empty results for the Gulf of Aden corridor. A naive scoring engine would see zero piracy events, zero conflict events, and happily report a moderate risk score for a Fujairah-to-Djibouti run through one of the most dangerous waterways on earth.
We built a floor for this.
When the maximum Country Instability Index along the route is 50 or higher, the composite score cannot drop below CII × 0.80. No matter what the other signals report — or fail to report.
The transit countries on this Fujairah-to-Djibouti route include Yemen (CII ~75) and Somalia (CII ~85). Even if every other data source went offline simultaneously, the floor would hold the composite at 68 — still classified HIGH. A route to Yemen cannot score "moderate" because data sources are having a bad day.
Concrete examples of what the floor guarantees:
| Transit Country | CII Score | Minimum Floor | Risk Level |
|---|---|---|---|
| Somalia | 85 | 68 | HIGH |
| Yemen | 75 | 60 | ELEVATED |
| Libya | 70 | 56 | ELEVATED |
| Ukraine | 70 | 56 | ELEVATED |
| Iraq | 65 | 52 | ELEVATED |
This isn't theoretical. We discovered the need for it the hard way. An early version of the scorer returned a score of 35 for a route transiting Yemeni waters — because JWC had an 8% weight cap and three zero-scoring signals dragged down the denominator. That's the kind of output that gets someone hurt, or gets an underwriter fired. The floor and the active-signal redistribution both exist because that bug existed first.
The route underneath the score
The score isn't abstract. It's attached to a specific polyline through actual water. The route from Fujairah exits the Strait of Hormuz, tracks southeast through the Gulf of Oman, crosses the Arabian Sea, enters the Gulf of Aden through Bab el-Mandeb, and terminates at Djibouti. Six waypoints. Every signal is sampled along this geometry.
The "Compare Route" button lets you add an alternative — maybe a wider berth around the Yemeni coast, or a different entry angle into the Gulf of Aden. Each variant gets its own score. Same ten signals, different geometry, different numbers. That's the point: risk is route-specific, not port-pair-specific.
Risk levels and what they mean for decisions
The composite maps to five risk levels:
| Score Range | Level | Typical action |
|---|---|---|
0 – 25 |
LOW | Standard terms. Routine monitoring. |
26 – 45 |
MODERATE | Enhanced monitoring. Review before binding. |
46 – 65 |
ELEVATED | Additional premium. Restricted terms. Pre-bind review required. |
66 – 85 |
HIGH | War risk additional premium. Possible exclusions. Senior sign-off. |
86 – 100 |
CRITICAL | Decline or refer to syndicate lead. Full threat briefing required. |
Our Fujairah-to-Djibouti tanker at 50 sits in the ELEVATED band. That's the right answer for this route: it transits a JWC listed area and passes near sanctioned jurisdictions, but the voyage is short (2,222nm), weather is manageable, and the ETA distribution is tight. An experienced underwriter would look at this and think "additional premium, restricted terms, maybe a clause about deviation." Which is exactly the kind of calibrated response that a good risk score should support — not replace.
A risk score doesn't make the decision. It makes the decision defensible.
The dashboard view: signals at global scale
The same ten signals that score individual voyages also power the global dashboard. The red overlays are JWC listed areas. The green clusters are piracy incident concentrations. The right sidebar lists chokepoint disruption levels — the Strait of Hormuz, Bab el-Mandeb, Bosphorus, all showing disruption scores of 30. The ticker at the top scrolls live: 369 active NAVWARNs. Malacca Strait disrupted at 50.
When you score a voyage, you're not querying a static database. You're querying the same live intelligence that the dashboard displays, filtered to the corridor of your specific route.
What we don't claim
Some honest limitations:
- Our weather data comes from Open-Meteo — solid forecasts, but synthetic uncertainty. Not true ECMWF ensemble output. We flag this in every stochastic result.
- Piracy data depends on reporting. Not every incident gets reported to IMB or ReCAAP. The score reflects known incidents, not all incidents.
- The CII (Country Instability Index) is GDELT-derived. GDELT is comprehensive but noisy. We apply smoothing and decay, but it's not a substitute for deep country-specific intelligence.
- UKMTO has been returning Cloudflare 403s. IMB covers the same region, but it's worth knowing which sources are intermittent.
The confidence field exists precisely because we think you should know when data is incomplete. A score with 60% confidence means something different than the same score with 100% confidence, and the platform makes that visible.
If you're pricing voyage risk and want to see how your routes decompose across these ten signals, the Voyage Scorer is open to try. Pick your port pair, set vessel type and speed, and read the breakdown. I'm genuinely curious whether the signal weights match your intuition — and where they don't.
Score a voyage
Ten intelligence signals. Actual ocean routing. Full signal-by-signal breakdown.
Open the Voyage Scorer