Data Science - Tugas Personal ke-2 Week 7

Individual Assignment Data Science


Permasalahan

Topik Naïve Bayesian
Sub topik Implementasi
Referensi LN

Dibawah ini adalah data karyawan suatu perusahaan swasta yang datang ke perusahaan menggunakan kendaraan pribadi atau kendaraan umum.

No. Jenis Kelamin Umur Karyawan Gaji Status Transportasi
1 Laki-Laki 20 8.000.000 Single Kendaraan pribadi
2 Laki-Laki 35 14.000.000 Single Kendaraan umum
3 Perempuan 26 10.000.000 Single Kendaraan umum
4 Perempuan 27 12.000.000 Menikah Kendaraan pribadi
5 Laki-Laki 21 9.000.000 Single Kendaraan pribadi
6 Laki-Laki 22 11.000.000 Single Kendaraan pribadi
7 Perempuan 32 15.000.000 Menikah Kendaraan umum
8 Perempuan 26 8.000.000 Menikah Kendaraan umum
9 Laki-Laki 25 9.000.000 Single Kendaraan umum
10 Perempuan 20 10.000.000 Single Kendaraan pribadi
11 Perempuan 27 12.000.000 Single ?
12 Laki-Laki 35 14.000.000 Menikah ?

Dengan menggunakan metode Naïve Bayesian, tentukan jenis transportasi dari 2 data baru. Silakan gunakan atau modifikasi baris code pada materi LN Minggu 7 halaman.

Note: Berikan code programnya dan screen shoot hasil output program.

 

Penyelesaian

Naïve Bayesian untuk Klasifikasi Transportasi Karyawan:

1. Pendahuluan: Dalam kasus ini, kita akan menggunakan metode Naïve Bayesian untuk mengklasifikasikan jenis transportasi yang digunakan oleh karyawan suatu perusahaan berdasarkan beberapa atribut seperti jenis kelamin, umur, gaji, status, dan transportasi sebelumnya.

 

2. Data Karyawan: Berikut adalah data karyawan yang akan kita gunakan untuk melatih model dan memprediksi jenis transportasi untuk dua data baru:

No. Jenis Kelamin Umur Karyawan Gaji Status Transportasi
1 Laki-Laki 20 8.000.000 Single Kendaraan pribadi
2 Laki-Laki 35 14.000.000 Single Kendaraan umum
3 Perempuan 26 10.000.000 Single Kendaraan umum
4 Perempuan 27 12.000.000 Menikah Kendaraan pribadi
5 Laki-Laki 21 9.000.000 Single Kendaraan pribadi
6 Laki-Laki 22 11.000.000 Single Kendaraan pribadi
7 Perempuan 32 15.000.000 Menikah Kendaraan umum
8 Perempuan 26 8.000.000 Menikah Kendaraan umum
9 Laki-Laki 25 9.000.000 Single Kendaraan umum
10 Perempuan 20 10.000.000 Single Kendaraan pribadi
11 Perempuan 27 12.000.000 Single ?
12 Laki-Laki 35 14.000.000 Menikah ?

 

3. Implementasi Naïve Bayesian:

3.1. Import Library dan Fungsi Tokenisasi:

Dalam langkah ini, kita mengimpor pustaka yang diperlukan dan mendefinisikan fungsi khusus yang akan digunakan dalam proses tokenisasi.

from typing import NamedTuple, Set
import re

Fungsi tokenize diimplementasikan untuk memecah teks menjadi token (kata-kata unik) dan mengembalikan set dari token tersebut. Proses tokenisasi sangat penting dalam konteks ini karena membantu mengubah teks, seperti atribut karyawan, menjadi bentuk yang dapat diolah lebih lanjut oleh model Naïve Bayesian.

def tokenize(text: str) -> Set[str]:
   text = text.lower()                         # Mengubah teks menjadi huruf kecil,
   all_words = re.findall("[a-z0-9']+", text)  # mengekstrak kata-kata, dan
   return set(all_words)                       # mengembalikan set kata unik.

Fungsi ini berkontribusi pada persiapan data untuk melatih dan memprediksi model, dengan memungkinkan representasi token dari teks.

 

3.2. Definisi Kelas Message dan NaiveBayesClassifier:

Dalam langkah ini, kita mendefinisikan kelas Message untuk merepresentasikan pesan atau data yang akan digunakan dalam pelatihan model. Kelas NaiveBayesClassifier adalah implementasi dari model Naïve Bayesian untuk klasifikasi.

from typing import List, Tuple, Dict, Iterable
import math
from collections import defaultdict

class Message(NamedTuple):
   text: str
   is_spam: bool

class NaiveBayesClassifier:
   def __init__(self, k: float = 0.5) -> None:
       self.k = k
       self.tokens: Set[str] = set()
       self.token_spam_counts: Dict[str, int] = defaultdict(int)
       self.token_ham_counts: Dict[str, int] = defaultdict(int)
       self.spam_messages = self.ham_messages = 0

   def train(self, messages: Iterable[Message]) -> None:
       for message in messages:
           if message.is_spam:
               self.spam_messages += 1
           else:
               self.ham_messages += 1

           for token in tokenize(message.text):
               self.tokens.add(token)
               if message.is_spam:
                   self.token_spam_counts[token] += 1
               else:
                   self.token_ham_counts[token] += 1

   def _probabilities(self, token: str) -> Tuple[float, float]:
       spam = self.token_spam_counts[token]
       ham = self.token_ham_counts[token]
       p_token_spam = (spam + self.k) / (self.spam_messages + 2 * self.k)
       p_token_ham = (ham + self.k) / (self.ham_messages + 2 * self.k)
       return p_token_spam, p_token_ham

   def predict(self, text: str) -> float:
       text_tokens = tokenize(text)
       log_prob_if_spam = log_prob_if_ham = 0.0

       for token in self.tokens:
           prob_if_spam, prob_if_ham = self._probabilities(token)

           if token in text_tokens:
               log_prob_if_spam += math.log(prob_if_spam)
               log_prob_if_ham += math.log(prob_if_ham)
           else:
               log_prob_if_spam += math.log(1.0 - prob_if_spam)
               log_prob_if_ham += math.log(1.0 - prob_if_ham)

       prob_if_spam = math.exp(log_prob_if_spam)
       prob_if_ham = math.exp(log_prob_if_ham)
       return prob_if_spam / (prob_if_spam + prob_if_ham)

Kelas ini mengatur model dan metode untuk melatih model dengan data yang diberikan.

 

3.3. Training Model:

Berikutnya, kita latih model Naïve Bayesian menggunakan data karyawan yang telah diberikan.

# Data training dari tabel
data_training = [
  ("laki-laki 20 8.000.000 single kendaraan pribadi", False),
  ("laki-laki 35 14.000.000 single kendaraan umum", True),
  ("perempuan 26 10.000.000 single kendaraan umum", True),
  ("perempuan 27 12.000.000 menikah kendaraan pribadi", False),
  ("laki-laki 21 9.000.000 single kendaraan pribadi", False),
  ("laki-laki 22 11.000.000 single kendaraan pribadi", False),
  ("perempuan 32 15.000.000 menikah kendaraan umum", True),
  ("perempuan 26 8.000.000 menikah kendaraan umum", True),
  ("laki-laki 25 9.000.000 single kendaraan umum", True),
  ("perempuan 20 10.000.000 single kendaraan pribadi", False),
]

# Menyusun data training menjadi bentuk pesan (Message)
messages = [Message(text, is_spam) for text, is_spam in data_training]

# Melatih model
model = NaiveBayesClassifier(k=0.5)
model.train(messages)

Langkah ini menciptakan dan melatih model dengan data yang telah di-tokenisasi untuk memahami pola dan korelasi antara atribut-atribut tersebut.

 

4. Prediksi untuk Data Baru:

Selanjutnya, kita dapat menggunakan model yang telah dilatih untuk melakukan prediksi terhadap dua data karyawan baru.

text_data_11 = "Perempuan 27 12.000.000 Single ?"
text_data_12 = "Laki-Laki 35 14.000.000 Menikah ?"

prediction_11 = model.predict(text_data_11)
prediction_12 = model.predict(text_data_12)

# Menetapkan batasan misalnya jika probabilitas > 0.5, maka kendaraan pribadi; jika probabilitas <= 0.5, maka kendaraan umum.
result_11 = "Kendaraan Pribadi" if prediction_11 > 0.5 else "Kendaraan Umum"
result_12 = "Kendaraan Pribadi" if prediction_12 > 0.5 else "Kendaraan Umum"

print("Prediksi untuk data ke-11:", result_11)
print("Prediksi untuk data ke-12:", result_12)

Langkah ini memberikan contoh penggunaan model untuk memprediksi jenis transportasi untuk dua data karyawan baru berdasarkan hasil pelatihan model.

 

5. Hasil Prediksi:

Hasil prediksi akan menunjukkan jenis transportasi yang diprediksi untuk data baru ke-11 dan ke-12 berdasarkan model Naïve Bayesian yang sudah dilatih.

 

Source Notebook : https://github.com/dikhimartin/datascience_course/blob/personal-assignment-2/naive_bayesian_id.ipynb

 

Referensi

LECTURE NOTES Data Science Week ke 7 Naïve Bayesian

Rebekz. (n.d.). datascience_course/naive_bayes.ipynb at main · rebekz/datascience_course. GitHub. https://github.com/rebekz/datascience_course/blob/main/naive_bayes.ipynb

Jayadi, R., Firmantyo, H. M., Dzaka, M. T., Suaidy, M. F., & Putra, A. M. (2019). Employee Performance Prediction using Naïve Bayes. International Journal of Advanced Trends in Computer Science and Engineering, 8(6), 3031–3035. https://doi.org/10.30534/ijatcse/2019/59862019

Miniconda — miniconda documentation. (n.d.).https://docs.conda.io/projects/miniconda/en/latest/

Bagikan postingan ini

Penulis
Dikhi Martin

Dikhi MartinSoftware Engineer