Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Random-Forest-Mangrove-Python

Notebook ini mengimplementasikan klasifikasi tutupan lahan mangrove menggunakan algoritma Random Forest berbasis data Sentinel-2 SR Harmonized melalui platform Google Earth Engine (GEE). Output berupa peta klasifikasi tiga kelas: Badan Air, Mangrove, dan Non-Mangrove.

Repositori di GitHub

Oleh: Defani Arman Alfitriansyah

Seluruh tahapan analisis dalam notebook ini dijalankan di Google Colaboratory menggunakan library geemap yang terhubung dengan Google Earth Engine (GEE). Notebook dapat diakses di: https://colab.research.google.com/drive/1QbNTV-tW1OE2vAPIRL58LTYWdCHZ9AuW?usp=sharing


Daftar Isi

  1. Gambaran Umum

  2. Platform & Package

  3. Alur Kerja

  4. Indeks Rumus

  5. Cloud Masking — Cloud Score+

  6. Algoritma Random Forest

  7. Band Sentinel-2 yang Digunakan

  8. Tahapan Analisis

  9. Evaluasi Akurasi

  10. Daftar Referensi


Gambaran Umum

Notebook ini mengimplementasikan klasifikasi tutupan lahan mangrove menggunakan algoritma Random Forest berbasis data Sentinel-2 SR Harmonized melalui platform Google Earth Engine (GEE). Output berupa peta klasifikasi tiga kelas: Badan Air, Mangrove, dan Non-Mangrove.


Platform dan Package

Seluruh proses komputasi dijalankan di Google Colaboratory menggunakan koneksi ke Google Earth Engine melalui library geemap.

Instalasi

!pip install earthengine-api geemap cartopy matplotlib numpy scikit-learn

Package yang Digunakan

PackageVersiFungsi
earthengine-apilatestAkses Google Earth Engine Python API
geemaplatestVisualisasi peta interaktif berbasis GEE di Colab
geemap.cartoee(bagian geemap)Ekspor peta GEE ke matplotlib dengan proyeksi kartografi
cartopylatestProyeksi peta dan gridline (LONGITUDE_FORMATTER, LATITUDE_FORMATTER)
matplotliblatestVisualisasi dan plotting hasil klasifikasi
numpylatestOperasi array dan matriks
pandaslatestManipulasi data tabular (variable importance)
seabornlatestHeatmap confusion matrix dan visualisasi statistik
scikit-learnlatestMetrik evaluasi tambahan

Autentikasi GEE

import ee
ee.Authenticate()
ee.Initialize(project='ee-defaniarman')

Alur Kerja

Sentinel-2 SR Harmonized (2024–2025)
            |
    Cloud Masking (Cloud Score+, cs_cdf >= 0.60)
            |
    Komposit Median + Clip Batas Kajian
            |
    Hitung Indeks: NDVI, NDWI, NDMI, NDBI, IRECI
            |
    Ekstraksi Nilai ke Titik Sampel (sampleRegions)
            |
    Training Random Forest (500 pohon, split 70:30)
            |
    Klasifikasi Citra --> 3 Kelas
            |
    Evaluasi: Confusion Matrix, OA, Kappa

Indeks Rumus

1. NDVI

Normalized Difference Vegetation Index

Mengukur kerapatan dan kehijauan vegetasi.

NDVI=B8−B4B8+B4\text{NDVI} = \frac{B8 - B4}{B8 + B4}
SimbolBand Sentinel-2Panjang Gelombang
B8NIR (Near-Infrared)~842 nm
B4Red~665 nm

Interpretasi: Nilai mendekati +1 = vegetasi lebat. Nilai mendekati 0 = lahan terbuka. Nilai negatif = air.

ndvi = s2.select('B8').subtract(s2.select('B4')) \
         .divide(s2.select('B8').add(s2.select('B4'))) \
         .rename('NDVI')

Sitasi: Rouse et al. (1973); Tucker (1979); Jamaluddin et al. (2022)


2. NDWI

Normalized Difference Water Index

Mengidentifikasi badan air permukaan dan kelembapan kanopi.

NDWI=B3−B8B3+B8\text{NDWI} = \frac{B3 - B8}{B3 + B8}
SimbolBand Sentinel-2Panjang Gelombang
B3Green~560 nm
B8NIR (Near-Infrared)~842 nm

Interpretasi: Nilai positif = badan air. Nilai negatif = vegetasi/lahan kering.

