Skor F1 dalam Machine Learning: Metrik Seimbang untuk Presisi dan Recall
Pahami bagaimana skor F1 mengevaluasi kinerja model dengan menggabungkan presisi dan recall. Pelajari penggunaannya pada klasifikasi biner dan multikelas, beserta contoh Python.
Saat membangun model berbasis ML, mengevaluasi kinerja model sama pentingnya dengan melatihnya. Meskipun akurasi sering menjadi metrik bawaan, metrik ini dapat menyesatkan, khususnya pada dataset tidak seimbang saat satu kelas mendominasi data.
Skor F1 adalah rata-rata harmonik dari presisi dan recall. Metrik ini menyeimbangkan trade-off antara false positive dan false negative, serta memberikan ukuran kinerja model yang lebih akurat.
Pada aplikasi seperti deteksi penipuan, diagnosis medis, pemfilteran spam, dan deteksi kerusakan, akurasi saja tidak cukup menggambarkan keseluruhan. Sebuah model mungkin mencapai akurasi tinggi, tetapi jika gagal mendeteksi kasus-kasus kritis yang jarang terjadi, model tersebut bisa lebih berbahaya daripada bermanfaat. Skor F1 menutup risiko ini. Jika Anda masih baru dengan metrik evaluasi, Anda mungkin ingin mempelajari dasar-dasarnya di Machine Learning Fundamentals in Python sebelum melanjutkan.
Apa Itu Skor F1?
Skor F1 mengukur keseimbangan antara presisi dan recall untuk sebuah model. Nilainya berkisar dari 0 hingga 1, di mana 1 menunjukkan presisi dan recall sempurna, dan 0 mengimplikasikan kinerja buruk.
Presisi membantu menilai dari seluruh prediksi positif model, berapa banyak yang benar.
Recall baik untuk menganalisis berapa banyak yang diklasifikasikan model dengan benar di antara seluruh positif sebenarnya.
Skor F1 menggabungkan keduanya menjadi satu angka, memberikan penalti pada model yang bagus di salah satunya tetapi buruk di yang lain. Misalnya, model dengan recall sangat baik tetapi presisi rendah mungkin menangkap semua instance positif dengan benar, namun menghasilkan terlalu banyak false positive. Ukuran F1 memastikan kedua ukuran dipertimbangkan bersama.
Rumus Skor F1 dan Penjelasannya
Rumus skor F1 adalah:
Dengan presisi didefinisikan sebagai berikut:
Dan persamaan untuk recall adalah:
Di sini, TP = True Positives, FP = False Positives, dan FN = False Negatives.
Rata-rata harmonik digunakan alih-alih rata-rata aritmetika karena yang pertama menghukum perbedaan besar. Dalam kasus presisi tinggi tetapi recall rendah (atau sebaliknya), skor F1 akan turun signifikan, mencerminkan ketidakseimbangan.
Skor F1 vs. Akurasi
Akurasi menentukan prediksi yang benar dari total prediksi:
Meski baik untuk set yang seimbang antar kelas, akurasi menyesatkan pada masalah dengan ketidakseimbangan kelas.
Contoh:
Jika sistem pemfilteran spam berisi 90% pesan spam dan 10% pesan non-spam, sebuah pengklasifikasi naif yang mengklasifikasikan semua email sebagai "spam" memperoleh akurasi 90% tetapi tidak pernah mengklasifikasikan email non-spam dengan benar. Itu tidak berguna dalam praktik.
Di sini, ukuran F1 lebih akurat, karena memperhitungkan biaya false positive dan false negative, yang tidak dilakukan oleh akurasi.
Skor F1 untuk Klasifikasi Biner dan Multikelas
Klasifikasi biner
Dalam klasifikasi biner, skor F1 dihitung relatif terhadap kelas positif. Misalnya, dalam pengujian medis, kelas positif dapat merepresentasikan “penyakit terdeteksi”.
Klasifikasi multikelas
Pada masalah multikelas, skor F1 diperluas menggunakan metode perataan:
Metode
Deskripsi
Paling cocokuntuk
Macro
Menghitung F1 secara independen untuk setiap kelas, lalu mengambil rata-ratanya.
Dataset seimbang, bobot setara untuk semua kelas.
Weighted
Merata-ratakan skor F1 yang dibobot berdasarkan dukungan kelas (jumlah sampel per kelas).
Dataset tidak seimbang.
Micro
Mengagregasikan kontribusi semua kelas untuk menghitung F1 global.
Situasi saat kinerja keseluruhan lebih penting.
Fleksibilitas ini membuat skor F1 dapat diterapkan pada berbagai macam masalah klasifikasi.
Cara Menghitung Skor F1 di Python
Library scikit-learn menyertakan fungsi sederhana untuk menghitung skor F1.
Contoh klasifikasi biner
Mulailah dengan mengevaluasi masalah klasifikasi biner sederhana di mana prediksi bernilai 0 atau 1. Fungsi f1_score() menghitung skor F1 secara langsung menggunakan label sebenarnya dan label prediksi.
from sklearn.metrics import f1_score
# True labels
y_true =[0,1,1,1,0,1,0,1]# Predicted labels
y_pred =[0,1,0,1,0,1,1,1]# Calculate F1 Scoreprint("F1 Score:",round(f1_score(y_true, y_pred, average='binary'),2))Didukung oleh
Selanjutnya, Anda dapat memperluas pendekatan yang sama ke masalah multikelas, saat model memprediksi lebih dari dua kelas. Parameter average mengontrol bagaimana skor F1 diagregasikan lintas kelas—opsi umum meliputi 'macro', 'micro', dan 'weighted'.
Macro F1:0.65
Micro F1:0.67
Weighted F1:0.64
precision recall f1-score support
00.671.000.80210.500.330.40320.750.750.754
accuracy 0.679
macro avg 0.640.690.659
weighted avg 0.650.670.649Didukung oleh
Saat kita menghitung F1 atau Fβ dalam klasifikasi multikelas atau multi-label, kita perlu memutuskan bagaimana merata-ratakan skor lintas kelas. Parameter average di scikit-learn menawarkan beberapa opsi:
Binary digunakan saat ada dua kelas. Kita fokus pada kelas positif dan menghitung precision, recall, dan F1 terutama untuk kelas tersebut.
Micro melibatkan pengagregasian kontribusi semua kelas dan kemudian merata-ratakannya untuk menghitung metrik rata-rata. Dalam praktiknya, ini menjumlahkan total true positive, false negative, dan false positive di seluruh kelas lalu menghitung presisi, recall, dan F1 berdasarkan jumlah tersebut. Micro-averaging berguna untuk melihat kinerja keseluruhan tanpa memedulikan ketidakseimbangan kelas.
Macro: Kita menghitung metrik untuk setiap kelas lalu merata-ratakannya tanpa bobot. Ini tidak memberikan perlakuan berbobot setara pada semua kelas dan karena itu masuk akal jika semua kelas sama pentingnya, meskipun dataset tidak seimbang.
Weighted mirip macro, tetapi tidak memberi bobot yang sama pada tiap kelas. Skor dibobot berdasarkan jumlah instance benar per kelas. Ini berarti kelas yang lebih besar berkontribusi lebih banyak pada skor akhir. Perataan berbobot berguna saat kita mencari pandangan yang seimbang tanpa mengabaikan distribusi kelas.
Samples: Digunakan pada masalah multi-label, di mana satu sampel bisa termasuk ke lebih dari satu kelas. Di sini, metrik dihitung untuk setiap instance lalu dirata-ratakan di seluruh instance.
Opsi perataan ini memungkinkan kita menyesuaikan skor F1 atau Fβ dengan skenario masalah. Misalnya, jika kita mengklasifikasikan penyakit langka di mana kelas minoritas sangat penting, macro atau Fβ dengan β > 1 akan lebih tepat. Namun jika yang dicari adalah akurasi per kelas di seluruh kelas, perataan micro atau weighted memberi gambaran yang lebih baik.
Untuk kebutuhan yang lebih canggih, scikit-learn juga menyediakan fbeta_score(), yang menggeneralisasi F1. Pemahaman yang lebih mendalam tentang alat semacam ini merupakan bagian dari jalur karier Machine Learning Scientist in Python.
Generalisasi Skor F1 dengan Skor Fβ
Skor Fβ menggeneralisasi skor F1 tergantung apakah presisi atau recall yang lebih utama:
𝛃 > 1 memberi bobot lebih pada recall.
𝛃 < 1 menekankan presisi.
Contoh
Skor F2 berlaku pada diagnosis medis di mana melewatkan penyakit (false negative) lebih buruk daripada alarm palsu.
Skor F0,5 lebih disukai pada pemfilteran spam, di mana false positive (email sebenarnya dianggap spam) lebih mahal.
Use Case: Mendeteksi Diabetes dengan F1 vs. Akurasi
Misalkan ada dataset medis di mana hanya 5% pasien yang benar-benar menderita diabetes. Model yang dilatih untuk deteksi diabetes dapat memiliki akurasi 95%. Namun akurasi 95% ini mudah dicapai dengan selalu memprediksi "tidak diabetes" untuk semua orang, sehingga model ini tidak berguna.
Sebagai gantinya, mari gunakan skor F1 untuk mengukur model.
from sklearn.metrics import f1_score, fbeta_score, confusion_matrix
# Suppose these are results from a diabetes detection model
y_true =[0,0,0,1,0,1,0,1,0,0,1,0,0,0,1,1]# true outcomes
y_pred =[0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1]# model predictionsprint("Accuracy:",round((sum([yt == yp for yt, yp inzip(y_true, y_pred)])/len(y_true)),2))print("F1 Score:",round(f1_score(y_true, y_pred),2))print("F2 Score (recall-focused):",round(fbeta_score(y_true, y_pred, beta=2),2))Didukung oleh
Accuracy:0.88
F1 Score:0.8
F2 Score (recall-focused):0.71Didukung oleh
Mengapa memilih F1 atau F2 di sini?
Akurasi menyesatkan karena ketidakseimbangan kelas yang berat.
Skor F1 memastikan bahwa baik false positive (mengklasifikasikan pasien normal sebagai diabetik) maupun false negative (gagal mendiagnosis diabetes) diperhitungkan.
Dalam use case ini, recall sangat berharga karena diagnosis yang terlewat dapat mengubah hidup. Skor F2 karenanya lebih tepat karena memberi bobot lebih pada recall.
Ini menunjukkan bagaimana keluarga metrik F1 memberikan ukuran yang lebih praktis dan dapat digunakan daripada akurasi pada use case klinis.
Inti yang Perlu Diingat
Skor F1 mengingatkan kita bahwa evaluasi model bukan sekadar permainan angka. Intinya adalah memahami trade-off di balik setiap prediksi. Ini penting karena dalam aplikasi dunia nyata, melewatkan satu kasus kritis dapat berdampak serius.
Saat Anda terus membangun dan menyempurnakan model, mengembangkan intuisi untuk metrik seperti F1 akan membantu Anda membuat pilihan kinerja yang lebih kontekstual. Untuk memperdalam keterampilan Anda dalam menerapkan konsep-konsep ini pada dataset nyata, lihat jalur karier Machine Learning Scientist with Python, di mana Anda akan belajar cara mengevaluasi, menyetel, dan menerapkan model secara efektif di berbagai use case.
Saya adalah Penasihat dan Etikus AI yang bekerja di persimpangan ilmu data, produk, dan rekayasa untuk membangun sistem pembelajaran mesin yang dapat diskalakan. Masuk dalam daftar "200 Inovator Bisnis dan Teknologi Teratas" di dunia, saya memiliki misi untuk mendemokratisasi pembelajaran mesin dan menyederhanakan jargon agar semua orang dapat menjadi bagian dari transformasi ini.
FAQ
Apa pentingnya skor F1 dalam machine learning?⌄
Skor F1 adalah rata-rata harmonik dari presisi (berapa banyak prediksi positif yang benar) dan recall (berapa banyak positif sebenarnya yang terdeteksi). Metrik ini memberikan satu ukuran yang mencerminkan kedua jenis kesalahan.
Mengapa skor F1 lebih disukai daripada akurasi pada dataset tidak seimbang?⌄
Akurasi dapat menyesatkan ketika satu kelas mendominasi data, karena model mungkin memprediksi kelas mayoritas dengan baik tetapi gagal pada kelas minoritas. Skor F1 memperhitungkan baik false positive maupun false negative, menghasilkan evaluasi yang lebih adil dalam kasus seperti itu.
Apa perbedaan antara skor F1 dan Fβ?⌄
Skor F1 memberikan bobot yang sama pada presisi dan recall, sedangkan skor Fβ memungkinkan penyesuaian keseimbangan tersebut. Misalnya, F2 memberi bobot lebih pada recall (berguna dalam diagnosis medis), dan F0,5 mengutamakan presisi (berguna dalam deteksi spam).
Berapa nilai skor F1 yang baik?⌄
Skor F1 yang mendekati 1 menunjukkan presisi dan recall yang kuat. Apa yang dianggap “baik” bergantung pada domain. Misalnya, 0,8 bisa sangat baik di layanan kesehatan tetapi rendah dalam deteksi spam.
Bagaimana cara menghitung skor F1 di Python?⌄
Skor F1 dapat dengan mudah dihitung menggunakan fungsi f1_score() dari scikit-learn. Fungsi ini mendukung pengaturan biner, multikelas, dan multi-label dengan parameter average untuk berbagai strategi agregasi.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Saat membangun model berbasis ML, mengevaluasi kinerja model sama pentingnya dengan melatihnya. Meskipun akurasi sering menjadi metrik bawaan, metrik ini dapat menyesatkan, khususnya pada dataset tidak seimbang saat satu kelas mendominasi data.
Skor F1 adalah rata-rata harmonik dari presisi dan recall. Metrik ini menyeimbangkan trade-off antara false positive dan false negative, serta memberikan ukuran kinerja model yang lebih akurat.
Pada aplikasi seperti deteksi penipuan, diagnosis medis, pemfilteran spam, dan deteksi kerusakan, akurasi saja tidak cukup menggambarkan keseluruhan. Sebuah model mungkin mencapai akurasi tinggi, tetapi jika gagal mendeteksi kasus-kasus kritis yang jarang terjadi, model tersebut bisa lebih berbahaya daripada bermanfaat. Skor F1 menutup risiko ini. Jika Anda masih baru dengan metrik evaluasi, Anda mungkin ingin mempelajari dasar-dasarnya di Machine Learning Fundamentals in Python sebelum melanjutkan.
Apa Itu Skor F1?
Skor F1 mengukur keseimbangan antara presisi dan recall untuk sebuah model. Nilainya berkisar dari 0 hingga 1, di mana 1 menunjukkan presisi dan recall sempurna, dan 0 mengimplikasikan kinerja buruk.
Skor F1 menggabungkan keduanya menjadi satu angka, memberikan penalti pada model yang bagus di salah satunya tetapi buruk di yang lain. Misalnya, model dengan recall sangat baik tetapi presisi rendah mungkin menangkap semua instance positif dengan benar, namun menghasilkan terlalu banyak false positive. Ukuran F1 memastikan kedua ukuran dipertimbangkan bersama.
Rumus Skor F1 dan Penjelasannya
Rumus skor F1 adalah:
Dengan presisi didefinisikan sebagai berikut:
Dan persamaan untuk recall adalah:
Di sini, TP = True Positives, FP = False Positives, dan FN = False Negatives.
Rata-rata harmonik digunakan alih-alih rata-rata aritmetika karena yang pertama menghukum perbedaan besar. Dalam kasus presisi tinggi tetapi recall rendah (atau sebaliknya), skor F1 akan turun signifikan, mencerminkan ketidakseimbangan.
Skor F1 vs. Akurasi
Akurasi menentukan prediksi yang benar dari total prediksi:
Meski baik untuk set yang seimbang antar kelas, akurasi menyesatkan pada masalah dengan ketidakseimbangan kelas.
Contoh:
Jika sistem pemfilteran spam berisi 90% pesan spam dan 10% pesan non-spam, sebuah pengklasifikasi naif yang mengklasifikasikan semua email sebagai "spam" memperoleh akurasi 90% tetapi tidak pernah mengklasifikasikan email non-spam dengan benar. Itu tidak berguna dalam praktik.
Di sini, ukuran F1 lebih akurat, karena memperhitungkan biaya false positive dan false negative, yang tidak dilakukan oleh akurasi.
Skor F1 untuk Klasifikasi Biner dan Multikelas
Klasifikasi biner
Dalam klasifikasi biner, skor F1 dihitung relatif terhadap kelas positif. Misalnya, dalam pengujian medis, kelas positif dapat merepresentasikan “penyakit terdeteksi”.
Klasifikasi multikelas
Pada masalah multikelas, skor F1 diperluas menggunakan metode perataan:
Metode
Deskripsi
Paling cocok untuk
Macro
Menghitung F1 secara independen untuk setiap kelas, lalu mengambil rata-ratanya.
Dataset seimbang, bobot setara untuk semua kelas.
Weighted
Merata-ratakan skor F1 yang dibobot berdasarkan dukungan kelas (jumlah sampel per kelas).
Dataset tidak seimbang.
Micro
Mengagregasikan kontribusi semua kelas untuk menghitung F1 global.
Situasi saat kinerja keseluruhan lebih penting.
Fleksibilitas ini membuat skor F1 dapat diterapkan pada berbagai macam masalah klasifikasi.
Cara Menghitung Skor F1 di Python
Library
scikit-learnmenyertakan fungsi sederhana untuk menghitung skor F1.Contoh klasifikasi biner
Mulailah dengan mengevaluasi masalah klasifikasi biner sederhana di mana prediksi bernilai 0 atau 1. Fungsi
f1_score()menghitung skor F1 secara langsung menggunakan label sebenarnya dan label prediksi.Contoh klasifikasi multikelas
Selanjutnya, Anda dapat memperluas pendekatan yang sama ke masalah multikelas, saat model memprediksi lebih dari dua kelas. Parameter
averagemengontrol bagaimana skor F1 diagregasikan lintas kelas—opsi umum meliputi'macro','micro', dan'weighted'.Saat kita menghitung
F1atauFβdalam klasifikasi multikelas atau multi-label, kita perlu memutuskan bagaimana merata-ratakan skor lintas kelas. Parameter average di scikit-learn menawarkan beberapa opsi:Binary digunakan saat ada dua kelas. Kita fokus pada kelas positif dan menghitung
precision,recall, danF1terutama untuk kelas tersebut.Micro melibatkan pengagregasian kontribusi semua kelas dan kemudian merata-ratakannya untuk menghitung metrik rata-rata. Dalam praktiknya, ini menjumlahkan total true positive, false negative, dan false positive di seluruh kelas lalu menghitung presisi, recall, dan F1 berdasarkan jumlah tersebut. Micro-averaging berguna untuk melihat kinerja keseluruhan tanpa memedulikan ketidakseimbangan kelas.
Macro: Kita menghitung metrik untuk setiap kelas lalu merata-ratakannya tanpa bobot. Ini tidak memberikan perlakuan berbobot setara pada semua kelas dan karena itu masuk akal jika semua kelas sama pentingnya, meskipun dataset tidak seimbang.
Weighted mirip macro, tetapi tidak memberi bobot yang sama pada tiap kelas. Skor dibobot berdasarkan jumlah instance benar per kelas. Ini berarti kelas yang lebih besar berkontribusi lebih banyak pada skor akhir. Perataan berbobot berguna saat kita mencari pandangan yang seimbang tanpa mengabaikan distribusi kelas.
Samples: Digunakan pada masalah multi-label, di mana satu sampel bisa termasuk ke lebih dari satu kelas. Di sini, metrik dihitung untuk setiap instance lalu dirata-ratakan di seluruh instance.
Opsi perataan ini memungkinkan kita menyesuaikan skor F1 atau Fβ dengan skenario masalah. Misalnya, jika kita mengklasifikasikan penyakit langka di mana kelas minoritas sangat penting, macro atau Fβ dengan β > 1 akan lebih tepat. Namun jika yang dicari adalah akurasi per kelas di seluruh kelas, perataan micro atau weighted memberi gambaran yang lebih baik.
Untuk kebutuhan yang lebih canggih, scikit-learn juga menyediakan
fbeta_score(), yang menggeneralisasi F1. Pemahaman yang lebih mendalam tentang alat semacam ini merupakan bagian dari jalur karier Machine Learning Scientist in Python.Generalisasi Skor F1 dengan Skor Fβ
Skor Fβ menggeneralisasi skor F1 tergantung apakah presisi atau recall yang lebih utama:
Contoh
Use Case: Mendeteksi Diabetes dengan F1 vs. Akurasi
Misalkan ada dataset medis di mana hanya 5% pasien yang benar-benar menderita diabetes. Model yang dilatih untuk deteksi diabetes dapat memiliki akurasi 95%. Namun akurasi 95% ini mudah dicapai dengan selalu memprediksi "tidak diabetes" untuk semua orang, sehingga model ini tidak berguna.
Sebagai gantinya, mari gunakan skor F1 untuk mengukur model.
Mengapa memilih F1 atau F2 di sini?
Dalam use case ini, recall sangat berharga karena diagnosis yang terlewat dapat mengubah hidup. Skor F2 karenanya lebih tepat karena memberi bobot lebih pada recall.
Ini menunjukkan bagaimana keluarga metrik F1 memberikan ukuran yang lebih praktis dan dapat digunakan daripada akurasi pada use case klinis.
Inti yang Perlu Diingat
Skor F1 mengingatkan kita bahwa evaluasi model bukan sekadar permainan angka. Intinya adalah memahami trade-off di balik setiap prediksi. Ini penting karena dalam aplikasi dunia nyata, melewatkan satu kasus kritis dapat berdampak serius.
Saat Anda terus membangun dan menyempurnakan model, mengembangkan intuisi untuk metrik seperti F1 akan membantu Anda membuat pilihan kinerja yang lebih kontekstual. Untuk memperdalam keterampilan Anda dalam menerapkan konsep-konsep ini pada dataset nyata, lihat jalur karier Machine Learning Scientist with Python, di mana Anda akan belajar cara mengevaluasi, menyetel, dan menerapkan model secara efektif di berbagai use case.