Which regions are closest to their limit
Each region's colour is the average AMBANG score of its tracked destinations. 50 is the threshold, where visitor pressure equals what the place can absorb. Click a region to zoom to its islands.
All regions
Colour is the mean of a region's destination scores, so one hot island can sit inside a mild region: zoom in to see them. Grey regions have tracked destinations but no score yet (not enough real data). Unshaded regions are not tracked.
Regions by average score
Average score over time
What is driving one destination's score
Each destination is a single island (Cameron Highlands stays district-level, nothing smaller to split there). Reef cover is the only indicator measured per island; the rest is apportioned from state totals, see Method.
Choose a destination
Shaded states have tracked destinations. Pin colour is the current band. Pins on neighbouring islands are nudged apart so each can be clicked; pins sit on the island outline where the source has one; the Payar group, Rawa and Sembilang have none there, so those are approximate. Boundaries: OpenStreetMap contributors via geoBoundaries (ODbL), simplified.
Nothing chosen yet. Click a pin to open that destination; the map is replaced by its detail, with a Back to map button at the top.
Pressure indicators
Normalised 0–1. Every pressure value is apportioned to the island from state (Cameron: district) data, not measured on the island itself. Weight (%) is entropy-trained, not hand-set, see Method.
Capacity indicators
Waste, water and resident base are state-level and shared by every island in the cluster; live coral cover is the one indicator genuinely measured per island.
Live coral cover by island
Source: Reef Check Malaysia annual surveys. This is the direct ecological measurement, not a proxy, and the strongest evidence in the project for Goal 14.
AMBANG composite score trajectory
Real data we have
| Indicator | Value | Year |
|---|
Each source and its geographic level is listed under the value. State and district figures are shown as they are published, not apportioned to the destination.
Missing before it can be scored
Reported constraints, not scored
Cited news or study findings about this place. They carry no visitor or limit figure, so they do not enter any score.
Seasonality of public interest
What needs attention, and what would change it
Pick a view: who is closest to a limit, what would move a score, or when interest in each place peaks.
Each sparkline is the score history, 2010 to 2023, with the dashed line at the threshold (50). Earlier years are rescaled from state-level series to the latest reading, so read the direction, not the exact past values.
What would move the score
Score as visitors change
The line uses your capacity levers above. The dashed lines are the band boundaries (Warning 45, Alert 60, Critical 75); the large dot is the visitor level you have set. It shows how far visitors would have to fall for this destination to drop a band.
Same formula and weights as Destination detail. The visitor lever scales the normalised visitor indicator by that percentage (it is a min-max scale, so this is approximate); capacity levers add to the 0 to 1 indicator, capped at 0.95. Some indicator values are still illustrative, so read the size of each move, not the exact score.
When interest peaks
Pick a destination above, or click its row in the calendar.
How the score is built
One ratio of pressure to capacity, built from open Malaysian data. Every indicator is labelled real or illustrative here and on each destination page.
SDG 14 Life Below WaterSDG 12 Responsible Consumption and ProductionSDG 8 Decent Work and Economic Growth (extension)
The index
Weighted geometric mean of six indicators, each scaled 0 to 1: visitors, accommodation, hotel arrivals, cost of living, seasonality and occupancy.
Geometric mean of the capacity indicators, equal-weighted today: waste handling, water headroom, resident base and live coral cover (river water quality for Cameron Highlands).
At 50, pressure equals what the place can absorb. Above it, the load exceeds capacity.
| Band | Range | What it means | Indicated response |
|---|---|---|---|
| Normal | < 45 | Comfortable headroom | Promote; absorb demand redirected from stressed sites |
| Warning | 45 to 60 | Approaching threshold | Monitor monthly; prepare staged permit release |
| Alert | 60 to 75 | Load exceeds capacity | Apply quota or pricing; prioritise infrastructure |
| Critical | 75 and up | Sustained exceedance | Consider closure, moratorium, ecological assessment |
Pressure weights
Entropy Weight Method: an indicator that varies more across destinations carries more discriminating information and earns more weight. Higher weight means more discriminating, not more important in a policy sense.
Caveat: trained on a mix of real and illustrative values, so treat the weights as a working pipeline, not a finding.
How the weights were trained
python scripts/train_weights.py, n = 15 destinations × 6 indicators. Re-run on 2026-09-22 after marine park visitors became real data for the 14 marine islands: its weight rose from 22.9% to 45.3%, because the real spread between islands (Kedah's near 0.03, Terengganu's near 0.95) is far wider than the old placeholders. A hand-set 3/2/1 priority scheme was used before there were enough destinations to train on.
Design choices
Why a geometric mean
So one binding constraint, such as no sewage treatment on a small island, cannot be offset by abundance elsewhere. Each destination names its lowest capacity indicator as its binding constraint, the same bottleneck logic (Liebig's law of the minimum) used by tourism carrying-capacity frameworks such as UNWTO/UNEP PAP-RAC and Cifuentes.
Why entropy weights, and not a supervised model or expert panel
The score is derived from these same indicators, so there is no independent target to train a model against; fitting one would only fit noise back onto itself. AHP or Delphi expert weighting needs external panels and several consensus rounds, which do not fit a hackathon timeline. Published Malaysian AHP weights exist for Perhentian and Tioman (Nasir, 2022) and are used as the reference in the capacity research report.
Why capacity weights are equal
Most capacity indicators are state-level, so every island in a state shares the same value. Entropy weighting would give those near-zero weight and reward only coral cover, which is the wrong way round for a weakest-link design. The research report proposes domain weights (ecological 0.35, infrastructure 0.45, resident 0.20) as the next step; they are our assumptions and are not applied yet.
Normalisation
Bounds are computed across the pooled destination-year panel and stored, so new years are scored against fixed history instead of rescaling the past.
Visitor pressure is published at state level. Island figures are scaled from each state's total, so read them as relative ordering, not independent measurements.
The scored islands use the Department of Marine Park Malaysia series, which ends in 2017 on the open portal. The score describes relative pressure, not today.
Waste, water and resident base are the same for every island in a state. Only live coral cover is measured per island.
Population is closer to a pressure measure than a capacity one. It stays for now because it is real and comparable; the research report suggests dropping or moving it.
The entropy weights use a mix of real and illustrative values, so they will shift as more indicators become real.
Alert means a place warrants investigation, not that an ecological determination was made. Official statistics lag, so the newest score describes the latest observable year.
They compare visitors with a daily limit, not the six-indicator score, and the limits disagree between sources. Never compare them with the scored islands.
The Seasonality calendar shows when people look places up. Most curves are nearly flat, so it says little about a visiting season.
Malaysians search in Malay ("Pulau Redang"); English terms mostly show foreign travellers, and the two differ a lot in size and season. We sum English and Malay Wikipedia views and ask for Malay and English Google Trends terms in one chart. An English-only curve would understate local interest.
Data quality
What each number rests on and how far to trust it, which places are covered, what was corrected, and what is still missing. Nothing here is estimated to fill a gap.
Coverage by destination
Own measured for this place. Shared a state or district figure, the same for every place in it, and larger than the place. Provisional a limit was found. none nothing found.
| Destination | Visitors | Coral cover | Water | Waste | Income, population | Daily limit | Score |
|---|
Scored islands also use seasonality, occupancy and accommodation bars; their level, years and grade are on the Indicators and sources tab. Open an island on the Destination detail page to see which of its bars are real. Tracked places that are hidden on the maps (see the toggle on the overview) are listed here too.
Corrections and rejected data
- Payar, Lembu and Kaca map pins were about 1 degree of longitude too far west (99.0 instead of 100.04), in the sea beyond Langkawi. Moved to the Atlas coordinates, which agree with the 2014 polygon file.
- "Besar" is Pulau Babi Besar, not another Pulau Besar: the Reef Check "Pulau Besar" location sits within 1 km of the Atlas point for Babi Besar.
- "42 marine parks" is the federal count: 39 in Terengganu, Pahang, Kedah and Johor plus 3 in Labuan. The Atlas lists 51 protected areas, 46 of them designated Marine Park, so use 42 only for the federal Marine Park Department.
- Atlas page counts for Sabah and Sarawak (5 and 3) differ from its own list (7 and 2). Neither is quoted.
- Kuala Terengganu district was left out for Redang and its neighbours: the 1994 gazette names a district that has since been split, so its figures would describe the wrong place.
- "Only 100 visitors a day" (May 2020) was a COVID rule for all Sabah parks, not a carrying capacity, so it is not used for any score.
- 548,598 visitors to 56 islands (Kosmo, June 2026) has no stated year and no per-island split. It is context only.
- State constituency data (DOSM publishes it) was checked and rejected: the Pangkor and Tioman constituencies include mainland towns, so they would overstate the islands.
- Sembilang map pin was about 22 km east of the gazetted Pulau Sembilang (104.10 instead of 103.89); moved to the Atlas point.
- OpenStreetMap accommodation zeros are not trusted: Rawa has a resort that OSM does not tag, so a zero may only mean untagged. Islands with a zero keep their placeholder bar instead of scoring as having no accommodation.
- Google Trends seasonality was tested as the Seasonality bar and rejected: search interest is flat across months (about 10 to 12 effective months everywhere) and misses the monsoon closures, so real monthly visits from the Marine Park Department are used instead.
What would raise data quality most
- Department of Marine Park Malaysia: per-island visitor counts for 2018 to 2025 and any daily limits. Would replace the state-level series and the 2017 cut-off.
- Sabah Parks: the carrying-capacity study behind the 2019 visitor-limit panel. Would let Tun Sakaran and Pulau Tiga be scored (their visitor counts are already real).
- Sarawak Forestry Corporation: visitor counts for Miri-Sibuti and Talang-Satang, none of which is public.
- Island sewage and waste: published only as news and one resort survey (Perhentian), never as data. Needs a request to the state governments.
Which places are covered
The marine parks of Peninsular Malaysia that Reef Check actually surveys, in four clusters, plus Cameron Highlands as the highland comparison.
- Terengganu: Perhentian, Redang, Lang Tengah, Kapas
- Pahang: Tioman, Tulai, Sembilang
- Kedah: Payar, Lembu, Kaca
- Johor: Sibu, Tinggi, Besar, Rawa
- Highland: Cameron Highlands
Going island-level is limited by ecological data, not by choice: Johor's park has roughly 20 islands but only four have a coral-cover series.
Real visitor numbers compared with a daily limit. Different method; not comparable with the scored islands.
On the map with the real data we have and what is missing, but no score.
- Langkawi: real arrivals (LADA), no limit or capacity figure found
- Pangkor: no usable visitor series
- Fraser's Hill: no usable visitor series; first set aside for low volume, now tracked as a second highland
- Miri: Sarawak data sit behind a manual download
- Selangor, Penang: no marine park, no Reef Check reef, no SWCorp waste column
- Genting Highlands: casino and resort-led; set aside
- Labuan: gazetted, no data verified yet
What each indicator is built from, and how far to trust it
Real fetched from a Malaysian open source. Illustrative a placeholder value, labelled on screen. Outside the score real data used for charts and provisional scores only. Grade: A official, B survey or academic, C registry or crowd-sourced, D news report.
| Indicator | Status | Grade | Source | Level and years | How it was checked | Notes |
|---|---|---|---|---|---|---|
| Pressure (six indicators) | ||||||
| Marine park visitors | Real | A, official | Department of Marine Park Malaysia, via archive.data.gov.my | State, 2000 to 2017 (2015 to 2017 average used) | Totals recomputed from the monthly file; the park list matched to the Atlas by name | Domestic plus foreign counts. 2018 to 2023 are not published on this portal. The per-island split is apportioned, not measured. |
| Cost-of-living pressure | Real | A, official | DOSM household income survey (hh_income_district) | District, 2019 to 2024 | All 297 catalogue entries listed and screened; datasets opened and districts matched by name | Per-island values are apportioned from the district figure. Cannot tell you visitors or anything below district level. |
| Hotel guest arrivals | Illustrative | – | Tourism Malaysia / DOSM | State | – | No machine-readable open series found, so every island keeps a placeholder. |
| Accommodation density | Partly real | C, crowd-sourced | OpenStreetMap, via Overpass | Box around the island, October 2026 | Not independently verified | Count of tagged hotels, resorts and chalets, log-scaled to the busiest island. OpenStreetMap undercounts, so read it as a rough ranking. Islands without a successful fetch keep a placeholder. Rooms and beds are rarely tagged. |
| Occupancy | Real | A, official | Tourism Malaysia paid accommodation survey, via archive.data.gov.my | State, 2015 to 2019 average | – | Hotels in the whole state, not the island. 2020 to 2022 are left out as COVID years. |
| Seasonality | Partly real | A, official | Department of Marine Park Malaysia monthly visitors, 2017 | State, one year | Same monthly file as the visitors row | How concentrated real marine park visits were across the months (monsoon closures show up). Cameron Highlands keeps a placeholder. The search-interest curves on the Early warning page are a separate, descriptive view. |
| Capacity (four indicators, plus river water quality for Cameron Highlands) | ||||||
| Live coral cover | Real | B, survey | Reef Check Malaysia, interactive-map data file | Island or site, 2025 to 2026 | Each location matched to the Atlas point by distance (all within 7 km); single-site values (Pulau Lima 88.8%, Pulau Pinang, Yu Besar, Yu Kecil) rest on one survey site and are flagged on their pages | The one real per-island measurement. 13 of 14 islands; Tulai has no matching site and stays a placeholder. Reef health beyond hard and soft coral cover is not measured. |
| Waste handling | Real | A, official | SWCorp facility directory, via archive.data.gov.my | State, 2020 | Counts matched to the state | Count of managed facilities, identical for every island in a state. The directory has no column for Sabah, Sarawak, Selangor, Penang or Kelantan. Says nothing about the capacity or sewage of any island. |
| Water headroom | Real | A, official | SPAN, via data.gov.my | State, 2022 | Datasets opened and districts matched by name | Production minus consumption. The dataset says no further updates are planned. |
| Resident base | Real | A, official | DOSM population_district | District or state, 2025 | Datasets opened and districts matched by name | A weak capacity measure: see Method, Limits. |
| River water quality (Cameron only) | Illustrative | – | Department of Environment | River basin | – | Placeholder; the real DOE index is not extracted yet. |
| Used for charts, the calendar and provisional scores | ||||||
| Park visitors in Sabah | Outside the score | A, official | Sabah Parks public dashboard | Park, 2020 to 2025 | Read directly from the dashboard's own data feed | Tunku Abdul Rahman Park, Sipadan and Kinabalu. Daily limits are not in it; COVID years are depressed. |
| Mount Kinabalu climbers | Outside the score | A, official | Sabah Parks | Month, 2023 to 2025 average | – | Provisional score and the calendar. |
| Langkawi arrivals | Outside the score | – | Langkawi Development Authority statistics page | Island, 2021 to 2025 | – | Counts every arrival, not park visitors; chart only. |
| Interest curves | Outside the score | – | Wikipedia pageviews in English and Malay (Wikimedia API); Google Trends exports with Malay and English terms | Article or search term, 2016 to 2025 | – | When people look a place up, not when they visit. Malay and English are summed because Malaysians search in Malay. |
| Daily visitor limits | Outside the score | D, report B, academic | News and an academic study (Maidin, 2022) | Sipadan, Kinabalu, Tunku Abdul Rahman Park | Cross-read between articles; disagreements shown as a range | Reported limits that disagree and have changed; shown as ranges. Maidin 2022 and Nasir 2022 are abstracts only (the full thesis was not read) and the time unit of the capacity figures is assumed to be per day. Nasir also supplies the reference weights for Perhentian and Tioman. |
| Weather forecast log | Outside the score | – | MET Malaysia, via data.gov.my | Daily, from October 2026 | – | Recorded by us because the open API keeps no history; correlation needs 26 weeks. |
| Reference data (which parks exist and where) | ||||||
| Park list and locations | Reference | C, registry | Coral Triangle Atlas, MPA list | Park; list refreshed May 2026, boundaries 2014 | Counts reconciled to the 42 federal parks; points compared with the polygon file | Says nothing about management, zoning or effectiveness (unrated for 49 of 51) or visitors. |

