Naïve Bayes Classifier (NBC)

Contoh implementasi Metode Klasifikasi Naïve Bayes / Naïve Bayes Classifier (NBC) menggunakan PHP dan MySQL untuk memprediksi besarnya penggunaan listrik rumah tangga.

Metode Naïve Bayes Classifier (NBC) merupakan salah satu algoritma dalam teknik data mining yang menerapkan teori Bayes dalam klasifikasi (Santosa 2007). Ciri utama dari Naïve Bayes Classifier ini adalah asumsi yg sangat kuat (naïf) akan independensi dari masing-masing kondisi / kejadian

[ author : cahya dsn, published on : April 13, 2018 updated on : April 21, 2018 ]

minerva minerva donasi donation

Mau lihat artikel lainya? Dapatkan artikel-artikel lain seputar pemrograman website di sini, dan dapatkan ide-ide baru

Definisi lain mengatakan Naïve Bayes merupakan pengklasifikasian dengan metode probabilitas dan statistik yang dikemukan oleh ilmuwan Inggris Thomas Bayes, yaitu memprediksi peluang di masa depan berdasarkan pengalaman di masa sebelumnya (Bustami 2013).

Naïve Bayes didasarkan pada asumsi penyederhanaan bahwa nilai atribut secara kondisional saling bebas jika diberikan nilai output. Dengan kata lain, diberikan nilai output, probabilitas mengamati secara bersama adalah produk dari probabilitas individu (Ridwan 2013). Keuntungan penggunaan Naive Bayes adalah bahwa metode ini hanya membutuhkan jumlah data pelatihan (Training Data) yang kecil untuk menentukan estimasi paremeter yang diperlukan dalam proses pengklasifikasian. Naive Bayes sering bekerja jauh lebih baik dalam kebanyakan situasi dunia nyata yang kompleks dari pada yang diharapkan (Pattekari and Parveen 2012)

Naive Bayes Classifier dinilai bekerja sangat baik dibanding dengan model classifier lainnya, yaitu Naïve Bayes Classifier memiliki tingkat akurasi yg lebih baik dibanding model classifier lainnya(Xhemali 2009).

Pre-requisites

  • Pemahaman terhadap dasar-dasar Statistika terutama mengenai Probabilitas/Peluang
  • Pemahaman terhadap dasar-dasar teknologi Web,HTML dan CSS
  • Pemahaman terhadap dasar-dasar basis data/database, terutama query SQL pada MySQL/mariaDB
  • Pemahaman terhadap dasar-dasar pemrograman PHP, terutama fungsi-fungsi koneksi database dan pengelolaan tipe data array

Teorema Naïve Bayes

Sebelum menjelaskan Naïve Bayes Classifier ini, akan dijelaskan terlebih dahulu Teorema Bayes yang menjadi dasar dari metoda tersebut. Pada Teorema Bayes, bila terdapat dua kejadian yang terpisah (misalkan X dan H), maka Teorema Bayes dirumuskan sebagai berikut (Bustami 2013).:

.. [NBC-01]
Keterangan
  • X : Data dengan class yang belum diketahui
  • H : Hipotesis data merupakan suatu class spesifik
  • P(H|X) : Probabilitas hipotesis H berdasar kondisi X (posteriori probabilitas)
  • P(H) : Probabilitas hipotesis H (prior probabilitas)
  • P(X|H) : Probabilitas X berdasarkan kondisi pada hipotesis H
  • P(X) : Probabilitas X

Teorema Bayes sering pula dikembangkan mengingat berlakunya hukum probabilitas total, menjadi seperti berikut:

.. [NBC-02]
Keterangan
  • i : 1,2,3, ... , n jumlah data Hipotesis (prior probabilitas)
  • dimana : H1 U H2 U H3 ... U Hn = S
  • S : Probabilitas total H

Untuk menjelaskan Teorema Naïve Bayes, perlu diketahui bahwa proses klasifikasi memerlukan sejumlah petunjuk untuk menentukan kelas apa yang cocok bagi sampel yang dianalisis tersebut. Karena itu, Teorema Bayes di atas disesuaikan sebagai berikut:

.. [NBC-03]

Di mana Variabel C merepresentasikan kelas, sementara variabel F1 ... Fn merepresentasikan karakteristik petunjuk yang dibutuhkan untuk melakukan klasifikasi. Maka rumus tersebut menjelaskan bahwa peluang masuknya sampel karakteristik tertentu dalam kelas C (Posterior) adalah peluang munculnya kelas C (sebelum masuknya sampel tersebut, seringkali disebut prior), dikali dengan peluang kemunculan karakteristik-karakteristik sampel pada kelas C (disebut juga likelihood), dibagi dengan peluang kemunculan karakteristik-karakteristik sampel secara global (disebut juga evidence). Karena itu, rumus di atas dapat pula ditulis secara sederhana sebagai berikut:

.. [NBC-04]

Nilai Evidence selalu tetap untuk setiap kelas pada satu sampel. Nilai dari posterior tersebut nantinya akan dibandingkan dengan nilai-nilai posterior kelas lainnya untuk menentukan ke kelas apa suatu sampel akan diklasifikasikan. Penjabaran lebih lanjut rumus Bayes tersebut dilakukan dengan menjabarkan (C,F1, ... , Fn) menggunakan aturan perkalian sebagai berikut:

.. [NBC-05]

Dapat dilihat bahwa hasil penjabaran tersebut menyebabkan semakin banyak dan semakin kompleksnya faktor - faktor syarat yang mempengaruhi nilai probabilitas, yang hampir mustahil untuk dianalisa satu persatu. Akibatnya, perhitungan tersebut menjadi sulit untuk dilakukan. Disinilah digunakan asumsi independensi yang sangat tinggi (naif), bahwa masing-masing petunjuk (F1,F2 , ..., Fn) saling bebas (independen) satu sama lain. Dengan asumsi tersebut, maka berlaku suatu kesamaan sebagai berikut:

.. [NBC-06]

Untuk i≠j, sehingga

.. [NBC-07]

Atau dapat dituliskan dalam notasi

.. [NBC-08]

yang dapat dijabarkan sebagai berikut

.. [NBC-09]

Persamaan di atas merupakan model dari teorema Naïve Bayes yang selanjutnya akan digunakan dalam proses klasifikasi. Untuk klasifikasi dengan data kontinyu digunakan rumus Densitas Gauss :

.. [NBC-10]
Keterangan
  • P : Peluang
  • Xi : Atribut ke-i
  • xi : Nilai Atribut ke-i
  • Y : Kelas yang dicari
  • yi : Sub-kelas yang dicari
  • μ : mean, menyatakan rata-rata dari seluruh atribut
  • σ : Deviasi Standar, menyatakan varian dari seluruh atribut

Alur Metode Naive Bayes

Alur dari metode Naive Bayes dapat dilihat pada Gambar 1 (Saleh 2015)sebagai berikut:


GAMBAR 1 : Alur Metode Naive Bayes

Adapun keterangan dari gambar di atas adalah sebagai berikut:

  1. Membaca Data Training
  2. Menghitung Jumlah dan Probabilitas, namun jika data numerik maka
    1. Menghitung nilai mean dan Dtandar Deviasi dari masing-masing parameter yang merupakan numerik. Adapun persamaan untuk mencari nilai rata-rata hitung (mean) adalah seperti dalam persamaan [NBC-11] berikut ini:
      .. [NBC-11]

      atau

      .. [NBC-12]
      Keterangan
      • μ : nilai rata-rata hitung (mean)
      • xi : nilai x ke-i
      • n : jumlah sampel
      Sedangkan persamaan untuk menghitung nilai Nilai Simpangan Baku (Standar Deviasi) dirumuskan sebagai berikut :
      .. [NBC-13]
      Keterangan
      • σ :standar deviasi
      • xi : nilai x ke-i
      • μ : nilai rata-rata hitung (mean)
      • n : jumlah sampel
    2. Menghitung nilai probabilistik dengan cara menghitung jumlah data yang sesuai dari kategori yang sama dibagi dengan jumlah data pada kategori tersebut.
  3. Mendapatkan nilai dalam tabel mean, Standar Deviasi dan Probabilitas
  4. Menghasilkan Solusi

Kelebihan dan Kekurangan

Teorema Naïve Bayes memiliki beberapa kelebihan dan kekurangan yaitu sebagai berikut

Kelebihan

