Algoritma Naive Bayes 6


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:

PelangganUmurJenis KelaminSkor KepribadianHasil
Pelanggan A44Laki-laki3.55Diterima
Pelanggan B52Perempuan4.71Diterima
Pelanggan C60Perempuan6.56Ditolak
Pelanggan D56Laki-laki6.8Ditolak
Pelanggan E51Laki-laki6.94Ditolak
Pelanggan F46Perempuan6.52Ditolak
Pelanggan G48Laki-laki4.25Diterima
Pelanggan H58Perempuan5.71Diterima

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 I47Perempuan6.05
Pelanggan J52Laki-Laki5

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)

cmd59

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.


Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

6 pemikiran di “Algoritma Naive Bayes