# Rencana Implementasi: Peningkatan SILAPOR untuk Skripsi Klasifikasi TF-IDF & Naive Bayes

Rencana ini dibuat untuk meningkatkan sistem SILAPOR (Laravel + Python ML API) agar memenuhi standar akademis sidang skripsi dengan topik **Klasifikasi Aduan Masyarakat Kecamatan Wonosalam Berbasis TF-IDF dan Naive Bayes**.

---

## 🎯 Target Utama Peningkatan

1.  **Spesifikasi Wilayah (Desa di Kecamatan Wonosalam):** Menambahkan pilihan 9 desa untuk memperkuat konteks geografis wilayah Wonosalam.
2.  **Indonesian NLP Preprocessing Pipeline:** Menambahkan Case Folding, Cleansing, Tokenizing, Stopword Removal, dan Stemming Bahasa Indonesia menggunakan library `Sastrawi`.
3.  **Confidence Score (Probabilitas Naive Bayes):** Menampilkan skor tingkat kepercayaan algoritma saat mengklasifikasi aduan.
4.  **Dataset Latih yang Lebih Luas & Realistis:** Menambah dataset latih pada Python (`train_model.py`) menjadi lebih dari 100 baris data simulasi aduan di Kecamatan Wonosalam.
5.  **Dashboard Evaluasi Model & Diagnosa (Metrik Skripsi):** Menampilkan metrik performa model (Accuracy, Precision, Recall, F1-Score, dan Confusion Matrix) langsung di Admin Panel.
6.  **Kelengkapan Fitur Form Aduan:** Menambahkan kolom identitas pelapor, upload bukti foto, dan kolom tanggapan resmi dari petugas.

---

## 🛠️ Detail Perubahan yang Diusulkan

### 1. Database & Model Laravel (MySQL)

#### [NEW] [2026_05_27_000000_add_skripsi_fields_to_aduans_table.php](file:///d:/silapor-ml/database/migrations/2026_05_27_000000_add_skripsi_fields_to_aduans_table.php)
Membuat migrasi database untuk menambahkan kolom pelengkap:
*   `nama_pelapor` (string, nullable)
*   `nik` (string, nullable)
*   `desa` (string, nullable)
*   `foto` (string, nullable)
*   `tanggapan` (text, nullable)
*   `confidence_score` (float, nullable)

#### [MODIFY] [Aduan.php](file:///d:/silapor-ml/app/Models/Aduan.php)
Menambahkan field baru ke dalam array `$fillable` agar bisa disimpan secara massal.

---

### 2. Python ML API (`ml-api/`)

#### [NEW] [preprocessing.py](file:///d:/silapor-ml/ml-api/preprocessing.py)
Membuat utilitas preprocessing Bahasa Indonesia yang terstandarisasi:
*   Menggunakan regex untuk pembersihan (*cleansing*).
*   Menggunakan `Sastrawi.Stemmer` untuk melakukan *stemming* kata dasar bahasa Indonesia.
*   Menggunakan list stopwords bahasa Indonesia kustom/bawaan untuk membuang kata tidak bernilai bobot.

#### [MODIFY] [train_model.py](file:///d:/silapor-ml/ml-api/train_model.py)
*   Menggunakan `preprocessing.py` sebelum melakukan fitting TF-IDF & Naive Bayes.
*   Memperluas dataset latih dari 26 baris menjadi **120+ baris data aduan realistis** tentang Wonosalam (meliputi 9 desa dan kategori infrastruktur, kebersihan, administrasi, utilitas, keamanan, dan sosial).

#### [MODIFY] [app.py](file:///d:/silapor-ml/ml-api/app.py)
*   Menggunakan pipeline preprocessing saat menerima teks aduan baru melalui endpoint `/predict`.
*   Menggunakan `model_kategori.predict_proba()` untuk menghitung probabilitas (confidence score) kategori terpilih.
*   **[NEW ENDPOINT]** `/evaluate`: Melakukan kalkulasi performa model menggunakan `classification_report` dan `confusion_matrix`, mengembalikannya dalam bentuk JSON ke Laravel.

---

### 3. Halaman & Form Admin Laravel (Filament)

#### [MODIFY] [AduanForm.php](file:///d:/silapor-ml/app/Filament/Resources/AduanResource/Schemas/AduanForm.php)
Mengubah tata letak form aduan untuk menampilkan input baru:
*   `nama_pelapor` (Text) & `nik` (Text) di-group.
*   `desa` (Select) berisi daftar 9 desa Wonosalam.
*   `foto` (FileUpload) dengan folder penyimpanan `public/uploads`.
*   `confidence_score` (TextInput) dalam format persen dan disabled.
*   `tanggapan` (Textarea) untuk diisi admin ketika merespon aduan.

#### [MODIFY] [CreateAduan.php](file:///d:/silapor-ml/app/Filament/Resources/AduanResource/Pages/CreateAduan.php)
Menangkap `confidence_score` dari Flask API `/predict` dan menyimpannya ke record aduan.

#### [MODIFY] [AduansTable.php](file:///d:/silapor-ml/app/Filament/Resources/AduanResource/Tables/AduansTable.php)
*   Menampilkan kolom `desa` (wilayah aduan).
*   Menampilkan kolom `confidence_score` (akurasi Naive Bayes).
*   Menampilkan thumbnail `foto` aduan jika ada.

#### [NEW] [EvaluasiModel.php (Filament Page)](file:///d:/silapor-ml/app/Filament/Pages/EvaluasiModel.php)
Halaman admin baru yang mengambil data dari Flask API `/evaluate` dan menampilkan:
*   Akurasi Model ML keseluruhan.
*   Tabel Confusion Matrix yang interaktif dan mudah dipahami.
*   Tabel Precision, Recall, dan F1-Score per kategori.

#### [NEW] [evaluasi-model.blade.php](file:///d:/silapor-ml/resources/views/filament/pages/evaluasi-model.blade.php)
Tampilan Blade terintegrasi dengan gaya Tailwind/Filament untuk menampilkan metrik evaluasi model di atas.

---

## 🧪 Rencana Verifikasi

### 1. Pengujian Fungsional
*   Mencoba membuat aduan baru dengan mengisi field Desa, Foto Bukti, Nama, dan NIK.
*   Memastikan data terkirim ke Python ML API, diproses dengan preprocessing + stemming Sastrawi, dan diklasifikasikan dengan benar.
*   Memastikan `confidence_score` tersimpan di database dan tampil di tabel Filament.

### 2. Pengujian Halaman Evaluasi Model
*   Membuka halaman **Evaluasi Model** di panel admin.
*   Memastikan halaman berhasil melakukan request HTTP ke `http://127.0.0.1:5000/evaluate` dan menyajikan data metrik evaluasi (Confusion Matrix & Classification Report) secara visual.
