Mengelola eksperimen model secara reproduktif: mencatat parameter, metrik, dan artefak setiap percobaan dengan MLflow, membangun model registry untuk promosi model, dan perbandingan dengan Weights & Biases

Setelah di episode 11 kita mengevaluasi model secara menyeluruh, pada episode ini kita menjawab masalah yang muncul segera setelah eksperimen mulai banyak: "model mana yang paling baik, dan dengan setting apa?". Tanpa experiment tracking, jawabannya bergantung pada ingatan dan file notebook yang tak terhitung jumlahnya — model_final_v2_FIXED_ok.ipynb adalah lelucon yang terlalu nyata di industri.
Experiment tracking adalah praktik mencatat parameter, kode, dataset, dan metrik setiap eksperimen secara sistematis. Mengapa wajib? Karena (1) reproducibility — eksperimen bisa diulang persis oleh siapa pun (termasuk kalian enam bulan kemudian); (2) perbandingan yang jujur — semua eksperimen tercatat dengan konteks yang sama; (3) model registry — dasar untuk memilih model ke produksi. Ini adalah fondasi MLOps yang akan dibangun di episode 24.
Bayangkan kalian melatih lima model minggu ini:
Notebook: model_v1.ipynb → acc 0.82 (feature set A, n_est=100)
Notebook: model_v2.ipynb → acc 0.83 (feature set B, n_est=200)
Notebook: model_final.ipynb → acc 0.84 (feature set A?? B??)Bulan depan kalian tak ingat: fitur mana yang dipakai model_final? bagaimana scaling-nya? dataset versi apa? Tanpa tracking, semua pertanyaan ini tidak terjawab — dan model tidak bisa direproduksi. Di industri, pertanyaan ini muncul di audit (episode 20) dan saat debugging produksi.
MLflow adalah tool open source paling populer untuk tracking. Konsep intinya:
Run (satu eksperimen)
├── parameters → nilai input (n_estimators, learning_rate, ...)
├── metrics → hasil (accuracy, AUC, precision, ...)
├── artifacts → file (model, plot, dataset info)
└── metadata → waktu, user, kode, git commitMulai dengan menginstall dan menyiapkan tracking:
pip install mlflow
mlflow ui --port 5000Buka http://localhost:5000 — di sinilah semua eksperimen akan terlihat.
Sekarang kita track dua eksperimen klasifikasi churn dengan parameter berbeda:
import mlflow
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, roc_auc_score
df = pd.read_csv("telco_churn.csv")
X = df.drop(columns=["churn"])
y = df["churn"]
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
mlflow.set_experiment("churn-classification")
for n_est, depth in [(100, 5), (300, 10)]:
with mlflow.start_run():
mlflow.log_param("n_estimators", n_est)
mlflow.log_param("max_depth", depth)
model = RandomForestClassifier(
n_estimators=n_est, max_depth=depth, random_state=42
).fit(X_train, y_train)
acc = accuracy_score(y_test, model.predict(X_test))
auc = roc_auc_score(y_test, model.predict_proba(X_test)[:, 1])
mlflow.log_metric("accuracy", acc)
mlflow.log_metric("auc", auc)
mlflow.log_artifact("telco_churn.csv")
print("selesai — buka mlflow ui untuk membandingkan")Setiap mlflow.start_run() membuat satu entri dengan parameter, metrik, dan artefak. UI MLflow lalu memungkinkan kalian membandingkan dua run secara visual dan mengurutkan berdasarkan metrik. Inilah pengganti "file notebook final" — satu sumber kebenaran.
Reproducibility sejati butuh lebih dari angka:
with mlflow.start_run():
mlflow.log_param("dataset_version", "v2026.06")
mlflow.log_param("feature_set", "rfm + usage")
mlflow.log_param("model_class", "RandomForestClassifier")
mlflow.log_metric("train_accuracy", ...)
mlflow.log_metric("test_accuracy", ...)
mlflow.log_metric("feature_count", 21)
mlflow.log_artifact("feature_importance.png")
mlflow.log_artifact("confusion_matrix.png")Menyimpan versi dataset dan daftar fitur adalah kebiasaan yang menyelamatkan kalian berbulan-bulan kemudian saat ada pertanyaan "model ini pakai fitur apa?".
Tip
Untuk eksperimen yang lebih otomatis, catat juga hash git commit dan versi library (pip freeze) di dalam run. Dengan begitu, run bisa direproduksi byte-per-byte — inilah standar reproducibility yang diminta di episode 20 (governance) dan 24 (production).
Experiment tracking menjawab "model mana yang terbaik"; model registry menjawab "model mana yang resmi di produksi". MLflow menyimpan model berstatus:
with mlflow.start_run() as run:
mlflow.sklearn.log_model(model, artifact_path="model")
mlflow.register_model(
f"runs:/{run.info.run_id}/model",
"churn-prod-model",
)Setelah terdaftar, kalian bisa memberi status lifecycle (Staging → Production → Archived) dan versi. Alur promosi model menjadi eksplisit dan terdokumentasi — kolaborasi dengan ML engineer di episode 24 akan berjalan di atas mekanisme ini.
Weights & Biases (W&B) adalah alternatif populer dengan UI yang sangat ramah dan kemampuan tracking yang dalam. Perbandingan singkat:
| Aspek | MLflow | Weights & Biases |
|---|---|---|
| Model | Open source, self-host | Hosted (cloud), SaaS |
| UI | Ringan, functional | Sangat visual & interaktif |
| Integrasi | scikit-learn, PyTorch, XGBoost | PyTorch & LLM sangat kuat |
| Registry | Ada | Ada |
| Cocok untuk | Tim yang mau self-host, audit | Tim yang mau pengalaman visual |
import wandb
wandb.init(project="churn-classification")
wandb.config.n_estimators = 300
wandb.log({"accuracy": acc, "auc": auc})Prinsipnya identik: parameter, metrik, artefak, dan perbandingan — hanya mediumnya yang berbeda. Kalian cukup menguasai satu dengan baik, lalu bisa pindah ke yang lain dalam hitungan jam.
| Pitfall | Dampak | Solusi |
|---|---|---|
| Tidak mencatat parameter/artefak | Run tidak bisa dibandingkan | Catat semua input & output |
| Random seed tidak dicatat | Hasil tidak bisa diulang | log_param("random_state", ...) |
| Mengganti kode tanpa tracking | Run tak bermakna | Satu run per konfigurasi penuh |
| Hanya metrik, tanpa konteks | Sulit diaudit | Dataset version, feature list, git hash |
| Lupa registry sebelum produksi | Model produksi tak jelas | Register & beri status |
Inti yang harus dibawa pulang:
mlflow ui untuk perbandingan run.Di episode 13 selanjutnya kita masuk ke deep learning dasar dengan PyTorch — neural network, training loop, dan pemanfaatan GPU — untuk membuka jalan ke NLP dan model modern. Sampai jumpa di episode 13!