Naive Bayes: Studi Kasus dan Penyelesaian menggunakan MultinomialNB
Studi Kasus:
Deskripsi Masalah: Sebuah sistem email ingin mengklasifikasikan apakah email yang masuk termasuk SPAM atau BUKAN SPAM (HAM) berdasarkan kata-kata yang muncul di dalam email tersebut.
Pendekatan: Kita akan menggunakan Naive Bayes secara manual (step-by-step) untuk memahami setiap langkah perhitungan
Penyelesaian:
Langkah 1: Data Training (Sudah Dipetakan)
Berikut adalah 10 email yang sudah dilabeli dan dipetakan ke dalam 4 fitur kata kunci.
Data Mentah
No | Isi Email | Label |
|---|---|---|
1 | "promo gratis untuk anda" | Spam |
2 | "hadiah uang tunai gratis" | Spam |
3 | "promo hadiah spesial" | Spam |
4 | "uang gratis tanpa syarat" | Spam |
5 | "promo uang kembali" | Spam |
6 | "rapat jadwal besok pagi" | Ham |
7 | "laporan tugas sudah selesai" | Ham |
8 | "promo rapat tahunan" | Ham |
9 | "hadiah ulang tahun teman" | Ham |
10 | "tugas kuliah dikumpulkan" | Ham |
Pemetaan Fitur (Feature Mapping)
Hanya 4 kata kunci yang dijadikan fitur: promo, gratis, hadiah, uang
Setiap email dipetakan menjadi vektor keberadaan kata (1 = ada, 0 = tidak ada):
No | promo | gratis | hadiah | uang | Label |
|---|---|---|---|---|---|
1 | 1 | 1 | 0 | 0 | Spam |
2 | 0 | 1 | 1 | 1 | Spam |
3 | 1 | 0 | 1 | 0 | Spam |
4 | 0 | 1 | 0 | 1 | Spam |
5 | 1 | 0 | 0 | 1 | Spam |
6 | 0 | 0 | 0 | 0 | Ham |
7 | 0 | 0 | 0 | 0 | Ham |
8 | 1 | 0 | 0 | 0 | Ham |
9 | 0 | 0 | 1 | 0 | Ham |
10 | 0 | 0 | 0 | 0 | Ham |
Email Baru yang Ingin Diklasifikasikan
Email baru: "promo gratis uang" → Pemetaan fitur:
promo | gratis | hadiah | uang |
|---|---|---|---|
1 | 1 | 0 | 1 |
Apakah email ini Spam atau Ham?
Langkah 2: Hitung Prior Probability
Prior adalah probabilitas awal setiap kelas sebelum melihat isi email.
Artinya, sebelum melihat isi email, probabilitas email baru adalah spam dan ham sama besar yaitu 50%.
dapat divisualisasikan sebagai berikut:
Langkah 3: Hitung Likelihood (Multinomial Naive Bayes)
Likelihood adalah probabilitas kemunculan setiap kata pada masing-masing kelas.
Pada Multinomial Naive Bayes, likelihood dihitung dengan membagi frekuensi kata terhadap total seluruh kata fitur di kelas tersebut:
Email baru: "promo gratis uang" — kita perlu menghitung likelihood untuk 3 kata ini.
Menghitung secara manual
Di kelas Spam (5 email) — hitung frekuensi seluruh fitur:
Fitur | Muncul di berapa email Spam? | count | |
|---|---|---|---|
"promo" | 3 dari 5 | 3 | |
"gratis" | 3 dari 5 | 3 | |
"hadiah" | 2 dari 5 | 2 | |
"uang" | 3 dari 5 | 3 | |
Total | 11 |
Di kelas Ham (5 email) — hitung frekuensi seluruh fitur:
Fitur | Muncul di berapa email Ham? | count | |
|---|---|---|---|
"promo" | 1 dari 5 | 1 | |
"gratis" | 0 dari 5 | 0 ⚠️ | |
"hadiah" | 1 dari 5 | 1 | |
"uang" | 0 dari 5 | 0 ⚠️ | |
Total | 2 |
⚠️ Masalah: count("gratis", Ham) = 0 dan count("uang", Ham) = 0 → hasil perkalian 0!
Solusi: Gunakan Laplace Smoothing
Laplace Smoothing (Multinomial)
+1 pada pembilang (setiap kata ditambah 1)
+|V| pada penyebut, di mana = jumlah fitur = 4
Kenapa +|V|? Karena kita menambahkan 1 untuk setiap fitur di pembilang, maka penyebutnya harus ditambah sebanyak jumlah fitur agar total probabilitas = 1.
Hasil dengan Laplace Smoothing:
Spam: total = 11, denominator = 11 + 4 = 15
Kata | P(kata|Spam) |
|---|---|
"promo" | (3+1)/15 = 4/15 = 0.267 |
"gratis" | (3+1)/15 = 4/15 = 0.267 |
"uang" | (3+1)/15 = 4/15 = 0.267 |
Ham: total = 2, denominator = 2 + 4 = 6
Kata | P(kata|Ham) |
|---|---|
"promo" | (1+1)/6 = 2/6 = 0.333 |
"gratis" | (0+1)/6 = 1/6 = 0.167 |
"uang" | (0+1)/6 = 1/6 = 0.167 |
Langkah 4: Hitung Posterior - Klasifikasi Email Baru
Menggunakan Teorema Bayes dengan asumsi independensi (Naive Bayes):
Perhitungan untuk email "promo gratis uang"
Untuk kelas Spam (total count = 11, +|V| = 15):
Untuk kelas Ham (total count = 2, +|V| = 6):
Normalisasi
Untuk kelas Spam
Untuk kelas Ham:
Maka hasil akhir dari data “Promo, gratis, Uang“ berdasarkan nilai probabilitas tertinggi yaitu 67,2% = SPAM, dapat divisualisasikan sebagai berikut: