Machine Learning, Supervised Learning, Naive Bayes Classification Model |
Halo teman-teman, apa kabarnya? Sebelumnya saya mohon maaf ya karena beberapa waktu ini kita break sejenak belajar dan berbaginya. Di awal Bulan Mei ini, kita akan mencoba sedikit demi sedikit membahas dan belajar bersama mengenai Machine Learning (ML) yang akhir-akhir ini booming di kalangan analis data (data analyst) atau yang cakupannya lebih luas dan mendalam, yaitu sains data (data science).
Jadi, di dalam machine learning, intinya itu kita mencoba membangun sebuah algoritma olah data dengan cara berinteraksi dengan mesin. Kita beri mesin tersebut sekumpulan data agar ia dapat memahami logika atau pola dari data yang kita berikan, kemudian kita lakukan pengujian hasil dari pembelajaran mesin tersebut terhadap secuplik data sebagai dasar pengambilan keputusan. Karena kita perlu menyiapkan sekumpulan data sebagai media pembelajaran mesinnya dan untuk pengujian, maka dalam bahasa kerennya muncul istilah train dataset dan test dataset. Train dataset digunakan sebagai media pembelajaran untuk mesin, sedangkan test dataset-nya untuk melakukan pengujian hasil pembelajaran mesin tersebut. Adapun pembagian porsi train dataset dan test dataset sendiri masih debatable, namun kita mencoba mengambil amannya saja di kisaran 70 persen sampai 80 persen untuk train dataset, sedangkan sisanya sebagai test dataset.
Baik, itu sekilas tentang Machine Learning. Kita lanjut ke intinya sekarang, yaitu membahas salah satu model Machine Learning yang termasuk ke dalam Supervised Learning, yaitu Naive Bayes Classifier (NBC). Algoritma dari NBC ini pada dasarnya menggunakan prinsip peluang bersyarat Naive Bayes. Adapun asumsi yang berlaku dalam NBC ini adalah independensi, bahwa ada atau tidaknya satu elemen atau event tidak memberikan pengaruh terhadap probabilitas (peluang) elemen atau event lainnya. Secara umum, kaidah Bayes digambarkan sebagai berikut:
"Peluang kejadian A saat kejadian B telah terjadi sama dengan peluang kejadian B saat kejadian A telah terjadi dan peluang kejadian A dibagi dengan peluang kejadian B"
Peluang kejadian B saat kejadian A telah terjadi diistilahkan sebagai Likelihood, mengikuti sebaran normal. Bila normal Gaussian maka disebut Gaussian Naive Bayes, bila mengikuti distribusi Bernoulli maka disebut Bernoulli Naive Bayes. Sedangkan peluang kejadian A kemudian diistilahkan sebagai prior probability, kemudian peluang kejadian B disebut sebagai Evidence/predictor probability, dan Peluang kejadian A saat kejadian B telah terjadi diistilahkan sebagai posterior probability.
Apa saja manfaat dari Naive Bayes Classifier (NBC) ini? Sebenarnya banyak sekali aplikasi atau manfaat dari NBC ini teman-teman, namun yang umum biasanya digunakan untuk mengklasifikasikan atau mendeteksi email sampah (spam email), analisis sentimen kata atau kalimat (sentiment analysis), dan sistem rekomendasi keputusan berdasarkan data-data tertentu.
Bagaimana cara mengimplementasikan NBC ini dengan R? Dalam kesempatan ini, kita akan langsung mempraktikkan Naive Bayes Classifier Algorithm dengan menggunakan data dummy yang telah saya siapkan pada tautan berikut. Dalam praktik kali ini, kita akan menggunakan sebuah data dengan variabel dependenya adalah keputusan untuk membeli komputer atau tidak. Adapun variabel independen yang kita gunakan meliputi umur, pendapatan, status seorang murid atau bukan, serta kondisi kredit yang dijalankan berkategori Baik atau Sedang.
Untuk menentukan probabilitas pada setiap keputusan pembelian komputer menurut variabel independennya, dapat kita lihat pada bagian tabel probabilitas. Setelah itu, kita hitung peluang Likelihoodnya untuk keputusan pembelian komputer masing-masing kategorinya, Ya dan Tidak membeli komputer. Berikut penghitungan secara manualnya agar mampu memperjelas pemahaman kita semua.
Kaidah Bayes untuk menentukan peluang |
Itu tadi kalau kita mau hitung dan perkirakan secara manual. Selanjutnya, bila datanya sudah diunduh, kita lanjutkan dengan praktik menggunakan R menggunakan beberapa code berikut:
Code:
#Install dan aktivasi package
install.packages("e1070")
install.packages("caret")
library(e1071)
library(caret)
#Memanggil Data
library(readxl)
datareal <- read_excel("C:/Users/Joko Ade/Downloads/datareal.xlsx")
#Mengecek Struktur Data
str(datareal)
Hasil:
tibble [14 x 5] (S3: tbl_df/tbl/data.frame)
$ umur : chr [1:14] "<=30" "<=30" "31-40" ">40" ...
$ pendapatan : chr [1:14] "Tinggi" "Tinggi" "Tinggi" "Sedang" ...
$ status_murid : chr [1:14] "Tidak" "Tidak" "Tidak" "Tidak" ...
$ rating_kredit: chr [1:14] "Sedang" "Baik" "Sedang" "Sedang" ...
$ beli_komputer: chr [1:14] "Tidak" "Tidak" "Ya" "Ya" ...
Code:
#mengubah tipe data
datareal$umur <- as.factor(datareal$umur)
datareal$pendapatan <- as.factor(datareal$pendapatan)
datareal$status_murid <- as.factor(datareal$status_murid)
datareal$rating_kredit <- as.factor(datareal$rating_kredit)
datareal$beli_komputer <- as.factor(datareal$beli_komputer)
#Partisi Data kita coba partisi train dataset 70%, 30% untuk test dataset
inTrain <- createDataPartition(y=datareal$beli_komputer, p = 0.70, list = F)
train <- datareal[inTrain,]
test <- datareal[-inTrain,]
#mengattach data
attach(train)
Hasil:
# A tibble: 11 x 5
umur pendapatan status_murid rating_kredit beli_komputer
<fct> <fct> <fct> <fct> <fct>
1 <=30 Tinggi Tidak Sedang Tidak
2 <=30 Tinggi Tidak Baik Tidak
3 31-40 Tinggi Tidak Sedang Ya
4 >40 Sedang Tidak Sedang Ya
5 >40 Rendah Ya Sedang Ya
6 >40 Rendah Ya Baik Tidak
7 <=30 Sedang Tidak Sedang Tidak
8 <=30 Rendah Ya Sedang Ya
9 >40 Sedang Ya Sedang Ya
10 <=30 Sedang Ya Baik Ya
11 31-40 Tinggi Ya Sedang Ya
# A tibble: 3 x 5
umur pendapatan status_murid rating_kredit beli_komputer
<fct> <fct> <fct> <fct> <fct>
1 31-40 Rendah Ya Baik Ya
2 31-40 Sedang Tidak Baik Ya
3 >40 Sedang Tidak Baik Tidak
Code:
#Pemodelan Naive Bayes
nb <- naiveBayes(beli_komputer~umur+status_murid+pendapatan+rating_kredit,
data = train)
print(nb)
Hasil:
Naive Bayes Classifier for Discrete Predictors
Call:
naiveBayes.default(x = X, y = Y, laplace = laplace)
A-priori probabilities:
Y
Tidak Ya
0.3636364 0.6363636
Conditional probabilities:
umur
Y <=30 >40 31-40
Tidak 0.7500000 0.2500000 0.0000000
Ya 0.2857143 0.4285714 0.2857143
status_murid
Y Tidak Ya
Tidak 0.7500000 0.2500000
Ya 0.2857143 0.7142857
pendapatan
Y Rendah Sedang Tinggi
Tidak 0.2500000 0.2500000 0.5000000
Ya 0.2857143 0.4285714 0.2857143
rating_kredit
Y Baik Sedang
Tidak 0.5000000 0.5000000
Ya 0.1428571 0.8571429
Code:
#Prediksi dari Model Train
p2 <- predict(nb, train)
head(train$beli_komputer)
head(p2)
#Akurasi Prediksi
confusionMatrix(p2, train$beli_komputer)
Hasil:
Confusion Matrix and Statistics
Reference
Prediction Tidak Ya
Tidak 3 1
Ya 1 6
Accuracy : 0.8182
95% CI : (0.4822, 0.9772)
No Information Rate : 0.6364
P-Value [Acc > NIR] : 0.175
Kappa : 0.6071
Mcnemar's Test P-Value : 1.000
Sensitivity : 0.7500
Specificity : 0.8571
Pos Pred Value : 0.7500
Neg Pred Value : 0.8571
Prevalence : 0.3636
Detection Rate : 0.2727
Detection Prevalence : 0.3636
Balanced Accuracy : 0.8036
'Positive' Class : Tidak
Code:
#Prediksi dengan Test
predtest <- predict(nb, test)
head(test$beli_komputer)
head(predtest)
#Confusion Matriks Test
confusionMatrix(predtest, test$beli_komputer)
Hasil:
Confusion Matrix and Statistics
Reference
Prediction Tidak Ya
Tidak 1 0
Ya 0 2
Accuracy : 1
95% CI : (0.2924, 1)
No Information Rate : 0.6667
P-Value [Acc > NIR] : 0.2963
Kappa : 1
Mcnemar's Test P-Value : NA
Sensitivity : 1.0000
Specificity : 1.0000
Pos Pred Value : 1.0000
Neg Pred Value : 1.0000
Prevalence : 0.3333
Detection Rate : 0.3333
Detection Prevalence : 0.3333
Balanced Accuracy : 1.0000
'Positive' Class : Tidak
Terlihat bahwa pada hasil pengujian menggunakan train dataset, model Naive Bayes Classifier (NBC) dihasilkan cukup akurat dengan accuracy sebesar 81,82 persen. Dan bila kita ujikan hasil pembelajaran mesin NBC terhadap test dataset kita mendapatkan accuracy sebesar 100 persen. Terbukti pada tabel Confusion Matix and Statistics bahwa hasil prediksi NBC tidak ada yang salah klasifikasi.
Baik, demikian sekilas pembahasan kita mengenai Machine Learning jenis Supervised Learning: Naive Bayes Classifier dengan menggunakan R. Jangan lupa share dan terus menyimak unggahan-unggahan berikutnya. Selamat mempraktikkan!