Teori Bayesian, mempunyai beberapa kelebihan (Grainner 1998), yaitu:

  • Mudah untuk dipahami
  • Hanya memerlukan pengkodean yang sederhana
  • Lebih cepat dalam penghitungan
  • Menangani kuantitatif dan data diskrit
  • Kokoh untuk titik noise yang diisolasi, misalkan titik yang dirata – ratakan ketika mengestimasi peluang bersyarat data.
  • Hanya memerlukan sejumlah kecil data pelatihan untuk mengestimasi parameter (rata – rata dan variansi dari variabel) yang dibutuhkan untuk klasifikasi.
  • Menangani nilai yang hilang dengan mengabaikan instansi selama perhitungan estimasi peluang
  • Cepat dan efisiensi ruang
  • Kokoh terhadap atribut yang tidak relevan

Kekurangan

Sedangkan kekurangan dari Teorema ini adalah :

  • Kekurangan dari Teori probabilitas Bayesian yang banyak dikritisi oleh para ilmuwan adalah karena pada teori ini, satu probabilitas saja tidak bisa mengukur seberapa dalam tingkat keakuratannya. Dengan kata lain, kurang bukti untuk membuktikan kebenaran jawaban yang dihasilkan dari teori ini.
  • Tidak berlaku jika probabilitas kondisionalnya adalah 0 (nol), apabila nol maka probabilitas prediksi akan bernilai nol juga
  • Mengasumsikan variabel bebas

Laplace Correction

Laplace Correction (Laplacian Estimator) atau additive smoothing adalah suatu cara untuk menangani nilai probabilitas 0 (nol). Dari sekian banyak data di training set, pada setiap perhitungan datanya ditambah 1 (satu) dan tidak akan membuat perbedaan yang berarti pada estimasi probabilitas sehingga bisa menghindari kasus nilai probabilitas 0 (nol). Laplace Correction ini dapat dinyatakan dalam persamaan seperti pada persamaan [NBC-12] berikut ini

.. [NBC-12]
Keterangan
  • ρi : probabilitas dari atribut mi
  • mi : jumlah sampel dalam kelas dari atribut mi
  • k : jumlah kelas dari atribut mi
  • n : jumlah sampel

Sebagai contoh, asumsikan ada class Penggunaan Listrik=rendah di suatu training set, memiliki 5 sampel, ada 0 sampel dengan Perlengkapan=sedikit, 4 sampel dengan Perlengkapan=sedang, dan 1 sampel dengan Perlengkapan=banyak.

Probabilitas dari kejadian ini tanpa Laplacian Correction adalah

P(Perlengkapan=sedikit|Penggunaan Listrik=rendah)=0,
P(Perlengkapan=sedang|Penggunaan Listrik=rendah)=0.800 (dari 4/5), dan
P(Perlengkapan=banyak|Penggunaan Listrik=rendah)=0.200 (dari 1/5).

Menggunakan Laplacian Correction dari tiga kejadian diatas, diasumsikan ada 1 sampel lagi untuk masing – masing nilai Penggunaan Listrik=sedikit. Dengan cara ini, didapatkanlah probabilitas sebagai berikut (dibulatkan menjadi 3 angka dibelakang koma):

P(Perlengkapan=sedikit|Penggunaan Listrik=rendah)=0.125 (dari 1/8),
P(Perlengkapan=sedang|Penggunaan Listrik=rendah)=0.625 (dari 5/8), dan
P(Perlengkapan=banyak|Penggunaan Listrik=rendah)=0.250 (dari 2/8)

Probabilitas yang "dibenarkan" hasilnya tidak berbeda jauh dengan hasil probabilitas sebelumnya sehingga nilai probabilitas 0 (nol) dapat dihindari.

Peranan listrik sangat penting bagi setiap lapisan masyarakat bahkan listrik juga sangat dibutuhkan sebagai sarana produksi dan untuk kehidupan sehari-hari, begitu pentingnya peranan listrik tentu saja berdampak pada permintaan listrik yang semakin besar tapi hal ini kiranya tidak linier dengan persediaan listrik yang belum mampu memenuhi permintaan listrik yang begitu besar tersebut. Untuk mengatasi hal ini perlu adanya campur tangan pemerintah dan masyarakat dalam menggunakan listrik dengan bijak sehingga kebutuhan listrik tidak menjadi lebih besar dari persediaan listrik. Oleh karena itu setiap rumah tangga haruslah paham penggunaan listrik yang efektif.

Pembacaan Data Training

Untuk menentukan data yang nantinya akan dianalisis dengan Metode Naïve Bayes maka langkah pertama yang dilakukan adalah membaca data training. Pada contoh kasus ini ada sejumlah 53 data training/sampel. Adapun data training yang digunakan dapat dilihat pada tabel 1 berikut(Nasari 2014):

TABEL 1 : Data Training
NoJumlah
Tanggungan
Keluarga
Luas
Rumah
Pendapatan/
bulan
Daya
Listrik
Perlengkapan
Yang
Dimiliki
Penggunaan
Listrik
1banyakstandarbesartinggirendahsedang
2banyakbesarbesartinggirendahtinggi
3sedikitstandarbesarsedangtinggitinggi
4sedikitkecilbesarsedangtinggitinggi
5banyakbesarsedangtinggitinggisedang
6banyakkecilbesartinggitinggisedang
7sedangstandarsedangrendahsedangtinggi
8banyakbesarsedangtinggisedangrendah
9banyakbesarbesartinggisedangsedang
10sedikitstandarbesarrendahsedangsedang
11banyakbesarsedangrendahtinggisedang
12banyakkecilbesartinggitinggitinggi
13banyakbesarkeciltinggisedangtinggi
14sedangstandarbesartinggitinggitinggi
15sedangstandarbesartinggitinggitinggi
16sedikitbesarsedangsedangtinggitinggi
17banyakbesarbesarsedangtinggisedang
18banyakkecilkeciltinggirendahsedang
19banyakbesarbesartinggitinggitinggi
20banyakkecilsedangsedangtinggisedang
21banyakbesarkeciltinggisedangtinggi
22sedangbesarbesarrendahsedangsedang
23sedangbesarbesartinggisedangrendah
24banyakstandarbesarrendahtinggisedang
25banyakstandarbesarrendahtinggitinggi
26sedangbesarbesartinggisedangsedang
27banyakbesarbesartinggitinggitinggi
28sedangbesarsedangtinggisedangtinggi
29banyakstandarkeciltinggitinggitinggi
30banyakstandarkeciltinggitinggisedang
31sedangstandarsedangsedangsedangsedang
32banyakstandarsedangsedangsedangtinggi
33banyakstandarbesarsedangsedangsedang
34sedikitstandarbesartinggitinggitinggi
35banyakbesarbesarsedangtinggitinggi
36banyakstandarbesarsedangtinggitinggi
37banyakkecilbesartinggisedangsedang
38banyakstandarsedangtinggitinggisedang
39sedangstandarbesartinggisedangrendah
40banyakstandarsedangtinggisedangsedang
41sedangbesarbesarrendahtinggisedang
42banyakkecilkeciltinggirendahtinggi
43sedikitstandarkeciltinggitinggisedang
44banyakkecilsedangtinggisedangtinggi
45banyakbesarbesartinggitinggirendah
46banyakbesarbesarsedangtinggisedang
47banyakstandarbesartinggisedangtinggi
48sedangstandarbesartinggitinggitinggi
49banyakbesarkecilsedangsedangrendah
50banyakkecilbesartinggirendahtinggi
51banyakstandarbesartinggitinggitinggi
52banyakbesarsedangtinggitinggisedang
53sedikitstandarsedangtinggitinggisedang

Perhitungan Manual

Pada bagian ini akan dijelaskan mengenai perhitungan peluang/probabilitas dari data training yang diberikan. Penjelasannya sendiri disajikan secara langkah per langkah agar mudah dipahami.

Terdapat dua jenis peluang (probability) yang perlu dihitung dari dataset untuk model Naive Bayes :

  • Class Probabilities
  • Conditional Probabilities

Menghitung Class Probabilities

Dataset Penggunaan Listrik memiliki 3 kelas masalah, sehingga dapat diketahui probabilitas (P) masing-masing kelas dengan cara membagi nilai frekuensi/jumlah data untuk masing-masing kelas masalah, dengan jumlah total nilai frekuensi/jumlah data pada kelas tersebut, seperti yang ditunjukkan dalam perhitungan berikut ini :

P(penggunaan=rendah) = jumlahpenggunaan=rendah / (jumlahpenggunaan=rendah + jumlahpenggunaan=sedang + jumlahpenggunaan=tinggi)
P(penggunaan=rendah) = 5 / (5 + 23 + 25) = 5 / 53
P(penggunaan=rendah) = 0.094

