An open API service indexing awesome lists of open source software.

https://github.com/nightrunners02/uap_machine-learning


https://github.com/nightrunners02/uap_machine-learning

439 indonesia ipynb-jupyter-notebook nightrunners02 python uap

Last synced: about 2 months ago
JSON representation

Awesome Lists containing this project

README

          

# ๐Ÿ“ฉ Spam SMS Classification โ€“ UAP Pembelajaran Mesin









---

Proyek ini merupakan **Ujian Akhir Praktikum (UAP)** mata kuliah **Pembelajaran Mesin**, yang berfokus pada **klasifikasi teks SMS spam dan ham** menggunakan **tiga pendekatan model**, yaitu:

1. **Neural Network Base (Non-Pretrained โ€“ LSTM)**
2. **Pretrained Model 1 โ€“ DistilBERT**
3. **Pretrained Model 2 โ€“ BERT**

Selain pelatihan dan evaluasi model, proyek ini juga dilengkapi dengan **dashboard interaktif menggunakan Streamlit** untuk melakukan inferensi dan analisis performa model.

---

## ๐Ÿ‘จโ€๐ŸŽ“ Informasi Mahasiswa

- **Nama** : Khairy Zhafran H. Kastella
- **NIM** : 202210370311439
- **Mata Kuliah** : Pembelajaran Mesin
- **Universitas** : Universitas Negeri Malang

---

## ๐Ÿ“‚ Struktur Repository

```
๐Ÿ“ฆ Praktikum-Text-UAP
โ”‚
โ”œโ”€โ”€ data/
โ”‚ โ””โ”€โ”€ spam.csv
โ”‚
โ”œโ”€โ”€ file_ipynb/
โ”‚ โ”œโ”€โ”€ Model_Bert_UAP_Machine_Learning.ipynb
โ”‚ โ”œโ”€โ”€ Model_Distilbert_UAP_Machine_Learning.ipynb
โ”‚ โ””โ”€โ”€ Model_LSTM_UAP_Machine_Learning.ipynb
โ”‚
โ”œโ”€โ”€ model_nn_base/
โ”‚ โ”œโ”€โ”€ model_lstm.pth
โ”‚ โ””โ”€โ”€ tokenizer.pkl
โ”‚
โ”œโ”€โ”€ model_distilbert/
โ”‚ โ”œโ”€โ”€ config.json
โ”‚ โ”œโ”€โ”€ model.safetensors
โ”‚ โ””โ”€โ”€ tokenizer.json
โ”‚
โ”œโ”€โ”€ model_bert/
โ”‚ โ”œโ”€โ”€ config.json
โ”‚ โ”œโ”€โ”€ model.safetensors
โ”‚ โ””โ”€โ”€ tokenizer.json
โ”‚
โ”œโ”€โ”€ train_lstm.py
โ”œโ”€โ”€ train_distilbert.py
โ”œโ”€โ”€ train_bert.py
โ”‚
โ”œโ”€โ”€ evaluate_lstm.py
โ”œโ”€โ”€ evaluate_distilbert.py
โ”œโ”€โ”€ evaluate_bert.py
โ”‚
โ”œโ”€โ”€ app.py
โ”œโ”€โ”€ requirements.txt
โ”œโ”€โ”€ pyproject.toml
โ””โ”€โ”€ README.md

````

---

## ๐Ÿ“Š Dataset

Proyek ini menggunakan dataset **SMS Spam Collection Dataset** dari Kaggle.

- **Sumber Dataset**
๐Ÿ”— https://www.kaggle.com/datasets/uciml/sms-spam-collection-dataset

- **Jumlah Data** : 5.574 SMS
- **Label** :
- `ham` โ†’ SMS normal
- `spam` โ†’ SMS spam

### Contoh Data

| Label | Teks |
|------|------|
| ham | Go until jurong point, crazy.. Available only in bugis |
| spam | Free entry in a weekly competition to win FA Cup tickets |

---

## โš™๏ธ Preprocessing Data

Langkah preprocessing yang dilakukan:

- Encoding label (`ham = 0`, `spam = 1`)
- Pembersihan teks dasar
- Tokenisasi:
- **TF-IDF** untuk model NN Base
- **Tokenizer Transformer** untuk DistilBERT dan BERT
- Padding & truncation (max length = 128)

---

## ๐Ÿง  Model yang Digunakan

### 1๏ธโƒฃ Neural Network Base (Non-Pretrained โ€“ LSTM)

- Embedding Layer
- LSTM Layer
- Fully Connected Layer
- Sigmoid Output
- Dilatih dari awal tanpa pretrained weight

**Kelebihan**:
- Lebih ringan
- Mudah dipahami
- Cocok untuk baseline

---

### 2๏ธโƒฃ Pretrained Model 1 โ€“ DistilBERT

- Model Transformer ringan
- Transfer learning dari `distilbert-base-uncased`
- Fine-tuning pada dataset SMS Spam

**Kelebihan**:
- Lebih cepat dari BERT
- Akurasi tinggi
- Lebih efisien untuk deployment

---

### 3๏ธโƒฃ Pretrained Model 2 โ€“ BERT

- Model Transformer penuh
- Transfer learning dari `bert-base-uncased`
- Representasi konteks teks lebih kaya

**Kelebihan**:
- Akurasi tertinggi
- Pemahaman konteks lebih baik

---

## ๐Ÿ“ˆ Evaluasi Model

Evaluasi dilakukan menggunakan:

- **Classification Report**
- Accuracy
- Precision
- Recall
- F1-Score
- **Confusion Matrix**
- **Grafik Loss dan Accuracy**

### Contoh Metrik Evaluasi

| Model | Accuracy |
|------|----------|
| LSTM (NN Base) | ~87% |
| DistilBERT | ~96% |
| BERT | ~97% |

๐Ÿ“Œ *Model pretrained menunjukkan performa yang lebih baik dibandingkan model non-pretrained.*

---

## ๐Ÿ“Š Visualisasi

- Grafik **Training Loss vs Epoch**
- Grafik **Accuracy vs Epoch**

---

## ๐Ÿ“ˆ Hasil Evaluasi Model

### ๐Ÿ”น Perbandingan Akurasi 3 Model

![Perbandingan Akurasi](gambar_figure/Perbandingan%20Akurasi%203%20Model.png)

Grafik menunjukkan bahwa **BERT memiliki performa terbaik**, diikuti oleh **DistilBERT**, sedangkan **LSTM** digunakan sebagai baseline non-pretrained.

---

## ๐Ÿงช Evaluasi Per Model

### 1๏ธโƒฃ LSTM (Non-Pretrained)

**Training Loss & Accuracy**

![Training LSTM](gambar_figure/Training%20Loss%20dan%20Accuracy%20LSTM.png)

Model LSTM menunjukkan proses pembelajaran yang stabil, namun performanya masih terbatas dibanding model pretrained karena keterbatasan pemahaman konteks bahasa.

**Confusion Matrix**

![Confusion Matrix LSTM](gambar_figure/Confusion%20Matrix%20-%20LSTM.png)

Masih terdapat kesalahan klasifikasi, terutama pada data spam yang memiliki struktur bahasa mirip pesan normal.

---

### 2๏ธโƒฃ DistilBERT

**Training Loss & Accuracy**

![Training DistilBERT](gambar_figure/Training%20Loss%20dan%20Accuracy%20Distilbert.png)

Kurva training menunjukkan konvergensi yang baik dan stabil. DistilBERT mampu belajar lebih cepat dengan performa yang mendekati BERT.

**Confusion Matrix**

![Confusion Matrix DistilBERT](gambar_figure/Confusion%20Matrix%20-%20Distilbert.png)

Mayoritas prediksi berada pada diagonal utama, menandakan performa klasifikasi yang kuat dan konsisten.

---

### 3๏ธโƒฃ BERT

**Training Loss & Accuracy**

![Training BERT](gambar_figure/Training%20Loss%20dan%20Accuracy%20Bert.png)

BERT menunjukkan akurasi tertinggi dengan loss paling rendah, menandakan pemahaman konteks teks yang sangat baik.

**Confusion Matrix**

![Confusion Matrix BERT](gambar_figure/Confusion%20Matrix%20-%20Bert.png)

Hampir seluruh prediksi berada pada diagonal utama, menunjukkan performa klasifikasi terbaik di antara ketiga model.

---

## ๐Ÿ–ฅ๏ธ Dashboard Streamlit

Dashboard menyediakan fitur:

- Pilih model (LSTM / DistilBERT / BERT)
- Input teks SMS
- Prediksi real-time
- Tampilan hasil dengan:
- ๐ŸŸฅ Background merah untuk **SPAM**
- ๐ŸŸฉ Background hijau untuk **HAM**
- Informasi jumlah total data

---

## โ–ถ๏ธ Cara Menjalankan Project (Local)

### 1๏ธโƒฃ Clone Repository
```bash
git clone https://github.com/username/Praktikum-Text-UAP.git
cd Praktikum-Text-UAP
````

