Kursus
Algoritma machine learning (ML) semakin banyak digunakan untuk mengotomatisasi tugas-tugas rutin dan mengidentifikasi pola tersembunyi dalam data. Namun, algoritma ini bersifat probabilistik, artinya prediksinya tidak selalu benar. Karena itu, Anda memerlukan cara untuk memperkirakan validitas model ML guna membangun kepercayaan pada sistem semacam itu.
Metrik evaluasi seperti akurasi, precision, recall, mean squared error (MSE), mean absolute percentage error (MAPE), dan sejenisnya lazim digunakan untuk mengukur kinerja model. Beragam metrik membantu Anda menilai kinerja melalui kriteria dan sudut pandang yang berbeda.
Metrik-metrik ini juga memastikan bahwa model terus meningkat dalam mempelajari tugas yang ditargetkan. Pada akhirnya, jika Anda tidak dapat mengukur, Anda tidak dapat meningkatkan kinerja sistem ML.
Akurasi adalah salah satu metrik yang mudah dipahami dan bekerja baik pada dataset seimbang, yaitu yang semua kelasnya memiliki representasi yang setara. Namun, fenomena dunia nyata tidak terdistribusi secara merata; karena itu dataset seimbang sulit ditemukan. Akurasi terutama berfokus pada apakah mayoritas instance teridentifikasi dengan benar, tanpa memedulikan kelasnya. Untuk kejadian langka yang penting seperti transaksi penipuan atau klik pada tayangan iklan, akurasi akan salah menggambarkan model yang memprediksi semuanya sebagai kelas negatif, yakni tidak ada penipuan atau tidak ada klik. Karena keterbatasan semacam itu, akurasi bukan metrik yang paling tepat. Jadi, metrik apa yang sebaiknya kita gunakan untuk mengukur kinerja model?
Precision dan recall adalah metrik yang banyak digunakan untuk mengevaluasi kinerja model klasifikasi tidak seimbang, seperti memprediksi churn pelanggan.
Memahami Precision dan Recall
Precision merujuk pada tingkat keyakinan bahwa sebuah kelas positif diprediksi sebagai positif, sedangkan recall mengukur seberapa baik model mengidentifikasi jumlah instance kelas positif dari dataset. Perlu dicatat bahwa kelas positif adalah kelas yang menjadi fokus utama.
Secara empiris, precision dan recall paling mudah dipahami dengan bantuan confusion matrix yang terdiri dari empat istilah kunci:
- True Positive (TP): Jumlah instance kelas positif yang teridentifikasi dengan benar
- False Positive (FP): Jumlah instance kelas negatif yang keliru diidentifikasi sebagai instance kelas positif
- True Negative (TN): Jumlah instance kelas negatif yang teridentifikasi dengan benar
- False Negative (FN): Jumlah instance kelas positif yang keliru diidentifikasi sebagai instance kelas negatif

Representasi dibuat oleh Penulis
Precision dan Recall adalah ekspresi matematis dari keempat istilah ini, di mana:
Precision adalah proporsi TP terhadap semua instance prediksi positif (TP+FP). Recall adalah proporsi TP dari semua instance positif (TP+FN).
Ini dapat disederhanakan lebih lanjut menggunakan notasi berikut yang menyoroti perbedaan di antara keduanya. Intinya, kedua metrik memiliki pembilang yang sama, yaitu irisan antara instance positif aktual dengan instance yang diprediksi positif, yakni TP.

Gambar oleh Shruti Saxena
Pembeda terletak pada penyebut, di mana Precision mempertimbangkan semua instance yang diprediksi positif (TP+FP), sedangkan Recall mempertimbangkan instance positif aktual (TP+FN).
Intuisi di Balik Precision dan Recall
Ada alasan mengapa confusion matrix dinamakan demikian – memang membingungkan saat Anda mencoba memahami konsep ini untuk pertama kali.
Mari kita menginternalisasikan konsep ini dengan sebuah contoh. Misalkan Anda memiliki pabrik baja yang mengekstraksi besi dari bijih besi dan mencampurnya dengan mineral serta unsur lain (kadang tidak disengaja). Berfokus pada bagian ekstraksi, Anda memiliki beberapa pilihan terkait kemurnian logam yang diekstraksi dan limbah yang dihasilkan selama proses, seperti berikut:
Skenario 1: Anda hanya ingin memprioritaskan kemurnian besi yang diekstraksi, terlepas dari seberapa banyak logam yang terbuang dalam prosesnya.
Skenario 2: Anda ingin memaksimalkan efisiensi, yaitu jumlah besi yang diekstraksi per unit bijih, tanpa memedulikan kemurnian logam yang diekstraksi.
Skenario 3: Anda menginginkan yang terbaik dari keduanya, yaitu menjaga kemurnian logam yang diekstraksi setinggi mungkin sambil mengurangi limbah (memaksimalkan besi yang diekstraksi per unit bijih).
Anggaplah tanur tiup atau tungku busur listrik sebagai opsi pemodelan yang menghasilkan hasil berbeda (kemurnian bijih besi dan limbah). Misalkan salah satu metode ekstraksi menghasilkan besi 97,5% murni dan kehilangan 4% besi ke lumpur. Maka kita dapat mendefinisikan precision sebagai fraksi besi murni dalam logam yang diekstraksi, yaitu 97,5%, sementara recall adalah jumlah besi yang diekstraksi dari seluruh besi yang tersedia dalam bijih, yaitu 96% (4% dari seluruh besi terbuang).