P(penggunaan=sedang) = jumlahpenggunaan=sedang / (jumlahpenggunaan=rendah + jumlahpenggunaan=sedang + jumlahpenggunaan=tinggi)
P(penggunaan=sedang) = 23 / (5 + 23 + 25) = 23 / 53
P(penggunaan=sedang) = 0.433

P(penggunaan=tinggi) = jumlahpenggunaan=tinggi / (jumlahpenggunaan=rendah + jumlahpenggunaan=sedang + jumlahpenggunaan=tinggi)
P(penggunaan=tinggi) = 25 / (5 + 23 + 25) = 25 / 53
P(penggunaan=tinggi) = 0.471

Class Probabilities ini adalah nilai peluang/probabilitas dari masing-masing kelas masalah dari tujuan yang akan diharapkan/diprediksi. Sehingga dari perhitungan -- berdasarkan data training yang diberikan -- tersebut diperoleh peluang untuk penggunaan=rendah adalah 0.094, penggunaan=sedang adalah 0.433, penggunaan=tinggi adalah 0.471,

Menghitung Conditional Probabilities

Langkah selanjutnya adalah menghitung Conditional Probabilities, yaitu probililitas setiap nilai input terhadap nilai class Penggunaan Listrik.

Sebagai contoh di sini adalah perhitungan untuk masing-masing peluang untuk kriteria/atribut Jumlah Tanggungan terhadap nilai class Penggunaan Listrik. Perhitungan detailnya adalah sebagai berikut:

P(tanggungan=sedikit|penggunaan=rendah) = jumlahtanggungan=sedikit dan penggunaan=rendah / jumlahpenggunaan=rendah
P(tanggungan=sedikit|penggunaan=rendah) = 0 / 5
P(tanggungan=sedikit|penggunaan=rendah) = 0
karena dalam kelas penggunaan=rendah ini terdapat data yang bernilai 0(nol) maka diperhitungkan kembali dengan Laplace Correction sebagai berikut :
P(tanggungan=sedikit|penggunaan=rendah) = ( 0 + 1 ) / ( 5 + 3 )
P(tanggungan=sedikit|penggunaan=rendah) = 1 / 8
P(tanggungan=sedikit|penggunaan=rendah) = 0.125


P(tanggungan=sedang|penggunaan=rendah) = jumlahtanggungan=sedang dan penggunaan=rendah / jumlahpenggunaan=rendah
P(tanggungan=sedang|penggunaan=rendah) = 2 / 5
P(tanggungan=sedang|penggunaan=rendah) = 0.400
karena dalam kelas penggunaan=rendah ini terdapat data yang bernilai 0(nol) maka diperhitungkan kembali dengan Laplace Correction sebagai berikut :
P(tanggungan=sedang|penggunaan=rendah) = ( 2 + 1 ) / ( 5 + 3 )
P(tanggungan=sedang|penggunaan=rendah) = 3 / 8
P(tanggungan=sedang|penggunaan=rendah) = 0.375


P(tanggungan=banyak|penggunaan=rendah) = jumlahtanggungan=banyak dan penggunaan=rendah / jumlahpenggunaan=rendah
P(tanggungan=banyak|penggunaan=rendah) = 3 / 5
P(tanggungan=banyak|penggunaan=rendah) = 0.600
karena dalam kelas penggunaan=rendah ini terdapat data yang bernilai 0(nol) maka diperhitungkan kembali dengan Laplace Correction sebagai berikut :
P(tanggungan=banyak|penggunaan=rendah) = ( 3 + 1 ) / ( 5 + 3 )
P(tanggungan=banyak|penggunaan=rendah) = 4 / 8
P(tanggungan=banyak|penggunaan=rendah) = 0.500


P(tanggungan=sedikit|penggunaan=sedang) = jumlahtanggungan=sedikit dan penggunaan=sedang / jumlahpenggunaan=sedang
P(tanggungan=sedikit|penggunaan=sedang) = 3 / 23
P(tanggungan=sedikit|penggunaan=sedang) = 0.130


P(tanggungan=sedang|penggunaan=sedang) = jumlahtanggungan=sedang dan penggunaan=sedang / jumlahpenggunaan=sedang
P(tanggungan=sedang|penggunaan=sedang) = 4 / 23
P(tanggungan=sedang|penggunaan=sedang) = 0.173


P(tanggungan=banyak|penggunaan=sedang) = jumlahtanggungan=banyak dan penggunaan=sedang / jumlahpenggunaan=sedang
P(tanggungan=banyak|penggunaan=sedang) = 16 / 23
P(tanggungan=banyak|penggunaan=sedang) = 0.695


P(tanggungan=sedikit|penggunaan=tinggi) = jumlahtanggungan=sedikit dan penggunaan=tinggi / jumlahpenggunaan=tinggi
P(tanggungan=sedikit|penggunaan=tinggi) = 4 / 25
P(tanggungan=sedikit|penggunaan=tinggi) = 0.160


P(tanggungan=sedang|penggunaan=tinggi) = jumlahtanggungan=sedang dan penggunaan=tinggi / jumlahpenggunaan=tinggi
P(tanggungan=sedang|penggunaan=tinggi) = 5 / 25
P(tanggungan=sedang|penggunaan=tinggi) = 0.200


P(tanggungan=banyak|penggunaan=tinggi) = jumlahtanggungan=banyak dan penggunaan=tinggi / jumlahpenggunaan=tinggi
P(tanggungan=banyak|penggunaan=tinggi) = 16 / 25
P(tanggungan=banyak|penggunaan=tinggi) = 0.640


Dengan perhitungan yang sama, dapat dihitung Conditional Probabilities untuk masing-masing kriteria yang lainnya (hasil selengkapnya dapat dilihat dibagian Kriteria dan Probabilitas berikut ini).

Kriteria dan Probabilitas

Adapun nilai probabilitas dari data training pada tabel 1 untuk setiap kriteria dengan perhitungan sesuai perhitungan manual sebelumnya dapat dirangkum sebagai berikut:

Probabilitas Kriteria Penggunaan Listrik

Berdasarkan tabel 1 dapat diketahui dari 53 data terdapat : 5 data rumah tangga dengan penggunaan listrik rendah , 23 data rumah tangga dengan penggunaan listrik sedang , 25 data rumah tangga dengan penggunaan listrik tinggi.

Probabilitas kriteria penggunaan listrik dapat dilihat pada tabel 2

TABLE 2 : Probabilitas Penggunaan Listrik
Jumlah Kejadian 'Penggunaan Listrik'Probabilitas
RendahSedangTinggiRendahSedangTinggi
523250.0940.4330.471

Probabilitas Kriteria Jumlah Tanggungan

Pada kriteria jumlah tanggungan dapat diketahui dari 53 data terdapat : tidak ada data rumah tangga dengan jumlah tanggungan sedikit dan penggunaan listrik rendah , 3 data rumah tangga dengan jumlah tanggungan sedikit dan penggunaan listrik sedang , 4 data rumah tangga dengan jumlah tanggungan sedikit dan penggunaan listrik tinggi , 2 data rumah tangga dengan jumlah tanggungan sedang dan penggunaan listrik rendah , 4 data rumah tangga dengan jumlah tanggungan sedang dan penggunaan listrik sedang , 5 data rumah tangga dengan jumlah tanggungan sedang dan penggunaan listrik tinggi , 3 data rumah tangga dengan jumlah tanggungan banyak dan penggunaan listrik rendah , 16 data rumah tangga dengan jumlah tanggungan banyak dan penggunaan listrik sedang , 16 data rumah tangga dengan jumlah tanggungan banyak dan penggunaan listrik tinggi.

Probabilitas kriteria jumlah tanggungan dapat dilihat pada tabel 3

TABLE 3 : Probabilitas Jumlah Tanggungan
Jumlah TanggunganJumlah Kejadian 'Penggunaan Listrik'Probabilitas
RendahSedangTinggiRendahSedangTinggi
sedikit0341/8=0.1253/23=0.1304/25=0.160
sedang2453/8=0.3754/23=0.1735/25=0.200
banyak316164/8=0.50016/23=0.69516/25=0.640

Probabilitas Kriteria Luas Tanah

Pada kriteria luas tanah dapat diketahui dari 53 data terdapat : tidak ada data rumah tangga dengan luas tanah kecil dan penggunaan listrik rendah , 4 data rumah tangga dengan luas tanah kecil dan penggunaan listrik sedang , 5 data rumah tangga dengan luas tanah kecil dan penggunaan listrik tinggi , 1 data rumah tangga dengan luas tanah standar dan penggunaan listrik rendah , 10 data rumah tangga dengan luas tanah standar dan penggunaan listrik sedang , 12 data rumah tangga dengan luas tanah standar dan penggunaan listrik tinggi , 4 data rumah tangga dengan luas tanah besar dan penggunaan listrik rendah , 9 data rumah tangga dengan luas tanah besar dan penggunaan listrik sedang , 8 data rumah tangga dengan luas tanah besar dan penggunaan listrik tinggi.

