Aplikasi web inference-only yang memprediksi tanaman paling cocok untuk suatu lahan berdasarkan parameter tanah dan lingkungan, serta menjelaskan mengapa menggunakan SHAP dan penjelasan berbahasa Indonesia (NLG).
Dibangun dengan Streamlit, XGBoost, dan SHAP.
Diberikan tujuh input tanah/lingkungan:
- N — Nitrogen
- P — Fosfor
- K — Kalium
- Suhu (°C)
- Kelembapan (%)
- pH
- Curah Hujan (mm)
aplikasi mengembalikan:
- Tanaman yang direkomendasikan beserta tingkat kepercayaan model.
- Penjelasan berbahasa Indonesia yang mendeskripsikan faktor-faktor pendorong keputusan.
- Grafik batang SHAP yang memvisualisasikan kontribusi setiap fitur (merah = positif, biru = negatif).
deciflora/
├── dataset/
│ └── Crop_recommendation.csv # data pelatihan mentah
├── model/
│ ├── xgb_model.json # model XGBoost terlatih
│ ├── scaler.pkl # StandardScaler yang sudah di-fit
│ └── label_encoder.pkl # LabelEncoder yang sudah di-fit
├── notebooks/
│ └── train.ipynb # notebook penelitian asli
├── src/
│ ├── __init__.py
│ ├── model.py # muat model + prediksi
│ ├── nlg.py # penjelasan berbahasa Indonesia
│ └── train_model.py # latih & simpan model (jalankan sekali)
├── app/
│ └── main.py # aplikasi Streamlit
├── pyproject.toml
├── uv.lock
└── README.md
-
Pemuatan model (
src/model.py)- Menggunakan
XGBClassifier.load_modelpadamodel/xgb_model.json. - Memuat
StandardScalerdanLabelEncoderyang sudah di-fit viajoblib.
- Menggunakan
-
Prediksi (
src/model.py)- Mengulangi preprocessing persis seperti di notebook:
- Urutan fitur → scaling dengan scaler → prediksi.
- Mengembalikan label tanaman dan probabilitas kelas.
- Mengulangi preprocessing persis seperti di notebook:
-
Eksplainabilitas (
app/main.py)- Membangun
shap.TreeExplainerdari model (di-cache). - Menghitung nilai SHAP untuk instance input.
- Memplot kontribusi untuk kelas yang diprediksi.
- Membangun
-
NLG (
src/nlg.py)- Menghasilkan teks penjelasan dalam Bahasa Indonesia:
- Kepercayaan tinggi (≥80%) → "sangat merekomendasikan".
- Mencantumkan faktor SHAP positif teratas (pendukung) dan negatif (peringatan) beserta nilai aktualnya.
- Menghasilkan teks penjelasan dalam Bahasa Indonesia:
- Python >= 3.12
- uv (disarankan) — proyek menggunakan
uv.lock
uv sync
source .venv/bin/activateAtau dengan pip:
pip install -e .Artefak terlatih sudah tersedia di model/, sehingga langkah ini bisa dilewati. Untuk menghasilkan ulang:
python src/train_model.pystreamlit run app/main.pyBuka URL yang ditampilkan (default: http://localhost:8501).
- Isi tujuh kolom parameter tanah/lingkungan.
- Klik Rekomendasikan Tanaman.
- Baca rekomendasi, penjelasan NLG, dan grafik SHAP.
| File | Keterangan |
|---|---|
model/xgb_model.json |
Classifier XGBoost terlatih (multi-kelas) |
model/scaler.pkl |
StandardScaler yang sudah di-fit |
model/label_encoder.pkl |
LabelEncoder (label tanaman) |
Catatan:
notebooks/train.ipynbtidak menyimpan model.src/train_model.pyadalah sumber artefak yang di-commit.
- Muat model terlatih —
src/model.py(load_model,predict_crop). - UI Streamlit —
app/main.pyform input + tampilan prediksi. - Integrasi SHAP — visualisasi
TreeExplainerdi UI. - Penjelasan NLG —
src/nlg.pyteks rekomendasi berbahasa Indonesia di UI.
Penggunaan kode untuk keperluan akademis dan non-komersial diperbolehkan dengan mencantumkan atribusi yang sesuai.
