Data demo/riset dari Kaggle ("Indonesia Kualitas Udara Polusi ISPU 2026"). Datanya diperkaya dengan AI dan bukan pengukuran resmi real-time KLHK/BMKG. Jangan dipakai sebagai acuan kesehatan.

Metode evaluasi

Seluruh 10.000 data diacak (seed 42) lalu dibagi menjadi 5 fold (k-fold cross-validation). Setiap model dilatih pada 4 fold dan diuji pada 1 fold sisanya, diulang sampai semua fold pernah menjadi data uji. Normalisasi z-score dihitung dari data latih saja agar tidak ada kebocoran data uji. Untuk klasifikasi dilaporkan akurasi dan macro-F1 (rata-rata F1 semua kelas, adil untuk kelas yang sedikit), dalam bentuk rata-rata ± simpangan baku antar fold. Untuk regresi dilaporkan MAE, RMSE, dan R².

Dihitung 2026-11-12 00:09:00 · 34.2 detik · nilai k diuji 1–30 · Python scikit-learn 1.6.1 · hitung ulang: php artisan ispu:evaluate-models

Temuan utama

1. Perbandingan model klasifikasi

Kategori ISPU (5 kelas) · macro-F1 per skenario

Tingkat risiko (4 tier) · macro-F1 per skenario

Kategori ISPU (5 kelas)

Model Semua fitur (6 polutan + 4 cuaca) PM2.5 + cuaca (sensor terbatas) Cuaca saja (tanpa sensor polutan)
AkurasiMacro-F1 AkurasiMacro-F1 AkurasiMacro-F1
Baseline (kelas terbanyak / rata-rata) 47,1% ±1,5 12,8% ±0,3 47,1% ±1,5 12,8% ±0,3 47,1% ±1,5 12,8% ±0,3
Gaussian Naive Bayes 91,4% ±1,0 84,5% ±5,2 96,1% ±0,8 88,1% ±7,4 40,0% ±15,4 17,8% ±5,3
Decision Tree (CART, kedalaman 8) 100,0% ±0,0 100,0% ±0,0 100,0% ±0,0 100,0% ±0,0 47,4% ±1,0 19,3% ±0,8
kNN berbobot jarak 88,7% ±0,9 79,4% ±4,8 92,5% ±0,4 83,1% ±3,6 43,2% ±1,2 20,1% ±0,6
Rumus resmi ISPU (bukan ML) acuan 99,7% ±0,1 98,9% ±1,8 99,8% ±0,1 99,0% ±1,8 ––

Baris tebal = model ML terbaik (macro-F1, semua fitur). k terbaik kNN per skenario: Semua fitur (6 polutan + 4 cuaca) k=3, PM2.5 + cuaca (sensor terbatas) k=6, Cuaca saja (tanpa sensor polutan) k=5 . Rumus resmi hanya bisa dipakai bila ada data polutan.

Tingkat risiko (4 tier)

Model Semua fitur (6 polutan + 4 cuaca) PM2.5 + cuaca (sensor terbatas) Cuaca saja (tanpa sensor polutan)
AkurasiMacro-F1 AkurasiMacro-F1 AkurasiMacro-F1
Baseline (kelas terbanyak / rata-rata) 46,1% ±1,5 15,8% ±0,4 46,1% ±1,5 15,8% ±0,4 46,1% ±1,5 15,8% ±0,4
Gaussian Naive Bayes 91,9% ±0,6 90,9% ±0,9 96,9% ±0,7 96,5% ±0,8 45,6% ±1,5 24,5% ±0,8
Decision Tree (CART, kedalaman 8) 100,0% ±0,0 100,0% ±0,0 100,0% ±0,0 100,0% ±0,0 46,2% ±1,5 24,3% ±0,6
kNN berbobot jarak 88,7% ±1,0 86,8% ±1,1 92,6% ±0,4 90,6% ±0,7 42,6% ±1,4 25,0% ±1,0

Baris tebal = model ML terbaik (macro-F1, semua fitur). k terbaik kNN per skenario: Semua fitur (6 polutan + 4 cuaca) k=3, PM2.5 + cuaca (sensor terbatas) k=6, Cuaca saja (tanpa sensor polutan) k=5 . Rumus resmi hanya bisa dipakai bila ada data polutan.

2. Perbandingan model regresi

Nilai ISPU