Probabilitas kriteria luas tanah dapat dilihat pada tabel 4

TABLE 4 : Probabilitas Luas Tanah
Luas TanahJumlah Kejadian 'Penggunaan Listrik'Probabilitas
RendahSedangTinggiRendahSedangTinggi
kecil0451/8=0.1254/23=0.1735/25=0.200
standar110122/8=0.25010/23=0.43412/25=0.480
besar4985/8=0.6259/23=0.3918/25=0.320

Probabilitas Kriteria Pendapatan

Pada kriteria pendapatan dapat diketahui dari 53 data terdapat : 1 data rumah tangga dengan pendapatan kecil dan penggunaan listrik rendah , 3 data rumah tangga dengan pendapatan kecil dan penggunaan listrik sedang , 4 data rumah tangga dengan pendapatan kecil dan penggunaan listrik tinggi , 1 data rumah tangga dengan pendapatan sedang dan penggunaan listrik rendah , 8 data rumah tangga dengan pendapatan sedang dan penggunaan listrik sedang , 5 data rumah tangga dengan pendapatan sedang dan penggunaan listrik tinggi , 3 data rumah tangga dengan pendapatan besar dan penggunaan listrik rendah , 12 data rumah tangga dengan pendapatan besar dan penggunaan listrik sedang , 16 data rumah tangga dengan pendapatan besar dan penggunaan listrik tinggi.

Probabilitas kriteria pendapatan dapat dilihat pada tabel 5

TABLE 5 : Probabilitas Pendapatan
PendapatanJumlah Kejadian 'Penggunaan Listrik'Probabilitas
RendahSedangTinggiRendahSedangTinggi
kecil1341/5=0.2003/23=0.1304/25=0.160
sedang1851/5=0.2008/23=0.3475/25=0.200
besar312163/5=0.60012/23=0.52116/25=0.640

Probabilitas Kriteria Daya Listrik

Pada kriteria daya listrik dapat diketahui dari 53 data terdapat : tidak ada data rumah tangga dengan daya listrik rendah dan penggunaan listrik rendah , 5 data rumah tangga dengan daya listrik rendah dan penggunaan listrik sedang , 2 data rumah tangga dengan daya listrik rendah dan penggunaan listrik tinggi , 1 data rumah tangga dengan daya listrik sedang dan penggunaan listrik rendah , 5 data rumah tangga dengan daya listrik sedang dan penggunaan listrik sedang , 6 data rumah tangga dengan daya listrik sedang dan penggunaan listrik tinggi , 4 data rumah tangga dengan daya listrik tinggi dan penggunaan listrik rendah , 13 data rumah tangga dengan daya listrik tinggi dan penggunaan listrik sedang , 17 data rumah tangga dengan daya listrik tinggi dan penggunaan listrik tinggi.

Probabilitas kriteria daya listrik dapat dilihat pada tabel 6

TABLE 6 : Probabilitas Daya Listrik
Daya ListrikJumlah Kejadian 'Penggunaan Listrik'Probabilitas
RendahSedangTinggiRendahSedangTinggi
rendah0521/8=0.1255/23=0.2172/25=0.080
sedang1562/8=0.2505/23=0.2176/25=0.240
tinggi413175/8=0.62513/23=0.56517/25=0.680

Probabilitas Kriteria Perlengkapan

Pada kriteria perlengkapan dapat diketahui dari 53 data terdapat : tidak ada data rumah tangga dengan perlengkapan sedikit dan penggunaan listrik rendah , 2 data rumah tangga dengan perlengkapan sedikit dan penggunaan listrik sedang , 3 data rumah tangga dengan perlengkapan sedikit dan penggunaan listrik tinggi , 4 data rumah tangga dengan perlengkapan sedang dan penggunaan listrik rendah , 8 data rumah tangga dengan perlengkapan sedang dan penggunaan listrik sedang , 7 data rumah tangga dengan perlengkapan sedang dan penggunaan listrik tinggi , 1 data rumah tangga dengan perlengkapan banyak dan penggunaan listrik rendah , 13 data rumah tangga dengan perlengkapan banyak dan penggunaan listrik sedang , 15 data rumah tangga dengan perlengkapan banyak dan penggunaan listrik tinggi.

Probabilitas kriteria perlengkapan dapat dilihat pada tabel 7

TABLE 7 : Probabilitas Perlengkapan
PerlengkapanJumlah Kejadian 'Penggunaan Listrik'Probabilitas
RendahSedangTinggiRendahSedangTinggi
sedikit0231/8=0.1252/23=0.0863/25=0.120
sedang4875/8=0.6258/23=0.3477/25=0.280
banyak113152/8=0.25013/23=0.56515/25=0.600

Pengujian Metode Naive Bayes

Dari nilai probabilitas di atas akan diuji data sebanyak 53 data dan dihasilkan hasil klasifikasi penggunaan listrik seperti terlihat pada TABEL 8. Untuk memudahkan pemahaman perhitungan prediksinya dicontohkan dalam perhitungan berikut:

Pada data ke-39; untuk Jumlah Tanggungan=sedang , Luas Tanah=standar , Pendapatan=besar , Daya Listrik=tinggi , Perlengkapan=sedang bisa dihitung nilai prediksi probabilitas dari masing-masing nilai kelasnya (berdasarkan persamaan NBC-08 atau NBC-09) sebagai berikut :

P(penggunaan=rendah|X)=(P(jumlah tanggungan=sedang|penggunaan=rendah)*P(luas tanah=standar|penggunaan=rendah)*P(pendapatan=besar|penggunaan=rendah)*P(daya listrik=tinggi|penggunaan=rendah)*P(perlengkapan=sedang|penggunaan=rendah)) * P(penggunaan=rendah)
P(penggunaan=rendah|X)=(0.375 * 0.250 * 0.600 * 0.625 * 0.625) * 0.094
P(penggunaan=rendah|X)=0.0020728920990566

P(penggunaan=sedang|X)=(P(jumlah tanggungan=sedang|penggunaan=sedang)*P(luas tanah=standar|penggunaan=sedang)*P(pendapatan=besar|penggunaan=sedang)*P(daya listrik=tinggi|penggunaan=sedang)*P(perlengkapan=sedang|penggunaan=sedang)) * P(penggunaan=sedang)
P(penggunaan=sedang|X)=(0.173 * 0.434 * 0.521 * 0.565 * 0.347) * 0.433
P(penggunaan=sedang|X)=0.0033657926910382

P(penggunaan=tinggi|X)=(P(jumlah tanggungan=sedang|penggunaan=tinggi)*P(luas tanah=standar|penggunaan=tinggi)*P(pendapatan=besar|penggunaan=tinggi)*P(daya listrik=tinggi|penggunaan=tinggi)*P(perlengkapan=sedang|penggunaan=tinggi)) * P(penggunaan=tinggi)
P(penggunaan=tinggi|X)=(0.200 * 0.480 * 0.640 * 0.680 * 0.280) * 0.471
P(penggunaan=tinggi|X)=0.0055180075471698

Dari perhitungan tersebut diperoleh nilai probabilitas P(penggunaan=tinggi|X) adalah yang tertinggi (0.0055180075471698), sehingga prediksinya adalah Penggunaan Listriknya Tinggi

