Formül ve Temel Hesaplama
F1 skoru, iki metriğin harmonik ortalamasıdır: F1 = 2 × (Precision × Recall) / (Precision + Recall). Değer aralığı 0 ile 1'dir; 1 mükemmel sınıflandırmayı, 0 ise tamamen başarısız bir modeli temsil eder. Harmonik ortalama kullanılmasının nedeni, her iki metrik yüksek olmadıkça F1'in yüksek olamamasıdır. Aritmetik ortalama yerine harmonik kullanılırsa Precision=0.99, Recall=0.01 için aritmetik ortalama 0.5 verirken F1 yalnızca 0.0198 çıkar; bu sayede tek taraflı optimize edilmiş modeller cezalandırılır.
Kesinlik (Precision) ile Duyarlılık (Recall) Dengesi
Kesinlik, modelin pozitif dediği örneklerin gerçekten pozitif olma oranıdır (TP / (TP + FP)). Duyarlılık ise gerçek pozitiflerin ne kadarının yakalandığını ölçer (TP / (TP + FN)). Bir spam filtresi yüksek kesinliği hedeflerse meşru e-postaları yanlışlıkla spam saymaktan kaçınır; ancak gerçek spam'lerin bir kısmını atlayabilir. Yüksek duyarlılık hedeflerse tüm spam'leri yakalar ancak bazı gerçek e-postaları da filtreler. Bu iki metrik arasındaki dengeyi bulmak kritik bir tasarım kararıdır ve F1 skoru bu dengeyi tek bir değerde özetlemenin standart yoludur.
Dengesiz Veri Setlerinde Önemi
Dolandırıcılık tespiti, nadir hastalık teşhisi veya anomali algılama gibi sınıf dengesizliğinin yüksek olduğu problemlerde ham doğruluk oranı (accuracy) büyük ölçüde yanıltıcıdır. Binlerce işlem içinde yalnızca birkaç sahte işlem bulunan bir veri setinde her örneği meşru sayan model %99.9+ doğruluk elde edebilir; oysa F1 skoru bu modelin sıfır olduğunu açıkça gösterir. F1, azınlık (pozitif) sınıfı üzerindeki gerçek başarımı yansıtarak bu tür uygulamalarda tercih edilen birincil metriktir.
Çok Sınıflı F1 Varyantları
- check_circle Makro F1: Her sınıf için ayrı F1 hesaplanır, sonra basit ortalaması alınır. Tüm sınıflara eşit ağırlık verir; azınlık sınıfı da büyük sınıf gibi sayılır. Sınıf dengesizliği göz ardı edilir, bu nedenle nadir sınıfların performansını vurgulamak isteyenler için uygun.
- check_circle Mikro F1: Tüm sınıfların TP, FP ve FN değerleri önce toplanır, ardından global F1 hesaplanır. Büyük sınıflar daha fazla ağırlık taşır. Genel doğruluğu önemseyen ve sınıf boyutunun ağırlık belirlemesi gereken durumlar için uygundur.
- check_circle Ağırlıklı F1: Her sınıfın F1 değeri, o sınıftaki örnek sayısıyla ağırlıklandırılarak ortalaması alınır. Makroya kıyasla sınıf dengesizliğini daha adil yansıtır ve çoğunlukla raporlarda varsayılan tercih olarak kullanılır.
F1 ile ROC-AUC: Hangi Metrik Ne Zaman?
ROC-AUC, eşik değerinden bağımsız bir performans ölçütü sunarken F1 belirli bir karar eşiğine (genellikle 0.5) göre hesaplanır. Sınıf dağılımı dengeli ve eşik değeri kritik değilse ROC-AUC daha kapsamlı bilgi verir. Buna karşın gerçek pozitif sayısı çok az olan durumlarda Precision-Recall eğrisi ve F1, ROC-AUC'dan daha anlamlıdır çünkü büyük negatif havuzu ROC eğrisini yapay olarak yükseltebilir. İkisini birlikte kullanmak en sağlıklı model değerlendirmesini sağlar.
Pratik Uygulamalar
F1 skoru fintech'te kredi kartı dolandırıcılığı tespitinde, sağlık alanında kanser tarama modellerinde, siber güvenlikte kötü amaçlı yazılım sınıflandırmada, NLP'de bilgi çıkarımı ve adlandırılmış varlık tanımada (NER) ve e-ticaret sistemlerinde spam yorum filtrelemede yaygın biçimde kullanılır. Bu alanlarda hem yanlış pozitifin (gereksiz alarm, yüksek maliyet) hem de yanlış negatifin (kaçırılan tehdit veya hastalık) bedeli yüksektir; F1 skoru bu ikili riski dengelemek için ideal metriktir.
Sık Sorulan Sorular
- check_circle F1 skoru 1.0'a ulaşmak mümkün mü? Evet, tüm tahminlerin doğru ve hiçbir pozitifin kaçırılmadığı mükemmel bir modelde F1=1.0 olur; ancak gerçek dünya veri setlerinde gürültü ve örtüşen sınıflar nedeniyle nadiren elde edilir.
- check_circle F1 ile F2 skoru arasındaki fark nedir? F-beta formülünde beta parametresi Recall'e verilen ağırlığı ayarlar: F2 = (1 + 4) × (P × R) / (4×P + R). F2 skoru Recall'ü Precision'dan iki kat önemli sayar; yanlış negatifin (kaçırılan vaka) kritik olduğu tıbbi uygulamalarda tercih edilir.
- check_circle Scikit-learn'de F1 nasıl hesaplanır? from sklearn.metrics import f1_score komutuyla çağrılır. Çok sınıflı için average='macro', 'micro' veya 'weighted' parametresi belirtilir: f1_score(y_true, y_pred, average='weighted').
- check_circle F1 skoru ne zaman yanıltıcı olabilir? Pozitif ve negatif hataların maliyeti çok farklıysa (ör. yanlış negatifin bedeli çok daha yüksekse) F1 yerine maliyet-duyarlı metrikler veya beklenen kayıp kullanmak daha uygun olabilir. Ayrıca eşik seçimi F1'i önemli ölçüde etkiler; farklı eşiklerde F1 değerini karşılaştırmak gerekir.