Langsung ke konten utama

Machine Learning: Naive Bayes Classifier dengan R

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!

Komentar

Postingan populer dari blog ini

Mencari P - Value dan Titik Kritis Uji F, Uji t, Uji Chi Square, dan Uji Z Normal dengan R

Mencari nilai p-value dan titik kritis Bagi teman-teman yang pernah mengenal statistika, pasti familier dengan istilah p-value dan titik kritis. P-value biasanya didefinisikan sebagai probabiltas atau peluang maksimal yang diamati dari hasil uji statistik, bahasa gampangnya adalah besarnya kesalahan penelitian berdasarkan uji statistik. Sebagai contoh sederhana, dari 100 orang dengan nama masing-masing dan diklasifikasikan ke dalam gender nama perempuan dan nama laki-laki, didapatkan nilai p-value uji statistiknya sebesar 0,05 atau 5%. Itu artinya, dari 100 orang, ada kemungkinan sebanyak 5 orang yang namanya salah klasifikasi. Dari namanya terdeteksi sebagai nama perempuan, padahal aktualnya yang bersangkutan bergender laki-laki. Sedangkan titik kritis atau titik uji adalah nilai batas pengujian hipotesis statistik, apakah masuk dalam wilayah tolak hipotesis, ataukah gagal menolaknya. Titik ini berkaitan erat dengan nilai p-value . Kalau biasanya kita mendapatkan kedua nilai ini da...

Cara Mendowload dan Install R serta RStudio di Windows (Step by Step)

Cara Download dan Install R serta R Studio di Windows Halo teman-teman, mohon maaf karena beberapa waktu ini, blog ini sempat vakum dari unggahan. Kali ini saya akan coba berbagai mengenai bagaimana cara mengunduh ( download ) dan menginstal ( install ) program R sekaligus R Studio khususnya di Windows. Unggahan kali ini sedikit terbalik karena semestinya saya unggah terlebih dahulu pertama kali di blog ini, namun bukan masalah, mengingat kemarin ada beberapa pihak yang meminta untuk menerangkap bagaimana tahapan mengunduh dan instalasi R dan R Studio, jadinya saya dahulukan pada unggahan ini sebelum pembahasan mengenai Data Mining , Data Science , atau bahasan Big Data kita terlampau jauh. Baik, kita akan mulai dengan bagaimana mengunduh R dan R Studio melalui mesin pencari Google. R dan R Studio ini memang beberapa waktu terakhir ini booming , apalagi dengan munculnya konsep mengenai Big Data , Data Modelling, Data Mining, dan Data Science serta Data Visualization . Sebenarnya, men...

Analisis Tipologi Klassen (Klassen Typology) dan Visualisasi Spasialnya dengan R

Tipologi Klassen dan visualisasinya dengan R Halo teman-teman, sebelumnya kita telah membahas tentang analisis Shift Share dan Location Quotient (LQ) dengan menggunakan R. Kali ini, kita akan membahas mengenai satu lagi alat analisis yang sebenarnya merupakan alat analisis tiga serangkai dari SS dan LQ, yaitu analisis Tipologi Klassen. Dalam penelitian ekonomi kewilayahan, ketiga analisis ini seringkali digunakan, baik dalam rangka melihat perkembangan dan transformasi struktur ekonomi suatu wilayah maupun melihat keunggulan kompetitif dan keunggulan komparatif wilayah satu dengan wilayah lainnya dengan mengacu wilayah referensi. Terlebih dulu, sebelum melakukan visualisasi spasial menggunakan fungsi plot(), ada baiknya kita bahas terlebih dahulu mengenai Tipologi Klassen itu sendiri. Tipologi Klassen merupakan teknik pengelompokan sektor, subsektor, lapangan usaha, atau komoditas tertentu di wilayah analisis berdasarkan pertumbuhan nilai tambah wilayah analisis terhadap nasional atau...