Ilustrasi dibuat oleh Penulis
Misalkan Anda mengikuti metode kedua karena Anda menginginkan besi yang lebih murni dari tungku, yang pada gilirannya berarti lebih banyak limbah dalam proses ekstraksi. Asumsikan jika Anda meningkatkan kemurnian besi sebesar 0,5% menjadi 98%, limbah logam Anda meningkat 11%. Artinya nilai recall yang bersesuaian dengan nilai precision 98% menjadi 85%. Pertukaran recall demi precision yang lebih tinggi dan sebaliknya ini menunjukkan hubungan terbalik antara precision dan recall.
Bukankah akan lebih baik jika Anda mengetahui semua nilai precision dan nilai recall yang bersesuaian sehingga Anda dapat mengambil keputusan yang paling sesuai dengan tujuan Anda?
Kurva precision-recall membantu membuat pilihan tersebut, dan Anda akan memahaminya secara mendalam pada bagian berikut. Namun sebelum itu, mari pahami dulu konsep penting mengenai ambang (threshold) yang menjadi inti dari kurva PR.
Konsep Ambang (Threshold)
Mari ambil contoh identifikasi transaksi penipuan untuk memahami cara kerja ambang (cutoff). Tabel di bawah memiliki empat transaksi dengan ID transaksi dari 1 hingga 4; sebuah transaksi bisa jadi penipuan atau reguler. Model deteksi penipuan menghasilkan probabilitas suatu transaksi bersifat penipuan (disorot pada kolom kuning), yang secara intrinsik juga menunjukkan probabilitas transaksi reguler.
Sebuah transaksi dikatakan diprediksi sebagai penipuan jika probabilitas keluarannya lebih besar dari ambang yang dipilih pada kolom Probabilitas transaksi Penipuan, jika tidak maka dinyatakan sebagai transaksi reguler.
|
ID Transaksi |
Probabilitas transaksi Penipuan |
Probabilitas transaksi reguler |
Apakah penipuan? (Ambang = 0.9) |
Apakah penipuan? (Ambang = 0.5) |
Apakah penipuan? (Ambang = 0.4) |
|
1 |
0.3 |
0.7 |
Tidak |
Tidak |
Tidak |
|
2 |
0.4 |
0.6 |
Tidak |
Tidak |
Ya |
|
3 |
0.6 |
0.4 |
Tidak |
Ya |
Ya |
|
4 |
0.95 |
0.05 |
Ya |
Ya |
Ya |
Ketika ambang yang seketat 0,9 diterapkan, tiga transaksi pertama ditandai sebagai reguler, sedangkan transaksi terakhir ditandai sebagai penipuan. Ambang setinggi ini menunjukkan keyakinan tinggi dalam prediksi sehingga menghasilkan skenario precision tinggi. Sebagai gantinya, Anda mengorbankan recall model karena melewatkan beberapa transaksi penipuan.
Skenario seperti ini tidak diinginkan meski precision tinggi. Bisakah Anda menebak alasannya?
Sebab bisnis akhirnya menanggung biaya lebih besar akibat gagal mengidentifikasi penipuan, yang merupakan tujuan utama membangun model tersebut. Perlu dicatat bahwa biaya transaksi penipuan jauh lebih tinggi daripada biaya yang terkait dengan transaksi reguler yang diblokir, yaitu FP.
Sekarang, pertimbangkan sisi lain spektrum dengan nilai ambang rendah 0,4 yang menandai tiga transaksi terbawah sebagai penipuan. Ambang yang longgar seperti ini akan memblokir mayoritas transaksi, yang dapat membuat banyak pelanggan terganggu. Belum lagi beban tambahan pada sumber daya manusia untuk meninjau transaksi yang ditandai dan mengidentifikasi penipuan yang sebenarnya.
Dengan demikian, bisnis harus mendefinisikan metrik target dan nilai yang diinginkan untuk mendapatkan yang terbaik dari kedua sisi, dengan mempertimbangkan biaya berikut:
- Biaya mengidentifikasi transaksi penipuan sebagai reguler (False Negatives)
- Biaya mengidentifikasi transaksi reguler sebagai penipuan (False Positive)
Kembali ke definisi precision, Anda akan menemukan bahwa false positives berada di penyebut ekspresi matematis, yang berarti meminimalkan false positives akan memaksimalkan precision. Dengan cara yang sama, meminimalkan false negatives akan memaksimalkan recall model.
Jadi, apakah suatu transaksi diprediksi sebagai penipuan atau reguler sangat bergantung pada nilai ambang.
Apa itu Kurva Precision-Recall?
Kurva precision-recall membantu Anda memutuskan ambang berdasarkan nilai precision dan recall yang diinginkan. Kurva ini juga berguna untuk membandingkan kinerja model yang berbeda dengan menghitung “Area Under the Precision-Recall Curve” atau AUC.
Seperti dijelaskan melalui confusion matrix, sebuah model klasifikasi biner akan menghasilkan TP, FP, TN, dan FN untuk berbagai nilai ambang, di mana setiap nilai ambang menghasilkan pasangan nilai precision dan recall yang bersesuaian.
Memplot nilai recall pada sumbu x dan nilai precision yang bersesuaian pada sumbu y menghasilkan kurva PR yang menggambarkan fungsi dengan kemiringan negatif. Ini merepresentasikan pertukaran antara precision (mengurangi FP) dan recall (mengurangi FN) untuk suatu model. Mengingat hubungan terbalik antara precision dan recall, kurva umumnya tidak linear, yang menyiratkan bahwa peningkatan satu metrik menurunkan metrik lainnya, namun penurunannya belum tentu proporsional.

