R Markdown

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

Including Plots

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.

Analisis Naïve Bayes Classifier pada Data Case

1. Materi Pengantar

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.

2. Metodologi Pemodelan

Langkah-langkah pemodelan menggunakan Naïve Bayes Classifier adalah:

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.

  1. Training Model Menggunakan data training untuk menghitung prior probability \(P(C)\) dan conditional probability \(P(X∣C\)).

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.

3.Hasil Eksplorasi

Instalasi Package

library(tidyverse)

library(caret)

library(e1071)

library(ROSE)

Memanggil data

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)

Membersihkan variabel yang tidak dibutuhkan

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" 

Mengubah variabel ke tipe faktor

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)

4. Membagi Data menjadi Training dan Testing

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)

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)

Pada data uji, pola ketidakseimbangan tetap terlihat. Kelas `1`
lebih banyak daripada kelas `0`.

Menangani Ketidakseimbangan Data Menggunakan Oversampling

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:

#4. Pembahasan Hasil Pemodelan

Model Naïve Bayes

Model Naïve Bayes dibangun menggunakan data training yang telah seimbang (balancing dengan ROSE).

model_nb <- naiveBayes(Reengagement ~ ., data = data_train_bal)

Prediksi pada data testing

kemudian digunakan untuk melakukan prediksi pada data uji (testing set).

pred_nb <- predict(model_nb, newdata = data_test)

Evaluasi Model dengan Confusion Matrix

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.