Algoritma Naive Bayes adalah salah satu algoritma yang digunakan untuk klasifikasi atau pengelompokan data, tetapi bisa juga digunakan untuk pengambilan keputusan. Contoh yang dibahas kali ini adalah mengenai penentuan penerimaan pengajuan kredit sepeda motor baru.
Algoritma ini adalah salah satu algoritma klasifikasi data seperti pada Algoritma K-Means Clustering yang sudah pernah dibahas sebelumnya. Algoritma K-Means Clustering memiliki keterbatasan dimana semua data inputan harus berupa data numerik / angka. Sedangkan algoritma ini dapat melakukan proses perhitungan baik data numerik, teks ataupun data yang sudah terkategori.
Diasumsikan ada 8 data pelanggan yang sudah diketahui datanya, yaitu Pelanggan A,B,C,D,E,F,G,H
Masing-masing pelanggan memiliki kriteria, yaitu umur, jenis kelamin, skor kepribadian, dan memiliki nilai hasil yaitu Diterima / Ditolak
Diasumsikan 8 data tersebut adalah sebagai berikut:
Pelanggan | Umur | Jenis Kelamin | Skor Kepribadian | Hasil |
---|---|---|---|---|
Pelanggan A | 44 | Laki-laki | 3.55 | Diterima |
Pelanggan B | 52 | Perempuan | 4.71 | Diterima |
Pelanggan C | 60 | Perempuan | 6.56 | Ditolak |
Pelanggan D | 56 | Laki-laki | 6.8 | Ditolak |
Pelanggan E | 51 | Laki-laki | 6.94 | Ditolak |
Pelanggan F | 46 | Perempuan | 6.52 | Ditolak |
Pelanggan G | 48 | Laki-laki | 4.25 | Diterima |
Pelanggan H | 58 | Perempuan | 5.71 | Diterima |
Contoh data pelanggan tersebut adalah sebagai berikut:
Dim data(9)() As Double data(0) = New String() {44, "Laki-laki", 3.55, "Diterima"} data(1) = New String() {52, "Perempuan", 4.71, "Diterima"} data(2) = New String() {60, "Perempuan", 6.56, "Ditolak"} data(3) = New String() {56, "Laki-laki", 6.8, "Ditolak"} data(4) = New String() {51, "Laki-laki", 6.94, "Ditolak"} data(5) = New String() {46, "Perempuan", 6.52, "Ditolak"} data(6) = New String() {48, "Laki-laki", 4.25, "Diterima"} data(7) = New String() {58, "Perempuan", 5.71, "Diterima"}
Selanjutnya ada 2 orang pelanggan baru yang mengajukan kredit sepeda motor
Maka tentukan pelanggan ini nantinya akan termasuk dalam kelompok Diterima / Ditolak
Diasumsikan data awalnya adalah sebagai berikut:
Pelanggan I | 47 | Perempuan | 6.05 |
Pelanggan J | 52 | Laki-Laki | 5 |
Contoh data pelanggan baru adalah sebagai berikut:
Untuk kriteria Nilai Hasil:
Karena belum diketahui nilai hasilnya, maka semua inputan data adalah kosong
data(8) = New String() {47, "Perempuan", 6.05, ""} data(9) = New String() {52, "Laki-laki", 5, ""}
Langkah-langkah penggunaan algoritma ini adalah
1. Tentukan Pengelompokan untuk masing-masing kriteria
Jumlah pengelompokan bebas tergantung keinginan
Contoh dalam kasus ini:
Kriteria umur hanya dikelompokan menjadi 3 bagian yaitu untuk umur dibawah 40, 41 sampai dengan 50, diatas 50
Kriteria jenis kelamin dikelompokan menjadi 2 bagian yaitu untuk laki-laki dan perempuan
Kriteria skor kepribadian dikelompokan menjadi 4 bagian yaitu untuk skor dibawah 4, 4 sampai dengan 5, 5 sampai dengan 6, diatas 6
Kriteria hasil dikelompokan menjadi 2 bagian yaitu untuk kelompok Diterima dan Ditolak
Dim kriteria() As String = {"Umur", "JK", "Skor", "Hasil"} Dim kelompokKriteria(kriteria.Length - 1)() As String kelompokKriteria(0) = New String() {"Dibawah 40", "41 s/d 50", "Diatas 50"} kelompokKriteria(1) = New String() {"Laki-laki", "Perempuan"} kelompokKriteria(2) = New String() {"Dibawah 4", "4 s/d 5", "5 s/d 6", "Diatas 6"} kelompokKriteria(3) = New String() {"Ditolak", "Diterima"}
2. Tentukan matriks data untuk data yang sudah mengalami pengelompokan data sesuai kriteria diatas
Dim rows As Integer = data.Length Dim cols As Integer = data(0).Length Dim dataAwal(rows - 1)() As Integer For i = 0 To rows - 1 dataAwal(i) = New Integer(cols - 1) {} Next i For i = 0 To data.Length - 1 For j = 0 To data(i).Length - 1 Dim v As Integer = -1 For k = 0 To kelompokKriteria(j).Length - 1 If j = 0 Then If data(i)(j) < 40 Then v = 0 ElseIf data(i)(j) < 50 Then v = 1 ElseIf data(i)(j) >= 50 Then v = 2 End If ElseIf j = 1 Then If data(i)(j) = kelompokKriteria(j)(k) Then v = k End If ElseIf j = 2 Then If data(i)(j) < 4 Then v = 0 ElseIf data(i)(j) < 5 Then v = 1 ElseIf data(i)(j) < 6 Then v = 2 ElseIf data(i)(j) >= 6 Then v = 3 End If ElseIf j = 3 Then If data(i)(j) = kelompokKriteria(j)(k) Then v = k End If End If Next k dataAwal(i)(j) = v Next j Next i Dim contohData(7)() As Integer For i = 0 To 7 contohData(i) = New Integer(dataAwal(0).Length - 1) {} For j = 0 To dataAwal(0).Length - 1 contohData(i)(j) = dataAwal(i)(j) Next Next Dim dataBaru(1)() As Integer For i = 0 To 1 dataBaru(i) = New Integer(dataAwal(0).Length - 1) {} For j = 0 To dataAwal(0).Length - 1 dataBaru(i)(j) = dataAwal(i + 8)(j) Next Next
3. Inisialisasi matriks jumlah data per kelompok kriteria menggunakan 3 kolom, yaitu [kriteria][kelompok kriteria][kelompok kriteria hasil]
Sebagai contoh: jumlahDataPerKelompokKriteria(0)(1)(0) = jumlah data untuk kriteria 0 (Umur), kelompok kriteria 1 (41 s/d 50), untuk kriteria hasil 0 (Ditolak)
Dim jumlahDataPerKelompokKriteria(kriteria.Length - 2)()() As Integer For i As Integer = 0 To jumlahDataPerKelompokKriteria.Length - 1 jumlahDataPerKelompokKriteria(i) = New Integer(kriteria(i).Length - 1)() {} For j As Integer = 0 To jumlahDataPerKelompokKriteria(i).Length - 1 jumlahDataPerKelompokKriteria(i)(j) = New Integer(1) {} Next Next
4. Inisialisasi matriks jumlah data per kelompok kriteria hasil (Ditolak / Diterima)
Sebagai contoh: jumlahDataPerKelompokKriteriaHasil(0) = jumlah data untuk kriteria hasil 0 (Ditolak)
Dim jumlahDataPerKelompokKriteriaHasil(kelompokKriteria(kriteria.Length - 1).Count - 1) As Integer
5 Lakukan perhitungan pada setiap contoh data
Hitung jumlah data per kelompok kriteria pada masing-masing kriteria, dan hitung jumlah data per kelompok kriteria hasil
For i = 0 To contohData.Length - 1 Dim idxKriteriaHasil As Integer = -1 For j = 0 To contohData(i).Length - 2 For k = 0 To kelompokKriteria(j).Length - 1 If contohData(i)(j) = k Then idxKriteriaHasil = contohData(i)(contohData(i).Length - 1) jumlahDataPerKelompokKriteria(j)(k)(idxKriteriaHasil) += 1 End If Next Next jumlahDataPerKelompokKriteriaHasil(idxKriteriaHasil) += 1 Next
6. Tentukan pengelompokan data untuk masing-masing data baru
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan dibawah ini (poin 6a – 6c)
Dim Y As Integer = Pengelompokan(dataBaru(i), jumlahDataPerKelompokKriteria, jumlahDataPerKelompokKriteriaHasil, True, 3)
6a. Hitung probabilitas parsial untuk masing-masing nilai kriteria hasil Ditolak dan Diterima
Dilambangkan sebagai PP(Ditolak) dan PP(Diterima)
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini (poin 6a1 – 6a3)
Dim probabilitasParsialDitolak As Double = HitungProbabilitasParsial("Ditolak", data, jumlahDataPerKelompokKriteria, jumlahDataPerKelompokKriteriaHasil) Dim probabilitasParsialDiterima As Double = HitungProbabilitasParsial("Diterima", data, jumlahDataPerKelompokKriteria, jumlahDataPerKelompokKriteriaHasil)
6a1. Hitung P0 yaitu P(hasil) sesuai nilai parameter hasil (Ditolak / Diterima)
Dim p0 As Double = (totalYangDipakai * 1.0) / (totalData)
6a2. Hitung P1, P2, …, Pn, yaitu P(hasil | kriteria 1), P(hasil | kriteria 2), . . . , P(hasil | kriteria n)
Teknik Laplacian Smoothing digunakan untuk menghindari probabilitas pada masing-masing kriteria yang dapat menjadi 0 pada awal perhitungan
Tambahkan angka 1 pada masing-masing data per kriteria, dan tambahkan nilai sebanyak jumlah kriteria pada faktor pembagi
Dalam kasus ini, Tambahkan angka 1 pada masing-masing data per kriteria, dan tambahkan angka 3 pada faktor pembagi
p1 = (jumlahDataPerKelompokKriteria(0)(data(0))(idxKriteriaHasil) + 1) / ((totalYangDipakai + 3) * 1.0) 'Probabilitas kriteria hasil (Ditolak / Diterima) terhadap kriteria 0 (Umur) p2 = (jumlahDataPerKelompokKriteria(1)(data(1))(idxKriteriaHasil) + 1) / ((totalYangDipakai + 3) * 1.0) 'Probabilitas kriteria hasil (Ditolak / Diterima) terhadap kriteria 1 (JK) p3 = (jumlahDataPerKelompokKriteria(2)(data(2))(idxKriteriaHasil) + 1) / ((totalYangDipakai + 3) * 1.0) 'Probabilitas kriteria hasil (Ditolak / Diterima) terhadap kriteria 2 (Skor)
6a3. Hitung nilai jawaban dengan rumus:
PP(hasil) = P(hasil) * P(hasil | kriteria 1) * P(hasil | kriteria 2) * . . . * P(hasil | kriteria n)
Nilai P0, P1, P2, …, Pn bisa saja bernilai sangat rendah dan menyebabkan nilai pengembaliannya menjadi error karena nilai yang terlalu rendah
Oleh karena itu digunakan teknik pencegahan error dengan rumus:
PP(hasil) = konstanta e dipangkatkan(jumlah dari logaritma pada masing-masing P)
Return Math.Exp(Math.Log(p0) + Math.Log(p1) + Math.Log(p2) + Math.Log(p3))
6b. Hitung probabilitas untuk masing-masing nilai kriteria hasil Ditolak dan Diterima
Dilambangkan dengan P(Ditolak) dan P(Diterima)
P(Ditolak) = PP(Ditolak) / (PP(Ditolak) + PP(Diterima))
P(Diterima) = PP(Diterima) / (PP(Ditolak) + PP(Diterima))
Dim jumlahProbabilitasParsial As Double = probabilitasParsialDitolak + probabilitasParsialDiterima Dim probabilitasDitolak As Double = probabilitasParsialDitolak / jumlahProbabilitasParsial Dim probabilitasDiterima As Double = probabilitasParsialDiterima / jumlahProbabilitasParsial
6c. Apabila P(Ditolak) > P(Diterima) maka pelanggan tersebut termasuk dalam kelompok Ditolak
Apabila P(Ditolak) < P(Diterima) maka pelanggan tersebut termasuk dalam kelompok Diterima
If probabilitasDitolak > probabilitasDiterima Then Return 0 Else Return 1 End If
7. Jika nilai probabilitas Diterima lebih dari nilai probabilitas Ditolak, maka pelanggan tersebut termasuk dalam kelompok Diterima
Jika nilai probabilitas Ditolak lebih dari nilai probabilitas Diterima, maka pelanggan tersebut termasuk dalam kelompok Ditolak
If Y = 1 Then Console.WriteLine("Nilai probabilitas Diterima lebih dari nilai probabilitas Ditolak") Console.WriteLine("Pelanggan ini Diterima") Else Console.WriteLine("Nilai probabilitas Ditolak lebih dari nilai probabilitas Diterima") Console.WriteLine("Pelanggan ini Ditolak") End If
Hasil akhir adalah: (klik untuk perbesar gambar)
Contoh modul / source code dalam bahasa VB (Visual Basic) dapat didownload disini:
Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.
Ada contoh perhitungan manualnya g???
Mohon maaf saya tidak memiliki contoh perhitungan manual untuk kasus ini
kalau pada metode navy beys kita tidak memberikan jenis kelamin apakah menjadi masalah?
Tentu saja hal tersebut dapat dilakukan, karena tentunya tidak semua topik memiliki kriteria jenis kelamin. Silahkan mengganti kriteria2 yang saya gunakan pada contoh ini dengan kriteria yang anda pakai
saya ingin mencari algoritma multinomial naive bayes apakah ada disini?
Perhitungan yang saya lakukan pada pos ini hanya untuk pembahasan algoritma dasar saja. Modifikasi tentunya hanya dapat dilakukan setelah memahami bagian yang ingin dimodifikasi. Diskusi lebih lanjut dapat dilakukan dengan menghubungi nomor kontak yang tersedia pada halaman hubungi kami https://piptools.net/hubungi-kami/ . Terima kasih