Gambar dari StackExchange
Misalkan suatu organisasi memilih nilai recall minimum yang dapat diterima sebesar 98%. Precision berada di 30% pada titik perpotongan yang diwakili oleh bintang berlabel “Ambang Rendah, Precision Rendah, Recall Tinggi.”
Dua titik ekstrem lainnya merepresentasikan kasus saat ambang:
- Terlalu rendah menghasilkan Recall tinggi – biaya modal manusia dan pelanggan yang terganggu
- Terlalu tinggi menghasilkan Precision tinggi – biaya transaksi penipuan dan hilangnya reputasi.
Menggunakan kurva PR
Selain menentukan cutoff yang tepat selaras dengan metrik bisnis, luas area di bawah kurva precision-recall dari beberapa model atau algoritma dapat digunakan untuk membandingkan kinerjanya. Ini sangat berguna untuk membandingkan model menggunakan kurva PR daripada menggunakan precision, recall, atau bahkan metrik F1 secara individual (yang merupakan mean harmonik dari Precision dan Recall).

Gambar dari Stackoverflow
Metrik-metrik tersebut bergantung pada ambang, di mana perubahan ambang mengubah distribusi TP, FP, dan FN. Dua model berbeda dapat berkinerja berbeda untuk suatu ambang tertentu, yang membuat kurva PR menjadi pilihan yang tangguh untuk perbandingan model. Plot di atas menggambarkan dua kurva PR dari dua algoritme berbeda pada dataset tertentu – AUC dari algoritme dua lebih besar daripada AUC dari algoritme satu, sehingga menjadi pilihan yang lebih baik untuk masalah tersebut.
Menerapkan Kurva Precision-Recall di Python
Sekarang kita tahu apa itu kurva precision-recall dan kegunaannya, mari kita lihat cara membuat kurva precision-recall di Python.
Langkah 1: Impor paket Python yang diperlukan
Mari lihat dataset model untuk deteksi kanker payudara, di mana “kelas 1” merepresentasikan diagnosis kanker dan “kelas 0” merepresentasikan tidak ada kanker.
Impor pertama memuat dataset dari “sklearn.datasets” yang mencakup variabel independen dan variabel target. Karena ini adalah dataset model yang mudah dipelajari oleh sebagian besar algoritma, kami memilih algoritma Naive Bayes yang diimpor sebagai “GaussianNB” dari sklearn.
Impor berikutnya, “Precision_Recall_curve”, menghasilkan berbagai ambang dan nilai Precision serta Recall yang bersesuaian.
from sklearn.datasets import load_breast_cancer
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import precision_recall_curve
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
Langkah 2: Menyiapkan data latih dan uji
Variabel independen disimpan pada kunci “data” dan variabel target pada kunci “target” di dalam dictionary “data”. Data kemudian dibagi menjadi set latih dan uji dengan meneruskan argumen test_size bernilai 0,3.
# Load model breast cancer data
data = load_breast_cancer()
X = data['data']
y = data['target']
Mari lihat distribusi kelas positif dan negatif, yaitu kasus kanker payudara dan bukan kanker payudara.
import numpy as np
unique, counts = np.unique(y, return_counts=True)
plt.pie(counts, labels=unique, autopct='%.0f%%');