ModelSkenarioMAERMSER²
Baseline (rata-rata) Semua fitur (6 polutan + 4 cuaca) 34,25 46,56 -0,001
Decision Tree 0,07 0,45 1,000
kNN (k=3) 6,97 9,21 0,961
Rumus resmi 0,11 0,70 1,000
Baseline (rata-rata) PM2.5 + cuaca (sensor terbatas) 34,25 46,56 -0,001
Decision Tree 0,07 0,44 1,000
kNN (k=6) 3,85 6,25 0,982
Rumus resmi 0,08 0,43 1,000
Baseline (rata-rata) Cuaca saja (tanpa sensor polutan) 34,25 46,56 -0,001
Decision Tree 34,60 47,00 -0,020
kNN (k=5) 37,90 51,08 -0,204

Beban ISPA

ModelSkenarioMAERMSER²
Baseline (rata-rata) Semua fitur (6 polutan + 4 cuaca) 1,112 1,492 -0,001
Decision Tree 0,075 0,097 0,996
kNN (k=3) 0,213 0,280 0,965
Baseline (rata-rata) PM2.5 + cuaca (sensor terbatas) 1,112 1,492 -0,001
Decision Tree 0,074 0,096 0,996
kNN (k=6) 0,112 0,173 0,987
Baseline (rata-rata) Cuaca saja (tanpa sensor polutan) 1,112 1,492 -0,001
Decision Tree 1,089 1,471 0,028
kNN (k=5) 1,184 1,589 -0,135

3. Pemilihan nilai k (kNN, semua fitur)

Akurasi dan macro-F1 terhadap k

Hasil

Nilai k dipilih dari rata-rata macro-F1 kategori ISPU dan tingkat risiko yang paling tinggi. Hasilnya k = 3, dengan macro-F1 kategori 80,5% dan tingkat risiko 86,9%.

k kecil membuat model peka terhadap data yang menyimpang (overfitting), sedangkan k besar mengaburkan batas antar kategori (underfitting). Halaman Prediksi otomatis memakai k ini.

Catatan: k dipilih dengan cross-validation yang sama dengan pengujian, jadi skor kNN sedikit optimis.

4. Confusion matrix dan F1 per kelas (kNN k=3, semua fitur)

Kategori ISPU (5 kelas) · akurasi 88,7%, macro-F1 80,5%

Aktual ↓ / Prediksi → BaikSedangTidak SehatSangat Tidak SehatBerbahaya
Baik 671 270 0 0 0
Sedang 178 4229 300 0 0
Tidak Sehat 0 315 3631 24 0
Sangat Tidak Sehat 0 0 25 329 1
Berbahaya 0 0 0 16 11
KelasPrecisionRecallF1Jumlah
Baik 79,0% 71,3% 75,0% 941
Sedang 87,9% 89,8% 88,8% 4.707
Tidak Sehat 91,8% 91,5% 91,6% 3.970
Sangat Tidak Sehat 89,2% 92,7% 90,9% 355
Berbahaya 91,7% 40,7% 56,4% 27

Tingkat risiko (4 tier) · akurasi 88,7%, macro-F1 86,9%

Aktual ↓ / Prediksi → Tier 1Tier 2Tier 3Tier 4
Tier 1 671 270 0 0
Tier 2 178 4130 298 0
Tier 3 0 318 3665 20
Tier 4 0 0 46 404
KelasPrecisionRecallF1Jumlah
Tier 1 - Low Background Risk 79,0% 71,3% 75,0% 941
Tier 2 - Moderate Sensitive Alert 87,5% 89,7% 88,6% 4.606
Tier 3 - High Population Hazard 91,4% 91,6% 91,5% 4.003
Tier 4 - Severe Emergency Alert 95,3% 89,8% 92,5% 450

Diagonal hijau = tebakan benar, sel merah = salah. Kelas Berbahaya hanya 27 data (F1 56,4%), sehingga akurasi saja bisa menipu. Karena itu macro-F1 dipakai sebagai metrik utama.

5. Pentingnya fitur (permutation importance)

Turunnya akurasi saat fitur diacak

Cara membaca

Nilai satu fitur di data uji diacak, lalu kNN (k=3) diuji ulang pada 500 data. Makin besar akurasinya turun, makin penting fitur itu. Akurasi awal: kategori 89,6%, tingkat risiko 88,8%.

  • PM10: akurasi tingkat risiko turun 18,4 poin
  • PM2.5: akurasi tingkat risiko turun 14,5 poin
  • NO2: akurasi tingkat risiko turun 3,8 poin

6. Kesimpulan dan keterbatasan