A marine-insurance team wanted a single, defensible risk score per vessel - one that handled gaps in the AIS feed without pretending the ship vanished.
The hard part was the ghost fleet: vessels that go dark, spoof, or transmit noisy positions. We simulated plausible trajectories during the gaps, scored near-miss exposure against them, and surfaced the result alongside the underwriting workflow.
The system runs nightly over the global AIS firehose, recomputes risk per vessel and per port call, and feeds a query layer that underwriters use during quoting.
// what we built
Sparse signal, dense risk.
[01]kafka · duckdb
AIS ingest & cleaning
Global AIS firehose, dedup, gap detection, spoof flags.
[02]py · numba
Ghost-fleet simulation
Plausible-trajectory sampling during transmission gaps.
[03]rtree · shapely
Near-miss scoring
Spatial-temporal CPA scoring across simulated and observed tracks.
[04]llm · fastapi
Underwriter query layer
Per-vessel and per-port-call score with an LLM explainer for the underwriting note.
// outcomes
The receipts.
AIS
grade ghost-fleet sims
nightly
global recompute
−31%
unexplained variance vs prior model
9mo
concept to underwriter UAT
4
P&I clubs piloting
1
risk score, defensible
"
We bought spatial-AI vendors before. This is the first one that admitted what they don't see and modelled around it.
Offer — CTO, Lloyd Score
// faq · lloyd score
What clients ask about Lloyd Score.
Quantifying near-miss risk per vessel from messy AIS data with transmission gaps. The hard part was the ghost fleet: vessels that go dark, spoof, or transmit noisy positions. We had to model the gaps without pretending the ship vanished.