preacher19/web-risk-analyzer
๐ก๏ธ Web Risk & Content Analyzer
Web Risk & Content Analyzer adalah sistem berbasis Python dan Machine Learning yang dirancang secara profesional untuk menganalisis tingkat risiko materi promosi, komentar, iklan, atau konten halaman web berbahasa Indonesia. Sistem ini mengidentifikasi elemen promosi tidak terverifikasi atau kategori konten berisiko tinggi.
Proyek ini menggabungkan teknik Natural Language Processing (NLP), klasifikasi hibrida (Kombinasi analisis indikator bahasa sensitif dengan representasi statistik TF-IDF), dan algoritma Logistic Regression yang diregularisasi untuk mencapai deteksi tingkat risiko yang cepat, ringan, dan akurat.
๐ Struktur Proyek
Berikut adalah struktur berkas utama di dalam repositori:
- ๐ [scraping/](file:///D:/project/project-anti-judol/scraping): Direktori mesin pencari dan pengumpul data.
- scraping.py: Skrip untuk mencari kata kunci judol di mesin pencari Bing dan mengekstrak teks konten halaman web.
- ๐ [results.csv](file:///D:/project/project-anti-judol/results.csv): Kumpulan data hasil scraping pertama.
- ๐ [more_results.csv](file:///D:/project/project-anti-judol/more_results.csv): Kumpulan data hasil scraping baru.
- ๐ [prepare_manual_correction.py](file:///D:/project/project-anti-judol/prepare_manual_correction.py): Utilitas pembantu untuk menggabungkan data, melakukan pelabelan otomatis awal berdasarkan heuristik, dan mengekspornya ke format spreadsheet untuk verifikasi manual.
- ๐ [judol-detection-optimal.ipynb](file:///D:/project/project-anti-judol/judol-detection-optimal.ipynb): Notebook Jupyter utama berisi pipeline pemrosesan data, augmentasi data (penyeimbangan kelas), pelatihan model Logistic Regression dengan validasi silang (cross-validation), evaluasi test set, serta penyimpanan model.
- ๐ [test_new_samples.py](file:///D:/project/project-anti-judol/test_new_samples.py): Skrip pengujian CLI mandiri untuk memuat model yang telah disimpan dan mengklasifikasikan sekumpulan sampel kalimat baru.
- ๐ [requirements.txt](file:///D:/project/project-anti-judol/requirements.txt): Kumpulan library eksternal yang dibutuhkan oleh proyek ini.
๐ ๏ธ Langkah Instalasi & Persiapan
- Buat Virtual Environment (Opsional namun direkomendasikan):
python -m venv .venv- Aktifkan Virtual Environment:
- Di Windows (Command Prompt):
.venv\Scripts\activate.bat- Di Windows (PowerShell):
.venv\Scripts\Activate.ps1- Pasang Dependensi:
pip install -r requirements.txt๐ Alur Kerja Sistem (Workflow)
Proyek ini memiliki alur kerja end-to-end yang terstruktur untuk mengumpulkan data, menyiapkan koreksi, melatih model, dan menguji prediksi.
graph TD
A[Scraping Data: scraping.py] --> B[Ekstraksi Teks ke CSV]
B --> C[Persiapan Koreksi: prepare_manual_correction.py]
C --> D[Data Gabungan & Deduplikasi]
D --> E[Notebook Pelatihan: judol-detection-optimal.ipynb]
E --> F[Augmentasi & Penyeimbangan Kelas]
F --> G[Pelatihan Model & Evaluasi]
G --> H[Simpan Model .pkl]
H --> I[Pengujian CLI: test_new_samples.py]1. Tahap Pengumpulan Data
Jalankan skrip scraping untuk mengumpulkan data mentah halaman web berdasarkan kata kunci judi populer di Indonesia:
python scraping/scraping.pySkrip ini akan mencari kata kunci di Bing, mengunjungi halaman web, mengekstrak konten judul dan paragraf, lalu menyimpannya ke [more_results.csv](file:///D:/project/project-anti-judol/more_results.csv).
2. Tahap Pembersihan & Koreksi Awal
Gabungkan dataset dan terapkan heuristik otomatis untuk menebak label awal (1 = Judi, 0 = Aman):
python prepare_manual_correction.pySkrip ini akan memuat [results.csv](file:///D:/project/project-anti-judol/results.csv) dan [more_results.csv](file:///D:/project/project-anti-judol/more_results.csv), menggabungkannya, melakukan deduplikasi, menulis berkas baru bernama `data_untuk_koreksi_manual.csv` yang siap Anda buka di Excel untuk diperiksa labelnya.
3. Pelatihan Model & Evaluasi
Buka Jupyter Notebook [judol-detection-optimal.ipynb](file:///D:/project/project-anti-judol/judol-detection-optimal.ipynb) untuk melatih model. Seluruh alur latih sudah terotomatisasi secara komprehensif:
- [RobustDataProcessor](file:///D:/project/project-anti-judol/judol-detection-optimal.ipynb#L61): Membaca data, mendeteksi label berbasis pola kata kunci yang ditingkatkan, menyaring teks pendek (< 50 karakter), dan memperluas sampel dengan data augmentasi sintetis (slang judi/normal) hingga seimbang masing-masing kelas.
- [SimpleFeatureExtractor](file:///D:/project/project-anti-judol/judol-detection-optimal.ipynb#L280): Mengekstrak fitur TF-IDF (1-gram & 2-gram) sebanyak 1000 fitur teratas digabung dengan 6 fitur manual penting (skor kata kunci, panjang teks, kehadiran pola "rtp", pola "%", kombinasi "slot"+"gacor", dan kombinasi "depo"+"wd").
- [RegularizedGamblingDetector](file:///D:/project/project-anti-judol/judol-detection-optimal.ipynb#L355): Melatih Logistic Regression dengan regularisasi moderate ($C=1.0$) dan pembobotan kelas seimbang, melakukan 3-Fold Stratified Cross-Validation, dan menyimpan model yang telah dilatih ke disk:
robust_gambling_detection_model_model.pkl(Model klasifikasi utama)robust_gambling_detection_model_extractor.pkl(Fitted vectorizer TF-IDF)robust_gambling_detection_model_scaler.pkl(Normalizer skala fitur)
4. Pengujian Model Baru via CLI
Setelah model disimpan, Anda dapat menguji performanya pada kalimat-kalimat baru yang diketik langsung atau dari daftar pengujian menggunakan skrip CLI:
python test_new_samples.py๐ Metrik Performa Evaluasi Terbaru
Evaluasi dilakukan pada Test Set (20% porsi data uji dari total 456 baris setelah deduplikasi):
- Akurasi Akhir: 95.65%
- F1-Score (Weighted): 95.65%
- Rata-rata 3-Fold Cross Validation F1-Score: 92.02%
Laporan Klasifikasi (Classification Report)
- Kelas 0 (Aman): Precision 0.95 / Recall 0.95 / F1 0.95 (Total 43 sampel)
- Kelas 1 (Judi): Precision 0.96 / Recall 0.96 / F1 0.96 (Total 49 sampel)
Confusion Matrix
- True Negative (TN): 41 sampel normal diprediksi benar sebagai Aman.
- False Positive (FP): 2 sampel normal salah diprediksi sebagai Judi.
- False Negative (FN): 2 sampel judi salah diprediksi sebagai Aman.
- True Positive (TP): 47 sampel judi diprediksi benar sebagai Judi.
๐งช Contoh Prediksi Out-Of-Distribution
Berikut adalah beberapa contoh kalimat uji yang diuji secara mandiri:
"info mazzeh, pola petir merah lagi bagus malam ini. depo 50 bonus 50."โก๏ธ ๐ฐ JUDOL (78.8% Confidence)"nyari receh bareng kakek zeus yuk, link di bio jangan lupa pake vpn"โก๏ธ ๐ฐ JUDOL (85.9% Confidence)"Top up diamond Mobile Legends murah aman terpercaya via dana gopay ovo"โก๏ธ โ AMAN (88.4% Confidence)"Cara mudah investasi reksadana pasar uang untuk mahasiswa pemula"โก๏ธ โ AMAN (97.5% Confidence)
