This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
You can also embed plots, for example:
Note that the echo = FALSE
parameter was added to the
code chunk to prevent printing of the R code that generated the
plot.
Metode Naïve Bayes Classifier adalah metode klasifikasi berbasis probabilistik yang menggunakan Teorema Bayes dengan asumsi independensi antar fitur. Metode ini sederhana namun efektif, terutama untuk data berskala besar dan masalah klasifikasi teks. Prinsip dasarnya adalah menghitung probabilitas posterior dari suatu kelas berdasarkan nilai atribut yang diamati.
\[ P(C|X) = \frac{P(X|C) \cdot P(C)}{P(X)} \]
Keterangan:
- \(P(C|X)\) probabilitas kelas \(C\) diberikan data \(X\)
- \(P(X|C)\) likelihood (Probabilitas
data \(X\) jika kelasnya \(C\)) - \(P(C)\) prior probability (probabilitas awal
kelas \(C\))
- \(P(X)\) evidence (probabilitas data
\(X\))
Naïve Bayes sering digunakan dalam spam filtering, analisis sentimen, klasifikasi dokumen, dan prediksi sederhana berbasis kategori.
1. Pengumpulan Data Data dikumpulkan sesuai kasus yang diteliti, misalnya data survei mahasiswa, data pelanggan, atau data teks.
2.Preprocessing Data - Membersihkan data dari nilai hilang atau duplikat. - Mengubah variabel kategorik menjadi numerik bila diperlukan, tapi dalam kasus ini tidak mengubah jadi numerik karena tidak terdapat variabel kategorik. - Normalisasi atau tokenisasi (untuk data teks).
3. Pembagian Data Data dibagi menjadi training set (80%) dan testing set (20%) untuk mengukur performa model.
5. Prediksi Model menghitung probabilitas kelas dari data testing dan menentukan kelas dengan probabilitas tertinggi.
6. Evaluasi Model Digunakan metrik seperti akurasi, presisi, recall, dan F1-score untuk menilai performa model.
library(tidyverse)
library(caret)
library(e1071)
library(ROSE)
Pertama, data dibaca menggunakan fungsi read.csv()
.
Dataset berisi informasi pasien, faktor risiko, serta variabel target
Reengagement
.
data<-read.csv(“TIM 3.csv”, sep = “;”)
View(data)
Beberapa variabel seperti UIC, DateofARTinitiation, Dateoflatohf, dan tracingdate tidak digunakan dalam pemodelan sehingga dihapus.
data_clean <- data[, !(names(data) %in% c(“UIC”, “DateofARTinitiation”, “Dateoflatohf”, “tracingdate”))]
colnames(data_clean)
[1] "ClientType" "Age" "tracingvisit" "Typetracingvisit" "Transferredout" "Feelinghealthy" "Stigma" [8] "Boredom" "Distance" "Limitedstock" "Toobusy" "Afraid" "Sideeffects" "Otherillness" [15] "Reminder" "SubstitingARV" "AfraidofCOVID19" "Cost" "Other" "Lengthoftime" "Reengagement"
cols_to_factor<- setdiff(names(data_clean), c(“Age”, “Lengthoftime”))
data_clean[cols_to_factor] <- lapply(data_clean[cols_to_factor], as.factor)
data_clean\(Reengagement <- as.factor(data_clean\)Reengagement)
str(data_clean)
Jumlah observasi :146
Jumlah Variabel : 21
Variabel prediktor sebagian besar faktor, target
Reengagement
faktor dengan 2 level (0
dan
1
).
set.seed(123) indeks <- sample(1:nrow(data_clean), 0.8 *nrow(data_clean))
data_train <- data_clean[indeks, ]
data_test <- data_clean[-indeks, ]
table(data_train$Reengagement)
Data Training (80% dari data total, 116 observasi)
Kelas 0
= 31
Kelas 1
= 85
Jadi, dalam data latih, proporsi kelas `1` jauh lebih besar
dibanding kelas `0`. Kondisi ini disebut **imbalanced dataset**, di
mana salah satu kelas (kelas mayoritas) mendominasi. Jika dibiarkan,
model bisa cenderung “berpihak” ke kelas mayoritas sehingga prediksi
jadi bias.
table(data_test$Reengagement)
Data Testing (20% dari data total, 30 observasi)
Kelas 0
= 8
Kelas 1
= 22
Pada data uji, pola ketidakseimbangan tetap terlihat. Kelas `1`
lebih banyak daripada kelas `0`.
set.seed(123)
data_train_bal <- ROSE(Reengagement ~ .,data = data_train, N = 146, seed = 1)$data
table(data_train_bal$Reengagement)
Setelah dilakukan oversampling dengan metode ROSE, distribusi kelas di data training berubah menjadi:
Kelas 0
= 72
Kelas 1
= 74
Interpretasi :
Jumlah kedua kelas sekarang hampir seimbang (72 vs 74), sehingga model tidak lagi didominasi oleh kelas mayoritas.
Dengan distribusi yang setara, peluang model untuk belajar pola
dari kedua kelas menjadi lebih adil, tidak bias hanya pada kelas
1
.
Hal ini diharapkan bisa meningkatkan performa model terutama pada metrik Recall dan Balanced Accuracy, karena kedua kelas memiliki bobot yang lebih proporsional.
Meski begitu, perlu diingat bahwa balancing dengan oversampling bisa menambah “data sintetis” (bukan data asli), sehingga model kadang menjadi overfitting. Oleh karena itu, hasil evaluasi pada data testing tetap harus diperhatikan.
Jadi setelah balancing, dataset training sudah lebih representatif untuk membangun model Naive Bayes
#4. Pembahasan Hasil Pemodelan
Model Naïve Bayes dibangun menggunakan data training yang telah seimbang (balancing dengan ROSE).
model_nb <- naiveBayes(Reengagement ~ ., data = data_train_bal)
kemudian digunakan untuk melakukan prediksi pada data uji (testing set).
pred_nb <- predict(model_nb, newdata = data_test)
Untuk menilai performa model, digunakan confusionMatrix dari package caret.
confusionMatrix(pred_nb, data_test$Reengagement, positive = “1”)
Hasil Evaluasi:
Accuracy : 0.7333
Artinya, model mampu memprediksi dengan benar sekitar 73% data uji. Nilai ini cukup baik, meskipun masih bisa ditingkatkan.
Sensitivity : 0.8182
Dari semua kasus kelas 1
(Reengagement), sekitar 82%
berhasil dikenali oleh model. Ini penting karena kasus 1
adalah fokus utama.
Specificity : 0.5000
Dari semua kasus kelas 0
, hanya separuh yang berhasil
teridentifikasi dengan benar. Artinya, model masih sering salah
mengklasifikasikan kelas 0
sebagai 1
.
Pos Pred Value : 0.8182
Dari semua prediksi kelas 1
, sekitar 82% memang
benar-benar kelas 1
.
Balanced Accuracy : 0.6591
Nilai ini memperhitungkan ketidakseimbangan kelas. Angkanya
menunjukkan performa model moderat, dengan kekuatan utama di kelas
1
.
Jadi, Berdasarkan hasil evaluasi, model Naïve Bayes menunjukkan
performa yang cukup baik, khususnya dalam mendeteksi pasien yang
melakukan reengagement (kelas 1
). Hal ini tercermin dari
nilai sensitivity dan precision yang relatif tinggi. Namun demikian,
model masih memiliki kelemahan pada aspek specificity yang rendah,
sehingga sebagian besar kasus kelas 0
masih sering salah
terklasifikasi sebagai kelas 1
. Kondisi ini kemungkinan
dipengaruhi oleh keterbatasan asumsi independensi antar variabel yang
melekat pada metode Naïve Bayes. Secara keseluruhan, model dapat
dijadikan baseline yang layak untuk analisis awal, tetapi untuk
mendapatkan hasil yang lebih optimal, perlu dipertimbangkan penggunaan
metode klasifikasi lain atau penerapan teknik feature engineering yang
lebih lanjut.