Belajar ML Engineer - Model Evaluation & Metrics
Episode 7 of 28

Belajar ML Engineer - Model Evaluation & Metrics

Mengevaluasi model secara mendalam dan jujur: memilih metrik yang selaras dengan tujuan bisnis, menetapkan threshold yang optimal, memeriksa kalibrasi probabilitas, dan menerjemahkan angka teknis menjadi dampak bisnis yang bisa dipertanggungjawabkan

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

Pendahuluan

Setelah di episode 6 kita mencatat semua eksperimen, kini pertanyaan yang paling menentukan: model mana yang benar-benar bagus, dan bagaimana menilai "bagus" itu secara jujur? Angka accuracy 95% yang tampak mengesankan bisa menjadi tidak berguna sama sekali — misalnya saat fraud hanya 1% dari data dan model memprediksi "tidak fraud" untuk semua orang.

Evaluasi yang baik bukan tentang menghitung banyak metrik, melainkan tentang memilih metrik yang selaras dengan konsekuensi keputusan bisnis, menetapkan threshold yang tepat, dan memastikan angka probabilitas yang dikeluarkan model bisa dipercaya. Episode ini membangun evaluasi yang mendalam — bukan sekadar mencetak classification report.

Memilih Metrik yang Tepat

Classification: Akurasi Bisa Menipu

Untuk data tidak seimbang, akurasi adalah metrik paling menyesatkan. Metrik yang lebih informatif:

MetrikMenjawab PertanyaanCocok Saat
Precision"Kalau model bilang fraud, seberapa yakin?"Biaya false positive tinggi
Recall"Dari semua fraud, berapa yang tertangkap?"Biaya false negative tinggi
F1Trade-off precision & recallKeseimbangan keduanya
ROC-AUCPeringkat positif vs negatif secara globalMembandingkan model
Metrics di luar classification report
from sklearn.metrics import precision_recall_fscore_support
 
precision, recall, f1, _ = precision_recall_fscore_support(y_test, y_pred, average="binary")
print(f"precision={precision:.3f} recall={recall:.3f} f1={f1:.3f}")

Regression: Error Harus Proporsional dengan Dampak

Untuk prediksi nilai (harga, durasi, jumlah), pilih error yang sesuai:

  • MAE: mudah diinterpretasi, tapi merata-rata semua error.
  • RMSE: menghukum error besar lebih berat — cocok jika outlier sangat berbahaya.
  • MAPE / SMAPE: error relatif — cocok untuk skala nilai yang bervariasi.

Pilih berdasarkan apa yang "sakit" bagi bisnis saat error terjadi.

Thresholding: Dari Probabilitas ke Keputusan

Kebanyakan classifier menghasilkan probabilitas, dan kalian yang memilih threshold. Threshold default 0.5 sering bukan yang terbaik — apalagi untuk data tidak seimbang. Cara yang benar: pilih threshold berdasarkan trade-off biaya.

Menemukan threshold terbaik
from sklearn.metrics import precision_recall_curve
 
probs = model.predict_proba(X_val)[:, 1]
precision, recall, thresholds = precision_recall_curve(y_val, probs)
# cari threshold di mana precision & recall paling seimbang
best = thresholds[(precision[:-1] + recall[:-1]).argmax()]
print(f"threshold optimal: {best:.3f}")

Cara yang lebih disiplin adalah cost-based thresholding: hitung biaya rata-rata false positive vs false negative dari sisi bisnis, lalu pilih threshold yang meminimalkan biaya total.

Kalibrasi: Apakah Probabilitas Bisa Dipercaya?

Sebuah model dapat akurat dalam peringkat (AUC tinggi) tapi tidak terkalibrasi: saat model berkata "probabilitas 0.8", hanya 60% kasus yang benar-benar positif. Untuk keputusan yang bergantung pada probabilitas (misal skor risiko), kalibrasi penting.

Cek & perbaiki kalibrasi
from sklearn.calibration import CalibratedClassifierCV, calibration_curve
 
fraction_of_positives, mean_predicted = calibration_curve(
    y_val, probs, n_bins=10
)
# kalau kurva jauh dari diagonal, kalibrasi ulang:
calibrated = CalibratedClassifierCV(model, cv=5, method="isotonic")

Model yang terkalibrasi menghasilkan probabilitas yang bisa dipakai untuk perhitungan bisnis — misal ekspektasi kerugian, bukan hanya keputusan biner.

Business Metrics: Angka Teknis → Dampak Bisnis

Evaluasi terbaik berakhir dengan angka yang bisa dimengerti stakeholder. Terjemahkan metrik teknis menjadi dampak bisnis:

text
Fraud model:
- precision 0.85 → 85% alert yang dicek tim fraud adalah benar-benar fraud
- recall 0.70   → 70% fraud tertangkap; 30% lolos (potensi kerugian Rp X)
- threshold 0.6 → jumlah alert per hari = 1.200, tim bisa handle maksimal 1.500

Pertanyaan yang harus dijawab evaluasi: "berapa uang yang dihemat / berapa biaya yang dihindari / berapa pengguna yang tertolong?" — bukan sekadar "AUC naik 0.02".

Evaluasi Segmentasi dan Fairness

Model yang hebat secara rata-rata bisa gagal di segmen tertentu — kelompok umur tertentu, wilayah tertentu, atau perangkat tertentu. Evaluasi mendalam memecah metrik per segmen:

Evaluasi per segmen
for segment in df_test["region"].unique():
    mask = df_test["region"] == segment
    acc = (y_pred[mask] == y_test[mask]).mean()
    print(f"{segment}: accuracy {acc:.3f}")

Segmentasi mengungkap bias laten: performa buruk di satu segmen bisa menjadi masalah bisnis besar di segmen itu. Ini beririsan dengan fairness dan governance yang akan kita bahas di episode 19.

Important

Satu metrik untuk semua keputusan itu berbahaya. Tetapkan primary metric (untuk membandingkan model) plus guardrail metrics (misal performa segmen minoritas, latensi) yang tidak boleh turun. Model yang naik di primary tapi merusak guardrail harus ditolak.

Common Pitfalls

PitfallDampakPencegahan
Akurasi untuk data imbalanceModel yang tidak berguna terlihat bagusPrecision/recall/F1
Threshold default 0.5Trade-off tidak sesuai bisnisThreshold berbasis biaya
Probabilitas tanpa kalibrasiSkor risiko tidak bisa dipakaiCek & perbaiki kalibrasi
Hanya metrik rata-rataSegmen lemah tertutup rata-rataEvaluasi per segmen
Evaluasi tanpa konteks biayaStakeholder tidak bisa mengambil keputusanTerjemahkan ke business metric

Penutup

Pada episode 7 ini, kalian telah menguasai evaluasi yang mendalam:

  • Pilih metrik sesuai jenis masalah dan biaya keputusan — bukan sekadar akurasi.
  • Tentukan threshold berbasis trade-off biaya, bukan default 0.5.
  • Pastikan kalibrasi probabilitas sebelum dipakai untuk keputusan bisnis.
  • Terjemahkan metrik teknis menjadi dampak bisnis yang bisa dipertanggungjawabkan.
  • Pecah evaluasi per segmen untuk menangkap bias yang tersembunyi.

Di episode 8 selanjutnya kita akan membahas Versioning: Code, Data, dan Model — DVC untuk data, git untuk kode, registry untuk model, dan bagaimana ketiganya membentuk lineage yang membuat proyek ML benar-benar reproducible. Sampai jumpa di episode 8!

Belajar ML Engineer - Model Evaluation & Metrics | Belajar ML Engineer