{"id":35150973,"url":"https://github.com/nightrunners02/uap_machine-learning","last_synced_at":"2026-04-28T09:02:31.317Z","repository":{"id":330100334,"uuid":"1119433788","full_name":"NightRunners02/UAP_Machine-Learning","owner":"NightRunners02","description":null,"archived":false,"fork":false,"pushed_at":"2025-12-24T07:00:35.000Z","size":15259,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-24T21:59:07.097Z","etag":null,"topics":["439","indonesia","ipynb-jupyter-notebook","nightrunners02","python","uap"],"latest_commit_sha":null,"homepage":"https://github.com/NightRunners02/UAP_Machine-Learning","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NightRunners02.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-19T09:09:18.000Z","updated_at":"2025-12-24T07:00:39.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/NightRunners02/UAP_Machine-Learning","commit_stats":null,"previous_names":["nightrunners02/uap_machine-learning"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/NightRunners02/UAP_Machine-Learning","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NightRunners02%2FUAP_Machine-Learning","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NightRunners02%2FUAP_Machine-Learning/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NightRunners02%2FUAP_Machine-Learning/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NightRunners02%2FUAP_Machine-Learning/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NightRunners02","download_url":"https://codeload.github.com/NightRunners02/UAP_Machine-Learning/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NightRunners02%2FUAP_Machine-Learning/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32373515,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-27T20:07:02.737Z","status":"online","status_checked_at":"2026-04-28T02:00:07.250Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["439","indonesia","ipynb-jupyter-notebook","nightrunners02","python","uap"],"created_at":"2025-12-28T15:36:51.215Z","updated_at":"2026-04-28T09:02:31.310Z","avatar_url":"https://github.com/NightRunners02.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📩 Spam SMS Classification – UAP Pembelajaran Mesin\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/License-MIT-yellow.svg\"\u003e \u003cbr\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Python-3.10+-blue?logo=python\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Framework-PyTorch-red?logo=pytorch\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Framework-Transformers-yellow?logo=huggingface\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Web-Streamlit-ff4b4b?logo=streamlit\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Status-Completed-success\"\u003e\n\u003c/p\u003e\n\n---\n\nProyek ini merupakan **Ujian Akhir Praktikum (UAP)** mata kuliah **Pembelajaran Mesin**, yang berfokus pada **klasifikasi teks SMS spam dan ham** menggunakan **tiga pendekatan model**, yaitu:\n\n1. **Neural Network Base (Non-Pretrained – LSTM)**\n2. **Pretrained Model 1 – DistilBERT**\n3. **Pretrained Model 2 – BERT**\n\nSelain pelatihan dan evaluasi model, proyek ini juga dilengkapi dengan **dashboard interaktif menggunakan Streamlit** untuk melakukan inferensi dan analisis performa model.\n\n---\n\n## 👨‍🎓 Informasi Mahasiswa\n\n- **Nama** : Khairy Zhafran H. Kastella  \n- **NIM** : 202210370311439  \n- **Mata Kuliah** : Pembelajaran Mesin  \n- **Universitas** : Universitas Negeri Malang  \n\n---\n\n## 📂 Struktur Repository\n\n```\n📦 Praktikum-Text-UAP\n│\n├── data/\n│   └── spam.csv\n│\n├── file_ipynb/\n│  ├── Model_Bert_UAP_Machine_Learning.ipynb\n│  ├── Model_Distilbert_UAP_Machine_Learning.ipynb\n│  └── Model_LSTM_UAP_Machine_Learning.ipynb\n│   \n├── model_nn_base/\n│   ├── model_lstm.pth\n│   └── tokenizer.pkl\n│\n├── model_distilbert/\n│   ├── config.json\n│   ├── model.safetensors\n│   └── tokenizer.json\n│\n├── model_bert/\n│   ├── config.json\n│   ├── model.safetensors\n│   └── tokenizer.json\n│\n├── train_lstm.py\n├── train_distilbert.py\n├── train_bert.py\n│\n├── evaluate_lstm.py\n├── evaluate_distilbert.py\n├── evaluate_bert.py\n│\n├── app.py\n├── requirements.txt\n├── pyproject.toml\n└── README.md\n\n````\n\n---\n\n## 📊 Dataset\n\nProyek ini menggunakan dataset **SMS Spam Collection Dataset** dari Kaggle.\n\n- **Sumber Dataset**  \n  🔗 https://www.kaggle.com/datasets/uciml/sms-spam-collection-dataset  \n\n- **Jumlah Data** : 5.574 SMS  \n- **Label** :\n  - `ham` → SMS normal\n  - `spam` → SMS spam\n\n### Contoh Data\n\n| Label | Teks |\n|------|------|\n| ham | Go until jurong point, crazy.. Available only in bugis |\n| spam | Free entry in a weekly competition to win FA Cup tickets |\n\n---\n\n## ⚙️ Preprocessing Data\n\nLangkah preprocessing yang dilakukan:\n\n- Encoding label (`ham = 0`, `spam = 1`)\n- Pembersihan teks dasar\n- Tokenisasi:\n  - **TF-IDF** untuk model NN Base\n  - **Tokenizer Transformer** untuk DistilBERT dan BERT\n- Padding \u0026 truncation (max length = 128)\n\n---\n\n## 🧠 Model yang Digunakan\n\n### 1️⃣ Neural Network Base (Non-Pretrained – LSTM)\n\n- Embedding Layer\n- LSTM Layer\n- Fully Connected Layer\n- Sigmoid Output\n- Dilatih dari awal tanpa pretrained weight\n\n**Kelebihan**:\n- Lebih ringan\n- Mudah dipahami\n- Cocok untuk baseline\n\n---\n\n### 2️⃣ Pretrained Model 1 – DistilBERT\n\n- Model Transformer ringan\n- Transfer learning dari `distilbert-base-uncased`\n- Fine-tuning pada dataset SMS Spam\n\n**Kelebihan**:\n- Lebih cepat dari BERT\n- Akurasi tinggi\n- Lebih efisien untuk deployment\n\n---\n\n### 3️⃣ Pretrained Model 2 – BERT\n\n- Model Transformer penuh\n- Transfer learning dari `bert-base-uncased`\n- Representasi konteks teks lebih kaya\n\n**Kelebihan**:\n- Akurasi tertinggi\n- Pemahaman konteks lebih baik\n\n---\n\n## 📈 Evaluasi Model\n\nEvaluasi dilakukan menggunakan:\n\n- **Classification Report**\n  - Accuracy\n  - Precision\n  - Recall\n  - F1-Score\n- **Confusion Matrix**\n- **Grafik Loss dan Accuracy**\n\n### Contoh Metrik Evaluasi\n\n| Model | Accuracy |\n|------|----------|\n| LSTM (NN Base) | ~87% |\n| DistilBERT | ~96% |\n| BERT | ~97% |\n\n📌 *Model pretrained menunjukkan performa yang lebih baik dibandingkan model non-pretrained.*\n\n---\n\n## 📊 Visualisasi\n\n- Grafik **Training Loss vs Epoch**\n- Grafik **Accuracy vs Epoch**\n\n---\n\n## 📈 Hasil Evaluasi Model\n\n### 🔹 Perbandingan Akurasi 3 Model\n\n![Perbandingan Akurasi](gambar_figure/Perbandingan%20Akurasi%203%20Model.png)\n\nGrafik menunjukkan bahwa **BERT memiliki performa terbaik**, diikuti oleh **DistilBERT**, sedangkan **LSTM** digunakan sebagai baseline non-pretrained.\n\n---\n\n## 🧪 Evaluasi Per Model\n\n### 1️⃣ LSTM (Non-Pretrained)\n\n**Training Loss \u0026 Accuracy**\n\n![Training LSTM](gambar_figure/Training%20Loss%20dan%20Accuracy%20LSTM.png)\n\nModel LSTM menunjukkan proses pembelajaran yang stabil, namun performanya masih terbatas dibanding model pretrained karena keterbatasan pemahaman konteks bahasa.\n\n**Confusion Matrix**\n\n![Confusion Matrix LSTM](gambar_figure/Confusion%20Matrix%20-%20LSTM.png)\n\nMasih terdapat kesalahan klasifikasi, terutama pada data spam yang memiliki struktur bahasa mirip pesan normal.\n\n---\n\n### 2️⃣ DistilBERT\n\n**Training Loss \u0026 Accuracy**\n\n![Training DistilBERT](gambar_figure/Training%20Loss%20dan%20Accuracy%20Distilbert.png)\n\nKurva training menunjukkan konvergensi yang baik dan stabil. DistilBERT mampu belajar lebih cepat dengan performa yang mendekati BERT.\n\n**Confusion Matrix**\n\n![Confusion Matrix DistilBERT](gambar_figure/Confusion%20Matrix%20-%20Distilbert.png)\n\nMayoritas prediksi berada pada diagonal utama, menandakan performa klasifikasi yang kuat dan konsisten.\n\n---\n\n### 3️⃣ BERT\n\n**Training Loss \u0026 Accuracy**\n\n![Training BERT](gambar_figure/Training%20Loss%20dan%20Accuracy%20Bert.png)\n\nBERT menunjukkan akurasi tertinggi dengan loss paling rendah, menandakan pemahaman konteks teks yang sangat baik.\n\n**Confusion Matrix**\n\n![Confusion Matrix BERT](gambar_figure/Confusion%20Matrix%20-%20Bert.png)\n\nHampir seluruh prediksi berada pada diagonal utama, menunjukkan performa klasifikasi terbaik di antara ketiga model.\n\n---\n\n## 🖥️ Dashboard Streamlit\n\nDashboard menyediakan fitur:\n\n- Pilih model (LSTM / DistilBERT / BERT)\n- Input teks SMS\n- Prediksi real-time\n- Tampilan hasil dengan:\n  - 🟥 Background merah untuk **SPAM**\n  - 🟩 Background hijau untuk **HAM**\n- Informasi jumlah total data\n\n---\n\n## ▶️ Cara Menjalankan Project (Local)\n\n### 1️⃣ Clone Repository\n```bash\ngit clone https://github.com/username/Praktikum-Text-UAP.git\ncd Praktikum-Text-UAP\n````\n\n### 2️⃣ Install Dependency\n\n```bash\npip install -r requirements.txt\n```\n\natau menggunakan **PDM**:\n\n```bash\npdm install\n```\n\n### 3️⃣ Jalankan Dashboard\n\n```bash\nstreamlit run app.py\n```\n\n---\n\n## 🌐 Live Demo (Optional)\n\n🔗 *Belum tersedia / Opsional*\n\n---\n\n## 📝 Kesimpulan\n\n* Model **pretrained (DistilBERT \u0026 BERT)** memberikan performa terbaik\n* **LSTM** tetap layak sebagai baseline\n* Streamlit mempermudah analisis dan presentasi model\n* Transfer learning sangat efektif untuk klasifikasi teks\n\n---\n\n## 📌 Catatan\n\nProyek ini dibuat untuk keperluan **akademik** dan **pembelajaran**, bukan untuk penggunaan komersial.\n\n---\n\n⭐ Jangan lupa beri **star** jika repository ini membantu!\n\n---\n\n\u003cdetails\u003e \n  \u003csummary\u003e\n  \u003ch2\u003e ⛓️‍💥 Misc / Lain-lain\u003c/h2\u003e \n  \u003c/summary\u003e\n\n\u003cp\u003e\n\u003cdiv align=\"center\"\u003e\n\u003ch3\u003e\n  🗣️ Powered By:\n\u003c/h3\u003e\n\u003cimg src=\"https://awesome-svg.vercel.app/card/card_2?name=NightRunners02\u0026summary=Newbie%20Developer\u0026style=nameColor:rgba(223,255,0,1);summaryColor:rgba(57,255,20,1);backgroundColor:rgba(0,0,0,1);\" /\u003e\n\n---\n\u003ch3\u003e\n  🌠 Starred:\n\u003c/h3\u003e\n  \n[![Stargazers repo roster for @NightRunners02/](https://reporoster.com/stars/NightRunners02/UAP_Machine-Learning)](https://github.com/NightRunners02/UAP_Machine-Learning/stargazers)\n\n---\n\u003ch3\u003e\n  🪐 Forked:\n\u003c/h3\u003e\n\n[![Forkers repo roster for @NightRunners02/](https://reporoster.com/forks/NightRunners02/UAP_Machine-Learning)](https://github.com/NightRunners02/UAP_Machine-Learning/network/members)\n\n---\n\u003ch3\u003e\n  💫 Star History:\n\u003c/h3\u003e\n\n[![Star History Chart](https://api.star-history.com/svg?repos=NightRunners02/UAP_Machine-Learning\u0026type=Date)](https://star-history.com/#UAP_Machine-Learning/Portofolio_Simple\u0026Date)\n\n\u003c/p\u003e\n\u003c/div\u003e\n\u003c/details\u003e\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnightrunners02%2Fuap_machine-learning","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnightrunners02%2Fuap_machine-learning","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnightrunners02%2Fuap_machine-learning/lists"}