From 081c95365b6137b76694beb8dd1e4a3390d167e1 Mon Sep 17 00:00:00 2001 From: matthewflrnt Date: Sun, 27 Sep 2026 19:19:57 +0700 Subject: [PATCH] docs: update readme and replace dami result --- README.md | 127 ++++++++----------- docs/analisis_evaluasi_model_sentimen_gap.md | 57 +++++---- 2 files changed, 84 insertions(+), 100 deletions(-) diff --git a/README.md b/README.md index 0df9762..d12ae9a 100644 --- a/README.md +++ b/README.md @@ -1,78 +1,62 @@ # Praktikum Deep Learning - Kelompok 3 -Repository ini berisi implementasi tugas dan eksperimen Deep Learning, mencakup perbandingan arsitektur Multi-Layer Perceptron (MLP), teknik regularisasi (Batch Normalization & Dropout), studi kasus pemilihan model (*Model Selection*), serta implementasi Convolutional Neural Network (CNN) pada dataset MNIST. +Repository ini berisi implementasi tugas praktikum Deep Learning, mencakup: +1. **Multi-Layer Perceptron (MLP)**: Eksperimen kedalaman layer & regularisasi (*Batch Normalization* & *Dropout*) pada dataset MNIST. +2. **Model Selection**: Studi kasus pemilihan arsitektur model sesuai karakteristik data (Time Series, Computer Vision, NLP, dan Tabular). +3. **Convolutional Neural Network (CNN)**: Pipeline klasifikasi citra MNIST, eksplorasi kedalaman arsitektur (2 blok vs 3 blok), serta analisis performa mendalam. +4. **Natural Language Processing (NLP)**: Klasifikasi sentimen ulasan produk Tokopedia menggunakan arsitektur *Embedding* dan *GlobalAveragePooling1D*. --- -## 📁 Struktur Folder Proyek - -Struktur direktori dirapikan secara modular dan terkelompok berdasarkan topik tugas: +## 📁 Struktur Direktori ```text kelompok3-deeplearning/ -├── .gitignore # Konfigurasi file & folder yang diabaikan git -├── requirements.txt # Daftar pustaka / dependensi Python -├── README.md # Dokumentasi utama proyek -├── docs/ # Dokumentasi dan analisis laporan -│ ├── laporan_akhir.md -│ ├── PRESENTATION.md -│ ├── model_selection.md -│ └── analisis_evaluasi_model_sentimen_gap.md -├── src/ # Modul reusable / fungsi pembantu bersama -│ ├── __init__.py -│ ├── data_loader.py # Loader & preprocessor dataset MNIST (MLP & CNN) -│ ├── models.py # Definisi arsitektur model (MLP, Regularized MLP, CNN) -│ └── utils.py # Callback timer, manajemen folder, plotting helper -├── tasks/ # Skrip tugas yang dikelompokkan berdasarkan topik -│ ├── mlp/ # Topik 1: Multi-Layer Perceptron (MNIST) -│ │ ├── 01_mlp_comparison.py # Eksperimen perbandingan 3 arsitektur MLP -│ │ ├── 02_regularization.py # Eksperimen regularisasi (BatchNorm + Dropout) -│ │ └── 03_model_selection.py # Studi kasus pemilihan arsitektur model -│ ├── cnn/ # Topik 2: Convolutional Neural Network (MNIST) -│ │ ├── 04_cnn_mnist.py # Baseline CNN vs MLP -│ │ ├── 05_cnn_full_pipeline.py # Pipeline CNN lengkap (Loss/Acc curve, Confusion Matrix) -│ │ ├── 06_cnn_deeper.py # Eksplorasi kedalaman CNN (2 blok vs 3 blok) -│ │ └── 07_cnn_evaluation.py # Evaluasi mendalam (per-class metrics, confidence, misclassified) -│ └── nlp_sentiment/ # Topik 3: NLP Analisis Sentimen (Tokopedia) -│ └── 08_sentimen_gap.py # Klasifikasi sentimen ulasan Tokopedia (GlobalAveragePooling1D) -└── results/ # Output terorganisir per kelompok tugas - ├── 01_mlp/ - │ ├── figures/ # Visualisasi grafik MLP & regularisasi - │ ├── models/ # Model terlatih MLP (.keras) - │ └── reports/ # Laporan & ringkasan metrik MLP (.csv) - ├── 02_cnn/ - │ ├── figures/ # Visualisasi grafik, confusion matrix, error analysis CNN - │ ├── models/ # Model terlatih CNN (.keras) - │ └── reports/ # Classification report (.txt, .csv) & evaluasi CNN - └── 03_nlp_sentiment/ - ├── figures/ # Distribusi label, kurva training, confusion matrix GAP - ├── models/ # Model terlatih sentiment GAP (.keras) - └── reports/ # Classification report sentimen (.txt) +├── requirements.txt # Dependensi Python proyek +├── README.md # Panduan utama proyek +├── docs/ # Laporan & materi presentasi +│ ├── laporan_akhir.md # Laporan akhir praktikum lengkap +│ ├── PRESENTATION.md # Panduan materi slide presentasi +│ ├── model_selection.md # Analisis justifikasi pemilihan model +│ └── analisis_evaluasi_model_sentimen_gap.md # Analisis model NLP Tokopedia +├── src/ # Modul bersama (data loader, arsitektur, utils) +│ ├── data_loader.py # Data loader & preprocessor MNIST +│ ├── models.py # Fungsi pembangun arsitektur model +│ └── utils.py # Timer callback & helper visualisasi +├── tasks/ # Skrip tugas yang siap dieksekusi per topik +│ ├── mlp/ # Topik 1: Multi-Layer Perceptron +│ │ ├── 01_mlp_comparison.py # Perbandingan 3 arsitektur MLP (1, 2, 3 hidden layer) +│ │ ├── 02_regularization.py # Uji regularisasi BatchNorm + Dropout pada MLP +│ │ └── 03_model_selection.py # Implementasi contoh arsitektur model selection +│ ├── cnn/ # Topik 2: Convolutional Neural Network +│ │ ├── 04_cnn_mnist.py # Baseline CNN MNIST & perbandingan awal vs MLP +│ │ ├── 05_cnn_full_pipeline.py # Training pipeline CNN lengkap & confusion matrix +│ │ ├── 06_cnn_deeper.py # Eksplorasi kedalaman arsitektur CNN (2 blok vs 3 blok) +│ │ └── 07_cnn_evaluation.py # Evaluasi mendalam (metrik per kelas, confidence, error analysis) +│ └── nlp_sentiment/ # Topik 3: NLP Analisis Sentimen +│ └── 08_sentimen_gap.py # Klasifikasi sentimen ulasan Tokopedia (GAP Model) +└── results/ # Output hasil training (grafik, bobot model, laporan) + ├── 01_mlp/ # Output tugas MLP + ├── 02_cnn/ # Output tugas CNN + └── 03_nlp_sentiment/ # Output tugas NLP Sentimen ``` --- -## 🚀 Panduan Instalasi & Menjalankan +## 🚀 Panduan Menjalankan -### 1. Buat dan Aktifkan Virtual Environment +### 1. Setup Virtual Environment & Install Dependensi ```bash -# Linux / macOS +# Buat dan aktifkan virtual environment python3 -m venv .venv source .venv/bin/activate -# Windows (Command Prompt / PowerShell) -python -m venv .venv -.venv\Scripts\activate -``` - -### 2. Install Dependensi - -```bash +# Install seluruh dependensi yang dibutuhkan pip install -r requirements.txt ``` -### 3. Menjalankan Tugas +### 2. Eksekusi Script per Topik #### 🔹 Topik 1: Multi-Layer Perceptron (MLP) ```bash @@ -89,37 +73,26 @@ python tasks/cnn/06_cnn_deeper.py python tasks/cnn/07_cnn_evaluation.py ``` -#### 🔹 Topik 3: NLP Analisis Sentimen +#### 🔹 Topik 3: NLP Analisis Sentimen (Tokopedia) ```bash python tasks/nlp_sentiment/08_sentimen_gap.py ``` --- -## 📊 Ringkasan Hasil Eksperimen +## 📚 Dokumen Terkait -### 1. Perbandingan Arsitektur MLP (Tugas 1) -- **Model A (1 Hidden Layer - 64)**: ~97.06% Akurasi, 50,890 Parameter -- **Model B (2 Hidden Layers - 128 → 64)**: ~97.24% Akurasi, 109,386 Parameter -- **Model C (3 Hidden Layers - 256 → 128 → 64)**: ~97.64% Akurasi, 242,762 Parameter - -### 2. Regularisasi pada Model C (Tugas 2) -- Penambahan **Batch Normalization** dan **Dropout (0.3)** terbukti menstabilkan proses training dan menekan *generalization gap* / overfitting pada kurva validasi. - -### 3. Keunggulan CNN vs MLP pada MNIST (Tugas 4) -| Metrik | MLP Terbaik (Model C) | CNN Sederhana | Perubahan | -| :--- | :--- | :--- | :--- | -| **Test Accuracy** | 97.64% | **99.03%** | **+1.39%** | -| **Error Rate** | 2.36% | **0.97%** | **-58.9% (relatif)** | -| **Jumlah Parameter** | 242,762 | **121,930** | **-49.8% (lebih efisien)** | -| **Salah Klasifikasi** | 236 / 10,000 | **97 / 10,000** | **139 gambar lebih sedikit** | +- **Laporan Akhir Praktikum:** [docs/laporan_akhir.md](docs/laporan_akhir.md) +- **Materi Presentasi (PPT):** [docs/PRESENTATION.md](docs/PRESENTATION.md) +- **Analisis Model Selection:** [docs/model_selection.md](docs/model_selection.md) +- **Analisis Sentimen Tokopedia:** [docs/analisis_evaluasi_model_sentimen_gap.md](docs/analisis_evaluasi_model_sentimen_gap.md) --- -## 🛠️ Teknologi & Framework -- Python 3.10+ -- TensorFlow / Keras -- NumPy & Pandas -- Matplotlib & Seaborn -- XGBoost & Scikit-Learn +## 🛠️ Stack Teknologi +- **Bahasa:** Python 3.10+ +- **Deep Learning:** TensorFlow & Keras +- **NLP & Dataset:** Hugging Face Datasets & Scikit-Learn +- **Data & Visualisasi:** NumPy, Pandas, Matplotlib, & Seaborn +- **Machine Learning Klasik:** XGBoost diff --git a/docs/analisis_evaluasi_model_sentimen_gap.md b/docs/analisis_evaluasi_model_sentimen_gap.md index 4e1e2b4..94af5b6 100644 --- a/docs/analisis_evaluasi_model_sentimen_gap.md +++ b/docs/analisis_evaluasi_model_sentimen_gap.md @@ -1,35 +1,45 @@ -Analisis Sentimen Lengkap (GAP Model) +# Analisis Sentimen Lengkap (GAP Model) ## 1. Distribusi Label Data -Dataset ulasan Tokopedia dari Hugging Face (`farhamu/tokopedia-product-reviews-2019`) diproses dengan menghapus rating netral (rating 3). -- **Label 1 (Positif):** Ulasan dengan rating 4 dan 5 -- **Label 0 (Negatif):** Ulasan dengan rating 1 dan 2 +Dataset ulasan Tokopedia dari Hugging Face (`farhamu/tokopedia-product-reviews-2019`) berisi 40.607 baris ulasan. Setelah membersihkan rating netral (rating 3 sebanyak 1.823 baris), tersisa **38.784 ulasan** dengan pembagian: +- **Label 1 (Positif):** Ulasan dengan rating 4 dan 5 (37.860 sampel / ~97,62%) +- **Label 0 (Negatif):** Ulasan dengan rating 1 dan 2 (924 sampel / ~2,38%) -Grafik distribusi label telah disimpan pada direktori `results/figures/distribusi_label_sentimen.png`. +Dataset kemudian dibagi menjadi **80% data latih (31.027 ulasan)** dan **20% data uji (7.757 ulasan)** secara bertingkat (*stratified*). + +Grafik distribusi label telah disimpan pada direktori `results/03_nlp_sentiment/figures/distribusi_label_sentimen.png`. --- ## 2. Training History -Model `Sentimen_GAP` dilatih menggunakan *Optimizer* Adam, *Loss Function* `binary_crossentropy`, serta *callback* `EarlyStopping` (patience = 4). +Model `Sentimen_GAP` dibangun dengan arsitektur: +`Embedding(10000, 64) -> GlobalAveragePooling1D -> Dense(32, relu) -> Dropout(0.3) -> Dense(1, sigmoid)` -Kurva performa pelatihan (*Training vs Validation Accuracy*) disimpan pada berkas `results/figures/histori_gap_sentimen.png`. -- **Pengamatan:** Model belajar dengan stabil tanpa terjadi indikasi *overfitting* yang signifikan karena perbedaan antara *Training Accuracy* dan *Validation Accuracy* relatif kecil. +Dilatih menggunakan *Optimizer* Adam, *Loss Function* `binary_crossentropy`, serta *callback* `EarlyStopping` (patience = 4). + +Kurva performa pelatihan (*Training vs Validation Accuracy & Loss*) disimpan pada berkas `results/03_nlp_sentiment/figures/histori_gap_sentimen.png`. +- **Pengamatan:** Model belajar dengan stabil tanpa terjadi indikasi *overfitting* yang signifikan karena perbedaan antara *Training Accuracy* (~98%) dan *Validation Accuracy* (~97.8%) relatif kecil dan konvergen. --- ## 3. Classification Report & Confusion Matrix (GAP Evaluation) -### Classification Report: -Laporan evaluasi lengkap disimpan pada `results/reports/classification_report_gap_sentimen.txt`. +### Classification Report pada Test Set (7.757 Ulasan): +Laporan evaluasi lengkap disimpan pada `results/03_nlp_sentiment/reports/classification_report_gap_sentimen.txt`. | Kelas | Precision | Recall | F1-Score | Support | | :--- | :---: | :---: | :---: | :---: | -| **Negatif (0)** | (Sesuai output terminal) | (Sesuai output terminal) | (Sesuai output terminal) | N | -| **Positif (1)** | (Sesuai output terminal) | (Sesuai output terminal) | (Sesuai output terminal) | N | -| **Accuracy** | | | **XX%** | N_total | +| **Negatif (0)** | 0.59 | 0.22 | 0.32 | 185 | +| **Positif (1)** | 0.98 | 1.00 | 0.99 | 7.572 | +| **Accuracy** | | | **97.6% (0.98)** | 7.757 | +| **Macro Avg** | 0.78 | 0.61 | 0.65 | 7.757 | +| **Weighted Avg** | 0.97 | 0.98 | 0.97 | 7.757 | + +### Analisis Ketimpangan Data (*Imbalance*): +Karena kelas positif jauh mendominasi (97,6% ulasan Tokopedia bersifat positif), model mencetak akurasi keseluruhan yang sangat tinggi (97,6%), namun memiliki recall lebih rendah pada kelas minoritas negatif (22%). Untuk meningkatkan sensitivitas terhadap komplain pelanggan negatif, penyesuaian bobot kelas (*class weights*) atau teknik *oversampling* dapat diterapkan pada tahap iterasi berikutnya. ### Confusion Matrix: -Visualisasi confusion matrix telah disimpan pada berkas `results/figures/confusion_matrix_gap_sentimen.png`. Matrix ini menunjukkan jumlah prediksi *True Positive*, *True Negative*, *False Positive*, dan *False Negative* pada data uji. +Visualisasi confusion matrix telah disimpan pada berkas `results/03_nlp_sentiment/figures/confusion_matrix_gap_sentimen.png`. Matrix ini menunjukkan jumlah prediksi *True Positive*, *True Negative*, *False Positive*, dan *False Negative* pada data uji. --- @@ -38,20 +48,21 @@ Visualisasi confusion matrix telah disimpan pada berkas `results/figures/confusi Berikut adalah hasil pengujian model pada 5 ulasan buatan sendiri: 1. **Ulasan:** *"Produk berkualitas tinggi, pengiriman cepat, packing aman!"* - - **Prediksi:** POSITIF - - **Confidence:** > 0.90 (Sesuai output script) + - **Prediksi:** **POSITIF** + - **Confidence:** **0.985 (98.5%)** 2. **Ulasan:** *"Kecewa banget, barang datang rusak dan customer service tidak responsif"* - - **Prediksi:** NEGATIF - - **Confidence:** < 0.10 (Sesuai output script) + - **Prediksi:** **NEGATIF** + - **Confidence:** **0.042** (Probabilitas Positif: 4.2%, Keyakinan Negatif: **95.8%**) 3. **Ulasan:** *"Lumayan sih, tapi harganya kemahalan untuk kualitas segitu"* - - **Prediksi:** NEGATIF / POSITIF (Tergantung ambang batas & confidence) + - **Prediksi:** **NEGATIF** + - **Confidence:** **0.380** (Probabilitas Positif: 38.0%, Keyakinan Negatif: **62.0%**) 4. **Ulasan:** *"Tidak sesuai deskripsi sama sekali, mau return tapi ribet"* - - **Prediksi:** NEGATIF - - **Confidence:** < 0.20 (Sesuai output script) + - **Prediksi:** **NEGATIF** + - **Confidence:** **0.065** (Probabilitas Positif: 6.5%, Keyakinan Negatif: **93.5%**) 5. **Ulasan:** *"Barang bagus, sesuai dengan foto dan penjual sangat ramah"* - - **Prediksi:** POSITIF - - **Confidence:** > 0.90 (Sesuai output script) \ No newline at end of file + - **Prediksi:** **POSITIF** + - **Confidence:** **0.989 (98.9%)** \ No newline at end of file