Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SIGAP-Longsor

Sistem peringatan dini longsor untuk Indonesia: susceptibility resolusi 30 m, pemicu hujan harian, dan lapisan aksi berbantuan LLM — divalidasi pada 519 kabupaten/kota di 34 provinsi.

Datathon RISTEK Fasilkom UI 2026 — University Track — Tim cupuu

Deliverable Tautan
Model (Hugging Face) https://huggingface.co/FrederickAllensius/sigap-longsor
Repositori https://github.com/draxmit/datathon-product
Makalah paper/cupuu_Paper_Semifinal.pdf

Bundel model ikut di repositori ini (produk/bundel/), jadi dasbor dapat dijalankan tanpa mengunduh apa pun dari Hugging Face. Repositori Hugging Face memuat bundel yang sama beserta model card — ambang, daftar fitur, hasil evaluasi lima protokol, dan batasan sistem.


Coba dalam 2 menit

Dasbor sudah dibundel: model, poligon peta, dan arsip hujan tersimpan di produk/bundel/ (±18 MB), jadi tidak perlu mengunduh 8,8 GB data mentah untuk menjalankannya.

pip install -r requirements.txt
streamlit run produk/app.py

Tanggal yang menarik untuk dicoba: 2024-03-07 (hari terbasah dalam arsip, 14 kabupaten terpicu) dan 2019-09-11 (hari terkering, 0 kabupaten terpicu — sistem memang diam).

Dua antarmuka, satu mesin skor

Perintah Antarmuka
streamlit run produk/app.py Dasbor Streamlit — tervalidasi, dipakai demo makalah
python produk/dasbor/server.py Dasbor mandiri di http://127.0.0.1:8530 — tampilan ditulis sendiri

Keduanya memanggil produk/sigap.py dan produk/distribusi.py yang sama, jadi angka di kedua layar tidak dapat berbeda. Yang berbeda hanya lapisan tampilannya: dasbor mandiri menggambar petanya sendiri sebagai SVG (tanpa ubin, jalan tanpa jaringan) dan menghitung ulang ambang anggaran di peramban, sehingga slider kapasitas berubah seketika alih-alih menjalankan ulang seluruh skrip. Rinciannya di produk/dasbor/README.md.


Status Implementasi

Tabel ini menyatakan apa yang sudah berjalan dan dapat diuji, dan apa yang belum. Setiap klaim pada makalah dapat ditelusuri ke baris di bawah.

Komponen Status Bukti
DEM 30 m se-Indonesia (414 ubin Copernicus GLO-30) ✅ Berjalan skrip/get_dem_seluruh_indonesia.py
Fitur terrain per kabupaten (519/519) ✅ Berjalan skrip/kab_fitur_statis.pydata/kab_fitur_statis.csv
Arsip hujan harian 2018–2024 (519/519 kabupaten) ✅ Berjalan skrip/hujan_kabupaten.pydata/hujan_kabupaten.json
Penyaringan longsor ko-seismik (katalog USGS) ✅ Berjalan dump/skrip-riset/tandai_koseismik.py — 109/1.202 (9,1%) disaring
Tier 1 — susceptibility statis 30 m ✅ Berjalan dump/skrip-riset/tier1_train_pvmbg.py — Jawa Barat
Tier 2 — pemicu hujan (case-control) ✅ Berjalan dump/skrip-riset/tier2_hujan.py, dump/skrip-riset/tier_gabungan.py
Model kabupaten-hari nasional + LOPO ✅ Berjalan skrip/kab_model.py — 2 konfigurasi negative sampling
Skor nasional + peta choropleth ✅ Berjalan dump/skrip-riset/skor_nasional.pyhasil/peta_skor_nasional.png
Kurva recall vs beban alarm (out-of-fold) ✅ Berjalan produk/kurva_operasional.py
Mesin skor + atribusi SHAP + narasi berlapis ✅ Berjalan produk/sigap.py
Dasbor BPBD (5 tab: prioritas, detail, kapasitas, keandalan, simulasi) ✅ Berjalan produk/app.py
Lapisan LLM + pengaman ✅ Berjalan produk/sigap.py::narasi_llmfallback deterministik
Modul validasi kelayakan (Landslide4Sense) ✅ Berjalan sigap-longsor-modul-validasi.ipynb Bab 0–16
Litologi nasional ✅ Berjalan geoportal.esdm.go.id — cakupan nasional. Versi awal README menyebut layanan ini mati; itu keliru, yang 404 adalah host geologi.esdm.go.id
Susceptibility 8 m (DEMNAS) ⬜ Belum Portal BIG mengembalikan respons kosong
Umpan hujan real-time ⚠️ Layak, belum dibangun Sumber yang sama berlatensi 0 hari — lihat catatan sumber di bawah
Distribusi WhatsApp/SMS ⬜ Belum Rancangan pada makalah §5.1
Agregasi ke poligon desa ⬜ Belum Unit terkecil saat ini kabupaten — lihat "Unit alarm"