TABEL 8 : Hasil Pengujian
NoClassInput KategorikalProbabilitasPrediction
X1X2X3X4X5rendahsedangtinggi
1sedangbanyakstandarbesartinggisedikit0.000552771226415090.00336579269103820.0075675532075472tinggi
2tinggibanyakbesarbesartinggisedikit0.00138192806603770.00302921342193440.0050450354716981tinggi
3tinggisedikitstandarbesarsedangbanyak0.000110554245283020.00157771532392420.0033386264150943tinggi
4tinggisedikitkecilbesarsedangbanyak5.5277122641509E-50.000631086129569670.0013910943396226tinggi
5sedangbanyakbesarsedangtinggibanyak0.000921285377358490.0131265914950490.0078828679245283sedang
6sedangbanyakkecilbesartinggibanyak0.000552771226415090.00875106099669940.015765735849057tinggi
7tinggisedangstandarsedangrendahsedang0.000138192806603770.000863023766932880.0002028679245283sedang
8rendahbanyakbesarsedangtinggisedang0.00230321344339620.00807790245849180.0036786716981132sedang
9sedangbanyakbesarbesartinggisedang0.00690964033018870.0121168536877380.011771749433962sedang
10sedangsedikitstandarbesarrendahsedang0.000138192806603770.000970901737799490.00051934188679245sedang
11sedangbanyakbesarsedangrendahbanyak0.00018425707547170.00504868903655730.00092739622641509sedang
12tinggibanyakkecilbesartinggibanyak0.000552771226415090.00875106099669940.015765735849057tinggi
13tinggibanyakbesarkeciltinggisedang0.00230321344339620.00302921342193440.0029429373584906sedang
14tinggisedangstandarbesartinggibanyak0.000829156839622640.00546941312293710.011824301886792tinggi
15tinggisedangstandarbesartinggibanyak0.000829156839622640.00546941312293710.011824301886792tinggi
16tinggisedikitbesarsedangsedangbanyak9.2128537735849E-50.00094662919435450.00069554716981132sedang
17sedangbanyakbesarbesarsedangbanyak0.00110554245283020.0075730335548360.0089030037735849tinggi
18sedangbanyakkecilkeciltinggisedikit9.2128537735849E-50.000336579269103820.00078828679245283tinggi
19tinggibanyakbesarbesartinggibanyak0.00276385613207550.0196898872425740.025225177358491tinggi
20sedangbanyakkecilsedangsedangbanyak7.3702830188679E-50.00224386179402550.0017388679245283sedang
21tinggibanyakbesarkeciltinggisedang0.00230321344339620.00302921342193440.0029429373584906sedang
22sedangsedangbesarbesarrendahsedang0.00103644604952830.00116508208535940.00043278490566038sedang
23rendahsedangbesarbesartinggisedang0.00518223024764150.00302921342193440.0036786716981132rendah
24sedangbanyakstandarbesarrendahbanyak0.000221108490566040.00841448172759560.0044515018867925sedang
25tinggibanyakstandarbesarrendahbanyak0.000221108490566040.00841448172759560.0044515018867925sedang
26sedangsedangbesarbesartinggisedang0.00518223024764150.00302921342193440.0036786716981132rendah
27tinggibanyakbesarbesartinggibanyak0.00276385613207550.0196898872425740.025225177358491tinggi
28tinggisedangbesarsedangtinggisedang0.00172741008254720.00201947561462290.0011495849056604sedang
29tinggibanyakstandarkeciltinggibanyak0.00036851415094340.00546941312293710.009459441509434tinggi
30sedangbanyakstandarkeciltinggibanyak0.00036851415094340.00546941312293710.009459441509434tinggi
31sedangsedangstandarsedangsedangsedang0.000276385613207550.000863023766932880.00060860377358491sedang
32tinggibanyakstandarsedangsedangsedang0.00036851415094340.00345209506773150.0019475320754717sedang
33sedangbanyakstandarbesarsedangsedang0.00110554245283020.00517814260159730.0062321026415094tinggi
34tinggisedikitstandarbesartinggibanyak0.000276385613207550.00410205984220280.009459441509434tinggi
35tinggibanyakbesarbesarsedangbanyak0.00110554245283020.0075730335548360.0089030037735849tinggi
36tinggibanyakstandarbesarsedangbanyak0.000442216981132080.00841448172759560.013354505660377tinggi
37sedangbanyakkecilbesartinggisedang0.00138192806603770.00538526830566120.0073573433962264tinggi
38sedangbanyakstandarsedangtinggibanyak0.00036851415094340.0145851016611660.011824301886792sedang
39rendahsedangstandarbesartinggisedang0.00207289209905660.00336579269103820.0055180075471698tinggi
40sedangbanyakstandarsedangtinggisedang0.000921285377358490.0089754471761020.0055180075471698sedang
41sedangsedangbesarbesarrendahbanyak0.000414578419811320.0018932583887090.00092739622641509sedang
42tinggibanyakkecilkeciltinggisedikit9.2128537735849E-50.000336579269103820.00078828679245283tinggi
43sedangsedikitstandarkeciltinggibanyak9.2128537735849E-50.00102551496055070.0023648603773585tinggi
44tinggibanyakkecilsedangtinggisedang0.000460642688679250.00359017887044080.0022991698113208sedang
45rendahbanyakbesarbesartinggibanyak0.00276385613207550.0196898872425740.025225177358491tinggi
46sedangbanyakbesarbesarsedangbanyak0.00110554245283020.0075730335548360.0089030037735849tinggi
47tinggibanyakstandarbesartinggisedang0.00276385613207550.0134631707641530.017657624150943tinggi
48tinggisedangstandarbesartinggibanyak0.000829156839622640.00546941312293710.011824301886792tinggi
49rendahbanyakbesarkecilsedangsedang0.000921285377358490.00116508208535940.0010386837735849sedang
50tinggibanyakkecilbesartinggisedikit0.000276385613207550.00134631707641530.0031531471698113tinggi
51tinggibanyakstandarbesartinggibanyak0.00110554245283020.0218776524917490.037837766037736tinggi
52sedangbanyakbesarsedangtinggibanyak0.000921285377358490.0131265914950490.0078828679245283sedang
53sedangsedikitstandarsedangtinggibanyak9.2128537735849E-50.00273470656146860.0029560754716981tinggi

Berdasarkan TABEL 8 di atas dapat dilihat persentase untuk Correctly Classified Instance adalah sebesar 56.603 % sementara persentase untuk Incorrectly Classified Instance adalah sebesar 43.396 %. Di mana dari 53 data penggunaan listrik rumah tangga, ada sebanyak 30 data penggunaan listrik rumah tangga berhasil diklasifikasikan dengan benar dan sebanyak 23 data penggunaan listrik rumah tangga tidak berhasil diklasifikasikan dengan benar.

Pembuatan Database

Sebagai bahan pembelajaran Metode Naïve Bayes Classifier ini; dibuat database (dalam hal ini menggunakan MySQL/MariaDB Database server) sebagai berikut:

CREATE DATABASE IF NOT EXISTS db_dm;
USE db_dm;

Awalnya membuat dulu database dengan nama db_dm jika belum ada database dengan nama tersebut, kemudian gunakan database tersebut dengan memakai sintak USE db_dm;

Dalam hal ini, pembuatan database memakai command console dari database server yang bersangkutan

Dari data pada fakta di atas, dapat di representasikan kriteria/atribut dan parameter yang berperan dalam permasalahan ini dalam bentuk tabel database, yaitu tabel nbc_atribut sebagai berikut:

DROP TABLE IF EXISTS nbc_atribut;
CREATE TABLE IF NOT EXISTS nbc_atribut(
  id_atribut TINYINT(3) UNSIGNED AUTO_INCREMENT,
  atribut VARCHAR(100) NOT NULL,
  PRIMARY KEY(id_atribut)
)ENGINE=MyISAM;

INSERT INTO nbc_atribut(id_atribut,atribut)
VALUES
(1,'Penggunaan Listrik'),
(2,'Jumlah Tanggungan Keluarga'),
(3,'Luas Tanah'),
(4,'Pendapatan /bulan'),
(5,'Daya Listrik'),
(6,'Perlengkapan  yang dimiliki');

Record pertama dalam tabel nbc_atribut ini (Penggunaan Listrik) adalah merupakan class atribut, yang merupakan atribut tujuan.

Berikutnya adalah data mengenai parameter-parameter/nilai dari tiap kriteria/atribut yang akan diperhitungkan -- sesuai dengan contoh kasus di atas -- dengan dibuatkan satu tabel baru bernama nbc_parameter.

DROP TABLE IF EXISTS nbc_parameter;
CREATE TABLE IF NOT EXISTS nbc_parameter(
  id_parameter TINYINT(3) UNSIGNED AUTO_INCREMENT,
  id_atribut TINYINT(3) UNSIGNED NOT NULL,
  nilai TINYINT(3) UNSIGNED NOT NULL,
  parameter  VARCHAR(100) NOT NULL,
  PRIMARY KEY(id_parameter)
)ENGINE=MyISAM;

INSERT INTO nbc_parameter(id_atribut,nilai,parameter) 
VALUES
(1,0,'rendah'),(1,1,'sedang'),(1,2,'tinggi'),
(2,0,'sedikit'),(2,1,'sedang'),(2,2,'banyak'),
(3,0,'kecil'),(3,1,'standar'),(3,2,'besar'),
(4,0,'kecil'),(4,1,'sedang'),(4,2,'besar'),
(5,0,'rendah'),(5,1,'sedang'),(5,2,'tinggi'),
(6,0,'sedikit'),(6,1,'sedang'),(6,2,'banyak');

Tabel nbc_responden bersifat optional, tabel ini digunakan untuk menyimpan data detail dari responder dan bisa ditambahkan field/kolom lain jika diperlukan

