Veblyn
← Back to Blog

Shipping Signals: How to Make Money on Prediction Markets with AIS Data

Veblyn Research - April 2, 2026

Suez Canal shipping

Polymarket hosts hundreds of shipping and geopolitics markets. Most traders watch Twitter for breaking news and trade on vibes. That is slow, noisy, and unreliable.

We asked: what happens when you align structured real-world signal data - AIS vessel transit counts, maritime advisories, congestion indices - directly to these markets? The answer: you see price moves before they happen.

This post walks through exactly how the pipeline works, how you can replicate it yourself, and what the data actually looks like when a chokepoint starts deteriorating. This is not theory. This is a walkthrough for making money.

The data pipeline

We built a system connecting PortWatch AIS chokepoint data to Polymarket shipping event contracts. 198 shipping events. 6 major chokepoints (Suez, Panama, Hormuz, Malacca, Bosporus, Bab el-Mandeb). 5 signal types per chokepoint. Signals update continuously from satellite AIS feeds and are aligned to every relevant market in real time.

198

shipping events analyzed

91.5%

signal coverage

0.351

Brier score (model) vs 0.342 (market)

5

transport signals per chokepoint

What the signals are

Each chokepoint has five transport signals. Together they give you a complete picture of what is happening at the passage - from normal flow to full closure. Here is what each one measures.

throughput_count

Daily vessel count through the chokepoint. The most direct measure of traffic flow.

closure_indicator

Binary flag for complete closure. When this flips to 1, markets move fast.

congestion_index

Ratio of baseline-to-actual throughput using a 14-day rolling median. Captures gradual deterioration.

reroute_share

Fraction of traffic detouring via alternative routes. Rises before official advisories.

security_risk_index

Composite of congestion and closure risk. Aggregates multiple threat dimensions.

What we found

Transit count drops correlate with market attention - when vessels stop flowing, markets reprice. The signal data is genuinely informative: 91.5% of events have fresh transport signals within the analysis window.

A gradient boosting model trained on these signals achieved a Brier score of 0.351 versus the market baseline of 0.342. The model does not beat the market on aggregate, but the raw signal data is the value.

Most prediction market traders do not monitor AIS data at all. When a signal changes - transit count drops 15% - informed participants can act before the crowd. That is where the money is.

Signal-to-price relationship

Here is what the edge looks like in practice. When Suez transit counts drop below the rolling average, the market is slow to reprice. Eight hours later, it catches up.

DateSuez Transit7-day AvgMarket PricePrice 8h Later
Mar 28445135%42%
Mar 25485228%35%
Mar 22395030%38%

Every row shows the same pattern: transit count drops below average, market has not repriced yet, and within 8 hours the price moves 7-8 points. That 7-8 point move is profit if you are positioned before it happens.

How to replicate this yourself

This is a step-by-step walkthrough. By the end you will have shipping metrics and market history flowing into your own code. No special access required - just an API key.

Step 1: Get a Veblyn API key

Create a free account at veblyn.com/auth. Your API key starts with vb_ and lives in the dashboard under Settings.

Step 2: Pull shipping markets

One call returns every active shipping market with its current price, volume, and metadata. Filter by category to get only shipping.

import httpx

client = httpx.Client(headers={"Authorization": "Bearer vb_YOUR_KEY"})

# Get all shipping markets
resp = client.get("https://api.veblyn.com/api/v1/market",
    params={"category": "shipping", "status": "active"})
markets = resp.json()["market"]

for m in markets:
    print(f"{m['title']}: {m['price']:.1%}")

Step 3: Pull the shipping metric you care about

Shipping metrics live under the PortWatch stream. List the available metrics, then fetch history for the one you want to study.

# List PortWatch metrics and inspect Suez throughput history
metrics = client.get(
    "https://api.veblyn.com/api/v1/stream/portwatch/metric"
).json()

suez_throughput = next(
    m for m in metrics
    if m["entity_id"] == "suez" and m["metric_name"] == "throughput_count"
)

history = client.get(
    f"https://api.veblyn.com/api/v1/metric/{suez_throughput['id']}/history",
    params={"limit": 30},
).json()

for point in history[-5:]:
    print(point["ts"], point["value"])

Step 4: Compare metric trend to market price

Pull market quote history separately, then compare it against the metric series. When throughput drops but price has not moved, you are looking at a mispricing.