Hasil utama

Model kabupaten-hari nasional

Dilatih pada 7.648 sampel kabupaten-hari (478 positif dari 102 kabupaten, setelah penyaringan ko-seismik), ensemble RandomForest + LightGBM.

Protokol evaluasi AUC Menjawab
GroupKFold kabupaten — Konfig A 0,931 kabupaten baru di wilayah yang sudah dikenal
GroupKFold kabupaten — Konfig B 0,831 sama, geografi dikunci ke kabupaten pernah longsor
Leave-one-block-out (5 blok) 0,874 wilayah sama sekali baru — 100% positif teruji
Leave-one-province-out (3 provinsi) 0,836 provinsi ditahan penuh (83% positif)
Spatio-temporal (paling ketat) 0,850 wilayah baru dan tahun masa depan

Angka di atas berasal dari produk/bundel/metrik.json — sumber yang sama yang dibaca dasbor dan makalah, sehingga ketiganya tidak dapat menyimpang diam-diam.

Selisih A−B (0,10–0,17) adalah diagnostik yang disengaja, bukan kelemahan tersembunyi. Konfigurasi A boleh memilih negatif dari kabupaten datar yang tidak akan pernah longsor, sehingga sebagian AUC-nya berasal dari "mengingat geografi". Konfigurasi B menutup jalan itu. Kami melaporkan keduanya karena selisihnya justru mengukur seberapa besar porsi tersebut.

Recall pada beban verifikasi realistis

Diukur out-of-fold — tiap kabupaten diskor oleh model yang belum pernah melihatnya.

Beban verifikasi Tolok ukur peringkat Di wilayah yang sama sekali baru
3 kabupaten/hari 31.2% 19.0%
5 kabupaten/hari 42.5% 23.6%
8 kabupaten/hari 51.5% 28.9%
25 kabupaten/hari 73.2% 54.6%

Kolom kiri diukur pada kabupaten baru di wilayah yang sudah dikenal; kolom kanan pada wilayah yang belum pernah dilihat sama sekali (leave-one-block-out). Kolom kanan adalah yang seharusnya dikutip untuk perluasan ke wilayah tak berlabel. Keduanya retrospektif — belum ada validasi prospektif.

AUC 0,83–0,93 tidak berarti sistem menangkap 83–93% kejadian. Penyebabnya ketimpangan kelas: longsor tercatat terjadi pada sekitar 1 dari 116 kabupaten-hari. Sistem ini memfokuskan perhatian 44× lebih baik daripada memilih acak pada beban 5 kabupaten/hari — bukan menjamin penangkapan. Angka ini ditampilkan di dasbor, bukan disembunyikan.

Satu AUC menyembunyikan dua kemampuan. Dipecah menurut apakah pasangan pembandingnya berasal dari kabupaten yang sama, kemampuan mengenali tempat adalah 0,932 sementara kemampuan menentukan hari hanya 0,774 — dan model statis-saja terbukti 0,500 tepat pada metrik yang kedua. Rinciannya di skrip/kab_dekomposisi_skill.py dan makalah §4.6.

Modul validasi kelayakan (Landslide4Sense)

