Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1b1c000264 | ||
|
|
081c95365b | ||
|
|
ef7ecf9e51 | ||
|
|
6392f1c2c6 |
@@ -1,78 +1,62 @@
|
|||||||
# Praktikum Deep Learning - Kelompok 3
|
# 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
|
||||||
|
|
||||||
Struktur direktori dirapikan secara modular dan terkelompok berdasarkan topik tugas:
|
|
||||||
|
|
||||||
```text
|
```text
|
||||||
kelompok3-deeplearning/
|
kelompok3-deeplearning/
|
||||||
├── .gitignore # Konfigurasi file & folder yang diabaikan git
|
├── requirements.txt # Dependensi Python proyek
|
||||||
├── requirements.txt # Daftar pustaka / dependensi Python
|
├── README.md # Panduan utama proyek
|
||||||
├── README.md # Dokumentasi utama proyek
|
├── docs/ # Laporan & materi presentasi
|
||||||
├── docs/ # Dokumentasi dan analisis laporan
|
│ ├── laporan_akhir.md # Laporan akhir praktikum lengkap
|
||||||
│ ├── laporan_akhir.md
|
│ ├── PRESENTATION.md # Panduan materi slide presentasi
|
||||||
│ ├── PRESENTATION.md
|
│ ├── model_selection.md # Analisis justifikasi pemilihan model
|
||||||
│ ├── model_selection.md
|
│ └── analisis_evaluasi_model_sentimen_gap.md # Analisis model NLP Tokopedia
|
||||||
│ └── analisis_evaluasi_model_sentimen_gap.md
|
├── src/ # Modul bersama (data loader, arsitektur, utils)
|
||||||
├── src/ # Modul reusable / fungsi pembantu bersama
|
│ ├── data_loader.py # Data loader & preprocessor MNIST
|
||||||
│ ├── __init__.py
|
│ ├── models.py # Fungsi pembangun arsitektur model
|
||||||
│ ├── data_loader.py # Loader & preprocessor dataset MNIST (MLP & CNN)
|
│ └── utils.py # Timer callback & helper visualisasi
|
||||||
│ ├── models.py # Definisi arsitektur model (MLP, Regularized MLP, CNN)
|
├── tasks/ # Skrip tugas yang siap dieksekusi per topik
|
||||||
│ └── utils.py # Callback timer, manajemen folder, plotting helper
|
│ ├── mlp/ # Topik 1: Multi-Layer Perceptron
|
||||||
├── tasks/ # Skrip tugas yang dikelompokkan berdasarkan topik
|
│ │ ├── 01_mlp_comparison.py # Perbandingan 3 arsitektur MLP (1, 2, 3 hidden layer)
|
||||||
│ ├── mlp/ # Topik 1: Multi-Layer Perceptron (MNIST)
|
│ │ ├── 02_regularization.py # Uji regularisasi BatchNorm + Dropout pada MLP
|
||||||
│ │ ├── 01_mlp_comparison.py # Eksperimen perbandingan 3 arsitektur MLP
|
│ │ └── 03_model_selection.py # Implementasi contoh arsitektur model selection
|
||||||
│ │ ├── 02_regularization.py # Eksperimen regularisasi (BatchNorm + Dropout)
|
│ ├── cnn/ # Topik 2: Convolutional Neural Network
|
||||||
│ │ └── 03_model_selection.py # Studi kasus pemilihan arsitektur model
|
│ │ ├── 04_cnn_mnist.py # Baseline CNN MNIST & perbandingan awal vs MLP
|
||||||
│ ├── cnn/ # Topik 2: Convolutional Neural Network (MNIST)
|
│ │ ├── 05_cnn_full_pipeline.py # Training pipeline CNN lengkap & confusion matrix
|
||||||
│ │ ├── 04_cnn_mnist.py # Baseline CNN vs MLP
|
│ │ ├── 06_cnn_deeper.py # Eksplorasi kedalaman arsitektur CNN (2 blok vs 3 blok)
|
||||||
│ │ ├── 05_cnn_full_pipeline.py # Pipeline CNN lengkap (Loss/Acc curve, Confusion Matrix)
|
│ │ └── 07_cnn_evaluation.py # Evaluasi mendalam (metrik per kelas, confidence, error analysis)
|
||||||
│ │ ├── 06_cnn_deeper.py # Eksplorasi kedalaman CNN (2 blok vs 3 blok)
|
│ └── nlp_sentiment/ # Topik 3: NLP Analisis Sentimen
|
||||||
│ │ └── 07_cnn_evaluation.py # Evaluasi mendalam (per-class metrics, confidence, misclassified)
|
│ └── 08_sentimen_gap.py # Klasifikasi sentimen ulasan Tokopedia (GAP Model)
|
||||||
│ └── nlp_sentiment/ # Topik 3: NLP Analisis Sentimen (Tokopedia)
|
└── results/ # Output hasil training (grafik, bobot model, laporan)
|
||||||
│ └── 08_sentimen_gap.py # Klasifikasi sentimen ulasan Tokopedia (GlobalAveragePooling1D)
|
├── 01_mlp/ # Output tugas MLP
|
||||||
└── results/ # Output terorganisir per kelompok tugas
|
├── 02_cnn/ # Output tugas CNN
|
||||||
├── 01_mlp/
|
└── 03_nlp_sentiment/ # Output tugas NLP Sentimen
|
||||||
│ ├── 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)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🚀 Panduan Instalasi & Menjalankan
|
## 🚀 Panduan Menjalankan
|
||||||
|
|
||||||
### 1. Buat dan Aktifkan Virtual Environment
|
### 1. Setup Virtual Environment & Install Dependensi
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Linux / macOS
|
# Buat dan aktifkan virtual environment
|
||||||
python3 -m venv .venv
|
python3 -m venv .venv
|
||||||
source .venv/bin/activate
|
source .venv/bin/activate
|
||||||
|
|
||||||
# Windows (Command Prompt / PowerShell)
|
# Install seluruh dependensi yang dibutuhkan
|
||||||
python -m venv .venv
|
|
||||||
.venv\Scripts\activate
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Install Dependensi
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Menjalankan Tugas
|
### 2. Eksekusi Script per Topik
|
||||||
|
|
||||||
#### 🔹 Topik 1: Multi-Layer Perceptron (MLP)
|
#### 🔹 Topik 1: Multi-Layer Perceptron (MLP)
|
||||||
```bash
|
```bash
|
||||||
@@ -89,37 +73,26 @@ python tasks/cnn/06_cnn_deeper.py
|
|||||||
python tasks/cnn/07_cnn_evaluation.py
|
python tasks/cnn/07_cnn_evaluation.py
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 🔹 Topik 3: NLP Analisis Sentimen
|
#### 🔹 Topik 3: NLP Analisis Sentimen (Tokopedia)
|
||||||
```bash
|
```bash
|
||||||
python tasks/nlp_sentiment/08_sentimen_gap.py
|
python tasks/nlp_sentiment/08_sentimen_gap.py
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📊 Ringkasan Hasil Eksperimen
|
## 📚 Dokumen Terkait
|
||||||
|
|
||||||
### 1. Perbandingan Arsitektur MLP (Tugas 1)
|
- **Laporan Akhir Praktikum:** [docs/laporan_akhir.md](docs/laporan_akhir.md)
|
||||||
- **Model A (1 Hidden Layer - 64)**: ~97.06% Akurasi, 50,890 Parameter
|
- **Materi Presentasi (PPT):** [docs/PRESENTATION.md](docs/PRESENTATION.md)
|
||||||
- **Model B (2 Hidden Layers - 128 → 64)**: ~97.24% Akurasi, 109,386 Parameter
|
- **Analisis Model Selection:** [docs/model_selection.md](docs/model_selection.md)
|
||||||
- **Model C (3 Hidden Layers - 256 → 128 → 64)**: ~97.64% Akurasi, 242,762 Parameter
|
- **Analisis Sentimen Tokopedia:** [docs/analisis_evaluasi_model_sentimen_gap.md](docs/analisis_evaluasi_model_sentimen_gap.md)
|
||||||
|
|
||||||
### 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** |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🛠️ Teknologi & Framework
|
## 🛠️ Stack Teknologi
|
||||||
- Python 3.10+
|
|
||||||
- TensorFlow / Keras
|
|
||||||
- NumPy & Pandas
|
|
||||||
- Matplotlib & Seaborn
|
|
||||||
- XGBoost & Scikit-Learn
|
|
||||||
|
|
||||||
|
- **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
|
||||||
|
|||||||
@@ -1,35 +1,45 @@
|
|||||||
Analisis Sentimen Lengkap (GAP Model)
|
# Analisis Sentimen Lengkap (GAP Model)
|
||||||
|
|
||||||
## 1. Distribusi Label Data
|
## 1. Distribusi Label Data
|
||||||
Dataset ulasan Tokopedia dari Hugging Face (`farhamu/tokopedia-product-reviews-2019`) diproses dengan menghapus rating netral (rating 3).
|
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
|
- **Label 1 (Positif):** Ulasan dengan rating 4 dan 5 (37.860 sampel / ~97,62%)
|
||||||
- **Label 0 (Negatif):** Ulasan dengan rating 1 dan 2
|
- **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
|
## 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`.
|
Dilatih menggunakan *Optimizer* Adam, *Loss Function* `binary_crossentropy`, serta *callback* `EarlyStopping` (patience = 4).
|
||||||
- **Pengamatan:** Model belajar dengan stabil tanpa terjadi indikasi *overfitting* yang signifikan karena perbedaan antara *Training Accuracy* dan *Validation Accuracy* relatif kecil.
|
|
||||||
|
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)
|
## 3. Classification Report & Confusion Matrix (GAP Evaluation)
|
||||||
|
|
||||||
### Classification Report:
|
### Classification Report pada Test Set (7.757 Ulasan):
|
||||||
Laporan evaluasi lengkap disimpan pada `results/reports/classification_report_gap_sentimen.txt`.
|
Laporan evaluasi lengkap disimpan pada `results/03_nlp_sentiment/reports/classification_report_gap_sentimen.txt`.
|
||||||
|
|
||||||
| Kelas | Precision | Recall | F1-Score | Support |
|
| Kelas | Precision | Recall | F1-Score | Support |
|
||||||
| :--- | :---: | :---: | :---: | :---: |
|
| :--- | :---: | :---: | :---: | :---: |
|
||||||
| **Negatif (0)** | (Sesuai output terminal) | (Sesuai output terminal) | (Sesuai output terminal) | N |
|
| **Negatif (0)** | 0.59 | 0.22 | 0.32 | 185 |
|
||||||
| **Positif (1)** | (Sesuai output terminal) | (Sesuai output terminal) | (Sesuai output terminal) | N |
|
| **Positif (1)** | 0.98 | 1.00 | 0.99 | 7.572 |
|
||||||
| **Accuracy** | | | **XX%** | N_total |
|
| **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:
|
### 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:
|
Berikut adalah hasil pengujian model pada 5 ulasan buatan sendiri:
|
||||||
|
|
||||||
1. **Ulasan:** *"Produk berkualitas tinggi, pengiriman cepat, packing aman!"*
|
1. **Ulasan:** *"Produk berkualitas tinggi, pengiriman cepat, packing aman!"*
|
||||||
- **Prediksi:** POSITIF
|
- **Prediksi:** **POSITIF**
|
||||||
- **Confidence:** > 0.90 (Sesuai output script)
|
- **Confidence:** **0.985 (98.5%)**
|
||||||
|
|
||||||
2. **Ulasan:** *"Kecewa banget, barang datang rusak dan customer service tidak responsif"*
|
2. **Ulasan:** *"Kecewa banget, barang datang rusak dan customer service tidak responsif"*
|
||||||
- **Prediksi:** NEGATIF
|
- **Prediksi:** **NEGATIF**
|
||||||
- **Confidence:** < 0.10 (Sesuai output script)
|
- **Confidence:** **0.042** (Probabilitas Positif: 4.2%, Keyakinan Negatif: **95.8%**)
|
||||||
|
|
||||||
3. **Ulasan:** *"Lumayan sih, tapi harganya kemahalan untuk kualitas segitu"*
|
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"*
|
4. **Ulasan:** *"Tidak sesuai deskripsi sama sekali, mau return tapi ribet"*
|
||||||
- **Prediksi:** NEGATIF
|
- **Prediksi:** **NEGATIF**
|
||||||
- **Confidence:** < 0.20 (Sesuai output script)
|
- **Confidence:** **0.065** (Probabilitas Positif: 6.5%, Keyakinan Negatif: **93.5%**)
|
||||||
|
|
||||||
5. **Ulasan:** *"Barang bagus, sesuai dengan foto dan penjual sangat ramah"*
|
5. **Ulasan:** *"Barang bagus, sesuai dengan foto dan penjual sangat ramah"*
|
||||||
- **Prediksi:** POSITIF
|
- **Prediksi:** **POSITIF**
|
||||||
- **Confidence:** > 0.90 (Sesuai output script)
|
- **Confidence:** **0.989 (98.9%)**
|
||||||
@@ -38,15 +38,15 @@ Total params: 121,930 (Trainable: 121,930 | Non-trainable: 0)
|
|||||||
```
|
```
|
||||||
|
|
||||||
### (b) Kurva Loss & Akurasi (Training vs Validation)
|
### (b) Kurva Loss & Akurasi (Training vs Validation)
|
||||||
*Visualisasi tersimpan pada:* `results/figures/loss_accuracy_cnn_lengkap.png`
|
*Visualisasi tersimpan pada:* `results/02_cnn/figures/loss_accuracy_cnn_lengkap.png`
|
||||||
|
|
||||||
* **Observasi Loss:** Training loss turun secara konsisten dari ~0.35 ke <0.02. Validation loss stabil pada kisaran ~0.025 tanpa ada tren kenaikan tajam, menandakan model tidak mengalami overfitting parah berkat lapisan Dropout (0.3).
|
* **Observasi Loss:** Training loss turun secara konsisten dari ~0.35 ke <0.02. Validation loss stabil pada kisaran ~0.025 tanpa ada tren kenaikan tajam, menandakan model tidak mengalami overfitting parah berkat lapisan Dropout (0.3).
|
||||||
* **Observasi Akurasi:** Akurasi validasi mencapai >98.5% hanya dalam 3 epoch pertama dan konvergen stabil di angka ~99.2%.
|
* **Observasi Akurasi:** Akurasi validasi mencapai >98.5% hanya dalam 3 epoch pertama dan konvergen stabil di angka ~99.2%.
|
||||||
|
|
||||||
### (c) Confusion Matrix pada Test Set (10.000 Citra)
|
### (c) Confusion Matrix pada Test Set (10.000 Citra)
|
||||||
*Visualisasi tersimpan pada:* `results/figures/confusion_matrix_cnn.png`
|
*Visualisasi tersimpan pada:* `results/02_cnn/figures/confusion_matrix_cnn.png` (dan detail pada `results/02_cnn/figures/confusion_matrix_cnn_detail.png`)
|
||||||
|
|
||||||
* Dari total 10.000 citra uji, model berhasil mengklasifikasikan **>9.920 citra secara tepat** (tingkat kesalahan <0.8%).
|
* Dari total 10.000 citra uji, model berhasil mengklasifikasikan **>9.912 citra secara tepat** (tingkat kesalahan hanya 0.88% atau 88 gambar).
|
||||||
* **Pola Kesalahan Minor:**
|
* **Pola Kesalahan Minor:**
|
||||||
* Digit **4** terkadang diprediksi sebagai **9** karena goresan atas tulisan tangan yang menyatu.
|
* Digit **4** terkadang diprediksi sebagai **9** karena goresan atas tulisan tangan yang menyatu.
|
||||||
* Digit **7** terkadang diprediksi sebagai **2** atau **1** pada tulisan dengan garis miring yang tidak standar.
|
* Digit **7** terkadang diprediksi sebagai **2** atau **1** pada tulisan dengan garis miring yang tidak standar.
|
||||||
@@ -71,7 +71,7 @@ Hal ini disebabkan oleh dua prinsip dasar CNN:
|
|||||||
|
|
||||||
## BAGIAN II: EKSPLORASI KEDALAMAN ARSITEKTUR CNN (2 BLOK vs 3 BLOK)
|
## BAGIAN II: EKSPLORASI KEDALAMAN ARSITEKTUR CNN (2 BLOK vs 3 BLOK)
|
||||||
|
|
||||||
*Visualisasi tersimpan pada:* `results/figures/perbandingan_kedalaman_cnn.png`
|
*Visualisasi tersimpan pada:* `results/02_cnn/figures/perbandingan_kedalaman_cnn.png`
|
||||||
|
|
||||||
### Tabel Perbandingan Arsitektur:
|
### Tabel Perbandingan Arsitektur:
|
||||||
| Arsitektur Model | Konfigurasi Layer | Parameter | Test Accuracy | Waktu Training / Epoch |
|
| Arsitektur Model | Konfigurasi Layer | Parameter | Test Accuracy | Waktu Training / Epoch |
|
||||||
@@ -88,29 +88,42 @@ Hal ini disebabkan oleh dua prinsip dasar CNN:
|
|||||||
*(Bagian Integrasi Hasil Rekan Kelompok)*
|
*(Bagian Integrasi Hasil Rekan Kelompok)*
|
||||||
|
|
||||||
### (a) Distribusi Label Data
|
### (a) Distribusi Label Data
|
||||||
* Total Sampel Dataset: `[Isi total sampel, misal: 10.000 ulasan]`
|
* **Sumber Dataset:** `farhamu/tokopedia-product-reviews-2019` (Hugging Face)
|
||||||
* Distribusi:
|
* **Total Sampel Asli:** 40.607 ulasan
|
||||||
* Kelas Positif: `[X] %`
|
* **Total Sampel Terpakai (setelah membuang rating netral 3):** 38.784 ulasan
|
||||||
* Kelas Negatif: `[Y] %`
|
* **Distribusi:**
|
||||||
|
* **Kelas Positif (Rating 4 & 5 / Label 1):** 37.860 sampel (**97,62%**)
|
||||||
|
* **Kelas Negatif (Rating 1 & 2 / Label 0):** 924 sampel (**2,38%**)
|
||||||
|
* **Pembagian Dataset:** 80% Train (31.027 ulasan) dan 20% Test (7.757 ulasan) secara *stratified*.
|
||||||
|
* *Visualisasi distribusi tersimpan pada:* `results/03_nlp_sentiment/figures/distribusi_label_sentimen.png`
|
||||||
|
|
||||||
### (b) Training History GAP
|
### (b) Training History GAP
|
||||||
* Arsitektur: `Embedding -> Conv1D / Bi-directional -> GlobalAveragePooling1D -> Dense`
|
* **Arsitektur:** `Embedding(10000, 64) -> GlobalAveragePooling1D -> Dense(32, relu) -> Dropout(0.3) -> Dense(1, sigmoid)`
|
||||||
* Konvergensi model tercapai pada Epoch ke-`[N]` dengan Validation Accuracy `[XX.X]%`.
|
* **Total Parameter:** 642.113 parameter
|
||||||
|
* **Konvergensi:** Model dilatih menggunakan *Optimizer* Adam, *Loss* `binary_crossentropy`, serta *EarlyStopping* (patience = 4). Konvergensi tercapai stabil pada Validation Accuracy **~97,8%** dengan *Training Accuracy* **~98,0%**.
|
||||||
|
* *Visualisasi kurva latih tersimpan pada:* `results/03_nlp_sentiment/figures/histori_gap_sentimen.png`
|
||||||
|
|
||||||
|
### (c) Classification Report & Confusion Matrix (Test Set: 7.757 Ulasan)
|
||||||
|
*Laporan evaluasi lengkap tersimpan pada:* `results/03_nlp_sentiment/reports/classification_report_gap_sentimen.txt`
|
||||||
|
|
||||||
### (c) Classification Report & Confusion Matrix
|
|
||||||
```text
|
```text
|
||||||
precision recall f1-score support
|
precision recall f1-score support
|
||||||
Negatif 0.xx 0.xx 0.xx xxx
|
|
||||||
Positif 0.xx 0.xx 0.xx xxx
|
|
||||||
accuracy 0.xx xxxx
|
|
||||||
```
|
|
||||||
|
|
||||||
### (d) Prediksi 5 Ulasan Buatan Sendiri:
|
Negatif (0) 0.59 0.22 0.32 185
|
||||||
1. *"Barang mendarat dengan selamat, packing rapi, dan pengiriman super kilat!"* $\rightarrow$ **Prediksi: POSITIF** (Keyakinan: 99%)
|
Positif (1) 0.98 1.00 0.99 7572
|
||||||
2. *"Produk sangat mengecewakan, tidak menyala sama sekali saat dicolok."* $\rightarrow$ **Prediksi: NEGATIF** (Keyakinan: 98%)
|
|
||||||
3. *"Barang original dan berfungsi baik, respon seller ramah banget."* $\rightarrow$ **Prediksi: POSITIF** (Keyakinan: 97%)
|
accuracy 0.98 7757
|
||||||
4. *"Kualitas barang jelek, pengiriman lambat banget 2 minggu baru sampai."* $\rightarrow$ **Prediksi: NEGATIF** (Keyakinan: 99%)
|
macro avg 0.78 0.61 0.65 7757
|
||||||
5. *"Agak ragu awalnya, ternyata setelah dipakai sangat memuaskan dan worth it!"* $\rightarrow$ **Prediksi: POSITIF** (Keyakinan: 92%)
|
weighted avg 0.97 0.98 0.97 7757
|
||||||
|
```
|
||||||
|
*Visualisasi confusion matrix tersimpan pada:* `results/03_nlp_sentiment/figures/confusion_matrix_gap_sentimen.png`
|
||||||
|
|
||||||
|
### (d) Prediksi 5 Ulasan Buatan Sendiri (Inference Real):
|
||||||
|
1. *"Produk berkualitas tinggi, pengiriman cepat, packing aman!"* $\rightarrow$ **Prediksi: POSITIF** (Keyakinan: **98,5%**)
|
||||||
|
2. *"Kecewa banget, barang datang rusak dan customer service tidak responsif"* $\rightarrow$ **Prediksi: NEGATIF** (Keyakinan Negatif: **95,8%**)
|
||||||
|
3. *"Lumayan sih, tapi harganya kemahalan untuk kualitas segitu"* $\rightarrow$ **Prediksi: NEGATIF** (Keyakinan Negatif: **62,0%**)
|
||||||
|
4. *"Tidak sesuai deskripsi sama sekali, mau return tapi ribet"* $\rightarrow$ **Prediksi: NEGATIF** (Keyakinan Negatif: **93,5%**)
|
||||||
|
5. *"Barang bagus, sesuai dengan foto dan penjual sangat ramah"* $\rightarrow$ **Prediksi: POSITIF** (Keyakinan: **98,9%**)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -127,10 +140,10 @@ Hal ini disebabkan oleh dua prinsip dasar CNN:
|
|||||||
## BAGIAN V: EVALUASI MODEL SEKUENSIAL BiLSTM & REAL-TIME CLI
|
## BAGIAN V: EVALUASI MODEL SEKUENSIAL BiLSTM & REAL-TIME CLI
|
||||||
|
|
||||||
### Perbandingan Kuantitatif: Model GAP vs BiLSTM
|
### Perbandingan Kuantitatif: Model GAP vs BiLSTM
|
||||||
| Model NLP | Test Accuracy | F1-Score | Karakteristik Pemrosesan Sekuens |
|
| Model NLP | Test Accuracy | Macro F1-Score | Karakteristik Pemrosesan Sekuens |
|
||||||
| :--- | :---: | :---: | :--- |
|
| :--- | :---: | :---: | :--- |
|
||||||
| **GAP Sentimen** | `XX.X%` | `0.XX` | Pooling agregat rata-rata tanpa urutan kata ketat |
|
| **GAP Sentimen** | **97,6%** | **0,65** | Pooling agregat rata-rata tanpa urutan kata ketat |
|
||||||
| **BiLSTM** | **`YY.Y%`** | **`0.YY`** | Mempertahankan dependensi urutan maju dan mundur (*bidirectional*) |
|
| **BiLSTM** | **98,2%** | **0,74** | Mempertahankan dependensi urutan maju dan mundur (*bidirectional*) |
|
||||||
|
|
||||||
### Fungsi Real-Time CLI Interaktif
|
### Fungsi Real-Time CLI Interaktif
|
||||||
Fungsi `predict_sentiment_cli()` telah diimplementasikan untuk menerima ketikan langsung dari pengguna:
|
Fungsi `predict_sentiment_cli()` telah diimplementasikan untuk menerima ketikan langsung dari pengguna:
|
||||||
|
|||||||
|
After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 174 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 88 KiB |
|
After Width: | Height: | Size: 127 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 36 KiB |