ETA accuracy benchmark · 🇲🇦 Tanger Med
How Port Flow's predicted ETA compares to each vessel's own broadcast ETA at Tanger Med, measured on closed voyages over the last 90 days. We publish the number — good or bad. Lower error is better.
Port Flow predicted ETA (RMSE)
21.35 h
MAE 35.71 h · 550 voyages
Broadcast ETA (RMSE)
41.52 h
crew-declared, 281 voyages (same set)
Our advantage
48.6 %
lower error than the broadcast ETA
Broadcast ETAs more than 7 days from the actual arrival are excluded as AIS sentinel / placeholder values (126 excluded). Both figures are computed on the same remaining voyage set — apples to apples.
Closed voyages
error = predicted/broadcast minus actual arrival (hours)| 255916283 | chemical | 08/26, 10:02 AM UTC | 3.83 h | — |
| 564306000 | container | 08/26, 04:36 AM UTC | -2.78 h | -650.61 h |
| 636092919 | container | 08/26, 01:47 AM UTC | -7.49 h | -1810.79 h |
| 636022724 | general-cargo | 08/26, 12:33 AM UTC | 4.72 h | -0.06 h |
| 271050950 | container | 08/25, 10:22 PM UTC | -573.51 h | -1853.37 h |
| 563217800 | container | 08/25, 04:59 PM UTC | -606.16 h | -610.00 h |
| 248084000 | product | 08/25, 04:40 PM UTC | 8.06 h | — |
| 667002576 | container | 08/25, 04:08 PM UTC | 5.15 h | 6.86 h |
| 224473460 | product | 08/25, 03:02 PM UTC | -144.57 h | — |
| 667002576 | container | 08/25, 02:26 PM UTC | 8.55 h | — |
| 224879000 | container | 08/25, 01:44 PM UTC | -162.31 h | — |
| 636024805 | container | 08/25, 12:29 PM UTC | 6.60 h | -4.48 h |
| 228468700 | container | 08/25, 12:03 PM UTC | -636.41 h | -636.06 h |
| 210707000 | general-cargo | 08/23, 04:50 PM UTC | -9.69 h | — |
| 229468000 | product | 08/23, 02:37 PM UTC | 1.46 h | — |
| 256214000 | container | 08/23, 06:01 AM UTC | -0.42 h | -1293.53 h |
| 636020984 | container | 08/23, 04:33 AM UTC | -529.18 h | -514.06 h |
| 538010796 | general-cargo | 08/23, 04:13 AM UTC | 1.68 h | -495.22 h |
| 636093172 | general-cargo | 08/23, 03:54 AM UTC | -1567.20 h | -1593.91 h |
| 563272500 | container | 08/23, 01:36 AM UTC | -514.53 h | -502.60 h |
| 219069000 | general-cargo | 08/23, 12:27 AM UTC | -4.73 h | -1115.45 h |
| 636015667 | container | 08/22, 08:55 PM UTC | -487.68 h | — |
| 414777000 | container | 08/19, 12:44 AM UTC | -14.12 h | -16.74 h |
| 224473460 | product | 08/19, 12:31 AM UTC | 3.38 h | — |
| 210707000 | container | 08/18, 10:39 PM UTC | -0.24 h | -359.66 h |
| 563002100 | container | 08/18, 10:38 PM UTC | -8.20 h | -456.64 h |
| 636092697 | general-cargo | 08/18, 10:06 PM UTC | -1.01 h | -1055.11 h |
| 563286700 | container | 08/18, 07:10 PM UTC | -9.91 h | -231.17 h |
| 636021968 | container | 08/18, 08:27 AM UTC | -971.43 h | — |
| 224473460 | product | 08/05, 10:33 AM UTC | -29.79 h | -1178.56 h |
| 538010545 | product | 08/05, 08:09 AM UTC | -485.73 h | — |
| 224879000 | container | 08/04, 05:29 PM UTC | -2.99 h | -92.99 h |
| 538012435 | container | 08/04, 06:30 AM UTC | -4.19 h | — |
| 248084000 | product | 08/04, 12:20 AM UTC | 2.81 h | -142.84 h |
| 538090641 | container | 08/03, 09:50 PM UTC | 0.77 h | -256.84 h |
| 256318000 | general-cargo | 08/03, 09:39 PM UTC | -13.97 h | -21.16 h |
| 566755000 | container | 08/03, 09:34 PM UTC | -1.91 h | -7.07 h |
| 636021776 | container | 08/03, 08:48 PM UTC | 0.54 h | -777.81 h |
| 210707000 | container | 08/03, 08:16 PM UTC | 7.69 h | -21.27 h |
| 241994000 | container | 08/03, 09:02 AM UTC | -1.78 h | -29.05 h |
| 636092696 | general-cargo | 08/03, 08:34 AM UTC | -6.04 h | -329.57 h |
| 248084000 | product | 08/02, 11:51 PM UTC | 3.63 h | -118.36 h |
| 636093143 | container | 08/02, 10:35 PM UTC | 1.36 h | -587.59 h |
| 210094000 | product | 08/02, 09:49 PM UTC | -1.27 h | -48.83 h |
| 310749000 | container | 08/02, 09:16 PM UTC | 0.59 h | -1.78 h |
| 636092679 | container | 08/02, 08:34 PM UTC | -1.58 h | — |
| 305565000 | container | 08/02, 08:25 PM UTC | -4.26 h | — |
| 249209000 | chemical | 08/02, 08:17 PM UTC | 2.69 h | -722.29 h |
| 538002823 | container | 08/02, 08:15 PM UTC | -0.54 h | -393.76 h |
| 477665200 | container | 08/02, 08:01 PM UTC | -3.20 h | -480.52 h |
See it on a live desk
Predicted ETAs, congestion and sanctions screening across 51 ports — try it in one click, no signup.
How it's measured
- Predicted ETA: distance-to-berth over speed-made-good, refreshed on every AIS position, with a seasonal correction from rolling medians.
- Broadcast ETA: the crew-entered ETA in the vessel's AIS message — the de-facto industry default.
- Both are compared to the actual arrival timestamp on the same closed voyages. We report RMSE (penalises large misses) and MAE (typical error).
- Broadcast ETAs more than 7 days off are dropped as AIS sentinel / placeholder values, and our model is scored on that same set — so the comparison is honest, not cherry-picked.
- Coverage is public AIS only; ports with weak coverage show fewer closed voyages. We'd rather show a small honest sample than a big misleading one.