Dari Wikipedia
F-score (sebelum masuk ke F1 score) adalah harmonic mean (kebalikan arithmetic mean) dari precision dan recall. Jadi kalau (arithmetic) mean dari precision dan recall adalah (precision + recall) / 2 maka F-score adalah 2 * (1/precision + 1/recall) atau dapat ditulis dengan
$$ F-score = 2 \frac{\text { precision } \cdot \text { recall }}{\text { precision }+ \text { recall }} = \frac{2 \mathrm{tp}}{2 \mathrm{tp}+\mathrm{fp}+\mathrm{fn}} $$ Dari rumus di atas terlihat bahwa nilai F-score bergantung pada tp (true positive), fp (false positive), dan fn (false negative).Kemudian dengan menggunakan scikit-learn "classification report" saya mendapatkan hasil berikut:
Gambar 1. Output "classification report" dari scikit-learn |
Mana diantara nilai F1-score (kotak merah) yang harus saya pakai/laporkan?
Dari Scikit-learn
Keterangan lebih jauh tentang F1-score bisa dipelajari dari manual Scikit-learn. Ada beberapa nilai F1-score yang bisa dipakai yakni: binary, micro, macro, dan average. Untuk kasus saya (Gambar 1 atau dari output "classification report" secara umum), hanya ada tiga: binary (n atau p), macro, dan weighted. Berikut penjelasannya.
- Binary, untuk binary classification, yang dilaporkan adalah F1-score untuk positive label, yakni 0.81 dengan mengambil label "p" sebagai label positif.
- Macro avg, menghitung metrik untuk tiap label seperti rumus di atas, dan menghitung rata-ratanya (tanpa memperhitungkan jumlah sample/support).
- Weighted avg, menghitung metrik untuk tiap label seperti rumus di atas dengan memperhitungkan jumlah sample/support.
Jadi mana yang harus dipakai/dilaporkan?
Berdasarkan keterangan Scikit-learn di atas maka:
- Jika task adalah binary classification, yang dilaporkan adalah binary F1-score untuk positive label (yakni 0.81 atau 81% dari Gambar 1 di atas)
- Jika task adalah multiclass, maka yang dilaporkan adalah weighted average (avg), contohnya 0.79 atau 79% dari Gambar 1 di atas.
Secara default, scikit-learn menggunakan label "1" untuk label positif jika argumen "pos_label" tidak diberikan. Saya curiga, dari sinilah asal kata F1-score bermula, yakni F-score untuk label "1" (atau bisa saja F-score untuk maksimal 1, tapi hampir semua metrik nilai maksimalnya adalah 1).