Bagi data menjadi set latih dan uji menggunakan metode train_test_split dari modul model_selection sklearn.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
Langkah 3: Pelatihan Model
Data latih diteruskan sebagai argumen ke GaussianNB() untuk memulai pelatihan model. Objek model yang sudah di-fit kemudian digunakan untuk mendapatkan prediksi dalam bentuk probabilitas pada dataset latih dan uji.
# Fit a Naive Bayes model
clf = GaussianNB().fit(X_train, y_train)
Langkah 4: Menghasilkan Prediksi
Hasilkan probabilitas prediksi menggunakan dataset latih dan uji yang akan digunakan untuk mendapatkan Precision dan Recall pada berbagai nilai ambang.
# Predict probability
y_prob_train = clf.predict_proba(X_train)[:,1]
y_prob_test = clf.predict_proba(X_test)[:,1]
Langkah 5: Memplot kurva PR
Metode Precision_Recall_curve() menerima dua masukan – probabilitas dari dataset latih yaitu y_prob_train dan nilai kebenaran dasar (ground truth) aktual, dan mengembalikan tiga nilai yakni Precision, Recall, dan ambang.
precision, recall, thresholds = precision_recall_curve(y_train, y_prob_train)
plt.fill_between(recall, precision)
plt.ylabel("Precision")
plt.xlabel("Recall")
plt.title("Train Precision-Recall curve");
Vektor precision dan recall digunakan untuk memplot kurva PR pada ambang yang bervariasi seperti ditunjukkan di bawah:

Kurva PR dibuat oleh Penulis
Apakah Kurva Precision-Recall Lebih Baik daripada Kurva ROC?
Kurva ROC mirip dengan kurva PR tetapi memplot True Positive Rate (TPR) vs False Positive Rate (FPR) untuk berbagai ambang. Kita sudah mengenal TPR, ini hanyalah nama lain dari recall. Jadi, mari fokus pada FPR, yang menunjukkan jumlah salah klasifikasi dari kelas negatif. Melanjutkan contoh penipuan, ini merepresentasikan persentase transaksi reguler yang ditandai sebagai penipuan.

Gambar oleh Albert Um
Sampai di sini, kita memahami bahwa recall alias TPR adalah kesamaan antara kurva PR dan kurva ROC; perbedaan utamanya adalah precision dan FPR masing-masing. Mari lihat mengapa kurva PR lebih informatif secara komparatif.
Ini karena kurva P-R memberikan wawasan yang lebih bermakna tentang kelas yang menjadi fokus utama dibandingkan kurva ROC. Ambil prediksi transaksi penipuan. True Negatives (TN) pada kasus dataset tidak seimbang cenderung sangat besar, membuat FPR menjadi nilai yang sangat kecil. Namun apakah itu mengatakan sesuatu tentang kinerja model dalam memprediksi transaksi sebagai penipuan?
Tidak! Di sisi lain, menggunakan Precision sebagai salah satu metrik menggambarkan kinerja model pada kelas positif (transaksi penipuan). Ini menggambarkan apakah model konservatif vs longgar dalam menandai transaksi penipuan.
Kelemahan besar kedua dari kurva ROC adalah ketahanannya terhadap data tidak seimbang. Dari gambar di atas, Anda dapat melihat bahwa FPR adalah metrik khusus kelas negatif, yang berarti perubahan FP diharapkan proporsional dengan perubahan FP+TN (semua instance negatif). Dengan demikian, jika distribusi data dasar berubah, kurva ROC tidak berubah secara signifikan. Ketidakpekaan terhadap distribusi kelas ini membuat kurva PR lebih unggul daripada kurva ROC.
Penutup
Precision dan recall adalah metrik evaluasi kunci untuk mengukur kinerja model klasifikasi machine learning. Namun, pertukaran di antara keduanya bergantung pada prioritas bisnis dan paling baik diselesaikan melalui kurva PR. Artikel ini menjelaskan cara menafsirkan kurva PR dan memilih ambang yang tepat untuk memenuhi tujuan bisnis. Selain itu, postingan ini mengilustrasikan tutorial langkah demi langkah tentang cara memplotnya menggunakan Python. Kami juga membahas mengapa kurva PR lebih informatif dibandingkan kurva ROC.
