Machine Learning: Categorical Naive Bayes

Pendahuluan

Naive Bayes Classifier merupakan sebuah metode klasifikasi yang berakar pada pengklasifikasian dengan menggunakan metode probabilitas dan statistik yang dikemukakan oleh ilmuwan Inggris Thomas Bayes, yaitu memprediksi peluang di masa depan berdasarkan pengalaman di masa sebelumnya sehingga dikenal sebagai Teorema Bayes. Ciri utama dari Naive Bayes Classifier ini adalah asumsi yang sangat kuat akan independensi dari masing-masing kondisi/kejadian (Sihombing, J., 2021).

Dalam melakukan klasifikasi, Naive Bayes bersandar pada sebuah nilai probabilitas dari setiap variabel yang ada. Selanjutnya untuk mengantisipasi kelemahan dari Naive Bayes, yaitu jika ada fitur data yang bernilai 0 (nol) maka digunakan juga smoothing terhadap probabilitas dengan menggunakan metode Laplacian. (Kurniawan, A., 2023)

Kelebihan dan Kelemahan

Kelebihan:

  • Komputasi cepat dan efisien
  • Mudah diimplementasikan dan diinterpretasikan
  • Bekerja baik dengan data kategorikal
  • Relatif tahan terhadap noise dalam data

Kelemahan:

  1. Kebutuhan Data yang Memadai: Keterbatasan data meningkatkan risiko overfitting dan bias statistik. Dataset kecil (<50 sampel) sering menghasilkan estimasi probabilitas tidak stabil yang sensitif terhadap perubahan minor dalam data.

  2. Masalah dengan Data Baru: Model menghadapi zero-frequency problem ketika menemukan kombinasi gejala baru. Laplace Smoothing mengatasi ini dengan menambahkan konstanta pada perhitungan probabilitas, mencegah nilai nol yang dapat menggagalkan seluruh prediksi.

Metodologi Penelitian

Langkah-langkah Perhitungan Manual Categorical Naive Bayes

Perhitungan manual Categorical Naive Bayes dilakukan dengan mengikuti tahapan berikut:

  1. Pengumpulan dan Analisis Data: Memahami distribusi dan karakteristik dataset.

  2. Perhitungan Probabilitas Prior: Menghitung probabilitas dasar setiap kelas.

  3. Perhitungan Probabilitas Likelihood: Menghitung probabilitas setiap fitur diberikan kelas tertentu dengan Laplace Smoothing.

  4. Prediksi Data Baru: Mengaplikasikan teorema Bayes untuk kasus baru.

  5. Normalisasi dan Keputusan: Menentukan kelas dengan probabilitas tertinggi.

Studi Kasus: Data Diagnosis Penyakit

Dataset ini berisi 20 sampel data pasien dengan informasi gejala dan diagnosis penyakit. Data dapat digunakan untuk analisis klasifikasi menggunakan algoritma Naive Bayes.

Dataset

Tabel Data Pasien

NoUsiaDemamBatukSesak NapasDiagnosis
1MudaYaYaYaFlu
2TuaYaTidakYaCovid
3MudaTidakYaTidakFlu
4TuaYaYaYaCovid
5MudaTidakYaTidakFlu
6TuaYaTidakYaCovid
7MudaYaTidakTidakFlu
8TuaTidakYaYaCovid
9MudaTidakTidakTidakFlu
10TuaTidakTidakTidakSehat
11MudaYaTidakTidakFlu
12TuaTidakTidakYaCovid
13TuaTidakYaTidakFlu
14MudaYaYaTidakFlu
15TuaYaTidakTidakFlu
16MudaTidakTidakYaCovid
17TuaTidakTidakTidakSehat
18MudaTidakYaYaSehat
19TuaYaYaTidakCovid
20MudaYaTidakYaFlu

Distribusi Diagnosis

DiagnosisJumlahPersentase
Sehat315%
Flu1050%
Covid735%
Total20100%

Perhitungan Manual Naive Bayes

Langkah 1: Hitung Probabilitas Prior (Prior Probability)

