Proyek ini mengimplementasikan model klasifikasi untuk memprediksi tingkat distraksi mahasiswa (Rendah, Sedang, Tinggi) berdasarkan pola penggunaan gadget mereka. Sistem dilengkapi dengan:
- Experiment Tracking menggunakan MLflow
- Model Monitoring dengan Evidently AI untuk deteksi data drift
- Dashboard Monitoring real-time dengan Streamlit menggunakan PSI (Population Stability Index)
- Prediction Logging untuk tracking prediksi production
Model menerima 8 input:
- Mahasiswa Angkatan - Tahun angkatan mahasiswa
- Frekuensi Penggunaan Gadget (Skala 1-8) - Seberapa sering menggunakan gadget setiap hari
- Durasi Penggunaan (Skala 1-8) - Berapa lama menggunakan gadget di luar jam kuliah
- Tujuan Penggunaan (Skala 1-8) - Untuk apa gadget digunakan
- Kesulitan Kontrol Waktu (Skala 1-8) - Seberapa sulit mengontrol waktu penggunaan
- Persepsi Pengaruh Akademik (Skala 1-8) - Bagaimana persepsi pengaruh gadget terhadap akademik
- Kemampuan Mengatur Waktu (Skala 1-8) - Kemampuan mengatur waktu antara gadget dan akademik
- Upaya Mengurangi Intensitas (Skala 1-8) - Upaya untuk mengurangi penggunaan gadget
- Low (Rendah): Skor distraksi 1-3
- Medium (Sedang): Skor distraksi 4-6
- High (Tinggi): Skor distraksi 7-10
.
βββ data/
β βββ dataset MLOps.csv # Dataset training (baseline)
βββ src/
β βββ preprocess.py # Preprocessing dan split data
β βββ train.py # Training model dengan MLflow
β βββ predict.py # Fungsi load model dan prediksi
β βββ utils.py # Logging prediksi ke CSV
βββ monitoring/
β βββ monitor.py # Data drift detection dengan Evidently
β βββ dashboard/
β β βββ app.py # Streamlit dashboard (PSI monitoring)
β βββ logs/
β β βββ prediction_logs.csv # Log prediksi production
β βββ reports/
β βββ drift.json # Laporan drift dari Evidently
βββ models/
β βββ distraction_model/ # Model tersimpan (MLflow format)
βββ requirements.txt # Dependencies Python
βββ conda.yaml # Conda environment
βββ python_env.yaml # Python environment config
βββ run_api.bat # Script untuk menjalankan API
βββ run_dashboard.bat # Script untuk menjalankan dashboard
git clone <repository-url>
cd <project-directory>Menggunakan Conda:
conda env create -f conda.yaml
conda activate mlflow-envAtau menggunakan pip:
pip install -r requirements.txtUntuk monitoring dan dashboard:
pip install evidently streamlit matplotlibpython --version # Should be 3.11.5
pip list | grep mlflow
pip list | grep streamlitJalankan training dengan MLflow tracking:
python src/train.pyFitur Training:
- Menggunakan Random Forest Classifier
- Automatic logging metrics (accuracy) dan parameters ke MLflow
- Model tersimpan otomatis di
models/distraction_model/ - Experiment name:
distraction-classification - Hyperparameter yang digunakan:
n_estimators=200,max_depth=10,random_state=42
Melihat Experiment di MLflow UI:
mlflow uiBuka browser: http://localhost:5000
Gunakan model untuk prediksi data baru:
from src.predict import load_model, predict
from src.utils import log_prediction
# Load model
model = load_model("models/distraction_model")
# Input data baru
input_data = {
"Mahasiswa Angkatan": 2021,
"Seberapa sering (frekuensi) penggunaan gadget Kamu setiap hari?": 7,
"Berapa durasi penggunaan gadget Kamu, di luar jam perkuliahan?": 6,
"Bagaimana tujuan utama penggunaan gadget Kamu?": 5,
"Seberapa sulit Kamu dalam mengontrol waktu penggunaan gadget mu?": 7,
"Bagaimana presepsi Kamu terhadap pengaruh penggunaan gadget pada kondisi Akademik ?": 6,
"Bagaimana kemampuan Kamu dalam mengatur waktu antara menggunakan gadget dengan aktivitas akademik lain ?": 4,
"Bagaimana upaya Kamu mengurangi intensitas penggunaan gadget?": 3
}
# Prediksi
result = predict(model, input_data)
print(f"Tingkat Distraksi: {result}")
# Log prediksi (PENTING untuk monitoring)
log_prediction(input_data, result)Catatan: Setiap prediksi harus di-log menggunakan log_prediction() agar data masuk ke prediction_logs.csv untuk monitoring drift.
Untuk melakukan hyperparameter tuning, edit parameter di file src/train.py
**Workflow Tuning:**
```bash
# Run 1 - baseline
python src/train.py
# Edit params di train.py (misal: n_estimators=100, max_depth=5)
# Run 2
python src/train.py
# Edit params lagi (misal: n_estimators=300, max_depth=15)
# Run 3
python src/train.py
Bandingkan hasil di MLflow UI (mlflow ui) untuk memilih kombinasi hyperparameter terbaik berdasarkan accuracy.
Jalankan monitoring untuk mendeteksi data drift menggunakan Evidently AI:
python monitoring/monitor.pyProses Monitoring:
- Membandingkan baseline data (
data/dataset MLOps.csv) dengan production data (monitoring/logs/prediction_logs.csv) - Mendeteksi drift menggunakan Evidently AI DataDriftMetric
- Hasil disimpan di:
monitoring/reports/drift.json
Catatan: Pastikan sudah ada data prediksi di prediction_logs.csv sebelum menjalankan monitoring.
Jalankan dashboard Streamlit untuk monitoring visual:
Windows:
run_dashboard.batLinux/Mac:
streamlit run monitoring/dashboard/app.pyDashboard akan terbuka di: http://localhost:8501
Fitur Dashboard:
- π Visualisasi Data Produksi Terbaru - 10 prediksi terakhir
- π PSI (Population Stability Index) per Fitur - Mengukur pergeseran distribusi data
- π¦ Status Drift Otomatis:
- π’ Stabil (PSI < 0.1) - Tidak ada drift
- π‘ Warning (0.1 β€ PSI < 0.25) - Drift ringan, monitor lebih ketat
- π΄ Drift Terdeteksi (PSI β₯ 0.25) - Pertimbangkan retraining
- π Histogram Distribusi - Perbandingan baseline vs production per fitur
Cara Kerja Dashboard:
- Dashboard membaca data dari
data/dataset MLOps.csv(baseline) danmonitoring/logs/prediction_logs.csv(production) - Menghitung PSI untuk setiap fitur secara real-time
- Menampilkan visualisasi distribusi untuk analisis drift
1. TRAINING (Satu kali / Periodic)
ββ> python src/train.py
ββ> Model disimpan di models/distraction_model/
ββ> Track experiment di MLflow
2. DEPLOYMENT & PREDICTION (Continuous)
ββ> Load model: load_model()
ββ> Terima input baru (dari API/form/etc)
ββ> Prediksi: predict(model, input_data)
ββ> Log prediksi: log_prediction() β prediction_logs.csv
3. MONITORING (Berkala: Harian/Mingguan)
A. Evidently Drift Detection:
ββ> python monitoring/monitor.py
ββ> Review drift.json
B. Dashboard Visual Monitoring:
ββ> streamlit run monitoring/dashboard/app.py
ββ> Monitor PSI per fitur
ββ> Cek status drift (hijau/kuning/merah)
4. RETRAINING (Jika Drift Terdeteksi)
ββ> Jika PSI β₯ 0.25 atau drift.json menunjukkan drift
ββ> Gabungkan data baseline + production
ββ> python src/train.py (dengan data gabungan)
ββ> Deploy model baru
MLflow otomatis mencatat setiap training run:
Yang di-track:
- β Parameters: n_estimators, max_depth, random_state
- β Metrics: accuracy
- β Model: Disimpan dalam MLflow format
- β Metadata: Timestamp, duration, status
Cara Melihat Experiments:
mlflow ui --port 5000Buka browser ke http://localhost:5000 untuk:
- Compare runs side-by-side
- Visualisasi metrics
- Download model artifacts
- Track experiment history
File monitoring/monitor.py menggunakan Evidently untuk deteksi drift statistik.
Cara Kerja:
- Load baseline data (training dataset)
- Load production data (prediction logs)
- Hitung drift menggunakan DataDriftMetric
- Generate JSON report
Interpretasi Drift Report (drift.json):
drift_detected = true: Ada perubahan distribusi signifikandrift_score: Score per fitur (0-1, semakin tinggi semakin besar drift)drift_by_columns: Detail drift per fitur
File monitoring/dashboard/app.py menggunakan PSI (Population Stability Index) untuk monitoring visual.
PSI (Population Stability Index):
- Mengukur pergeseran distribusi data antara baseline dan production
- Formula: PSI = Ξ£ (% expected - % actual) Γ ln(% expected / % actual)
Interpretasi PSI:
- PSI < 0.1: π’ Tidak ada drift signifikan (populasi stabil)
- 0.1 β€ PSI < 0.25: π‘ Drift moderat (monitor lebih ketat)
- PSI β₯ 0.25: π΄ Drift signifikan (retraining direkomendasikan)
Fitur Dashboard:
- Tabel PSI per fitur dengan status warna
- Histogram distribusi baseline vs production
- Data produksi terbaru (10 rows terakhir)
- Pilih fitur untuk visualisasi detail
Untuk melakukan hyperparameter tuning, edit parameter di file src/train.py:
params = {
"n_estimators": 200, # Coba: 100, 200, 300, 500
"max_depth": 10, # Coba: 5, 10, 15, None
"min_samples_split": 2, # Tambahkan: 2, 5, 10
"min_samples_leaf": 1, # Tambahkan: 1, 2, 4
"random_state": 42
}Workflow Tuning:
# Experiment 1
python src/train.py
# Edit params
# Experiment 2
python src/train.py
# Edit params
# Experiment 3
python src/train.pyBandingkan hasil di MLflow UI untuk memilih model terbaik.
mlflow==3.7.0- Experiment tracking & model registryscikit-learn==1.6.1- Machine learning frameworkpandas==2.2.3- Data manipulationnumpy==1.25.2- Numerical computing
evidently- Statistical drift detectionstreamlit- Interactive dashboardmatplotlib- Visualisasi
cloudpickle==3.1.2- Model serializationpsutil==5.9.5- System monitoringscipy==1.15.2- Scientific computing
Install Monitoring Dependencies:
pip install evidently streamlit matplotlibpip install evidently streamlit matplotlibEdit path di monitoring/dashboard/app.py:
baseline_path = "data/dataset MLOps.csv" # Sesuaikan path
production_path = "monitoring/logs/prediction_logs.csv"mlflow ui --host 0.0.0.0 --port 5000- Pastikan sudah ada
monitoring/logs/prediction_logs.csv - Jalankan beberapa prediksi dengan
log_prediction()terlebih dahulu
- Jalankan prediksi minimal 5-10 kali
- Pastikan setiap prediksi di-log dengan
log_prediction()
# Pastikan model sudah di-train
ls models/distraction_model/
# Jika kosong, jalankan:
python src/train.py- Pastikan
data/dataset MLOps.csvmenggunakan separator;(semicolon) - Cek nama kolom sesuai dengan yang ada di
preprocess.py
- Pastikan kolom production log
- Sesilia Putri Subandi (122450012)
- Andre Hadiman Rotua Parhusip (122450108)
- Syalaisha Andina Putriansyah (122450121)
- Anam
Catatan: Proyek ini dikembangkan untuk memenuhi Tugas Besar Mata Kuliah MLOps.