Model klasifikasi mengembalikan label, bukan angka, sehingga cara menilainya juga berbeda dari regresi. Prediksi sebuah baris pada akhirnya hanya ada dua kemungkinan: tepat atau meleset — tidak ada “hampir benar” pada label spam atau sah. Dari pengamatan sederhana itulah lahir metrik paling terkenal dalam machine learning: akurasi, yaitu proporsi prediksi yang tepat. Pada chapter ini kita hitung akurasi secara manual, memakainya lewat accuracy_score, lalu membongkar kelemahannya yang paling sering menjebak pemula — data yang kelasnya tidak seimbang.
Akurasi: Hitungan yang Sederhana #
Rumus akurasi cukup satu baris: banyaknya prediksi benar dibagi banyaknya seluruh prediksi. Sebelum memakai fungsi siap pakai, kita hitung dulu secara eksplisit pada sepuluh email yang diklasifikasikan sebagai “perlu dibalas” (1) atau “tidak perlu” (0):
from sklearn.metrics import accuracy_score
# 1 = email perlu dibalas, 0 = tidak perlu
aktual = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0]
prediksi = [1, 0, 1, 0, 0, 1, 0, 1, 1, 0]
benar = sum(1 for a, p in zip(aktual, prediksi) if a == p)
print("Prediksi benar : %d dari %d" % (benar, len(aktual)))
print("Akurasi manual : %d/%d = %.2f" % (benar, len(aktual), benar / len(aktual)))
print("accuracy_score : %.2f" % accuracy_score(aktual, prediksi))Output yang Dihasilkan:
Prediksi benar : 8 dari 10
Akurasi manual : 8/10 = 0.80
accuracy_score : 0.80Mari kita telaah baris-baris kode di atas:
- Baris
benar = ...:zip()memasangkan label aktual dan label prediksi baris demi baris, dansum(1 for ...)menghitung pasangan yang nilainya sama. Delapan dari sepuluh email terklasifikasi dengan tepat. - Baris
Akurasi manual: hitungan tangan 8/10 menghasilkan 0.80 — persis seperti yang tercetak. Penulisan eksplisit seperti ini memperlihatkan dari mana angka metrik berasal, bukan sekadar hasil fungsi. accuracy_score(aktual, prediksi): fungsi scikit-learn menghitung rumus yang sama dan mengembalikan nilai identik 0.80. Urutan argumennya selalu(y_aktual, y_prediksi); untuk akurasi nilai tidak berubah jika tertukar, tetapi menulis urutan dengan benar sejak awal menyelamatkan kita saat beralih ke metrik seperti precision yang peka urutan.
Perhatikan pula isi kesalahan model: email keempat adalah email penting yang diprediksi tidak perlu dibalas, sedangkan email kedelapan adalah email ringan yang diprediksi perlu dibalas. Akurasi 0.80 memperlakukan kedua jenis kesalahan itu sama — masing-masing satu prediksi salah — padahal konsekuensinya bisa sangat berbeda di dunia nyata. Penilaian yang membedakan bobot kesalahan menunggu babak-babak berikutnya.
Jebakan Akurasi pada Data Tak Seimbang #
Kekuatan akurasi — kesederhanaannya — juga menjadi kelemahannya. Akurasi tidak bertanya prediksi mana yang benar, hanya berapa banyak. Masalah ini muncul paling telak pada data yang kelasnya timpang, dan dunia deteksi fraud adalah contoh klasiknya: dari 60 transaksi kartu, hanya 6 yang benar-benar fraud. Kita bandingkan dua model di hadapan data tersebut:
import numpy as np
from sklearn.metrics import accuracy_score
# 60 transaksi: 54 sah, 6 fraud (10% fraud)
aktual = np.array([0] * 54 + [1] * 6)
# Model A: selalu memprediksi "sah" tanpa membaca transaksi
model_santai = np.zeros(60, dtype=int)
# Model B: menandai 4 fraud dengan benar, tetapi salah menandai 5 transaksi sah
model_waspada = np.array([1] * 5 + [0] * 49 + [1] * 4 + [0] * 2)
for nama, prediksi in [("Model santai", model_santai), ("Model waspada", model_waspada)]:
tertangkap = ((aktual == 1) & (prediksi == 1)).sum()
print("%s: akurasi %.3f, fraud tertangkap %d dari %d"
% (nama, accuracy_score(aktual, prediksi), tertangkap, aktual.sum()))Output yang Dihasilkan:
Model santai: akurasi 0.900, fraud tertangkap 0 dari 6
Model waspada: akurasi 0.883, fraud tertangkap 4 dari 6Mari kita baca hasil yang cukup mengguncang ini:
model_santai: array nol murni — model ini tidak membaca transaksi sama sekali dan selalu menebak “sah”. Karena 90% data memang sah, model ini mencetak akurasi 0.900.model_waspada: model sungguhan yang berhasil menandai 4 dari 6 fraud. Kekurang sempurnaannya — 5 transaksi sah yang salah ditandai — menurunkan akurasi menjadi 0.883.- Perbandingan keduanya: model yang tidak berguna sama sekali tampak lebih tinggi akuratannya daripada model yang benar-benar bekerja. Jika kita memilih model berdasarkan akurasi saja, sistem anti-fraud kita justru berisi model yang tidak pernah membaca transaksi.
Inilah mengapa akurasi saja tidak memadai ketika kelas timpang. Angka 0.90 pada contoh di atas tidak lahir dari kepandaian model, melainkan dari komposisi data — persis seperti menebak “tidak hujan” sepanjang tahun di kota kering lalu meraih rekor peramal cuaca.
Peta Keluarga Metrik Klasifikasi #
Jalan keluar dari jebakan akurasi adalah bertanya lebih spesifik: seberapa andal model ketika memprediksi positif? Seberapa banyak kasus positif yang berhasil ditangkap? Pertanyaan-pertanyaan itu dijawab oleh tiga metrik yang menjadi sahabat akurasi:
| Metrik | Pertanyaan yang dijawab | Dibahas tuntas pada |
|---|---|---|
| Precision | Dari yang diprediksi positif, berapa yang memang positif? | Precision, Recall, dan F1-Score |
| Recall | Dari seluruh kasus positif, berapa yang berhasil ditangkap? | Precision, Recall, dan F1-Score |
| F1-score | Bagaimana ringkasan tunggal untuk keseimbangan precision dan recall? | Precision, Recall, dan F1-Score |
Ketiganya, termasuk akurasi, sesungguhnya dihitung dari bahan baku yang sama: sebuah tabel 2x2 bernama confusion matrix yang mencatat keempat kemungkinan prediksi. Membaca tabel itu adalah keterampilan paling mendasar dalam evaluasi klasifikasi, dan itulah pokok bahasan chapter Confusion Matrix berikutnya.
Rangkuman #
- Akurasi adalah proporsi prediksi yang tepat: prediksi benar dibagi jumlah data;
accuracy_scoremenghitungnya dari pasangan label aktual dan prediksi. - Hitungan manual 10 email menghasilkan akurasi 0.80; angka tunggal itu menyamakan dua jenis kesalahan yang biayanya bisa sangat berbeda.
- Pada data timpang (54 sah berbanding 6 fraud), model yang selalu menebak “sah” mencetak akurasi 0.900 sementara model sungguhan yang menangkap 4 fraud justru 0.883 — akurasi menyesatkan.
- Akurasi tetap metrik yang wajar untuk data yang relatif seimbang dan ketika semua kesalahan bernilai sama.
- Precision, recall, dan F1-score menjawab kelemahan akurasi; semuanya diturunkan dari confusion matrix yang kita bedah pada chapter berikutnya.
Kita sudah melihat bahwa satu angka akurasi menyembunyikan struktur kesalahan yang penting. Struktur itu tersimpan rapi dalam sebuah tabel kecil berisi empat sel — TP, FP, FN, dan TN — yang menjadi bahan baku seluruh metrik klasifikasi. Mari kita belajar membacanya pada chapter Confusion Matrix .