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 numerik.
  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 pasien dengan informasi gejala kategorikal (usia, demam, batuk, sesak napas) serta diagnosis penyakit. Data ini digunakan untuk analisis klasifikasi menggunakan algoritma Categorical 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

Catatan: Fitur Usia, Demam, Batuk, dan Sesak Napas adalah fitur kategorikal yang akan diproses menggunakan Categorical Naive Bayes dengan Laplace Smoothing.

Distribusi Diagnosis

DiagnosisJumlahPersentase
Sehat315%
Flu1050%
Covid735%
Total20100%

Perhitungan Manual Categorical Naive Bayes

Langkah 1: Hitung Probabilitas Prior

Prior probability dihitung berdasarkan frekuensi setiap kelas dalam data latih.

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

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

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

Langkah 2: Hitung Probabilitas Likelihood dengan Laplace Smoothing

Untuk setiap fitur kategorikal dalam setiap kelas, kita hitung probabilitas likelihood menggunakan Laplace Smoothing (additive smoothing) untuk menghindari probabilitas 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$ (dalam kasus ini $k = 2$ karena setiap fitur biner)

2.1 Kelas Sehat (3 pasien)

Data Pasien Sehat:

  • 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

Perhitungan:

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

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

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

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

2.2 Kelas Flu (10 pasien)

Data Pasien Flu:

  • Usia Muda: 8 dari 10 pasien Flu
  • Demam Ya: 6 dari 10 pasien Flu
  • Batuk Tidak: 5 dari 10 pasien Flu
  • Sesak Napas 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 Kelas Covid (7 pasien)

Data Pasien Covid:

  • 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
Nilai GejalaUsia = 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 hasil pengukuran:

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

Perhitungan Likelihood untuk Setiap Kelas

Rumus Naive Bayes

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

Untuk prediksi, cari kelas $C$ yang memaksimalkan $P(C) \times \prod P(x_i \mid C)$.

3.1 Likelihood untuk Kelas Sehat

$$ \begin{aligned} P(\text{Gejala} \mid \text{Sehat}) &= P(\text{Usia} = \text{Muda} \mid \text{Sehat}) \ &\quad \times P(\text{Demam} = \text{Ya} \mid \text{Sehat}) \ &\quad \times P(\text{Batuk} = \text{Tidak} \mid \text{Sehat}) \ &\quad \times P(\text{Sesak Napas} = \text{Ya} \mid \text{Sehat}) \end{aligned} $$

$$ P(\text{Gejala} \mid \text{Sehat}) = 0.4000 \times 0.2000 \times 0.6000 \times 0.4000 = 0.0192 $$

3.2 Likelihood untuk Kelas Flu

$$ \begin{aligned} P(\text{Gejala} \mid \text{Flu}) &= 0.7500 \times 0.5833 \times 0.5000 \times 0.2500 = 0.0546 \end{aligned} $$

3.3 Likelihood untuk Kelas Covid

$$ \begin{aligned} P(\text{Gejala} \mid \text{Covid}) &= 0.2222 \times 0.5556 \times 0.5556 \times 0.7778 = 0.0534 \end{aligned} $$

Langkah 4: Hitung Skor Posterior (Tanpa Normalisasi)

Rumus Skor

$$ \text{Skor}(C) = P(C) \times P(\text{Gejala} \mid C) $$

Skor untuk Kelas Sehat

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

Skor untuk Kelas Flu

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

Skor untuk Kelas Covid

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

Langkah 5: Normalisasi dan Keputusan Akhir

Total Skor

$$ \text{Total} = 0.00288 + 0.02730 + 0.01869 = 0.04887 $$

Probabilitas Normalisasi

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

$$ P(\text{Flu} \mid X) = \frac{0.02730}{0.04887} = 0.5587 \quad (55.87\%) $$

$$ P(\text{Covid} \mid X) = \frac{0.01869}{0.04887} = 0.3824 \quad (38.24\%) $$

Tabel Hasil Prediksi

KelasSkor AwalProbabilitasPersentase
Sehat0.002880.05895.89%
Flu0.027300.558755.87%
Covid0.018690.382438.24%

Kesimpulan Prediksi

Keputusan: Pasien tersebut paling mungkin terdiagnosis Flu dengan probabilitas 55.87%.

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.87%) dan Covid (38.24%) 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.

Perbandingan dengan Gaussian Naive Bayes

AspekCategorical Naive BayesGaussian Naive Bayes
Tipe DataKategorikal / DiskritNumerik Kontinu
PerhitunganFrekuensi + Laplace SmoothingMean + Varians + PDF
Zero-FrequencyPerlu Laplace SmoothingTidak ada masalah
SensitivitasTerhadap data langkaTerhadap outlier
Contoh FiturJenis kelamin, warnaSuhu, berat badan, waktu

Kesimpulan

Implementasi Categorical Naive Bayes untuk klasifikasi diagnosis penyakit berdasarkan data kategorikal menunjukkan bahwa algoritma ini dapat berfungsi sebagai sistem pendukung keputusan awal yang efektif. Analisis terhadap dataset terbatas yang terdiri dari 20 sampel pasien berhasil mengidentifikasi Flu sebagai diagnosis paling probable (55.87%) untuk kasus uji dengan gejala usia muda, demam, batuk tidak, dan sesak napas ya.

Keunggulan utama Categorical Naive Bayes terletak pada kesederhanaan dan kemudahan interpretasinya untuk data kategorikal. Namun, kelemahan utamanya adalah kebutuhan data yang memadai dan masalah zero-frequency yang diatasi dengan Laplace Smoothing.

Penerapan Laplace Smoothing terbukti kritis dalam menghindari probabilitas nol, khususnya untuk kombinasi gejala yang jarang muncul pada data latih. Hasil klasifikasi menunjukkan bahwa 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. http://www.pijarpemikiran.com/index.php/Scientia/article/view/535