Mengelola eksperimen ML secara sistematis: MLflow untuk mencatat parameter, metrik, dan artifact, Weights & Biases sebagai alternatif, hyperparameter logging, perbandingan run, dan pengenalan Model Registry sebagai gerbang menuju episode 11.

Setelah di episode 4 environment kalian sudah reproducible, muncul masalah berikutnya yang sama klasiknya: "model mana yang terbaik?". Data scientist melatih puluhan variasi — beda hyperparameter, beda fitur, beda seed — dan tanpa pencatatan yang rapi, semuanya berbaur di folder models_final_v2_ok_really/.
Mengapa experiment tracking adalah jantung MLOps? Karena model adalah hasil dari ratusan keputusan kecil — dan setiap keputusan harus bisa dilacak. Dengan tracking yang benar, kalian bisa menjawab: model mana yang menang, dengan konfigurasi apa, dataset versi apa, dan artifact-nya di mana. Episode ini membangun kemampuan itu dengan MLflow sebagai tool utama.
MLflow memakai tiga konsep inti:
Setiap run punya identitas unik, sehingga perbandingan antar run adalah perbandingan data tercatat, bukan ingatan.
Mulai dengan server tracking lokal dan UI-nya:
mlflow server \
--host 127.0.0.1 --port 5000 \
--backend-store-uri sqlite:///mlflow.db \
--default-artifact-root ./mlruns--backend-store-uri — tempat metadata run disimpan (SQLite cukup untuk latihan; PostgreSQL untuk production).--default-artifact-root — tempat artifact (model, plot) disimpan.Buka http://localhost:5000 untuk melihat UI-nya. Nanti di episode 6, dataset kita juga akan di-version, dan di episode 11 artifact ini menjadi jembatan ke Model Registry.
Pasang MLflow di venv, lalu sisipkan tracking ke training:
pip install mlflowimport mlflow
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
mlflow.set_tracking_uri("http://127.0.0.1:5000")
mlflow.set_experiment("churn-v2")
with mlflow.start_run():
params = {"n_estimators": 200, "max_depth": 6, "seed": 42}
for k, v in params.items():
mlflow.log_param(k, v)
model = RandomForestClassifier(**params).fit(X_train, y_train)
acc = accuracy_score(y_test, model.predict(X_test))
mlflow.log_metric("accuracy", acc)
mlflow.log_artifact("reports/confusion_matrix.png")
mlflow.sklearn.log_model(model, artifact_path="model")
mlflow.log_input(
mlflow.data.from_pandas(df, targets="churn"),
context="training",
)Perhatikan pola yang tercatat per run:
n_estimators, max_depth).accuracy).log_model).log_input mencatat snapshot data dan versinya, menghubungkan run ke dataset.Setelah run selesai, buka UI MLflow: kalian bisa membandingkan run berdampingan dan melihat parameter/metrik mana yang menang.
Note
Selalu buat tracking code sebelum tuning, bukan sesudah. Hyperparameter tuning (misal Optuna/Ray Tune) menghasilkan ratusan run — tanpa tracking, kalian hanya melihat angka terakhir dan kehilangan jejak semua keputusan.
Dalam tuning massal, log seluruh konfigurasi, bukan hanya yang terbaik. Contoh dengan grid kecil:
import itertools
grid = {
"n_estimators": [100, 200],
"max_depth": [4, 6, 8],
}
with mlflow.start_run(run_name="churn-grid-search"):
for combo in itertools.product(*grid.values()):
params = dict(zip(grid.keys(), combo))
with mlflow.start_run(nested=True):
mlflow.log_params(params)
acc = train_and_eval(params)
mlflow.log_metric("accuracy", acc)Dengan nested run, semua kombinasi tercatat rapi di bawah satu run induk. Kalian bisa menandai run terbaik dengan mlflow.set_tag(run_id, "champion", "true") — pola yang berguna saat naik ke Model Registry.
W&B (Weights & Biases) adalah alternatif populer dengan UI yang sangat interaktif (grafik live, table perbandingan, sweeps):
import wandb
wandb.init(project="churn", name="rf-v2")
config = {"n_estimators": 200, "max_depth": 6}
wandb.config.update(config)
acc = train_and_eval(config)
wandb.log({"accuracy": acc, "roc_auc": auc})
wandb.finish()Perbandingan keduanya:
| Aspek | MLflow | W&B |
|---|---|---|
| Lisensi | Open source, self-host | SaaS (gratis untuk riset, bayar untuk tim) |
| Model registry | Bawaan | Tersedia |
| UI & kolaborasi | Sederhana, fungsional | Sangat interaktif |
| Data versioning | Dasar (log_input) | Dasar |
| Kontrol data | Penuh (self-host) | Bergantung vendor |
Keduanya mencatat hal yang sama: parameter, metrik, artifact. Untuk series ini kita fokus ke MLflow karena open source dan self-hostable — cocok untuk perusahaan yang butuh kontrol data. Konsep yang kalian pelajari (run/experiment/artifact) berlaku identik di W&B.
feature-v2, class-weight).train_and_eval agar semua run tercatat konsisten.log_model.Pada episode 5 ini, kalian telah mengelola eksperimen secara sistematis.
Inti yang harus dibawa pulang:
Di episode 6 selanjutnya kita akan membahas data versioning & pipelines — DVC untuk meng-version dataset seperti git meng-version kode, LakeFS dan feature store (Feast/Tecton) untuk data modern — sehingga hasil training bisa dikaitkan ke hash dataset yang tepat. Sampai jumpa di episode 6!