# ๐Ÿ“Š Aduan Classification Model (IndoBERT) Model ini dilatih untuk **klasifikasi teks aduan masyarakat** dalam Bahasa Indonesia menggunakan **IndoBERT (indobenchmark/indobert-base-p1)**. Model dapat mengelompokkan aduan ke dalam 4 kategori: - **DARURAT** โ†’ Situasi darurat (kebakaran, kecelakaan, bencana) - **PRIORITAS** โ†’ Perlu penanganan cepat (jalan rusak, kebersihan, infrastruktur) - **UMUM** โ†’ Informasi / pertanyaan umum - **LAINNYA** โ†’ Aduan lain yang tidak termasuk kategori di atas --- ## ๐Ÿ“‚ Files - `model.safetensors` โ†’ model terlatih (498MB) - `aduan_model.pt` โ†’ backup format pickle - `config.json`, `tokenizer.json`, `vocab.txt` โ†’ konfigurasi dan tokenizer - `special_tokens_map.json`, `tokenizer_config.json` โ†’ mapping tokenizer --- ## ๐Ÿ“Š Dataset & Training - **Total data (raw)**: 3,373 - Darurat: 900 - Prioritas: 875 - Umum: 880 - Lainnya: 718 - **Augmentasi** โ†’ 3,600 (balance 900 per kelas) - **Split** โ†’ 80% Train (2880) | 20% Validation (720) - **Base model** โ†’ `indobenchmark/indobert-base-p1` - **Device training** โ†’ NVIDIA RTX 3050 Laptop GPU (CUDA) --- ## ๐Ÿ“ˆ Hasil Evaluasi - **Best Epoch** โ†’ 3 - **Validation Accuracy** โ†’ **93.89%** - **Macro F1-score** โ†’ **0.9389** ### ๐Ÿ“‘ Classification Report | Label | Precision | Recall | F1-score | |------------|-----------|--------|----------| | Darurat | 0.9435 | 0.9278 | 0.9356 | | Prioritas | 0.9257 | 0.9000 | 0.9127 | | Umum | 0.9026 | 0.9778 | 0.9387 | | Lainnya | 0.9884 | 0.9500 | 0.9688 | | **Macro Avg** | 0.9401 | 0.9389 | 0.9389 | ### ๐Ÿ”ข Confusion Matrix ``` [[167 10 3 0] # Darurat [ 6 162 11 1] # Prioritas [ 1 2 176 1] # Umum [ 3 1 5 171]] # Lainnya ```` --- ## ๐Ÿงช Contoh Prediksi ### Single Input ```python from transformers import AutoTokenizer, AutoModelForSequenceClassification import torch model_name = "Zulkifli1409/aduan-model" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained(model_name) text = "Ada kebakaran besar di jalan sudirman, tolong kirim pemadam!" inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True) outputs = model(**inputs) probs = torch.nn.functional.softmax(outputs.logits, dim=1) pred_idx = torch.argmax(probs).item() labels = ["DARURAT", "PRIORITAS", "UMUM", "LAINNYA"] print("Prediksi:", labels[pred_idx]) print("Probabilitas:", probs.tolist()) ```` ### Output: ``` Prediksi: DARURAT Probabilitas: [[0.9823, 0.0145, 0.0021, 0.0011]] ``` --- ## ๐Ÿ“ฆ Advanced Prediction Tests | Teks Aduan | Prediksi | Confidence | | ----------------------------------------- | --------- | ---------- | | ada kebakaran besar di pasar tolong cepat | DARURAT | 60.62% | | jalan berlubang perlu diperbaiki | PRIORITAS | 78.47% | | mohon pencerahan tentang program desa | UMUM | 72.09% | | ada orang kecelakaan parah butuh ambulans | DARURAT | 74.29% | | sampah menumpuk di jalan | PRIORITAS | 71.17% | | banjir tinggi merendam rumah warga | DARURAT | 58.01% | --- ## ๐Ÿš€ Deployment Model ini juga tersedia dalam bentuk API di Railway: ``` Base URL: https://api-klasifikasi-aduan.up.railway.app ``` Contoh request: ```bash curl -X POST https://api-klasifikasi-aduan.up.railway.app/predict \ -H "Content-Type: application/json" \ -d '{"text": "Ada kebakaran di pasar"}' ``` Response: ```json { "label": "DARURAT", "confidence": 0.9823, "all_scores": { "DARURAT": 0.9823, "PRIORITAS": 0.0145, "UMUM": 0.0021, "LAINNYA": 0.0011 } } ``` --- ## ๐Ÿ“ง Kontak Dikembangkan oleh **Zulkifli1409** Jika ada pertanyaan atau saran, silakan buka *issue* atau hubungi via [Hugging Face profile](https://huggingface.co/Zulkifli1409). --- **ยฉ 2025 Klasifikasi Aduan Model**