DROP TABLE IF EXISTS nbc_responden;
CREATE TABLE IF NOT EXISTS nbc_responden(
  id_responden TINYINT(3) UNSIGNED AUTO_INCREMENT,
  responden VARCHAR(50),
  PRIMARY KEY(id_responden)
)ENGINE=MyISAM;

INSERT INTO nbc_responden(id_responden,responden) 
VALUES
(1,'Responden 1'),(2,'Responden 2'),(3,'Responden 3'),(4,'Responden 4'),(5,'Responden 5'),
(6,'Responden 6'),(7,'Responden 7'),(8,'Responden 8'),(9,'Responden 9'),(10,'Responden 10'),
(11,'Responden 11'),(12,'Responden 12'),(13,'Responden 13'),(14,'Responden 14'),(15,'Responden 15'),
(16,'Responden 16'),(17,'Responden 17'),(18,'Responden 18'),(19,'Responden 19'),(20,'Responden 20'),
(21,'Responden 21'),(22,'Responden 22'),(23,'Responden 23'),(24,'Responden 24'),(25,'Responden 25'),
(26,'Responden 26'),(27,'Responden 27'),(28,'Responden 28'),(29,'Responden 29'),(30,'Responden 30'),
(31,'Responden 31'),(32,'Responden 32'),(33,'Responden 33'),(34,'Responden 34'),(35,'Responden 35'),
(36,'Responden 36'),(37,'Responden 37'),(38,'Responden 38'),(39,'Responden 39'),(40,'Responden 40'),
(41,'Responden 41'),(42,'Responden 42'),(43,'Responden 43'),(44,'Responden 44'),(45,'Responden 45'),
(46,'Responden 46'),(47,'Responden 47'),(48,'Responden 48'),(49,'Responden 49'),(50,'Responden 50'),
(51,'Responden 51'),(52,'Responden 52'),(53,'Responden 53');

Data-data training, yaitu data-data sample yang akan diperhitungkan -- sesuai dengan contoh kasus di atas -- disimpan pada satu tabel baru bernama nbc_data sebagai berikut.

DROP TABLE IF EXISTS nbc_data;
CREATE TABLE IF NOT EXISTS nbc_data(
  id_data INT(11) UNSIGNED AUTO_INCREMENT,
  id_responden TINYINT(3) UNSIGNED NOT NULL,
  id_atribut TINYINT(3) UNSIGNED NOT NULL,
  id_parameter TINYINT(3) UNSIGNED NOT NULL,
  PRIMARY KEY(id_data)
)ENGINE=MyISAM;

INSERT INTO nbc_data(id_responden,id_atribut,id_parameter) 
VALUES
(1,1,1),(1,2,2),(1,3,1),(1,4,2),(1,5,2),(1,6,0),
(2,1,2),(2,2,2),(2,3,2),(2,4,2),(2,5,2),(2,6,0),
(3,1,2),(3,2,0),(3,3,1),(3,4,2),(3,5,1),(3,6,2),
(4,1,2),(4,2,0),(4,3,0),(4,4,2),(4,5,1),(4,6,2),
(5,1,1),(5,2,2),(5,3,2),(5,4,1),(5,5,2),(5,6,2),
(6,1,1),(6,2,2),(6,3,0),(6,4,2),(6,5,2),(6,6,2),
(7,1,2),(7,2,1),(7,3,1),(7,4,1),(7,5,0),(7,6,1),
(8,1,0),(8,2,2),(8,3,2),(8,4,1),(8,5,2),(8,6,1),
(9,1,1),(9,2,2),(9,3,2),(9,4,2),(9,5,2),(9,6,1),
(10,1,1),(10,2,0),(10,3,1),(10,4,2),(10,5,0),(10,6,1),
(11,1,1),(11,2,2),(11,3,2),(11,4,1),(11,5,0),(11,6,2),
(12,1,2),(12,2,2),(12,3,0),(12,4,2),(12,5,2),(12,6,2),
(13,1,2),(13,2,2),(13,3,2),(13,4,0),(13,5,2),(13,6,1),
(14,1,2),(14,2,1),(14,3,1),(14,4,2),(14,5,2),(14,6,2),
(15,1,2),(15,2,1),(15,3,1),(15,4,2),(15,5,2),(15,6,2),
(16,1,2),(16,2,0),(16,3,2),(16,4,1),(16,5,1),(16,6,2),
(17,1,1),(17,2,2),(17,3,2),(17,4,2),(17,5,1),(17,6,2),
(18,1,1),(18,2,2),(18,3,0),(18,4,0),(18,5,2),(18,6,0),
(19,1,2),(19,2,2),(19,3,2),(19,4,2),(19,5,2),(19,6,2),
(20,1,1),(20,2,2),(20,3,0),(20,4,1),(20,5,1),(20,6,2),
(21,1,2),(21,2,2),(21,3,2),(21,4,0),(21,5,2),(21,6,1),
(22,1,1),(22,2,1),(22,3,2),(22,4,2),(22,5,0),(22,6,1),
(23,1,0),(23,2,1),(23,3,2),(23,4,2),(23,5,2),(23,6,1),
(24,1,1),(24,2,2),(24,3,1),(24,4,2),(24,5,0),(24,6,2),
(25,1,2),(25,2,2),(25,3,1),(25,4,2),(25,5,0),(25,6,2),
(26,1,1),(26,2,1),(26,3,2),(26,4,2),(26,5,2),(26,6,1),
(27,1,2),(27,2,2),(27,3,2),(27,4,2),(27,5,2),(27,6,2),
(28,1,2),(28,2,1),(28,3,2),(28,4,1),(28,5,2),(28,6,1),
(29,1,2),(29,2,2),(29,3,1),(29,4,0),(29,5,2),(29,6,2),
(30,1,1),(30,2,2),(30,3,1),(30,4,0),(30,5,2),(30,6,2),
(31,1,1),(31,2,1),(31,3,1),(31,4,1),(31,5,1),(31,6,1),
(32,1,2),(32,2,2),(32,3,1),(32,4,1),(32,5,1),(32,6,1),
(33,1,1),(33,2,2),(33,3,1),(33,4,2),(33,5,1),(33,6,1),
(34,1,2),(34,2,0),(34,3,1),(34,4,2),(34,5,2),(34,6,2),
(35,1,2),(35,2,2),(35,3,2),(35,4,2),(35,5,1),(35,6,2),
(36,1,2),(36,2,2),(36,3,1),(36,4,2),(36,5,1),(36,6,2),
(37,1,1),(37,2,2),(37,3,0),(37,4,2),(37,5,2),(37,6,1),
(38,1,1),(38,2,2),(38,3,1),(38,4,1),(38,5,2),(38,6,2),
(39,1,0),(39,2,1),(39,3,1),(39,4,2),(39,5,2),(39,6,1),
(40,1,1),(40,2,2),(40,3,1),(40,4,1),(40,5,2),(40,6,1),
(41,1,1),(41,2,1),(41,3,2),(41,4,2),(41,5,0),(41,6,2),
(42,1,2),(42,2,2),(42,3,0),(42,4,0),(42,5,2),(42,6,0),
(43,1,1),(43,2,0),(43,3,1),(43,4,0),(43,5,2),(43,6,2),
(44,1,2),(44,2,2),(44,3,0),(44,4,1),(44,5,2),(44,6,1),
(45,1,0),(45,2,2),(45,3,2),(45,4,2),(45,5,2),(45,6,2),
(46,1,1),(46,2,2),(46,3,2),(46,4,2),(46,5,1),(46,6,2),
(47,1,2),(47,2,2),(47,3,1),(47,4,2),(47,5,2),(47,6,1),
(48,1,2),(48,2,1),(48,3,1),(48,4,2),(48,5,2),(48,6,2),
(49,1,0),(49,2,2),(49,3,2),(49,4,0),(49,5,1),(49,6,1),
(50,1,2),(50,2,2),(50,3,0),(50,4,2),(50,5,2),(50,6,0),
(51,1,2),(51,2,2),(51,3,1),(51,4,2),(51,5,2),(51,6,2),
(52,1,1),(52,2,2),(52,3,2),(52,4,1),(52,5,2),(52,6,2),
(53,1,1),(53,2,0),(53,3,1),(53,4,1),(53,5,2),(53,6,2);

Pengambilan Nilai

Sebelum dilakukan perhitungan-perhitungan menggunakan metoda Naive Bayes Classifier dengan menggunakan PHP, maka terlebih dahulu kita menyiapkan data yang akan diolah dengan mengambil (fetching) data dari database, dan disimpan (assign) ke dalam variabel-variabel PHP.

Data-data yang diambil tersebut meliputi data-data primer -- yaitu data kriteria dan parameternya -- serta data-data sekunder yaitu data training (nilai)

Koneksi ke Database

Sebelum melalukan operasi dengan data dari database, perlu dibuat script untuk koneksi ke database terlebih dahulu. Dari database yang sudah dibuat, kita bisa membuat script php untuk membuat koneksi ke database server dengan extension mysqli sebagai berikut:

<?php
//-- konfigurasi database
$dbhost 'localhost';
$dbuser 'root';
$dbpass '';
$dbname 'db_dm';
//-- koneksi ke database server dengan extension mysqli
$db = new mysqli($dbhost,$dbuser,$dbpass,$dbname);
//-- hentikan program dan tampilkan pesan kesalahan jika koneksi gagal
if ($db->connect_error) {
    die(
'Connect Error ('.$db->connect_errno.')'.$db->connect_error);
}
?>

Sesuaikan nilai-nilai $dbhost,$dbuser,$dbpass dan $dbname dengan konfigurasi database yg digunakan.

Pengambilan Nilai Atribut

Data atribut yang akan digunakan dalam perhitungan metode Naïve Bayes Classifier ini diambil dari tabel nbc_atribut dan dimasukkan ke dalam variabel $atribut yang berupa array multidimensi. Variabel $atribut ini mempunyai index berupa id_atribut dan berisi item data nama atribut dari masing-masing atribut tersebut.

<?php
//-- query untuk mendapatkan semua data atribut di tabel nbc_atribut
$sql 'SELECT * FROM nbc_atribut';
$result $db->query($sql);
//-- menyiapkan variable penampung berupa array
$atribut=array();
//-- melakukan iterasi pengisian array untuk tiap record data yang didapat
foreach ($result as $row) {
    
$atribut[$row['id_atribut']]=$row['atribut'];
}
?>

Pengambilan Nilai Parameter

Data nilai parameter yang akan digunakan dalam perhitungan berikutnya, diambil dari tabel nbc_parameter dan dimasukkan ke dalam variabel array multidimensi $parameter.

<?php
//-- query untuk mendapatkan semua data atribut di tabel nbc_atribut
$sql 'SELECT * FROM nbc_parameter ORDER BY id_atribut,id_parameter';
$result $db->query($sql);
//-- menyiapkan variable penampung berupa array
$parameter=array();
$id_atribut=0;
//-- melakukan iterasi pengisian array untuk tiap record data yang didapat
foreach ($result as $row) {
    if(
$id_atribut!=$row['id_atribut']){
        
$parameter[$row['id_atribut']]=array();
        
$id_atribut=$row['id_atribut'];
    }
    
$parameter[$row['id_atribut']][$row['nilai']]=$row['parameter'];
}
?>

Sebagai contoh adalah, dari record yang pertama didapat data array $parameter[1][0]='rendah'. Indeks pertama dari variabel $parameter tersebut adalah nilai dari id_atribut, dan indeks keduanya adalah nilai-nya (numerik), dan isinya berupa data literal (string) dari parameter tersebut.

Pengambilan Nilai Data Training

Nilai data training yang tersimpan dalam tabel nbc_data dan nbc_responder diambil dan dimasukkan dalam variabel $data untuk diolah pada perhitungan berikutnya. Pengambilan nilai data training tersebut dapat dituliskan dalam script PHP sebagai berikut:

<?php
//-- query untuk mendapatkan semua data training di tabel nbc_responden dan nbc_data
$sql 'SELECT * FROM nbc_data a JOIN nbc_responden b USING(id_responden) ORDER BY a.id_data';
$result $db->query($sql);
//-- menyiapkan variable penampung berupa array
$data=array();
$responden=array();
$id_responden=0;
//-- melakukan iterasi pengisian array untuk tiap record data yang didapat
foreach ($result as $row) {
    if(
$id_responden!=$row['id_responden']){
        
$responden[$row['id_responden']]=$row['responden'];
        
$data[$row['id_responden']]=array();
        
$id_responden=$row['id_responden'];
    }
    
$data[$row['id_responden']][$row['id_atribut']]=$row['id_parameter'];
}
//-- menampilkan data training dalam bentuk tabel
?>
<table border='1'>
<caption>TABEL 1 : Data Training</caption>
<tr><th>Responden</th>
<?php 
//-- menampilkan header table
for($i=2;$i<=$jml_atribut;$i++){ 
    echo 
"<th>{$atribut[$i]}</th>";
}
?>
<th><?php echo $atribut[1];?></th></tr>
<?php
//-- menampilkan data secara literal
foreach($data as $id_responden=>$dt_atribut){
    echo 
"<tr><td>{$responden[$id_responden]}</td>";
    for(
$i=2;$i<=$jml_atribut;$i++){ 
        echo 
"<td>{$parameter[$i][$dt_atribut[$i]]}</td>";
    }
    echo 
"<td>{$parameter[1][$dt_atribut[1]]}</td></tr>";
}
?>
</table>

Dari script tersebut didapatkan nilai data training , semisal untuk data dari record pertama, yaitu $data[1][1]=1; yang maksudnya adalah Nilai data training dari responder # 1 untuk atribut #1 (Penggunaan Listrik) adalah = 1 (sedang)

Perhitungan

Pada bagian ini dihitung probabilitas dari tiap-tiap nilai atribut dan kelas dari data training yang diberikan

Perhitungan yang dilakukan meliputi penghitungan jumlah data/frekuensi untuk setiap nilai atribut dan kelas, penghitungan nilai probabilitas tiap nilai kelas (Class Probabilities), serta penghitungan nilai probabilitas tiap nilai atribut (Conditional Probabilities)

Perhitungan Frekuensi Data

Sebelum menghitung nilai probabilitas/peluang untuk setiap nilai atribut dan kelas dari data training, maka dihitung terlebih dahulu frekuensi/jumlah data untuk maasing-masing nilai atribut dan kelasnya sebagai berikut:

<?php
//-- menyiapkan variable penampung utk freq tiap atribut berupa array $freq
$freq=array();
//-- inisialisasi data awal $freq
for($i=2;$i<=$jml_atribut;$i++){
    for(
$j=0;$j<3;$j++){
        for(
$k=0;$k<3;$k++){
            
$freq[$i][$j][$k]=0;
        }
    }
}
//-- menyiapkan variable penampung utk freq prior berupa array $prior_freq
$prior_freq=array();
//-- iterasi tiap data training
foreach($data as $i=>$v){
    
//-- hitung freq tiap atribut
    
for($j=2;$j<=$jml_atribut;$j++){
        
$freq[$j][$v[$j]][$v[1]]+=1;
    }
    
//-- hitung feq prior/kelas
    
if(!isset($prior_freq[$v[1]])) $prior_freq[$v[1]]=0;
    
$prior_freq[$v[1]]+=1;
}
ksort($prior_freq);
//-- menampilkan tabel frekuensi/jumlah data kelas
?>
<table border='1'>
<caption>TABEL 2 : Jumlah Data Kelas <?php echo $atribut[1];?></caption>
<tr><?php foreach($parameter[1] as $nilai=>$param){ echo "<th>{$param}</th>"; }?></tr>
<tr><?php foreach($prior_freq as $nilai=>$nfreq){ echo "<td>{$nfreq}</td>"; }?></tr>
</table>
<?php 
//-- menampilkan tabel frekuensi/jumlah data tiap atribut
for($i=2;$i<=$jml_atribut;$i++){
    echo 
"<table border='1'>";
    
//-- caption tabel utk masing-masing atribut
    
echo "<caption>TABEL ".($i+1)." : Jumlah Data Atribut {$atribut[$i]}</caption>";
    echo 
"<tr><th rowspan='2'>{$atribut[1]}</th><th colspan='3'>{$atribut[$i]}</th></tr><tr>"
    
//-- item nilai literal tiap atribut
    
foreach($parameter[$i] as $nilai=>$param){ 
        echo 
"<th>{$param}</th>"
    }
    echo 
"</tr>";
    
//-- iterasi utk tiap nilai kelas
    
foreach($parameter[1] as $n=>$p){
        echo 
"<tr><td>{$p}</td>";
        
//-- iterasi jumlah data/freq tiap nilai atribut
        
for($j=0;$j<=2;$j++){
        echo 
"<td>{$freq[$i][$j][$n]}</td>";
        }
        echo 
"</tr>";
    }
    echo 
"</table>";
}
?>

Perhitungan Class Probabilities

Perhitungan Class Probabilities adalah jumlah/frekuensi data untuk setiap nilai kelas dibagi dengan total jumlah/frekuensi data training