$$ P(\text{Sehat}) = \frac{\text{Jumlah pasien Sehat}}{\text{Total pasien}} = \frac{3}{20} = 0.1500 = 15\% $$

$$ P(\text{Flu}) = \frac{\text{Jumlah pasien Flu}}{\text{Total pasien}} = \frac{10}{20} = 0.5000 = 50\% $$

$$ P(\text{Covid}) = \frac{\text{Jumlah pasien Covid}}{\text{Total pasien}} = \frac{7}{20} = 0.3500 = 35\% $$

Langkah 2: Hitung Probabilitas Likelihood dengan Laplace Smoothing

Likelihood adalah probabilitas munculnya suatu gejala diberikan kelas tertentu. Karena data yang tersedia terbatas, Laplace Smoothing (Additive Smoothing) digunakan untuk menghindari probabilitas nol yang dapat menyebabkan hasil perkalian menjadi nol.

Rumus Laplace Smoothing:

$$ P(x_i \mid C) = \frac{N(x_i, C) + \alpha}{N_C + \alpha \times k} $$

Keterangan:

  • $N(x_i, C)$: Jumlah sampel dengan gejala $x_i$ pada kelas $C$
  • $N_C$: Total sampel dalam kelas $C$
  • $\alpha$: Parameter smoothing (default $\alpha = 1$)
  • $k$: Jumlah nilai unik fitur $x_i$

2.1 Untuk Kelas Sehat (3 pasien)

Identifikasi Data:

  • Usia Muda: 1 dari 3 pasien Sehat
  • Demam Ya: 0 dari 3 pasien Sehat
  • Batuk Tidak: 2 dari 3 pasien Sehat
  • Sesak Napas Ya: 1 dari 3 pasien Sehat

Catatan Penting: Tanpa Laplace Smoothing, $P(\text{Demam=Ya}|\text{Sehat}) = 0/3 = 0$ akan membuat semua hasil akhir menjadi nol saat dilakukan perkalian.

Perhitungan:

$$ P(\text{Usia} = \text{Muda} \mid \text{Sehat}) = \frac{1 + 1}{3 + (1 \times 2)} = \frac{2}{5} = 0.400 $$

$$ P(\text{Demam} = \text{Ya} \mid \text{Sehat}) = \frac{0 + 1}{3 + (1 \times 2)} = \frac{1}{5} = 0.200 $$

$$ P(\text{Batuk} = \text{Tidak} \mid \text{Sehat}) = \frac{2 + 1}{3 + (1 \times 2)} = \frac{3}{5} = 0.600 $$

$$ P(\text{Sesak Napas} = \text{Ya} \mid \text{Sehat}) = \frac{1 + 1}{3 + (1 \times 2)} = \frac{2}{5} = 0.400 $$

2.2 Untuk Kelas Flu (10 pasien)

Identifikasi Data:

  • Usia Muda: 8 dari 10 pasien Flu
  • Demam Ya: 6 dari 10 pasien Flu
  • Batuk Tidak: 5 dari 10 pasien Flu
  • Sesak Nafas Ya: 2 dari 10 pasien Flu

Perhitungan:

$$ P(\text{Usia} = \text{Muda} \mid \text{Flu}) = \frac{8 + 1}{10 + (1 \times 2)} = \frac{9}{12} = 0.7500 $$

$$ P(\text{Demam} = \text{Ya} \mid \text{Flu}) = \frac{6 + 1}{10 + (1 \times 2)} = \frac{7}{12} = 0.5833 $$

$$ P(\text{Batuk} = \text{Tidak} \mid \text{Flu}) = \frac{5 + 1}{10 + (1 \times 2)} = \frac{6}{12} = 0.5000 $$

$$ P(\text{Sesak Napas} = \text{Ya} \mid \text{Flu}) = \frac{2 + 1}{10 + (1 \times 2)} = \frac{3}{12} = 0.2500 $$

2.3 Untuk Kelas Covid (7 pasien)

