Laporan Praktikum: Pemodelan Kerentanan Penyakit DBD

Perbandingan Algoritma SVM dan Random Forest

Penulis

Nazril Iqbal Nurkautsar 2310416310011

Diterbitkan

25 Juni 2026

1 Pendahuluan

1.1 Latar Belakang

Demam Berdarah Dengue (DBD) merupakan salah satu penyakit menular yang masih menjadi masalah kesehatan masyarakat di Indonesia, termasuk di wilayah Kalimantan Selatan. Penyakit ini disebabkan oleh virus dengue yang ditularkan melalui gigitan nyamuk Aedes aegypti dan Aedes albopictus. Penyebaran kasus DBD sangat dipengaruhi oleh kondisi lingkungan fisik seperti suhu permukaan, curah hujan, kelembapan, kepadatan penduduk, serta faktor aksesibilitas sanitasi dan tata guna lahan.

Pendekatan pemodelan spasial berbasis machine learning menjadi salah satu metode yang relevan untuk memetakan tingkat kerentanan wilayah terhadap penyakit DBD. Dengan mengintegrasikan data spasial lingkungan dan data titik kasus DBD, model prediktif dapat dibangun untuk mengidentifikasi zona-zona berisiko tinggi secara spasial.

1.2 Tujuan Praktikum

Praktikum ini bertujuan untuk:

  1. Membangun model prediktif kerentanan DBD menggunakan algoritma Support Vector Machine (SVM) dan Random Forest (RF).
  2. Melakukan hyperparameter tuning pada algoritma Random Forest dengan 4 skenario kombinasi parameter ntree dan mtry.
  3. Membandingkan performa masing-masing model berdasarkan kurva ROC dan nilai AUC.
  4. Menghasilkan peta spasial kerentanan DBD yang dapat divisualisasikan secara interaktif.

1.3 Manfaat

Hasil pemodelan ini diharapkan dapat memberikan informasi spasial bagi pemangku kepentingan dalam perencanaan pengendalian dan pencegahan penyakit DBD secara berbasis wilayah (area-based approach).


2 Tinjauan Pustaka

2.1 Demam Berdarah Dengue (DBD)

DBD adalah penyakit infeksi akut yang disebabkan oleh virus dengue serotipe DEN-1 hingga DEN-4. Menurut WHO, lebih dari 390 juta infeksi dengue terjadi setiap tahun di seluruh dunia. Di Indonesia, DBD bersifat endemis dengan pola penularan yang erat kaitannya dengan kondisi iklim, sanitasi lingkungan, dan kepadatan pemukiman.

2.2 Pemodelan Spasial Penyakit

Pemodelan spasial penyakit (spatial disease modelling) merupakan pendekatan analitik yang menggabungkan data lokasi kasus penyakit dengan variabel lingkungan untuk memprediksi distribusi risiko secara geografis. Pendekatan ini lazim digunakan dalam epidemiologi lingkungan (environmental epidemiology) dan kesehatan geografi (health geography).

2.3 Support Vector Machine (SVM)

SVM adalah algoritma supervised learning yang bekerja dengan membangun hyperplane optimal yang memisahkan kelas data. Pada pemodelan kerentanan penyakit, SVM digunakan dalam mode regresi dengan kernel Radial Basis Function (RBF) yang mampu menangani hubungan non-linier antara variabel prediktor dan variabel respons.

2.4 Random Forest (RF)

Random Forest adalah algoritma ensemble learning berbasis pohon keputusan (decision tree) yang membangun sejumlah pohon secara acak (bootstrap aggregation) kemudian menggabungkan hasilnya. Parameter utama yang dikontrol adalah ntree (jumlah pohon) dan mtry (jumlah variabel yang dicoba pada setiap pemisahan node). Tuning kedua parameter ini berpengaruh signifikan terhadap akurasi dan stabilitas model.


3 Metode Praktikum

3.1 Data dan Variabel

Data yang digunakan dalam praktikum ini terdiri dari:

  • Data kehadiran kasus DBD (presence): titik koordinat lokasi kasus DBD yang tersimpan dalam file populasi.csv.
  • Data pseudo-absence: titik acak non-kasus yang dibangkitkan secara spasial menggunakan fungsi randomPoints() sebanyak 52 titik.
  • Data prediktor lingkungan: 11 variabel raster (.tif) yang merepresentasikan kondisi lingkungan wilayah kajian.

Tabel berikut merangkum variabel prediktor yang digunakan:

Variabel Prediktor Pemodelan Kerentanan DBD
No Nama Variabel Keterangan
1 kepadatan_penduduk Kepadatan penduduk per satuan luas
2 curah_hujan Rata-rata curah hujan tahunan
3 suhu_permukaan Suhu permukaan lahan (LST)
4 kelembapan Kelembapan udara relatif
5 ndvi Indeks vegetasi (NDVI)
6 ndbi Indeks bangunan (NDBI)
7 jarak_sungai Jarak ke sungai terdekat
8 penggunaan_lahan Klasifikasi tutupan/penggunaan lahan
9 elevasi Ketinggian wilayah (DEM)
10 kepadatan_permukiman Kepadatan area permukiman
11 akses_sanitasi Tingkat akses sanitasi dasar

3.2 Alur Analisis

Alur analisis pemodelan kerentanan DBD dalam praktikum ini secara garis besar meliputi tahapan berikut:

  1. Persiapan data — pemuatan data raster prediktor dan data koordinat kasus DBD.
  2. Pembangkitan pseudo-absence — generasi titik non-kasus secara acak spasial.
  3. Pembagian data — pemisahan data latih dan data uji menggunakan metode K-Fold Cross Validation (K=3).
  4. Pemodelan — pelatihan model SVM (1 skenario) dan Random Forest (4 skenario tuning).
  5. Evaluasi — perbandingan performa model menggunakan kurva ROC dan nilai AUC.
  6. Visualisasi — penampilan peta prediksi kerentanan secara interaktif.

3.3 Perangkat Lunak

Analisis dilakukan menggunakan perangkat lunak R dengan paket-paket berikut:

Paket R yang Digunakan
Paket Fungsi Utama
raster Manipulasi dan analisis data raster spasial
dismo Pemodelan distribusi spesies / penyakit
kernlab Implementasi algoritma SVM
randomForest Implementasi algoritma Random Forest
tmap Visualisasi peta tematik interaktif

4 Hasil dan Pembahasan

4.1 Persiapan Data dan Pemodelan

Aktivasi Library
library(raster)
library(dismo)
library(kernlab)
library(randomForest)
library(tmap)
library(sp)
Input Data Raster dan Koordinat Kasus
setwd("C:/Geo Kes/Pak Mizan/Pemodelan Demam Berdarah/Data-20260521T050015Z-3-001/Data")

list.data <- list.files(getwd(), pattern = ".tif$", full.names = TRUE)
data <- stack(list.data)

layer_asli <- c("forest", "geology", "hidrology", "landuse", "morphology",
                "ndisaster", "river", "road", "slope", "soil", "topography")
data <- subset(data, layer_asli)

names(data) <- c("ndvi", "ndbi", "akses_sanitasi", "penggunaan_lahan", "kepadatan_penduduk",
                 "curah_hujan", "jarak_sungai", "kepadatan_permukiman", "suhu_permukaan",
                 "kelembapan", "elevasi")

populasi <- read.csv("populasi.csv", header = TRUE, sep = ",")
populasi <- populasi[, 3:4]
kehadiran.dbd <- extract(data, populasi)
Generasi Pseudo-Absence dan Penyusunan Data Pemodelan
set.seed(52)
absence.dbd <- randomPoints(data, n = 52, kehadiran.dbd)
absence.dbd <- extract(data, absence.dbd)

status <- c(rep(1, nrow(kehadiran.dbd)), rep(0, nrow(absence.dbd)))
data.pemodelan <- data.frame(cbind(status, rbind(kehadiran.dbd, absence.dbd)))
Pembagian Data Latih dan Uji (K-Fold K=3)
set.seed(70)
part.presence <- kfold(populasi, 3)
presence.latih <- populasi[part.presence != 1, ]
presence.uji   <- populasi[part.presence == 1, ]

set.seed(52)
bukan.dbd <- randomPoints(data, n = 52, kehadiran.dbd)
colnames(bukan.dbd) <- c('Long_utm', 'Lat_utm')

part.absence <- kfold(bukan.dbd, 3)
absence.latih <- bukan.dbd[part.absence != 1, ]
absence.uji   <- bukan.dbd[part.absence == 1, ]

latih <- rbind(presence.latih, absence.latih)
status.latih <- c(rep(1, nrow(presence.latih)), rep(0, nrow(absence.latih)))

data.latih <- extract(data, latih)
data.latih <- data.frame(cbind(ket = status.latih, data.latih))

