Belajar MLOps - Experiment Tracking
Episode 5 of 28

Belajar MLOps - Experiment Tracking

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.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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.

Konsep Dasar: Run, Experiment, Artifact

MLflow memakai tiga konsep inti:

  • Run — satu kali eksekusi training; menyimpan parameter, metrik, dan artifact.
  • Experiment — grup run yang berbagi tujuan yang sama (misal "feature engineering v2").
  • Artifact — file yang dihasilkan run: model, plot, dataset sample.

Setiap run punya identitas unik, sehingga perbandingan antar run adalah perbandingan data tercatat, bukan ingatan.

Menyiapkan MLflow Tracking Server

Mulai dengan server tracking lokal dan UI-nya:

Jalankan MLflow server
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:

Install MLflow
pip install mlflow
Training dengan MLflow tracking
import 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:

  • Parameter — input yang kalian atur (n_estimators, max_depth).
  • Metrik — hasil evaluasi (accuracy).
  • Artifact — visualisasi dan model itu sendiri (log_model).
  • Datalog_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.

Hyperparameter Logging

Dalam tuning massal, log seluruh konfigurasi, bukan hanya yang terbaik. Contoh dengan grid kecil:

Logging saat hyperparameter tuning
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.

Weights & Biases sebagai Alternatif

W&B (Weights & Biases) adalah alternatif populer dengan UI yang sangat interaktif (grafik live, table perbandingan, sweeps):

Tracking dengan W&B
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:

AspekMLflowW&B
LisensiOpen source, self-hostSaaS (gratis untuk riset, bayar untuk tim)
Model registryBawaanTersedia
UI & kolaborasiSederhana, fungsionalSangat interaktif
Data versioningDasar (log_input)Dasar
Kontrol dataPenuh (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.

Praktik Terbaik Experiment Tracking

  • Satu experiment per hipotesis, bukan per file — namai dengan jelas (feature-v2, class-weight).
  • Catat seed random — dua run dengan hyperparameter sama tapi seed beda bukan perbandingan yang adil.
  • Catat versi dataset & kode — kaitkan run ke commit git dan hash dataset (episode 6).
  • Otomatiskan tracking — bungkus dalam fungsi train_and_eval agar semua run tercatat konsisten.
  • Evaluasi off-line dulu, baru produksi — model terbaik di tracking belum tentu yang di-deploy; keputusan itu ada di registry (episode 11).

Common Pitfalls

  • Lupa mencatat seed / versi library → run tidak bisa dibandingkan secara adil.
  • Menaruh semua di satu run → sulit dibedakan; pecah per hipotesis.
  • Artifact tidak di-upload → model terbaik "hilang"; selalu log_model.
  • Tracking hanya untuk "model bagus" → catat semua, termasuk yang gagal; justru itu yang mencegah pengulangan kesalahan.

Penutup

Pada episode 5 ini, kalian telah mengelola eksperimen secara sistematis.

Inti yang harus dibawa pulang:

  • MLflow mencatat parameter, metrik, artifact, dan data per run dalam experiment.
  • Selalu tracking sebelum tuning; log semua kombinasi, bukan hanya yang terbaik.
  • W&B adalah alternatif SaaS yang valid; konsepnya sama.
  • Run terbaik bisa ditandai sebagai champion — gerbang menuju Model Registry di episode 11.

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!

Belajar MLOps - Experiment Tracking | Belajar MLOps