Naive Bayes: Studi Kasus dan Penyelesaian menggunakan MultinomialNB

31 Maret 2026 18 views

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.

P(Spam)=Jumlah email SpamTotal email=510=0.5P(\text{Spam}) = \frac{\text{Jumlah email Spam}}{\text{Total email}} = \frac{5}{10} = 0.5
P(Ham)=Jumlah email HamTotal email=510=0.5P(\text{Ham}) = \frac{\text{Jumlah email Ham}}{\text{Total email}} = \frac{5}{10} = 0.5

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:

P(wiC)=count(wi,C)j=1Vcount(wj,C)P(w_i | C) = \frac{count(w_i, C)}{\sum_{j=1}^{|V|} count(w_j, C)}

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):

P(Kelasemail)P(Kelas)×i=1nP(wiKelas)P(\text{Kelas} | \text{email}) \propto P(\text{Kelas}) \times \prod_{i=1}^{n} P(w_i | \text{Kelas})

Perhitungan untuk email "promo gratis uang"

Untuk kelas Spam (total count = 11, +|V| = 15):

P(Spamemail)P(Spam)×P(promoSpam)×P(gratisSpam)×P(uangSpam)P(\text{Spam} | \text{email}) \propto P(\text{Spam}) \times P(\text{promo}|\text{Spam}) \times P(\text{gratis}|\text{Spam}) \times P(\text{uang}|\text{Spam})
=0.5×415×415×415= 0.5 \times \frac{4}{15} \times \frac{4}{15} \times \frac{4}{15}
=0.5000×0.2667×0.2667×0.2667= 0.5000 × 0.2667 × 0.2667 × 0.2667
=0.009481= 0.009481

Untuk kelas Ham (total count = 2, +|V| = 6):

P(Hamemail)P(Ham)×P(promoHam)×P(gratisHam)×P(uangHam)P(\text{Ham} | \text{email}) \propto P(\text{Ham}) \times P(\text{promo}|\text{Ham}) \times P(\text{gratis}|\text{Ham}) \times P(\text{uang}|\text{Ham})
=0.5×26×16×16= 0.5 \times \frac{2}{6} \times \frac{1}{6} \times \frac{1}{6}
=0.5000×0.3333×0.1667×0.1667= 0.5000 × 0.3333 × 0.1667 × 0.1667
=0.004630= 0.004630

Normalisasi

Untuk kelas Spam

P(Spamemail)=Skor SpamSkor Spam+Skor HamP(\text{Spam}|\text{email}) = \frac{\text{Skor Spam}}{\text{Skor Spam} + \text{Skor Ham}}
P(Spamemail)=0.0094810.009481+0.004630=0,671967,2%P(\text{Spam}|\text{email}) = \frac{0.009481}{0.009481 + {0.004630}} = 0,6719 \approx 67,2\%

Untuk kelas Ham:

P(Hamemail)=Skor HamSpam+Skor HamP(\text{Ham}|\text{email}) = \frac{\text{Skor Ham}}{\text{Spam} + \text{Skor Ham}}
P(Hamemail)=0.0046300.009481+0.004630=0.328132,8%P(\text{Ham}|\text{email}) = \frac{0.004630}{0.009481 + {0.004630}} = 0.3281 \approx 32,8\%

Maka hasil akhir dari data “Promo, gratis, Uang“ berdasarkan nilai probabilitas tertinggi yaitu 67,2% = SPAM, dapat divisualisasikan sebagai berikut:


Komentar

Tulis Komentar

Belum ada komentar. Jadilah yang pertama!