### 2๏ธโƒฃ Install Dependency

```bash
pip install -r requirements.txt
```

atau menggunakan **PDM**:

```bash
pdm install
```

### 3๏ธโƒฃ Jalankan Dashboard

```bash
streamlit run app.py
```

---

## ๐ŸŒ Live Demo (Optional)

๐Ÿ”— *Belum tersedia / Opsional*

---

## ๐Ÿ“ Kesimpulan

* Model **pretrained (DistilBERT & BERT)** memberikan performa terbaik
* **LSTM** tetap layak sebagai baseline
* Streamlit mempermudah analisis dan presentasi model
* Transfer learning sangat efektif untuk klasifikasi teks

---

## ๐Ÿ“Œ Catatan

Proyek ini dibuat untuk keperluan **akademik** dan **pembelajaran**, bukan untuk penggunaan komersial.

---

โญ Jangan lupa beri **star** jika repository ini membantu!

---



โ›“๏ธโ€๐Ÿ’ฅ Misc / Lain-lain





๐Ÿ—ฃ๏ธ Powered By:


---


๐ŸŒ  Starred:



[![Stargazers repo roster for @NightRunners02/](https://reporoster.com/stars/NightRunners02/UAP_Machine-Learning)](https://github.com/NightRunners02/UAP_Machine-Learning/stargazers)

---


๐Ÿช Forked:

[![Forkers repo roster for @NightRunners02/](https://reporoster.com/forks/NightRunners02/UAP_Machine-Learning)](https://github.com/NightRunners02/UAP_Machine-Learning/network/members)

---


๐Ÿ’ซ Star History:

[![Star History Chart](https://api.star-history.com/svg?repos=NightRunners02/UAP_Machine-Learning&type=Date)](https://star-history.com/#UAP_Machine-Learning/Portofolio_Simple&Date)