Lima chapter sebelumnya memperkenalkan satu per satu alat ukur: akurasi, precision, recall, F1, AUC, balanced accuracy. Alat yang banyak justru menimbulkan pertanyaan baru: mana yang harus dipakai untuk masalah Anda? Jawabannya tidak berada di dalam kode — jawabannya berada di tabel biaya bisnis. Metrik yang tepat adalah metrik yang angkanya bergerak searah dengan nilai yang dipertaruhkan pemangku kepentingan. Chapter ini merangkum kerangka keputusan empat pertanyaan, menyajikan tabel skenario nyata dari skrining medis hingga prediksi cuaca, lalu membuktikan inti pesannya dengan satu eksperimen: model dan data yang sama memberi tiga cerita berbeda ketika dibaca tiga pemangku kepentingan yang berbeda.
Empat Pertanyaan Sebelum Memilih Metrik #
Pertama, berapa biaya tiap jenis galat — dan apakah asimetris? Tuliskan angkanya bila bisa: biaya satu transaksi sah yang salah dibekukan (verifikasi telepon, kehilangan transaksi) versus biaya satu penipuan yang lolos (kerugian dana penuh). Bila rasionya jauh dari 1:1, akurasi yang menjumlahkan keduanya dengan bobot sama sudah tidak layak menjadi metrik utama. Kedua, seberapa timpang kelasnya? Semakin langka kelas positif, semakin besar bahaya akurasi dan semakin relevan keluarga precision-recall. Ketiga, apakah keputusan butuh label atau probabilitas? Bila keluaran dipakai untuk memprioritaskan antrian tinjauan manual, kualitas pemeringkatan (AUC) dan ambang berbeda per tingkat prioritas menjadi fokus; bila keluaran dipakai untuk menetapkan harga premi, kalibrasi probabilitas dan Brier score yang mengukur ketepatan probabilitas jauh lebih penting daripada label. Keempat, adakah tuntutan regulasi atau kejelasan? Laporan kepada regulator biasanya menuntut confusion matrix yang bisa diaudit, ambang keputusan yang terdokumentasi, dan metrik standar industri — bukan satu angka tunggal yang mustahil ditelusuri.
Skenario Nyata dan Metrik yang Mengikuti #
| Skenario | Sifat galat | Metrik utama | Alasan singkat |
|---|---|---|---|
| Skrining medis awal | FN sangat mahal (pasien berisiko terlewat) | Recall tinggi | Pemeriksaan lanjutan murah menindaklanjuti FP |
| Filter spam presisi tinggi | FP mahal (surel penting terbuang) | Precision | Klasifikasi salah satu arah biayanya asimetris |
| Deteksi penipuan transaksi | FN = kerugian dana, FP = gangguan nasabah | Recall + PR-AUC | Kelas positif langka; kurva PR lebih jujur |
| Prediksi cuaca operasional | Galat kedua arah hampir setara | Balanced accuracy | Kelas bisa timpang antar musim |
| Penetapan harga / skor kredit | Probabilitas harus tepat, bukan sekadar label | Brier score | Skor yang tidak terkalibrasi menyesatkan keputusan |
Tidak ada metrik yang menang untuk semua baris tabel — inilah no free lunch pemilihan metrik. Karena itu aturan praktisnya: laporkan selalu beberapa metrik sekaligus plus confusion matrix, lalu tandai satu metrik sebagai “metrik keputusan” sesuai baris bisnis Anda. Metrik tunggal menutup informasi; confusion matrix membukanya.
Satu Model, Tiga Cerita #
Percobaan berikut memakai SATU model LogisticRegression dan SATU data uji (45 transaksi: 38 sah, 7 penipuan) tanpa perubahan apa pun. Yang berubah hanyalah pembacanya. Tim risiko — yang merugi besar pada tiap penipuan yang lolos — menurunkan ambang ke 0,3. Tim operasional — yang kapasitas tinjauan manualnya terbatas dan tidak ingin mengganggu nasabah jujur — menaikkan ambang ke 0,7. Manajemen membaca ringkasan seimbang pada ambang bawaan 0,5 dengan balanced_accuracy_score, yang merata-ratakan recall kedua kelas sehingga kelas langka tidak tenggelam.
# Satu model dan satu data uji yang sama, dibaca dari tiga sudut pandang
# bisnis yang berbeda -- metrik yang "tepat" mengikuti struktur biaya.
import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import (
accuracy_score,
balanced_accuracy_score,
confusion_matrix,
precision_score,
recall_score,
)
from sklearn.model_selection import train_test_split
# Data transaksi sintetis: 15% penipuan (kelas positif).
X, y = make_classification(
n_samples=150,
n_features=10,
n_informative=7,
n_redundant=2,
weights=[0.85, 0.15],
class_sep=1.0,
flip_y=0.0,
random_state=42,
)
X_latih, X_uji, y_latih, y_uji = train_test_split(
X, y, test_size=0.3, stratify=y, random_state=42
)
model = LogisticRegression(max_iter=1000, random_state=42)
model.fit(X_latih, y_latih)
proba = model.predict_proba(X_uji)[:, 1] # skor risiko per transaksi
print(f"Data uji: {len(y_uji)} transaksi "
f"({int(np.sum(y_uji == 0))} sah, {int(np.sum(y_uji == 1))} penipuan)")
print()
print(f"{'Lensa':<18} | {'Ambang':>6} | {'Presisi':>7} | {'Recall':>6} "
f"| {'Balanced':>8} | {'Peringatan':>10}")
# Tiga pemangku kepentingan memilih titik operasi (ambang) yang berbeda.
lensa = [
("1. Tim risiko", 0.3),
("2. Tim operasional", 0.7),
("3. Manajemen", 0.5),
]
for nama, ambang in lensa:
pred = (proba >= ambang).astype(int)
p = precision_score(y_uji, pred, zero_division=0)
r = recall_score(y_uji, pred, zero_division=0)
b = balanced_accuracy_score(y_uji, pred)
print(f"{nama:<18} | {ambang:>6.1f} | {p:>7.3f} | {r:>6.3f} "
f"| {b:>8.3f} | {int(pred.sum()):>10d}")
# Confusion matrix tetap dilaporkan sebagai bukti dasar (ambang 0.5).
print()
pred_standar = (proba >= 0.5).astype(int)
cm = confusion_matrix(y_uji, pred_standar)
print("Confusion matrix ambang 0.5 (baris = aktual, kolom = prediksi):")
print(cm)
print(f"Akurasi biasa = {accuracy_score(y_uji, pred_standar):.3f}")
print(f"Balanced accuracy = {balanced_accuracy_score(y_uji, pred_standar):.3f}")Output yang Dihasilkan:
Data uji: 45 transaksi (38 sah, 7 penipuan)
Lensa | Ambang | Presisi | Recall | Balanced | Peringatan
1. Tim risiko | 0.3 | 0.857 | 0.857 | 0.915 | 7
2. Tim operasional | 0.7 | 1.000 | 0.429 | 0.714 | 3
3. Manajemen | 0.5 | 1.000 | 0.714 | 0.857 | 5
Confusion matrix ambang 0.5 (baris = aktual, kolom = prediksi):
[[38 0]
[ 2 5]]
Akurasi biasa = 0.956
Balanced accuracy = 0.857Mari kita telaah bagian-bagian pentingnya:
- Baris 17–29 (data dan split): dataset 150 sampel berproporsi 85:15 dibelah stratified dengan
random_state=42; data uji berisi 45 transaksi dengan 7 penipuan. - Baris 31–33 (
modeldanproba): satu model dilatih satu kali. Variabelprobamenyimpan skor risiko tiap transaksi uji; seluruh perbedaan antar lensa berikutnya murni berasal dari cara membaca skor ini. - Baris 42–53 (
for nama, ambang in lensa): tiap lensa mengubah skor menjadi label lewat ambangnya sendiri (proba >= ambang), lalu mengukur precision, recall, dan balanced accuracy dari label yang sama. KolomPeringatanmencetak jumlah transaksi yang ditandai — angka yang menentukan beban kerja tim operasional. - Baris 57–62 (bukti dasar): confusion matrix dan perbandingan akurasi biasa versus balanced accuracy pada ambang standar 0,5, sebagai pemeriksaan silang yang tidak bergantung lensa.
Bacaan outputnya adalah tiga cerita dari model yang sama. Tim risiko (ambang 0,3) menangkap 6 dari 7 penipuan — recall 0,857 — dengan 7 peringatan yang hanya 1 salah; bagi mereka model ini sangat layak dipasang. Tim operasional (ambang 0,7) menerima hanya 3 peringatan dan semuanya valid — precision 1,000 — tetapi 4 dari 7 penipuan lolos; bagi mereka model yang sama terasa selektif dan aman, dengan catatan resiko di sisi lain. Manajemen (ambang 0,5) membaca balanced accuracy 0,857, sementara akurasi biasa membaca 0,956 — selisih hampir 10 poin yang murni muncul karena 38 transaksi sah mendominasi pembilang akurasi. Tidak ada satu pun dari ketiga pembacaan yang “salah”; masing-masing menjawab pertanyaan biaya yang berbeda dari model yang identik.
Metrik menjawab “seberapa baik model sekarang”. Pertanyaan berikutnya sama pentingnya untuk keputusan investasi: “apakah menambah data akan memperbaikinya, ataukah uang lebih baik dibelanjakan untuk model yang lebih sederhana atau fitur yang lebih baik?”. Alat diagnosis untuk pertanyaan itu adalah learning curve, pokok bahasan Chapter Learning Curve.
Referensi Resmi #
- Metrics and scoring: scikit-learn User Guide — katalog lengkap metrik beserta kapan pakainya, termasuk balanced accuracy dan Brier score.
- Common pitfalls and recommended practices — scikit-learn — praktik pelaporan yang jujur dan jebakan pemilihan metrik yang setelah-fakta.