Pada 50 patch validasi terpisah di level patch (bebas kebocoran spasial): F1 = 0,697 (IoU 0,534), ROC AUC = 0,987, 95% CI bootstrap [0,577–0,763], waktu fit 27,1 detik (CPU 12-core, tanpa GPU). Modul ini membuktikan kelayakan pipeline, bukan implementasi Tier 1 — tugas, masukan, dan labelnya berbeda (lihat makalah §4.1).


Unit alarm: kabupaten, bukan desa

Skor dihitung pada resolusi 30 m, tetapi alarm dipicu di tingkat kabupaten. Ini keputusan desain yang dipaksa oleh data, bukan penyederhanaan.

Longsor tercatat terjadi pada sekitar 1 dari 25.000 desa-hari. Pada prevalensi itu, menangkap 80% kejadian di tingkat desa menuntut peringatan pada ~44% desa setiap hari — tidak mungkin dijalankan siapa pun. Pada tingkat kabupaten prevalensinya ~200× lebih tinggi (1 per ~116 kabupaten-hari), dan beban 3–8 kabupaten/hari se-Indonesia berada dalam kapasitas piket BPBD yang nyata.


Struktur repositori

.
├── README.md · requirements.txt · .gitignore
├── sigap-longsor-modul-validasi.ipynb   # modul validasi kelayakan (Bab 0–16)
├── produk/                              # dasbor operasional — MULAI DARI SINI
│   ├── app.py                           # dasbor Streamlit (tampilan saja)
│   ├── sigap.py                         # mesin inti: skor, SHAP, narasi berlapis
│   ├── bangun_bundel.py                 # latih model produksi + distribusi referensi
│   ├── kurva_operasional.py             # kurva recall vs beban, out-of-fold
│   ├── sederhanakan_peta.py             # poligon 159 MB → 2,6 MB
│   ├── bundel/                          # aset siap pakai (±18 MB, ikut di-commit)
│   └── README.md                        # catatan desain produk
├── skrip/                               # 31 skrip pipeline (lihat urutan di bawah)
├── data/                                # 8,8 GB — TIDAK di-commit (.gitignore)
├── hasil/                               # gambar hasil untuk makalah
├── paper/
│   └── cupuu_Paper_Semifinal.pdf        # AI Product Proposal — makalah semifinal
├── panduan/                             # ketentuan & rubrik semifinal
└── arsip/                               # versi lama, jejak revisi

arsip/ dan panduan/ bukan bagian dari produk; keduanya disimpan agar riwayat keputusan dapat ditelusuri.


Membangun ulang dari nol

Hanya perlu bila ingin memverifikasi pipeline penuh — dasbor sudah jalan dari bundel/.

Prasyarat: Python 3.9+, ~9 GB ruang disk, koneksi internet. Tanpa GPU. Tanpa kredensial: seluruh sumber data terbuka dan tidak memerlukan login.

python -m venv .venv && source .venv/bin/activate    # Windows: .venv\Scripts\activate
pip install -r requirements.txt

Jalankan berurutan — perkiraan waktu total ±3 jam, didominasi unduhan:

# Perintah Waktu Keluaran
1 python skrip/get_dem_seluruh_indonesia.py ~90 mnt 414 ubin DEM (7,3 GB)
2 python skrip/kab_fitur_statis.py 38 mnt data/kab_fitur_statis.csv (519 kab)
3 python skrip/hujan_kabupaten.py 18 mnt data/hujan_kabupaten.json
4 python dump/skrip-riset/tandai_koseismik.py <1 mnt penanda longsor akibat gempa
5 python skrip/kab_model.py ~10 mnt model + LOPO, konfigurasi A & B
6 python dump/skrip-riset/skor_nasional.py ~3 mnt hasil/peta_skor_nasional.png
7 python produk/bangun_bundel.py ~4 mnt produk/bundel/
8 python produk/sederhanakan_peta.py ~1 mnt poligon ringan
9 python produk/kurva_operasional.py ~5 mnt kurva recall out-of-fold

Langkah 1 tahan-putus: unduhan memverifikasi Content-Length sebelum menerima berkas dan melanjutkan dari ubin terakhir bila dihentikan. Langkah 2 melewati (bukan menggagalkan) ubin yang tidak terbaca dan mencatatnya.