<?php
//-- menyiapkan variable penampung untuk class probabilities $prior
$prior=array();
//-- hitung nilai masing2 class probabilities
foreach($prior_freq as $p=>$v){
    
$prior[$p]=$v/array_sum($prior_freq);
}
ksort($prior);
?>
<table border='1'> 
<caption>TABEL 8 : Probabilitas Kelas <?php echo $atribut[1];?></caption> 
<tr><?php foreach($parameter[1] as $nilai=>$param){ echo "<th>{$param}</th>"; }?></tr> 
<tr><?php foreach($prior as $nilai=>$nprior){ echo "<td>{$nprior}</td>"; }?></tr> 
</table> 

Perhitungan Conditional Probabilities

Perhitungan Conditional Probabilities di sini adalah jumlah/frekuensi data untuk setiap nilai atribut terhadap nilai kelas dibagi dengan jumlah/frekuensi data nilai kelas tersebut. Pada perhitungan ini dimasukkan juga routine untuk mengecek apakah ada jumlah/frekuensi data yang 0(nol) pada nilai kelas yang diperhitungkan tersebut. Jika ditemukan nilai 0(nol) maka akan dilakukan Laplace Correction pada perhitungan probabilitas tersebut.

<?php
//-- menyiapkan variable penampung utk conditional probabilities $likehood
$likehood=array();
//-- iterasi mulai atribut ke-2 sampai terakhir
for($i=2;$i<=$jml_atribut;$i++){
    
//-- iterasi nilai atribut
    
for($j=0;$j<3;$j++){
        
//-- iterasi nilai kelas
        
for($k=0;$k<3;$k++){
            
//-- tes kondisi jika terdapat freq yang 0(nol) utk kelas=$k
            
$t_nol=($freq[$i][0][$k]==|| $freq[$i][1][$k]==|| $freq[$i][2][$k]==0);
            
//-- lakukan laplace correction jika ditemukan freq 0(nol) $t_nol=true
            
$likehood[$i][$j][$k]=($freq[$i][$j][$k]+($t_nol?1:0))/($prior_freq[$k]+($t_nol?count($prior_freq):0));
        }
    }
}
//-- menampilkan tabel probabilitas tiap atribut 
for($i=2;$i<=$jml_atribut;$i++){ 
    echo 
"<table border='1'>"
    
//-- caption tabel utk masing-masing atribut 
    
echo "<caption>TABEL ".($i+7)." : Probabilitas Atribut {$atribut[$i]}</caption>"
    echo 
"<tr><th rowspan='2'>{$atribut[1]}</th><th colspan='3'>{$atribut[$i]}</th></tr><tr>"
    
//-- item nilai literal tiap atribut 
    
foreach($parameter[$i] as $nilai=>$param){  
        echo 
"<th>{$param}</th>";  
    } 
    echo 
"</tr>"
    
//-- iterasi utk tiap nilai kelas 
    
foreach($parameter[1] as $n=>$p){ 
        echo 
"<tr><td>{$p}</td>"
        
//-- iterasi probabilitas tiap nilai atribut 
        
for($j=0;$j<=2;$j++){ 
            echo 
"<td>{$likehood[$i][$j][$n]}</td>"
        } 
        echo 
"</tr>"
    } 
    echo 
"</table>"

?>

Pengujian

Pengujian terhadap data training dibandingkan dengan hasil prediksi, dan memprediksi nilai kelas terhadap inputan sembarang

Pengujian Data Training

Pengujian data yang pertama dilakukan terhadap data training dengan membandingkan nilai kelas pada data training dengan hasil prediksi dari perhitungan probabilitas dengan metode Naïve Bayes. Hasil yang diperoleh berupa prosentase perbandingan prediksi yang benar (Correctly Classified Instance) dan prosentase prediksi yang tidak benar (Incorrectly Classified Instance)

<?php
//-- menyiapkan variabel penampung probabilitas per data training thd kelas
$prob=array();
//-- inisialisasi jumlah kumulatif prediksi benar dari data training
$right=0;
//-- iterasi utk setiap data training
foreach($data as $n=>$v){
    
$m=array();
    
//-- iterasi utk setiap nilai kelas
    
for($i=0;$i<3;$i++){
        
//-- inisialisasi probabilitas awal
        
$m[$i]=1;
        
//-- perkalian nilai probabilitas tiap atribut
        
for($j=2;$j<=$jml_atribut;$j++){
            
$m[$i]*=$likehood[$j][$v[$j]][$i];
        }
        
//-- kalikan dengan prior probabilitasnya
        
$m[$i]*=$prior[$i];
    }
    
//-- menentukan nilai prediksi kelas per data training
    
$predict[$n]=array_search(max($m),$m);
    
$prob[$n]=$m;
    
//-- hitung kumulatif prediksi yang benar
    
$right+=($predict[$n]==$v[1]?1:0);
}
//-- menampilkan prosentase data training yg diprediksi benar
echo "Correctly Classified Instance = ".($right/count($data)*100)."% <br>";
//-- menampilkan prosentase data training yg diprediksi tidak benar
echo "Incorrectly Classified Instance = ".((1-$right/count($data))*100)."% <br>";
?>

Prediksi Terhadap Inputan

Hasil perhitungan probabilitas dari data training yang diberikan bisa dijadikan patokan untuk memprediksi nilai kelas dari suatu set nilai atribut inputan. Pada contoh script berikut ini, nilai inputan disimulasikan dari hasil data random.

<?php
//-- menyiapkan variabel penampung data inputan
$input=array();
//-- membuat data input simulasi dengan fungsi random untuk masing2 atribut
for($i=2;$i<=$jml_atribut;$i++){
    
$input[$i]=rand(0,2);
}    
$m=array();
//-- iterasi utk setiap nilai kelas
for($i=0;$i<3;$i++){
    
//-- inisialisasi probabilitas awal
    
$m[$i]=1;
    
//-- perkalian nilai probabilitas tiap atribut
    
for($j=2;$j<=$jml_atribut;$j++){
        
$m[$i]*=$likehood[$j][$input[$j]][$i];
    }
    
//-- kalikan dengan prior probabilitasnya
    
$m[$i]*=$prior[$i];
}
//-- menentukan prediksi nilai kelas, berdasar probabilitas terbesar
$result=array_search(max($m),$m);

//-- menampilkan hasil prediksi nilai kelas
$s_list=array();
foreach(
$input as $i=>$n){
    
$s_list[]="<b>{$atribut[$i]}</b>=<i>{$parameter[$i][$n]}</i>";
}
echo 
"Untuk ".implode(' , ',$s_list)." masuk ke kelas <b>{$atribut[1]}</b>=<i>{$parameter[1][$result]}</i> ";
echo 
"dengan probabilitas sebesar <b>{$m[$result]}</b> ";
?>

  • Bustami., (2013), Penerapan Algoritma Naive Bayes Untuk Mengklasifikasi Data Nasabah Asuransi, TECHSI : Jurnal Penelitian Teknik Informatika, Vol. 3, No.2, Hal. 127-146.
  • Nasari, F., (2014), Analisa Faktor Penyebab Tingginya Pemakaian Listrik Rumah Tangga Menggunakan Algoritma C 4.5 (Studi Kasus di Kelurahan Tanjung Mulia), Tesis, Program Pasca Sarjana Ilmu Komputer, Universitas Putra Indonesia (YPTK), Padang
  • Patil, T. R., Sherekar, M. S., (2013), Performance Analysis of Naive Bayes and J48 Classification Algorithm for Data Classification, International Journal of Computer Science and Applications, Vol. 6, No. 2, Hal 256-261.
  • Pattekari, S. A., Parveen, A., (2012), Prediction System for Heart Disease Using Naive Bayes, International Journal of Advanced Computer and Mathematical Sciences, ISSN 2230-9624, Vol. 3, No 3, Hal 290-294.
  • Saleh, A. (2015) Implementasi Metode Klasifikasi Naïve Bayes Dalam Memprediksi Besarnya Penggunaan Listrik Rumah Tangga Citec Journal, Vol. 2, No. 3, ISSN: 2354-5771
  • Ridwan, M., Suyono, H., Sarosa, M., (2013), Penerapan Data Mining untuk Evaluasi Kinerja Akademik Mahasiswa Menggunakan Algoritma Naive Bayes Classifier, Jurnal EECCIS, Vol 1, No. 7, Hal. 59-64.
  • Santosa, B. (2007). Data Mining: Teknik Pemanfaatan Data untuk Keperluan Bisnis. Graha Ilmu. Yogyakarta.
  • Xhemali, Daniela, Hinde, C.J., and Stone, R.G. (2009) Naive Bayes vs. Decision Trees vs. Neural Networks in the Classification of Training Web Pages