Bootstrap aggregating, sering dikenal sebagai bagging, adalah pendekatan terintegrasi relatif sederhana namun efektif dan telah digunakan dalam banyak aplikasi. Untuk mengatasi ketidakstabilan parameter klasifikasi, metode bagging sangat bermanfaat. Inti dari bagging adalah mengganti data asli dan menggunakan kembali random resampling untuk mendapatkan data baru untuk analisis klasifikasi. Data yang digunakan adalah data Indeks Potensi Kerawanan Sosial menurut kelurahan di DKI Jakarta pada Tahun 2020.
library(readxl)
## Warning: package 'readxl' was built under R version 4.2.3
library(adabag)
## Warning: package 'adabag' was built under R version 4.2.3
## Loading required package: rpart
## Warning: package 'rpart' was built under R version 4.2.3
## Loading required package: caret
## Warning: package 'caret' was built under R version 4.2.3
## Loading required package: ggplot2
## Loading required package: lattice
## Loading required package: foreach
## Warning: package 'foreach' was built under R version 4.2.3
## Loading required package: doParallel
## Warning: package 'doParallel' was built under R version 4.2.3
## Loading required package: iterators
## Warning: package 'iterators' was built under R version 4.2.3
## Loading required package: parallel
library(ipred)
## Warning: package 'ipred' was built under R version 4.2.3
##
## Attaching package: 'ipred'
## The following object is masked from 'package:adabag':
##
## bagging
library(caret)
#Mempersiapkan Data
dataUAS <- read_excel("E:/Kuliah/smt 5/Data Jurnal - Rahmad Ramadhan Laska.xlsx", range = "C1:I268")
View(dataUAS)
#Menampilkan data 6 baris
head(dataUAS)
## # A tibble: 6 × 7
## `Indeks Rawan Kemiskinan` Indeks Keraw…¹ Indek…² Indek…³ Indek…⁴ IPKS Kateg…⁵
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 70.6 0 1.79 0 12.5 17.7 Tidak …
## 2 66.2 12.1 2.71 21.4 12.5 21.2 Rawan …
## 3 80.5 20 0.5 11.1 12.5 23.9 Rawan …
## 4 100 1.85 17.1 29.3 12.5 28.8 Rawan …
## 5 90.6 6 0.67 40.3 12.5 25.9 Rawan …
## 6 79.5 10 16 30 12.5 26.4 Rawan …
## # … with abbreviated variable names
## # ¹`Indeks Kerawanan Lingkungan dan Kesehatan`,
## # ²`Indeks Kerawanan Prasarana Fisik`, ³`Indeks Kerawanan Modal Sosial`,
## # ⁴`Indeks Kerawanan Keamanan dan Ketertiban`, ⁵Kategori
# Ringkasan statistik deskriptif
summary(dataUAS)
## Indeks Rawan Kemiskinan Indeks Kerawanan Lingkungan dan Kesehatan
## Min. : 0.11 Min. : 0.00
## 1st Qu.: 15.04 1st Qu.: 5.42
## Median : 21.98 Median :11.06
## Mean : 26.83 Mean :12.92
## 3rd Qu.: 32.26 3rd Qu.:17.98
## Max. :100.00 Max. :72.59
## Indeks Kerawanan Prasarana Fisik Indeks Kerawanan Modal Sosial
## Min. : 0.32 Min. : 0.00
## 1st Qu.: 9.17 1st Qu.:28.32
## Median :14.55 Median :35.00
## Mean :16.01 Mean :37.02
## 3rd Qu.:21.75 3rd Qu.:46.53
## Max. :55.38 Max. :81.59
## Indeks Kerawanan Keamanan dan Ketertiban IPKS Kategori
## Min. :12.43 Min. : 7.11 Length:267
## 1st Qu.:13.09 1st Qu.:15.61 Class :character
## Median :13.82 Median :18.66 Mode :character
## Mean :15.92 Mean :19.29
## 3rd Qu.:16.73 3rd Qu.:22.73
## Max. :75.00 Max. :37.81
Memeriksa struktur data untuk memastikan tipe data setiap kolom sesuai dengan kebutuhan analisis.
#Melihat Struktur Data
str(dataUAS)
## tibble [267 × 7] (S3: tbl_df/tbl/data.frame)
## $ Indeks Rawan Kemiskinan : num [1:267] 70.6 66.2 80.5 100 90.6 ...
## $ Indeks Kerawanan Lingkungan dan Kesehatan: num [1:267] 0 12.13 20 1.85 6 ...
## $ Indeks Kerawanan Prasarana Fisik : num [1:267] 1.79 2.71 0.5 17.08 0.67 ...
## $ Indeks Kerawanan Modal Sosial : num [1:267] 0 21.4 11.1 29.3 40.3 ...
## $ Indeks Kerawanan Keamanan dan Ketertiban : num [1:267] 12.5 12.5 12.5 12.5 12.5 ...
## $ IPKS : num [1:267] 17.7 21.2 23.9 28.8 25.9 ...
## $ Kategori : chr [1:267] "Tidak Rawan" "Rawan Ringan" "Rawan Ringan" "Rawan Ringan" ...
Berdasarkan hasil tersebut dapat dilihat bahwa struktur pada variabel kategori masih character. Agar data bisa digunakan untuk klasifikasi maka variabel kategori strukturnya diubah menjadi faktor.
# Mengubah variabel Kategori menjadi tipe data kategorik
dataUAS$Kategori <- as.factor(dataUAS$Kategori)
str(dataUAS)
## tibble [267 × 7] (S3: tbl_df/tbl/data.frame)
## $ Indeks Rawan Kemiskinan : num [1:267] 70.6 66.2 80.5 100 90.6 ...
## $ Indeks Kerawanan Lingkungan dan Kesehatan: num [1:267] 0 12.13 20 1.85 6 ...
## $ Indeks Kerawanan Prasarana Fisik : num [1:267] 1.79 2.71 0.5 17.08 0.67 ...
## $ Indeks Kerawanan Modal Sosial : num [1:267] 0 21.4 11.1 29.3 40.3 ...
## $ Indeks Kerawanan Keamanan dan Ketertiban : num [1:267] 12.5 12.5 12.5 12.5 12.5 ...
## $ IPKS : num [1:267] 17.7 21.2 23.9 28.8 25.9 ...
## $ Kategori : Factor w/ 2 levels "Rawan Ringan",..: 2 1 1 1 1 1 2 2 2 2 ...
Berdasarkan output tersebut, terlihat bahwa variabel kategori strukturnya telah berubah menjadi factor.
Dataset dibagi menjadi 80% data training dan 20% data testing menggunakan metode sampling.
# Membagi dataset
set.seed(123) # Untuk reprodusibilitas
sampel <- sample(1:nrow(dataUAS), 0.80 * nrow(dataUAS), replace = TRUE)
training <- data.frame(dataUAS)[sampel, ]
testing <- data.frame(dataUAS)[-sampel, ]
Model yang digunakan pada analisis ini adalah Bootstrap Aggregating (Bagging).
# Membuat model Bagging
modelbagging <- bagging(Kategori ~ ., data = training)
Model yang telah dibangun digunakan untuk memprediksi data testing. Hasil prediksi dibandingkan dengan data aktual untuk membentuk confusion matrix.
# Melakukan prediksi pada data testing
prediksi <- predict(modelbagging, testing)
# Melihat hasil prediksi
hasil <- table(prediksi, testing$Kategori)
hasil
##
## prediksi Rawan Ringan Tidak Rawan
## Rawan Ringan 52 0
## Tidak Rawan 1 64
Tabel confusion matrix menunjukkan bahwa terdapat kesalahan klasifikasi pada kelas Rawan Ringan. Satu observasi yang seharusnya berada di kelas Rawan Berat tetapi diklasifikasikan di Tidak Rawan.
Menggunakan fungsi confusionMatrix dari library
caret, kita dapat menghitung metrik evaluasi utama seperti
akurasi, sensitivitas, dan spesifisitas.
# Evaluasi performa model
caret::confusionMatrix(hasil)
## Confusion Matrix and Statistics
##
##
## prediksi Rawan Ringan Tidak Rawan
## Rawan Ringan 52 0
## Tidak Rawan 1 64
##
## Accuracy : 0.9915
## 95% CI : (0.9533, 0.9998)
## No Information Rate : 0.547
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.9827
##
## Mcnemar's Test P-Value : 1
##
## Sensitivity : 0.9811
## Specificity : 1.0000
## Pos Pred Value : 1.0000
## Neg Pred Value : 0.9846
## Prevalence : 0.4530
## Detection Rate : 0.4444
## Detection Prevalence : 0.4444
## Balanced Accuracy : 0.9906
##
## 'Positive' Class : Rawan Ringan
##
Nilai sensitivitas yang diperoleh adalah 98,11%. Nilai ini mewakili sensitivitas model bagging dalam mendeteksi data pada kelas positif (yaitu kelas yang tidak rawan). Berdasarkan nilai sensitivitasnya, rasio data yang diprediksi berlabel rendah dengan data yang benar-benar berlabel rendah adalah 98,11%.
Nilai spesifisitas mewakili keandalan mode bagging dalam mendeteksi data dengan benar dengan kelas berlabel negatif. Spesifisitas 100% diperoleh berdasarkan analisis. Hasil ini menunjukkan bahwa model sangat baik dalam mendeteksi kelas tinggi.
Nilai akurasi adalah proporsi jumlah data yang diprediksi dengan benar dari semua data uji. Model bagging yang diterapkan memberikan akurasi sebesar 99,15% yang berarti model tersebut sangat baik dalam mengklasifikasikan data. Secara keseluruhan diperoleh akurasi yang seimbang sebesar 99,15%, dan dapat dikatakan model bagging memiliki kinerja yang baik dalam mengklasifikasikan IPKS menurut kelurahan di DKI Jakarta.
Pengkategorian IPKS di Jakarta tahun 2020 berdasarkan kelurahan dengan teknik Bagging diperoleh nilai akurasi sebesar 99,15%, nilai sensitivitas 98,11%, dan nilai spesifisitas 100%. Pendekatan bagging juga menghasilkan akurasi yang seimbang sebesar 99,15% dan sangat efektif dalam mengklasifikasi IPKS. Berdasarkan kategori IPKS di wilayah tersebut, hasil klasifikasi tersebut dapat digunakan untuk memprediksi IPKS untuk tahun mendatang dan melakukan program-program penataan kawasan dan perbaikan sarana prasarana lingkungan agar bisa memperbaiki IPKS di tahun berikutnya.