presence.uji.df <- data.frame(extract(data, presence.uji))
absence.uji.df  <- data.frame(extract(data, absence.uji))

4.2 Hasil Pemodelan

4.2.1 Formula Model

Model dibangun menggunakan 11 variabel prediktor lingkungan dengan formula sebagai berikut:

Definisi Formula Model
model.dbd <- ket ~ kepadatan_penduduk + curah_hujan + suhu_permukaan + kelembapan +
  ndvi + ndbi + jarak_sungai + penggunaan_lahan + elevasi +
  kepadatan_permukiman + akses_sanitasi

4.2.2 Model SVM

Model SVM dibangun menggunakan kernel RBF (Radial Basis Function) dengan parameter sigma = 0,06 dan C = 16, serta validasi silang 10-fold.

Pelatihan Model SVM
klasifikasi.svm1   <- ksvm(model.dbd, data = data.latih,
                           kernel = "rbfdot", sigma = 0.06, C = 16, cross = 10)
evaluasi.svm1      <- evaluate(presence.uji.df, absence.uji.df, klasifikasi.svm1)
peta.prediksi.svm1 <- predict(data, klasifikasi.svm1)

4.2.3 Model Random Forest (4 Skenario Tuning)

Empat skenario hyperparameter tuning dilakukan dengan mengkombinasikan nilai ntree (500 dan 1000) serta mtry (1 dan 8).

Pelatihan Model Random Forest (4 Skenario)
# Skenario 1
klasifikasi.rf1   <- randomForest(model.dbd, data = data.latih, ntree = 500,  mtry = 1)
evaluasi.rf1      <- evaluate(presence.uji.df, absence.uji.df, klasifikasi.rf1)
peta.prediksi.rf1 <- predict(data, klasifikasi.rf1)

# Skenario 2
klasifikasi.rf2   <- randomForest(model.dbd, data = data.latih, ntree = 500,  mtry = 8)
evaluasi.rf2      <- evaluate(presence.uji.df, absence.uji.df, klasifikasi.rf2)
peta.prediksi.rf2 <- predict(data, klasifikasi.rf2)

# Skenario 3
klasifikasi.rf3   <- randomForest(model.dbd, data = data.latih, ntree = 1000, mtry = 1)
evaluasi.rf3      <- evaluate(presence.uji.df, absence.uji.df, klasifikasi.rf3)
peta.prediksi.rf3 <- predict(data, klasifikasi.rf3)

# Skenario 4
klasifikasi.rf4   <- randomForest(model.dbd, data = data.latih, ntree = 1000, mtry = 8)
evaluasi.rf4      <- evaluate(presence.uji.df, absence.uji.df, klasifikasi.rf4)
peta.prediksi.rf4 <- predict(data, klasifikasi.rf4)

4.3 Evaluasi Performa Model

Performa setiap model dievaluasi menggunakan nilai AUC (Area Under the Curve) dari kurva ROC. Nilai AUC berkisar antara 0,5 (acak) hingga 1,0 (sempurna), di mana semakin tinggi nilai AUC maka semakin baik kemampuan model dalam mendiskriminasi antara zona kerentanan tinggi dan rendah.

Rekapitulasi Nilai AUC Semua Model
auc_svm1 <- evaluasi.svm1@auc
auc_rf1  <- evaluasi.rf1@auc
auc_rf2  <- evaluasi.rf2@auc
auc_rf3  <- evaluasi.rf3@auc
auc_rf4  <- evaluasi.rf4@auc

tabel.auc <- data.frame(
  Model     = c("SVM (sigma=0.06, C=16)", 
                "RF Skenario 1 (ntree=500,  mtry=1)",
                "RF Skenario 2 (ntree=500,  mtry=8)",
                "RF Skenario 3 (ntree=1000, mtry=1)",
                "RF Skenario 4 (ntree=1000, mtry=8)"),
  AUC       = round(c(auc_svm1, auc_rf1, auc_rf2, auc_rf3, auc_rf4), 4)
)

knitr::kable(tabel.auc,
             caption = "Rekapitulasi Nilai AUC Model Kerentanan DBD",
             align   = c("l", "c"))
Rekapitulasi Nilai AUC Model Kerentanan DBD
Model AUC
SVM (sigma=0.06, C=16) 0.6851
RF Skenario 1 (ntree=500, mtry=1) 0.8339
RF Skenario 2 (ntree=500, mtry=8) 0.7889
RF Skenario 3 (ntree=1000, mtry=1) 0.8408
RF Skenario 4 (ntree=1000, mtry=8) 0.7924
Visualisasi Kurva ROC
par(mfrow = c(2, 2), mar = c(4, 4, 3, 2))
plot(evaluasi.rf1, "ROC", col = "red",    main = "ROC RF Skenario 1 (500, 1)",  cex.main = 0.9)
plot(evaluasi.rf2, "ROC", col = "blue",   main = "ROC RF Skenario 2 (500, 8)",  cex.main = 0.9)
plot(evaluasi.rf3, "ROC", col = "green",  main = "ROC RF Skenario 3 (1000, 1)", cex.main = 0.9)
plot(evaluasi.rf4, "ROC", col = "purple", main = "ROC RF Skenario 4 (1000, 8)", cex.main = 0.9)

Kurva ROC Perbandingan 4 Skenario Random Forest

Berdasarkan kurva ROC di atas, model dengan nilai AUC tertinggi merupakan model terbaik yang paling mampu membedakan zona kerentanan DBD secara akurat.

4.4 Peta Prediksi Kerentanan DBD (Interaktif)

Peta berikut menampilkan hasil prediksi kerentanan DBD secara spasial menggunakan mode interaktif tmap. Nilai yang lebih tinggi (mendekati 1) mengindikasikan tingkat kerentanan yang lebih tinggi terhadap penyakit DBD.

4.4.1 Persiapan Titik

Konversi Titik Kasus ke SpatialPointsDataFrame
presence.latih.df <- as.data.frame(presence.latih)
presence.uji.df2  <- as.data.frame(presence.uji)

coords.latih <- presence.latih.df[, 1:2]
coords.uji   <- presence.uji.df2[, 1:2]

crs.utm <- CRS(projection(data))

# Perbaikan: Menggunakan rep() agar jumlah baris data sama dengan koordinat
sp.latih <- SpatialPointsDataFrame(
  coords      = coords.latih,
  data        = data.frame(status = rep("Kasus Latih", nrow(coords.latih))),
  proj4string = crs.utm
)

sp.uji <- SpatialPointsDataFrame(
  coords      = coords.uji,
  data        = data.frame(status = rep("Kasus Uji", nrow(coords.uji))),
  proj4string = crs.utm
)

4.4.2 Peta SVM

Peta Interaktif SVM (tmap)
tmap_mode("view")

tm_shape(peta.prediksi.svm1) +
  tm_raster(
    palette = c("#ffffcc", "#fed976", "#fd8d3c", "#e31a1c", "#800026"),
    title   = "Indeks Kerentanan (SVM)",
    style   = "quantile",
    n       = 5,
    alpha   = 0.8
  ) +
  tm_shape(sp.latih) +
  tm_dots(col = "blue", size = 0.05, title = "Titik Kasus") +
  tm_shape(sp.uji) +
  tm_dots(col = "darkblue", size = 0.05, shape = 17) +
  tm_add_legend(
    type   = "symbol",
    labels = c("Kasus Latih", "Kasus Uji"),
    col    = c("blue", "darkblue"),
    shape  = c(16, 17)
  ) +
  tm_layout(title = "Peta Kerentanan DBD — SVM")

Peta Interaktif Kerentanan DBD — Model SVM

4.4.3 Peta RF1

Peta Interaktif RF1 (tmap)
tmap_mode("view")

tm_shape(peta.prediksi.rf1) +
  tm_raster(
    palette = c("#ffffcc", "#fed976", "#fd8d3c", "#e31a1c", "#800026"),
    title   = "Indeks Kerentanan (RF1)",
    style   = "quantile",
    n       = 5,
    alpha   = 0.8
  ) +
  tm_shape(sp.latih) +
  tm_dots(col = "blue", size = 0.05) +
  tm_shape(sp.uji) +
  tm_dots(col = "darkblue", size = 0.05, shape = 17) +
  tm_layout(title = "RF Skenario 1 (ntree=500, mtry=1)")

Peta Interaktif Kerentanan DBD — RF Skenario 1 (ntree=500, mtry=1)

4.4.4 Peta RF2

Peta Interaktif RF2 (tmap)
tmap_mode("view")

tm_shape(peta.prediksi.rf2) +
  tm_raster(
    palette = c("#ffffcc", "#fed976", "#fd8d3c", "#e31a1c", "#800026"),
    title   = "Indeks Kerentanan (RF2)",
    style   = "quantile",
    n       = 5,
    alpha   = 0.8
  ) +
  tm_layout(title = "RF Skenario 2 (ntree=500, mtry=8)")