Identifikasi Data:

  • Usia Muda: 1 dari 7 pasien Covid
  • Demam Ya: 4 dari 7 pasien Covid
  • Batuk Tidak: 4 dari 7 pasien Covid
  • Sesak Napas Ya: 6 dari 7 pasien Covid

Perhitungan:

$$ P(\text{Usia} = \text{Muda} \mid \text{Covid}) = \frac{1 + 1}{7 + (1 \times 2)} = \frac{2}{9} = 0.2222 $$

$$ P(\text{Demam} = \text{Ya} \mid \text{Covid}) = \frac{4 + 1}{7 + (1 \times 2)} = \frac{5}{9} = 0.5556 $$

$$ P(\text{Batuk} = \text{Tidak} \mid \text{Covid}) = \frac{4 + 1}{7 + (1 \times 2)} = \frac{5}{9} = 0.5556 $$

$$ P(\text{Sesak Napas} = \text{Ya} \mid \text{Covid}) = \frac{6 + 1}{7 + (1 \times 2)} = \frac{7}{9} = 0.7778 $$

Tabel Ringkasan Probabilitas Likelihood

GejalaSehatFluCovid
Usia = Muda0.40000.75000.2222
Demam = Ya0.20000.58330.5556
Batuk = Tidak0.60000.50000.5556
Sesak Napas = Ya0.40000.25000.7778

Prediksi untuk Pasien Baru

Kasus: Pasien dengan Gejala Baru

Misalkan datang pasien baru dengan gejala:

  • Usia: Muda
  • Demam: Ya
  • Batuk: Tidak
  • Sesak Napas: Ya

Rumus Naive Bayes

$$ P(C \mid X) = \frac{P(C) \times \prod_{i=1}^{n} P(x_i \mid C)}{P(X)} $$

Keterangan:

  • $P(C \mid X)$: Probabilitas diagnosis $C$ diberikan gejala $X$
  • $P(C)$: Prior probability kelas $C$
  • $P(x_i \mid C)$: Probabilitas gejala $x_i$ jika diagnosisnya $C$
  • $P(X)$: Probabilitas marginal gejala (konstan untuk semua kelas)

Untuk prediksi: Cari $C$ yang memaksimalkan $P(C) \times \prod P(x_i \mid C)$

Perhitungan Skor

3.2 Skor untuk Kelas Sehat

$$ \text{Skor(Sehat)} = P(\text{Sehat}) \times P(\text{Usia} = \text{Muda} \mid \text{Sehat}) \times P(\text{Demam} = \text{Ya} \mid \text{Sehat}) \times P(\text{Batuk} = \text{Tidak} \mid \text{Sehat}) \times P(\text{Sesak Napas} = \text{Ya} \mid \text{Sehat}) $$

$$ \text{Skor(Sehat)} = 0.1500 \times 0.4000 \times 0.2000 \times 0.6000 \times 0.4000 $$

$$ \text{Skor(Sehat)} = 0.1500 \times 0.0192 = 0.0029 $$

3.2 Skor untuk Kelas Flu

$$ \text{Skor(Flu)} = P(\text{Flu}) \times P(\text{Usia} = \text{Muda} \mid \text{Flu}) \times P(\text{Demam} = \text{Ya} \mid \text{Flu}) \times P(\text{Batuk} = \text{Tidak} \mid \text{Flu}) \times P(\text{Sesak Napas} = \text{Ya} \mid \text{Flu}) $$

$$ \text{Skor(Flu)} = 0.5000 \times 0.7500 \times 0.5833 \times 0.5000 \times 0.2500 $$

$$ \text{Skor(Flu)} = 0.5000 \times 0.0546 = 0.0273 $$

3.3 Skor untuk Kelas Covid

$$ \text{Skor(Covid)} = P(\text{Covid}) \times P(\text{Usia} = \text{Muda} \mid \text{Covid}) \times P(\text{Demam} = \text{Ya} \mid \text{Covid}) \times P(\text{Batuk} = \text{Tidak} \mid \text{Covid}) \times P(\text{Sesak Napas} = \text{Ya} \mid \text{Covid}) $$

$$ \text{Skor(Covid)} = 0.3500 \times 0.2222 \times 0.5556 \times 0.5556 \times 0.7778 $$

$$ \text{Skor(Covid)} = 0.3500 \times 0.0534 = 0.0187 $$

Normalisasi dan Keputusan Akhir

Total Skor

$$ \text{Total} = 0.0029 + 0.0273 + 0.0187 = 0.0489 $$

Probabilitas Normalisasi

$$ P(\text{Sehat} \mid X) = \frac{0.0029}{0.0489} = 0.0589 \quad (5.89\%) $$

$$ P(\text{Flu} \mid X) = \frac{0.0273}{0.0489} = 0.5592 \quad (55.92\%) $$

$$ P(\text{Covid} \mid X) = \frac{0.0187}{0.0489} = 0.3819 \quad (38.19\%) $$

Tabel Hasil Prediksi

KelasSkor AwalProbabilitasPersentase
Sehat0.00290.05895.89%
Flu0.02730.559255.92%
Covid0.01870.381938.19%

Kesimpulan Prediksi

Keputusan: Pasien tersebut paling mungkin sakit Flu dengan probabilitas 55.92%.

Interpretasi Klinis: Meskipun pasien menunjukkan gejala sesak napas (yang lebih kuat terkait dengan Covid berdasarkan likelihood 0.7778), kombinasi usia muda dan demam lebih mendukung diagnosis Flu. Namun, perbedaan probabilitas antara Flu (55.92%) dan Covid (38.19%) tidak terlalu besar, sehingga disarankan untuk dilakukan tes tambahan.

Diskusi dan Analisis Kritis

Analisis Hasil:

  1. Dominasi Probabilitas Prior: Probabilitas prior Flu (50%) memberikan kontribusi signifikan terhadap hasil akhir.
  2. Pengaruh Laplace Smoothing: Tanpa smoothing, prediksi untuk kelas Sehat akan menjadi nol karena tidak ada pasien sehat dengan demam.
  3. Gejala Penentu: Sesak napas menjadi pembeda utama antara Flu dan Covid dengan likelihood 0.7778 untuk Covid vs 0.2500 untuk Flu.

Kesimpulan

Implementasi Categorical Naive Bayes untuk klasifikasi diagnosis penyakit menunjukkan bahwa algoritma ini dapat berfungsi sebagai sistem pendukung keputusan awal yang efektif dalam konteks data kategorikal. Analisis terhadap dataset terbatas yang terdiri dari 20 sampel pasien berhasil mengidentifikasi Flu sebagai diagnosis paling probable (55.92%) untuk kasus uji dengan gejala usia muda, demam, batuk tidak, dan sesak napas ya. Hasil ini terutama dipengaruhi oleh dominasi probabilitas prior Flu sebesar 50% dalam data historis, meskipun gejala sesak napas memiliki keterkaitan lebih kuat dengan Covid berdasarkan nilai likelihood.

Penerapan Laplace Smoothing terbukti kritis dalam menghindari probabilitas nol, khususnya untuk kombinasi gejala yang jarang muncul pada data latih. Namun, perbedaan tipis antara probabilitas Flu (55.92%) dan Covid (38.19%) menyoroti pentingnya interpretasi klinis tambahan dan ketidakcukupan model sebagai alat diagnosis tunggal. Gejala sesak napas muncul sebagai pembeda paling signifikan antara Covid dan penyakit lainnya, dengan likelihood mencapai 0.7778 untuk kelas Covid.

Referensi

Sihombing, J. (2021). Klasifikasi Data Antroprometri Individu Menggunakan Algoritma Naïve Bayes Classifier. BIOS: Jurnal Teknologi Informasi dan Rekayasa Komputer, 2(1), 1-10. https://doi.org/10.37148/bios.v2i1.15

Kurniawan, A. (2023). Sistem Pendukung Keputusan Penyakit Diabetes Menggunakan Metode Klasifikasi Naïve Bayes. Scientia Sacra: Jurnal Sains, Teknologi dan Masyarakat, 3(2), 242-249. Diakses dari http://www.pijarpemikiran.com/index.php/Scientia/article/view/535