Mengotomasi pembaruan model: strategi trigger retraining berbasis jadwal, threshold, dan event, feedback loops dengan label, serta zero-touch pipeline yang mempromosikan model baru tanpa intervensi manual beserta risikonya.

Setelah di episode 12 kalian bisa mendeteksi drift, muncul pertanyaan berikutnya: lalu apa? Model yang drift tidak bisa dibiarkan — tetapi model yang di-retrain setiap hari juga boros biaya GPU. Kuncinya adalah memicu retraining pada waktu yang tepat, dengan cara yang terotomasi dan terkontrol.
Mengapa retraining automation adalah puncak kematangan MLOps? Karena inilah yang disebut zero-touch pipeline — tren dominan 2026: data baru masuk → model baru dilatih → dievaluasi → dipromosikan — semua tanpa manusia yang mengklik tombol. Episode ini membahas kapan memicu retraining, bagaimana loop umpan balik bekerja, dan bagaimana melakukannya tanpa menembak kaki sendiri.
Retraining dijalankan berkala — mingguan, bulanan — tanpa melihat kondisi model. Paling sederhana, cocok jika data berubah pada ritme yang stabil.
0 2 * * 1 cd /opt/churn && dvc pull && python -m churn.trainRetraining dipicu peristiwa: drift score melewati ambang, atau akurasi live turun di bawah target. Hemat biaya — model hanya dilatih saat dibutuhkan.
from evidently.report import Report
from evidently.metric_preset import DataDriftPreset
def should_retrain(prod_df, threshold: float = 0.3) -> bool:
report = Report(metrics=[DataDriftPreset()])
report.run(reference_data=train_df, current_data=prod_df)
drift = report.as_dict()["data_drift"]["share_of_drifted_columns"]
return drift > thresholdRetraining dipicu oleh kedatangan data baru — file diletakkan di bucket, event dipublish ke Kafka, atau tabel produksi diperbarui. Paling cepat merespons perubahan, dan paling sulit dikendalikan biayanya.
File baru di S3 → Event (S3 notification) → Trigger pipeline retrainingPraktik terbaik: kombinasi. Contoh pola umum:
Retraining yang baik membutuhkan label baru — dan label sering tidak tersedia otomatis. Dua mekanisme utama:
def collect_training_data(window_days: int = 90):
"""Gabungkan prediksi lama dengan label yang sudah terkonfirmasi."""
predictions = load_predictions_from_db()
outcomes = load_outcomes_from_db()
df = predictions.merge(outcomes, on="customer_id")
return df[df["outcome_known_at"] >= today - timedelta(days=window_days)]Dengan loop ini, dataset training "segar" mengalir otomatis ke pipeline — tanpa manusia mengekspor CSV. Ini adalah jantung dari self-improving system.
Inilah arsitektur level 2 yang kita singgung di episode 2:
Setiap langkah terotomasi, tetapi gate evaluasi tetap menjadi penjaga. Model baru hanya dipromosikan jika mengalahkan atau menyamai champion (model produksi saat ini). Inilah bedanya zero-touch dengan "retraining buta".
Implementasi gatenya:
import mlflow
def evaluate_vs_champion(candidate_run_id: str, threshold_improve: float = 0.005):
client = mlflow.tracking.MlflowClient()
candidate = client.get_run(candidate_run_id).data.metrics["accuracy"]
champion_version = client.get_model_version_by_alias("churn-predictor", "champion")
champion = client.get_run(champion_version.run_id).data.metrics["accuracy"]
if candidate >= champion + threshold_improve:
client.set_registered_model_alias("churn-predictor", "champion", candidate_run_id)
return "PROMOTED"
return "KEPT_CHAMPION"Model baru wajib mengalahkan champion dengan margin tertentu sebelum menggantikannya. Margin (0.005) mencegah pergantian sia-sia akibat fluktuasi acak.
Caution
Zero-touch tanpa gate yang kuat adalah resep bencana: model jelek bisa menggantikan yang bagus hanya karena fluktuasi noise. Aturan wajib: model baru harus menang melawan champion dengan margin, diuji di data yang sama, dan semua keputusan tercatat di registry untuk audit.
Automasi penuh menimbulkan risiko yang harus dikelola:
| Risiko | Mitigasi |
|---|---|
| Model menggantikan dirinya sendiri berulang (feedback loop) | Gate margin + window cooldown |
| Data kotor merusak retraining | Validasi data di awal pipeline |
| Biaya GPU melonjak | Batas retraining per bulan (budget) |
| Regresi performa tak terdeteksi | Shadow monitoring sebelum promosi penuh |
| Label salah mengarahkan model | Sampling & review label berkala |
Salah satu pola paling penting adalah cooldown: jangan biarkan retraining otomatis berjalan lebih dari batas tertentu per periode, dan beri jeda setelah promosi. Model yang di-retrain minggu ini tidak perlu di-retrain lagi besok hanya karena drift kecil.
Pada episode 13 ini, kalian telah mengotomasi pembaruan model.
Inti yang harus dibawa pulang:
Di episode 14 selanjutnya kita akan membahas feature store in production — online vs offline store, point-in-time correctness, dan Feast sebagai implementasi, untuk menghilangkan training-serving skew. Sampai jumpa di episode 14!