ndwi = s2.select('B3').subtract(s2.select('B8')) \
         .divide(s2.select('B3').add(s2.select('B8'))) \
         .rename('NDWI')

Sitasi: McFeeters (1996)


3. NDMI

Normalized Difference Moisture Index

Mengukur kandungan air pada vegetasi (kelembapan kanopi).

NDMI=B8−B11B8+B11\text{NDMI} = \frac{B8 - B11}{B8 + B11}
SimbolBand Sentinel-2Panjang Gelombang
B8NIR (Near-Infrared)~842 nm
B11SWIR-1 (Short-Wave Infrared)~1610 nm

Interpretasi: Nilai tinggi = vegetasi dengan kelembapan tinggi (cocok untuk mangrove). Nilai rendah = vegetasi kering atau lahan terbuka.

ndmi = s2.select('B8').subtract(s2.select('B11')) \
         .divide(s2.select('B8').add(s2.select('B11'))) \
         .rename('NDMI')

Sitasi: Shi et al. (2016); Jamaluddin et al. (2022)


4. NDBI

Normalized Difference Built-up Index

Mengidentifikasi kawasan terbangun/permukiman.

NDBI=B11−B8B11+B8\text{NDBI} = \frac{B11 - B8}{B11 + B8}
SimbolBand Sentinel-2Panjang Gelombang
B11SWIR-1 (Short-Wave Infrared)~1610 nm
B8NIR (Near-Infrared)~842 nm

Catatan: NDBI adalah kebalikan dari NDMI. Nilai positif mengindikasikan kawasan terbangun; nilai negatif mengindikasikan vegetasi.

ndbi = s2.select('B11').subtract(s2.select('B8')) \
         .divide(s2.select('B11').add(s2.select('B8'))) \
         .rename('NDBI')

Sitasi: Zha et al. (2003)


5. IRECI

Inverted Red-Edge Chlorophyll Index

Mengukur kandungan klorofil menggunakan band Red-Edge — sangat sensitif terhadap vegetasi mangrove.

IRECI=B8−B4B5/B6\text{IRECI} = \frac{B8 - B4}{B5 / B6}

Dapat ditulis juga sebagai:

IRECI=(B8−B4)×B6B5\text{IRECI} = \frac{(B8 - B4) \times B6}{B5}
SimbolBand Sentinel-2Panjang Gelombang
B8NIR (Near-Infrared)~842 nm
B4Red~665 nm
B5Red-Edge 1~705 nm
B6Red-Edge 2~740 nm

Interpretasi: Nilai tinggi = kandungan klorofil tinggi, vegetasi sehat dan lebat. Sangat berguna untuk membedakan mangrove dari vegetasi lain.

ireci = s2.select('B8').subtract(s2.select('B4')) \
          .divide(s2.select('B5').divide(s2.select('B6'))) \
          .rename('IRECI')

Sitasi: Clevers et al. (2000); Suardana et al. (2023)


Cloud Masking

Proses cloud masking menggunakan Cloud Score+ (CS+), produk quality assessment (QA) berbasis deep learning yang dikembangkan oleh Google. CS+ menghasilkan skor QA per piksel pada rentang kontinu [0, 1], di mana nilai mendekati 1 = piksel bersih dan nilai mendekati 0 = piksel terkontaminasi awan atau bayangan awan.

Model QA

Setiap piksel dimodelkan sebagai kombinasi linear antara reflektansi asli permukaan dan kontaminasi atmosfer:

pm=pt⋅q+c⋅(1−q)p_m = p_t \cdot q + c \cdot (1 - q)
QA(pm)=qQA(p_m) = q
SimbolKeterangan
pmp_mNilai piksel yang diukur sensor
ptp_tReflektansi asli permukaan
ccKomponen kontaminasi atmosfer
qqSkor QA piksel, q∈[0,1]q \in [0, 1]

Atmospheric Similarity (ASIM)

ASIMi(xi,yi):=min⁡p∈{xi,yi}QA(p)ASIM_i(x_i, y_i) := \min_{p \in \{x_i, y_i\}} QA(p)

Jika rr adalah citra referensi bersih (QA(r)=1QA(r) = 1), maka ASIM(x,r)=QA(x)ASIM(x, r) = QA(x).

Log Transform Input

x′=log⁡(x+1)10x' = \frac{\log(x + 1)}{10}

Penerapan dalam Notebook

csPlus = ee.ImageCollection('GOOGLE/CLOUD_SCORE_PLUS/V1/S2_HARMONIZED')

