PortTrip Labs

How we score cruise ports

Every score on PortTrip follows a documented methodology. No black boxes. This page explains exactly how Ship-Safe confidence, route reliability, tender risk, and crowd severity are calculated — including the formulas, confidence bands, and known limitations.

Core Principles

Scores are transparent — every metric is explained and documented here.

Scores are honest — insufficient data is labelled "Estimated", not presented as verified.

Scores are independent — no cruise line or excursion operator influences rankings.

Scores decay — stale data is flagged, not silently used as current intelligence.

Route Reliability Score

Reliability = (Σ positive_weight) / (Σ total_weight) × 100

Each ValidationSignal carries a weight based on specificity. "Worked perfectly" = weight 3. "Route accurate" = weight 2. "Cut it close" or negative reactions reduce the score. Minimum 5 confirmations required before a score is published. Below 5, the score shows as "Estimated."

Confidence Bands

80–100High confidence — multiple recent cruiser confirmations align
60–79Moderate confidence — some confirmations, limited recency
40–59Low confidence — conflicting reports or sparse data
<40Insufficient data — estimate only

Ship-Safe Confidence

Ship-Safe = base_buffer_met + transport_reliability_factor − tender_adjustment − peak_season_modifier

Calculated from: (1) whether the recommended 90-minute buffer is achievable with actual transport times, (2) transport reliability score for the port, (3) tender port flag (adds 30-min deduction), (4) seasonal crowd modifier (peak season reduces confidence by 10–15 points). All timing uses terminal-to-city times, not port-city centre estimates.

Confidence Bands

85–100Highly achievable with standard 90-min buffer
65–84Achievable — follow guidance carefully
40–64Marginal — extend buffer to 120 min recommended
<40High risk — only experienced independent cruisers advised

Tender Risk Score

Tender_Risk = base_queue_estimate × season_multiplier + historical_delay_factor

Only applies to ports marked as tender-mandatory. Base queue estimated from port capacity and typical ship size. Season multiplier: 1.0 (off-peak) to 1.6 (peak July–August). Historical delay factor sourced from cruiser reports of queue wait times. Last-tender window factored separately from all-aboard time.

Crowd Severity

Crowd = seasonal_baseline × ship_volume_factor + recent_validation_adjustment

Seasonal baseline derived from known cruise season patterns per port (e.g. Dubrovnik peaks June–August). Ship volume factor adjusts for ports with multiple simultaneous ships. Recent validation adjustment: if cruisers report unusually high or low crowds vs baseline, score is adjusted ±10 points. Score is not claimed to be real-time.

Confidence Bands

8–10Expect significant crowds — plan accordingly
5–7Moderate crowd pressure
1–4Relatively uncrowded

Freshness Score & Decay

Freshness = 100 − (days_since_last_validation × decay_rate)

Decay rate: 1 point per day for individual signals. A signal is considered "fresh" for 60 days, "stale" after 120 days, and "expired" after 180 days. Expired signals are excluded from reliability scores but retained in the database for historical reference. Pages with no validations in 120+ days are marked as "Estimated, not recently confirmed."

Validation Confidence Weighting

Signal_weight = base_weight × recency_factor × specificity_bonus

Base weights: "worked_perfectly" = 3, "route_accurate" = 2, "tested_this" = 2, "cut_it_close" = 1, negative reactions = 1 (downward). Recency factor: 1.0 (0–30 days), 0.8 (31–60 days), 0.5 (61–120 days), 0.2 (121–180 days). Specificity bonus: signals with a route note attached receive ×1.2.

Known Limitations

1.

Port conditions are not real-time. Crowd and transport data is based on seasonal patterns + cruiser reports, not live feeds.

2.

Transport times use terminal-to-city routes researched independently — Google Maps estimates are not used as the data source.

3.

Scores may lag during unusual events (strikes, extreme weather) until cruiser validations update the dataset.

4.

Not all ports have sufficient validation data. Ports with fewer than 5 signals show "Estimated" labels.

5.

Ship-Safe scores assume standard cruise ship operations. Technical delays, port closures, or last-minute itinerary changes are not modelled.

6.

PortTrip is not responsible for missed embarkation. All timing recommendations are guidelines, not guarantees.

Methodology Questions

How does PortTrip calculate the Ship-Safe score?

Ship-Safe score combines whether the 90-minute return buffer is achievable with actual transport times, the port's transport reliability score, a tender port deduction, and a seasonal crowd modifier. Scores below 65 trigger a warning to extend the buffer to 120 minutes.

Are PortTrip scores based on real cruiser data?

Partially. Scores are based on a combination of independently researched transport/timing data and community ValidationSignals submitted by real cruisers. Where insufficient signals exist (<5), scores are clearly labelled "Estimated".

How quickly does data go stale?

Individual signals decay over 180 days. After 60 days a signal is "stale", after 120 days "aging", after 180 days it's excluded from active scores. Pages are labelled with their freshness state.

Does PortTrip have affiliate relationships with cruise lines?

No. PortTrip has no affiliate relationships with cruise lines or ship excursion operators. All scoring is independent. Some tools link to third-party excursion providers (e.g. GetYourGuide) under standard affiliate terms — these do not influence port scores.

How can I report incorrect data?

Use the "Report a port condition" button on any port page, or submit a ValidationSignal. Conflicting signals are surfaced publicly alongside the main score.

We use cookies

Essential cookies are always on. We only enable analytics, marketing, personalisation, and session replay if you allow them. You can change this any time. Policy version 1.0.0. Privacy policy