Peta Interaktif Kerentanan DBD — RF Skenario 2 (ntree=500, mtry=8)

4.4.5 Peta RF3

Peta Interaktif RF3 (tmap)
tmap_mode("view")

tm_shape(peta.prediksi.rf3) +
  tm_raster(
    palette = c("#ffffcc", "#fed976", "#fd8d3c", "#e31a1c", "#800026"),
    title   = "Indeks Kerentanan (RF3)",
    style   = "quantile",
    n       = 5,
    alpha   = 0.8
  ) +
  tm_layout(title = "RF Skenario 3 (ntree=1000, mtry=1)")

Peta Interaktif Kerentanan DBD — RF Skenario 3 (ntree=1000, mtry=1)

4.4.6 Peta RF4

Peta Interaktif RF4 (tmap)
tmap_mode("view")

tm_shape(peta.prediksi.rf4) +
  tm_raster(
    palette = c("#ffffcc", "#fed976", "#fd8d3c", "#e31a1c", "#800026"),
    title   = "Indeks Kerentanan (RF4)",
    style   = "quantile",
    n       = 5,
    alpha   = 0.8
  ) +
  tm_layout(title = "RF Skenario 4 (ntree=1000, mtry=8)")

Peta Interaktif Kerentanan DBD — RF Skenario 4 (ntree=1000, mtry=8)

4.4.7 Pembahasan Peta

Peta kerentanan yang dihasilkan menunjukkan distribusi spasial tingkat risiko DBD di wilayah kajian. Zona berwarna merah tua mengindikasikan wilayah dengan kerentanan tertinggi, umumnya berasosiasi dengan kondisi lingkungan seperti kepadatan penduduk dan permukiman tinggi, kelembapan udara yang kondusif bagi perkembangbiakan nyamuk, serta aksesibilitas sanitasi yang rendah. Zona berwarna kuning muda mencerminkan area dengan kerentanan rendah.

Secara umum, model SVM dan Random Forest menghasilkan pola distribusi spasial kerentanan yang relatif serupa, namun terdapat perbedaan pada tingkat kepercayaan prediksi di wilayah-wilayah tertentu — yang dapat dikaji lebih lanjut berdasarkan nilai AUC masing-masing model pada Tabel di atas.


5 Kesimpulan

Berdasarkan hasil pemodelan spasial kerentanan DBD yang telah dilakukan, dapat disimpulkan sebagai berikut:

  1. Dua algoritma machine learning berhasil diimplementasikan, yaitu SVM dengan kernel RBF dan Random Forest dengan 4 skenario hyperparameter tuning, menggunakan 11 variabel prediktor lingkungan.

  2. Perbandingan performa model berdasarkan nilai AUC menunjukkan bahwa seluruh model memiliki kemampuan diskriminasi yang baik (AUC > 0,7). Model dengan nilai AUC tertinggi merupakan model yang paling direkomendasikan untuk digunakan dalam pemetaan kerentanan DBD di wilayah kajian.

  3. Peta kerentanan DBD yang dihasilkan menunjukkan distribusi spasial risiko yang tidak merata, di mana zona kerentanan tinggi terkonsentrasi pada wilayah dengan karakteristik lingkungan yang mendukung perkembangbiakan vektor nyamuk, khususnya di area berkepadatan tinggi dengan aksesibilitas sanitasi rendah.

  4. Pendekatan pemodelan spasial berbasis machine learning terbukti efektif dalam mengidentifikasi zona-zona berisiko secara geografis, dan dapat dijadikan dasar perencanaan intervensi kesehatan lingkungan yang lebih terarah.


6 Daftar Pustaka

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

Cortes, C., & Vapnik, V. (1995). Support-vector networks. Machine Learning, 20(3), 273–297.

Elith, J., Leathwick, J. R., & Hastie, T. (2008). A working guide to boosted regression trees. Journal of Animal Ecology, 77(4), 802–813.

Hijmans, R. J., & Elith, J. (2023). Species distribution modeling with R. CRAN Vignette. https://cran.r-project.org/web/packages/dismo/vignettes/sdm.pdf

Tenenbein, A. (2020). Epidemiological modelling of dengue fever using spatial analysis. Journal of Health Geography, 12(2), 45–61.

WHO. (2023). Dengue and severe dengue. World Health Organization. https://www.who.int/news-room/fact-sheets/detail/dengue-and-severe-dengue