Vessel Transit Recovery After Shipping Disruptions

Measure how quickly global shipping lanes return to normal after closures or conflicts. Klarety agents combine SAR vessel counts at choke points with known route baselines to compute recovery velocity, throughput recovery rate, and estimated normalization date. Shippers and insurers receive daily progress reports.

Shipping recovery metrics from daily SAR vessel counts

Klarety AI
Klarety AI chat composer interface

Recovery timeline forecasts from satellite data

Klarety agents compute throughput recovery rates against pre-disruption baselines and return normalization timeline estimates.

SAR - Sentinel-1
Klarety satellite analysis output

Daily choke-point vessel counting and recovery curves

Agents run daily Sentinel-1 passes over key straits and compute rolling vessel count recovery curves against historical baselines.

GIS Output
Klarety AI map annotation overlay

Recovery data for logistics GIS dashboards

Export daily throughput metrics and recovery trajectory data for supply chain visibility platform integration.

SAR recovery curve modeling for disrupted shipping lanes

Klarety agents compute weekly SAR vessel counts at disrupted choke points, fit a sigmoid recovery curve to the post-disruption time series, and estimate the date at which throughput returns to 90% of baseline. Output is a recovery curve chart, weekly throughput table, and normalization date estimate with confidence interval.

Klarety AITrack shipping recovery in your route
analysis/shipping_recovery_curve.pyAgent code
python
import eeimport numpy as npfrom scipy.optimize import curve_fit
ee.Initialize()
# Suez Canal / Bitter Lakes choke pointaoi = ee.Geometry.Rectangle([32.3, 29.9, 32.7, 30.3])
def weekly_vessel_count(start, end):    s1 = (ee.ImageCollection('COPERNICUS/S1_GRD')          .filterBounds(aoi)          .filterDate(start, end)          .filter(ee.Filter.eq('instrumentMode', 'IW'))          .select('VV').mean())    count = s1.gt(-10).reduceRegion(        ee.Reducer.sum(), aoi, 100    ).get('VV').getInfo()    return int(count or 0)
# Pre-disruption baseline (weekly avg)baseline = weekly_vessel_count('2025-07-01', '2025-09-30')baseline_wk = baseline / 13.0
# Post-disruption recovery weeksweeks = list(range(1, 13))week_dates = [('2026-01-01','2026-01-07'), ('2026-01-08','2026-01-14'),              ('2026-01-15','2026-01-21'), ('2026-01-22','2026-01-28'),              ('2026-01-29','2026-02-04'), ('2026-02-05','2026-02-11'),              ('2026-02-12','2026-02-18'), ('2026-02-19','2026-02-25'),              ('2026-02-26','2026-03-04'), ('2026-03-05','2026-03-11'),              ('2026-03-12','2026-03-18'), ('2026-03-19','2026-03-25')]
counts = [weekly_vessel_count(s, e) for s, e in week_dates]recovery_pct = [c / baseline_wk * 100 for c in counts]
# Sigmoid recovery fit: R(t) = L / (1 + exp(-k*(t - t0)))def sigmoid(t, L, k, t0):    return L / (1 + np.exp(-k * (t - t0)))
t = np.array(weeks, dtype=float)try:    popt, _ = curve_fit(sigmoid, t, recovery_pct, p0=[100, 0.4, 6], maxfev=5000)    L, k, t0 = popt    t90 = t0 + np.log(9) / k  # 90% recovery point    print(f"Baseline (wk avg): {baseline_wk:.0f} vessels")    print(f"Sigmoid fit: L={L:.1f}%, k={k:.2f}, t0={t0:.1f}")    print(f"Estimated 90% recovery: Week {t90:.1f} ({t90:.0f} weeks post-disruption)")except Exception as e:    print(f"Fit error: {e}")
for wk, pct in zip(weeks, recovery_pct):    print(f"Week {wk:>2}: {pct:5.1f}% of baseline")
output/shipping_recovery_report.mdOutput report
python
# Shipping Lane Recovery Report**Route:** Suez Canal / Bitter Lakes choke point**Disruption start:** Jan 1, 2026 | **Source:** Sentinel-1 SAR weekly counts
## Recovery Progression| Week | Date Range        | Vessel Count | Recovery % | Status      ||------|-------------------|-------------|------------|-------------|| 1    | Jan 1-7, 2026     | 341         | 21.4%      | Disrupted   || 2    | Jan 8-14          | 489         | 30.7%      | Early recovery|| 4    | Jan 22-28         | 812         | 51.0%      | Recovering  || 6    | Feb 5-11          | 1,104       | 69.3%      | Recovering  || 8    | Feb 19-25         | 1,287       | 80.8%      | Near normal || 10   | Mar 5-11          | 1,401       | 87.9%      | Near normal || 12   | Mar 19-25         | 1,487       | 93.4%      | Normalized  |
## Recovery Model- Baseline (weekly avg): **1,592 vessels**- Sigmoid fit: L=98.1%, k=0.41, t0=5.8 weeks- Estimated 90% recovery: **Week 9.3** (Feb 28, 2026)- Actual 90% crossing: **Week 10** (Mar 5-11) — within model range
## MethodsSentinel-1 C-band weekly vessel detection. Sigmoid curve fit to recovery series.Confidence: High for count trend. Medium for normalization date forecast.

Try Klarety now.