def maskS2CSPlus(image):
    qa = image.select('cs_cdf')
    return image.updateMask(qa.gte(0.60))

s2 = (s2_base
    .linkCollection(csPlus, ['cs_cdf'])
    .map(maskS2CSPlus)
    .median()
    .clip(batas_kajian)
    .divide(10000))

Threshold cs_cdf >= 0.60 digunakan untuk menyeimbangkan omission dan commission error.

Sitasi: Pasquarella et al. (2023)


Algoritma Random Forest

Random Forest (RF) adalah algoritma ensemble berbasis pohon keputusan yang menggunakan majority voting dari sejumlah pohon untuk menentukan kelas akhir setiap piksel.

Screenshot 2026-06-09 012602

Dataset dibagi ke sejumlah pohon keputusan (Tree 1, Tree 2, ..., Tree 500). Setiap pohon menghasilkan prediksi kelas secara independen. Kelas akhir ditentukan melalui Majority Voting dari seluruh pohon.

Implementasi dalam GEE

classifier = ee.Classifier.smileRandomForest(500).train(
    features=training_data,
    classProperty='lc',
    inputProperties=all_bands
)
classified_image = image_with_indices.select(all_bands).classify(classifier)
ParameterNilai
Jumlah pohon500
Properti kelaslc (land cover)
Fitur prediktor15 (10 band + 5 indeks)
Split data70% train / 30% test

Sitasi: Breiman (2001); Jamaluddin et al. (2022)


Band Sentinel-2

BandNamaPanjang GelombangResolusi
B2Blue~490 nm10 m
B3Green~560 nm10 m
B4Red~665 nm10 m
B5Red-Edge 1~705 nm20 m
B6Red-Edge 2~740 nm20 m
B7Red-Edge 3~783 nm20 m
B8NIR~842 nm10 m
B8ANarrow NIR~865 nm20 m
B11SWIR-1~1610 nm20 m
B12SWIR-2~2190 nm20 m
NDVIVegetation Index——
NDWIWater Index——
NDMIMoisture Index——
NDBIBuilt-up Index——
IRECIRed-Edge Chlorophyll Index——

Total prediktor: 15 fitur (10 band spektral + 5 indeks turunan)

Sitasi: ESA (2012); ESA (2015); Suardana et al. (2023)


Tahapan Analisis

1. Preprocessing Citra

2. Pelatihan Model

3. Kelas Klasifikasi

KodeKelasWarna
0Badan AirBiru muda
1MangroveHijau
2Non-MangroveKuning muda
download (44)

Evaluasi Akurasi

download (45)

Overall Accuracy (OA)

OA=∑imii∑i∑jmij\text{OA} = \frac{\sum_{i} m_{ii}}{\sum_{i}\sum_{j} m_{ij}}

User’s Accuracy (UA) dan Producer’s Accuracy (PA)

UA=TNTN+FPUA = \frac{TN}{TN + FP}
PA=TPTP+FNPA = \frac{TP}{TP + FN}

Sitasi: Jamaluddin et al. (2022)

Kappa Coefficient

κ=Po−Pe1−Pe\kappa = \frac{P_o - P_e}{1 - P_e}
Nilai KappaInterpretasi
> 0.80Sangat baik
0.60 – 0.80Baik
0.40 – 0.60Sedang
< 0.40Lemah

Hasil

MetrikNilaiInterpretasi
Overall Accuracy0.945594.55% piksel diklasifikasikan dengan benar
Kappa Coefficient0.8511Sangat baik (> 0.80)

Daftar Referensi

Algoritma & Model

Breiman, L. (2001). Random Forests. Machine Learning, 45, 5–32. Breiman (2001)

Cloud Masking

Pasquarella, V. J., Brown, C. F., Czerwinski, W., & Rucklidge, W. J. (2023). Comprehensive quality assessment of optical satellite imagery using weakly supervised video learning. CVPR Workshop 2023, pp. 2125–2135.

Indeks Vegetasi

Clevers, J. G. P. W., Jong, S. M. De, Epema, G. F., Addink, E. A., & Box, P. O. (2000). MERIS and the Red-Edge Index. 2nd EARSeL Workshop, Enschede. (IRECI)

McFeeters, S. K. (1996). The use of the Normalized Difference Water Index (NDWI) in the delineation of open water features. International Journal of Remote Sensing, 17(7), 1425–1432. (NDWI)