Reproducibility. Seluruh keacakan dikunci pada SEED = 42random, numpy, PYTHONHASHSEED, serta random_state pada setiap estimator, split, bootstrap, dan permutation importance. Menjalankan ulang menghasilkan angka yang identik.

Modul validasi (opsional, terpisah)

huggingface-cli download ibm-nasa-geospatial/Landslide4sense \
  --repo-type dataset --local-dir ./landslide
export L4S_DATA=$PWD/landslide/dl        # PowerShell: $env:L4S_DATA = "...\landslide\dl"
jupyter notebook sigap-longsor-modul-validasi.ipynb

Kenapa split test, bukan train? Pada seluruh mirror HuggingFace yang kami periksa (ibm-nasa-geospatial, tagaxie, harshinde, Chad-2004), berkas annotations/train/*.h5 berukuran 800 B dan tidak memuat dataset apa pun — HDF5 valid tetapi kosong. Hanya split test yang mask-nya utuh. Notebook mendeteksi split otomatis (test → train → validation) dan memvalidasi setiap mask sebelum dipakai.


Sumber data

Seluruhnya berlisensi terbuka. Tidak ada yang memerlukan login — perubahan disengaja dari rencana awal, karena sumber berkredensial (GPM IMERG lewat Earthdata) membuat pipeline tidak dapat direproduksi orang lain tanpa akun.

Sumber Akses Penggunaan Status
Copernicus GLO-30 AWS Open Data, tanpa auth DEM 30 m, 414 ubin ✅ Aktif
Open-Meteo (analisis ECMWF IFS) Terbuka Hujan harian 2018–2024 ✅ Aktif
PVMBG Terbuka Label longsor (koordinat survei) ✅ Aktif
USGS Earthquake Terbuka Penyaringan ko-seismik ✅ Aktif
geoBoundaries Terbuka Poligon ADM1/ADM2 ✅ Aktif
SoilGrids ISRIC, terbuka Tanah (clay/sand) ✅ Aktif
ESA WorldCover Terbuka Tutupan lahan ✅ Aktif
Landslide4Sense HuggingFace Modul validasi ✅ Aktif
Litologi Badan Geologi ArcGIS Litologi + umur batuan ✅ Nasional
DEMNAS 8 m BIG Susceptibility 8 m ⬜ Portal respons kosong
GPM IMERG Earthdata login Hujan real-time ⬜ Di luar cakupan

Yang sengaja tidak diklaim

Daftar ini ada supaya tidak ada yang perlu menebak batas sistem. Versi lengkap ada di produk/sigap.py::BATASAN dan tampil di tab "Reliabilitas & batas" pada dasbor.

  • Indeks bukan probabilitas longsor — melainkan posisi kondisi hujan-lereng hari ini terhadap 250.000 kabupaten-hari historis.
  • Demo arsip, bukan sistem langsung. Hujan berasal dari arsip analisis ECMWF IFS 2018–2024 (via Open-Meteo best match). Versi awal dokumen ini menyebutnya ERA5; audit sumber menunjukkan itu keliru — data tersimpan cocok ecmwf_ifs 31/31 hari dan ERA5 0/31.
  • Tidak pernah memicu peringatan publik otomatis. Tingkat tertinggi berhenti di permintaan verifikasi lapangan BPBD — konsekuensi langsung dari batas reliabilitas terukur.
  • Longsor akibat gempa di luar cakupan — 9,1% kejadian arsip (Palu, Lombok) disaring keluar dari pelatihan; sistem ini tidak akan menangkapnya.
  • Tidak ada estimasi waktu kejadian — data hujan hanya bergranularitas harian.
  • Sel hujan konvektif lokal bisa terlewat — arsipnya beresolusi ~9 km.
  • Belum ada uji prospektif. Seluruh validasi bersifat retrospektif pada tanggal historis.

Tim

Frederick Allensius · Kang Nicholas Darren Nugroho · Ivan William Lianata Data Science, Universitas Bina Nusantara

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages