Open methodology · reproducible pipeline

Basin escalation-pressure model

A transparent 0–14 day screening index combining independent physical, institutional, market, and weather signals. It is not an event probability and not a live operational maritime picture.

1. Index definition

Each available component is normalized to 0–100. The default weighted score is:

S = 0.30 M + 0.25 N + 0.20 O + 0.15 C + 0.10 W + B

ComponentWeightIndependent evidence
Maritime flow (M)30%IMF PortWatch AIS-derived calls
NATO posture (N)25%Official NATO publications
Regional sanctions (O)20%U.S. Treasury OFAC actions
Commodity dislocation (C)15%FRED Brent and wheat series
Port weather (W)10%MET Norway / ECMWF forecast

If a source is unavailable, weights are renormalized over available components. A last validated component may be retained for no more than 72 hours and is visibly marked.

2. Maritime-flow anomaly

Ports are selected by explicit Black Sea and Caspian geographic windows; the Bosporus is added as a chokepoint. For each location, the recent 7-day mean is compared with the preceding 28-day mean.

change = (mean₇ / mean₂₈ − 1) × 100
raw pressure = clamp((|change| − 5) / 35 × 100, 0, 100)

Low-volume locations are reliability-shrunk so tiny baselines cannot dominate:

r = min(1, √(mean₂₈ / 2))
adjusted pressure = raw pressure × r

The component combines a baseline-volume-weighted mean (55%) with the mean of the three largest adjusted pressures (45%). Series require at least 21 observations. Both surges and shortfalls matter because either can indicate disruption or rerouting.

3. Institutional signals

NATO posture language

The official NATO sitemap is filtered for dated regional publications and posture terms. Current 14-day intensity is converted to a weekly equivalent, then compared with 12 preceding weekly windows using a robust z-score.

OFAC action velocity

Official Treasury releases are filtered for regional entities and geographies. The same 14-day versus prior-12-week robust-z design measures unusual action intensity.

robust z = (x − median(history)) / (1.4826 × MAD)
NATO density = min(15x, 55); OFAC density = min(6x, 55)
anomaly = min(18 × max(z, 0), 45)
score = 0.55 × density + 0.45 × anomaly

If MAD is zero, the baseline standard deviation is used; if both are zero, z is zero. No generative AI or subjective narrative scoring enters either component.

4. Commodity dislocation

FRED supplies Brent crude (DCOILBRENTEU) and global wheat (PWHEAMTUSDM). Brent uses a five-observation return; wheat uses a one-month return. Each return is robust-z standardized against its own history. Absolute dislocation is converted to pressure; Brent receives 65% and wheat 35% internal weight.

returnₖ = (priceₜ / priceₜ₋ₖ − 1) × 100
pressure = clamp((|z| − 0.5) / 2.5 × 100, 0, 100)
component = 0.65 × Brent pressure + 0.35 × wheat pressure

5. Seven-day port weather

Four high-activity ports per basin are queried through MET Norway Locationforecast. Each port pressure is the larger of wind and precipitation pressure. The component combines the three highest port pressures (65%) and the all-port mean (35%).

wind = clamp((max m/s − 12) / 14 × 100, 0, 100)
rain = clamp((max daily mm − 30) / 90 × 100, 0, 100)

Weather acts as a forward confounder and precursor: it can explain expected traffic distortion before treating it as geopolitical.

6. Concurrence and alert bands

A +5 point concurrence bonus applies only when at least one institutional component (NATO or OFAC) is ≥45 and at least one physical/market/weather component is ≥40. Score is capped at 100.

ScoreState
0–24.9Baseline
25–44.9Watch
45–64.9Elevated
65–79.9High
80–100Severe

7. Reproduction

Python 3.11+ is sufficient. No account, API key, or paid service is required.

git clone https://github.com/MonarchCastleTech/caspian-black-sea-monitor.git
cd caspian-black-sea-monitor
python -m pip install -r requirements.txt
python -m pytest -q
python pipeline/caspian_black_sea_monitor_pipeline.py
python -m http.server 8000

GitHub Actions repeats collection, tests, validation, data commit, and Pages deployment every six hours. Generated JSON preserves component evidence, timestamps, coverage, and model classification.

8. Limits and interpretation

AIS-derived calls are not complete vessel tracks; publication frequency can reflect communications policy; sanctions are lagging administrative evidence; market moves are globally confounded; weather forecasts change. The model detects abnormal multi-source pressure, not intent, attribution, certainty, or a specific future event. Analysts should inspect linked primary evidence before decisions.