Lewati ke konten utama

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.
· 6 mnt Baca

Jelajahi bersama AI

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:

Rumus skor F1

Dengan presisi didefinisikan sebagai berikut:

rumus presisi

Dan persamaan untuk recall adalah:

rumus recall

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-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 Score
print("F1 Score:", round(f1_score(y_true, y_pred, average='binary'),2))
F1 Score: 0.8

Contoh klasifikasi multikelas

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'.

from sklearn.metrics import f1_score, classification_report

y_true = [0, 1, 2, 2, 0, 1, 2, 1, 2]
y_pred = [0, 2, 1, 2, 0, 0, 2, 1, 2]

# Macro, Micro, Weighted F1
print("Macro F1:", round(f1_score(y_true, y_pred, average='macro'),2))
print("Micro F1:", round(f1_score(y_true, y_pred, average='micro'),2))
print("Weighted F1:", round(f1_score(y_true, y_pred, average='weighted'),2))

# Detailed report
print(classification_report(y_true, y_pred))
Macro F1: 0.65
Micro F1: 0.67
Weighted F1: 0.64
              precision    recall  f1-score   support

           0       0.67      1.00      0.80         2
           1       0.50      0.33      0.40         3
           2       0.75      0.75      0.75         4

    accuracy                           0.67         9
   macro avg       0.64      0.69      0.65         9
weighted avg       0.65      0.67      0.64         9

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 predictions

print("Accuracy:", round((sum([yt == yp for yt, yp in zip(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))
Accuracy: 0.88
F1 Score: 0.8
F2 Score (recall-focused): 0.71

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.

Vidhi Chugh

Penulis

Vidhi Chugh

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.

Topik

Terkait

blogs

Tutorial Korelasi di R

blogs

Spaghetti Plot dan Jalur Badai

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026