Rouse, J. W., Haas, R. H., Schell, J. A., & Deering, D. W. (1973). Monitoring Vegetation Systems in the Great Plains with ERTS. Remote Sensing Center. (NDVI)

Shi, T., Liu, J., Hu, Z., Liu, H., Wang, J., & Wu, G. (2016). New spectral metrics for mangrove forest identification. Remote Sensing Letters, 7(9), 885–894. (NDMI)

Tucker, C. J. (1979). Red and photographic infrared linear combinations for monitoring vegetation. Remote Sensing of Environment, 8, 127–150. (NDVI, DVI)

Zha, Y., Gao, J., & Ni, S. (2003). Use of normalized difference built-up index in automatically mapping urban areas from TM imagery. International Journal of Remote Sensing, 24(3), 583–594. (NDBI)

Pemetaan Mangrove dengan Random Forest

Jamaluddin, I., Chen, Y.-N., Ridha, S. M., Mahyatar, P., & Ayudyanti, A. G. (2022). Two Decades Mangroves Loss Monitoring Using Random Forest and Landsat Data in East Luwu, Indonesia (2000–2020). Geomatics, 2, 282–296. Jamaluddin et al. (2022)

Suardana, A. A. Md. A. P., Anggraini, N., Nandika, M. R., Aziz, K., As-syakur, A. R., Ulfa, A., Wijaya, A. D., Prasetio, W., Winarso, G., & Dewanti, R. (2023). Estimation and Mapping Above-Ground Mangrove Carbon Stock Using Sentinel-2 Data Derived Vegetation Indices in Benoa Bay of Bali Province, Indonesia. Forest and Society, 7(1), 116–134. Suardana et al. (2023)

Data Satelit

ESA. (2012). Sentinel-2: ESA’s Optical High-Resolution Mission for GMES Operational Services.

ESA. (2015). Sentinel-2 User Handbook. ESA Standard Document.

Gorelick, N., Hancher, M., Dixon, M., Ilyushchenko, S., Thau, D., & Moore, R. (2017). Google Earth Engine: Planetary-scale geospatial analysis for everyone. Remote Sensing of Environment, 202, 18–27.

Software & Library

Jupyter / Google Colaboratory: https://colab.research.google.com

Wu, Q. (2020). geemap: A Python package for interactive mapping with Google Earth Engine. Journal of Open Source Software, 5(51), 2305. Wu (2020)

Wu, Q., & Landgrebe, T. (2023). geemap (Python package). https://geemap.org

Pedregosa, F., Varoquaux, G., Gramfort, A., Michel, V., Thirion, B., Grisel, O., ... Duchesnay, É. (2011). Scikit-learn: Machine Learning in Python. Journal of Machine Learning Research, 12, 2825–2830.

Hunter, J. D. (2007). Matplotlib: A 2D graphics environment. Computing in Science & Engineering, 9(3), 90–95.

Harris, C. R., et al. (2020). Array programming with NumPy. Nature, 585, 357–362.

Waskom, M. (2021). seaborn: statistical data visualization. Journal of Open Source Software, 6(60), 3021. Waskom (2021)

Notebook

Notebook dari repositori ini, tampil lengkap dengan sel kode dan hasilnya:

References
  1. Breiman, L. (2001). Random Forests. Machine Learning, 45(1), 5–32. 10.1023/a:1010933404324
  2. Jamaluddin, I., Chen, Y.-N., Ridha, S. M., Mahyatar, P., & Ayudyanti, A. G. (2022). Two Decades Mangroves Loss Monitoring Using Random Forest and Landsat Data in East Luwu, Indonesia (2000–2020). Geomatics, 2(3), 282–296. 10.3390/geomatics2030016
  3. Suardana, A. A. Md. A. P., Anggraini, N., Nandika, M. R., Aziz, K., As-syakur, Abd. R., Ulfa, A., Wijaya, A. D., Prasetio, W., Winarso, G., & Dewanti, R. (2023). Estimation and Mapping Above-Ground Mangrove Carbon Stock Using Sentinel-2 Data Derived Vegetation Indices in Benoa Bay of Bali Province, Indonesia. Forest and Society, 7(1), 116–134. 10.24259/fs.v7i1.22062
  4. Wu, Q. (2020). geemap: A Python package for interactive mapping with Google Earth Engine. Journal of Open Source Software, 5(51), 2305. 10.21105/joss.02305
  5. Waskom, M. (2021). seaborn: statistical data visualization. Journal of Open Source Software, 6(60), 3021. 10.21105/joss.03021