market_id = markets[0]["id"]
quote_history = client.get(
    f"https://api.veblyn.com/api/v1/market/{market_id}/history",
    params={"limit": 30},
).json()

# Compare quote_history to the metric history above.
# If throughput_count is dropping while price hasn't moved,
# the market may be underpricing the disruption.

You do not need a model to act on this. A daily check of metric direction vs. market price is enough to catch most mispricings. The model helps you scale it - but the raw data is the real product.

The model we built

We trained a HistGradientBoostingClassifier from scikit-learn on historical shipping events to see how far signal data alone can go.

Feature set (32 features)

  • Market microstructure - probability, best bid, best ask, spread, depth
  • Event structure - outcome count, outcome entropy
  • Transport signals - 5 real-time signals (throughput_count, closure_indicator, congestion_index, reroute_share, security_risk_index)
  • Signal delta - 2 features tracking 24-hour changes in throughput and congestion

73

training events

32

validation events

67

test events

64K+

total rows

SplitEventsRowsPeriod
Training739,6282021-2024
Validation324,2562024-2025
Test6750,1752025-2026

Calibration uses temperature scaling (Platt scaling) with temp=3.0. This smooths the model's raw probabilities so they better represent true likelihoods rather than overconfident point estimates.

Understanding the Brier score

The Brier score measures calibration - how well predicted probabilities match actual outcomes. Lower is better. A perfect forecaster scores 0.0. A coin flip scores 0.25.

0.351

Our model

0.342

Market baseline

The market is slightly better calibrated overall. That is expected - prediction markets aggregate thousands of participants, each bringing different information. Beating that aggregate on raw calibration is extremely hard.

But that is not the point.The model scoring 0.351 against the market's 0.342 means our signal data is nearly as informative as the crowd's collective wisdom. Five transport signals from AIS data carry almost as much predictive power as the entire market's order flow.

The real value is not beating the market's Brier score. It is having the signals before the market reprices. When throughput drops, you see it in the API. The market sees it when enough traders notice. That gap - hours to sometimes a full day - is where the money is.

The 6 chokepoints

Global shipping funnels through a handful of narrow passages. When any one of these gets disrupted, prediction markets react - but usually late. Here is what each one controls.

ChokepointLocationWhy it matters
Suez CanalEgyptConnects Mediterranean to Red Sea, ~12% of global trade
Panama CanalPanamaLinks Atlantic to Pacific, ~5% of global trade
Strait of HormuzIran/Oman~20% of the world's oil passes through here
Bab el-MandebYemen/DjiboutiEntry to Red Sea, Houthi attacks disrupted shipping
Strait of MalaccaMalaysia/IndonesiaBusiest shipping lane, ~25% of global trade
BosporusTurkeyConnects Black Sea to Mediterranean

Veblyn tracks all six. Each chokepoint gets its own set of five transport signals, updated continuously from AIS data and maritime advisories.

What to watch for

You do not need to build a model to make money on shipping markets. Here are the practical rules we use internally.

Throughput drops >10% below 14-day average

This is your early warning. When vessel counts fall meaningfully below the rolling baseline, something is happening at the chokepoint. Pull up the relevant markets and check if the price has moved yet. If it has not - that is your window.

Reroute share is rising

When ships start detouring around a chokepoint, the reroute_share signal climbs before any official advisory gets issued. Markets tend to follow within hours of the reroute becoming visible in the data.

Closure indicator flips to 1

This is the strongest signal in the dataset. When a chokepoint closes completely, markets reprice fast. If you see this in the API before it hits the news, act immediately. These moves are large and rapid.

Security risk index above 0.5

Elevated risk does not always mean a closure is coming, but it means the market should be pricing in higher uncertainty. Compare the security_risk_index to the current market probability - if the market is too calm relative to the risk level, there is an opportunity.

Check daily

You can monitor these signals on the Veblyn dashboard or pull them via the API. Shipping disruptions do not happen every day, but when they do, the traders who see the data first capture the repricing. Set up a daily check and wait.

Why this matters for you

Having real-time AIS data aligned to prediction markets gives you an informational edge that most traders simply do not have. You see the disruption in the data before it is priced in.

That is what Veblyn provides through a clean API - normalized shipping signals connected to every relevant market. No scraping. No manual lookups. No waiting for news to break on Twitter. The data is already there, structured and ready to act on.

Access shipping signals and 4 other data streams on Veblyn.

Free API key. Start pulling signals in 5 minutes.

Create Free Account