Episode 7 dari catatan belajar AI saya. Setelah paham cara melatih model, pertanyaan berikutnya muncul begitu model pertama saya selesai dilatih: “bagus” itu ukurannya apa? Angka accuracy 95% terdengar membanggakan — sampai saya belajar bahwa angka tunggal itu bisa menipu total.
Kenapa accuracy saja tidak cukup
Contoh klasik yang langsung mengubah cara saya berpikir: deteksi penyakit yang hanya menyerang 1 dari 100 orang. Model bodoh yang selalu menjawab “sehat” akan mencapai akurasi 99%. Sempurna di atas kertas, useless di dunia nyata — dia tidak pernah menemukan satu pasien pun. Ini disebut imbalanced dataset, dan accuracy adalah metrik pertama yang harus dicurigai kalau kelasnya timpang.
Confusion matrix: empat kotak kejujuran
Untuk klasifikasi biner, semua metrik lahir dari tabel 2×2 bernama confusion matrix. Ambil kasus deteksi spam (positif = spam):
| Diprediksi spam | Diprediksi bukan | |
|---|---|---|
| Aslinya spam | True Positive (TP) | False Negative (FN) |
| Aslinya bukan | False Positive (FP) | True Negative (TN) |
- FP (false positive) — email penting masuk folder spam. Menyebalkan, bisa fatal.
- FN (false negative) — spam lolos ke inbox. Mengganggu tapi masih bisa dihapus.
Insight pentingnya: dua jenis kesalahan ini tidak setara harganya, dan harganya bergantung konteks. Di deteksi penyakit, FN jauh lebih mahal daripada FP. Di filter spam sebaliknya. Confusion matrix memaksa kita melihat keduanya secara terpisah, bukan dirata-rata.
Precision dan recall
Precision menjawab: “dari semua yang diprediksi positif, berapa yang benar-benar positif?” TP / (TP + FP). Tinggi = sedikit alarm palsu. Recall menjawab: “dari semua yang benar-benar positif, berapa yang berhasil ditemukan?” TP / (TP + FN). Tinggi = sedikit kasus lolos.
Dan di sinilah bagian yang paling jujur saya tulis: precision dan recall itu seperti trade-off. Naikkan threshold supaya model cuma menandai spam saat sangat yakin? Precision naik, recall turun. Turunkan threshold biar semua spam tertangkap? Recall naik, precision anjlok. Tidak ada model yang menang di keduanya sekaligus — yang ada adalah pilihan sesuai harga kesalahan di domain kita.
F1 score adalah rata-rata harmonik keduanya — satu angka untuk membandingkan model saat kita belum tahu mana yang lebih penting:
from sklearn.metrics import (
classification_report, confusion_matrix
)
y_true = [1, 0, 1, 1, 0, 1]
y_pred = [1, 0, 1, 0, 0, 1]
print(confusion_matrix(y_true, y_pred))
print(classification_report(y_true, y_pred))
# output: precision, recall, f1-score per kelasSatu panggilan classification_report memberi semua metrik per kelas. Sejak nemu fungsi ini, saya berhenti menghitung manual.
Aturan praktis memilih metrik
- Kelas seimbang, kedua salah sama harganya → accuracy cukup.
- Alarm palsu mahal (spam, penahanan orang tak bersalah) → utamakan precision.
- Kasus lolos mahal (penyakit, fraud) → utamakan recall.
- Butuh satu angka ringkas → F1.
Catatan untuk diri sendiri
Kesalahan terbesar yang saya hindari mulai sekarang: melaporkan satu angka tanpa konteks. Kebiasaan baru saya — selalu tulis confusion matrix-nya, minimal di catatan pribadi. Empat kotak itu memaksa saya jujur soal jenis kesalahan yang model lakukan, dan sering kali justru di situ insight bisnisnya muncul.
Komentar Terbaru