Ana içeriğe geç

Makine Öğreniminde F1 Skoru: Kesinlik ve Duyarlılık için Dengeli Bir Ölçüt

F1 skorunun, kesinlik ve duyarlılığı birleştirerek model performansını nasıl değerlendirdiğini anlayın. İkili ve çok sınıflı sınıflandırmada kullanımını, Python örnekleriyle öğrenin.
· 6 dk. oku

Yapay Zeka ile Keşfedin

ML tabanlı modeller oluştururken, bir modelin performansını değerlendirmek en az eğitmek kadar önemlidir. Doğruluk çoğu zaman varsayılan metrik olsa da, özellikle verinin bir sınıf tarafından baskın olduğu dengesiz veri kümelerinde yanıltıcı olabilir. 

F1 skoru, kesinlik ve duyarlılığın harmonik ortalamasıdır. Yanlış pozitifler ile yanlış negatifler arasındaki ödünleşimi dengeler ve model performansının daha doğru bir ölçüsünü sunar.

Sahtekarlık tespiti, tıbbi teşhis, spam filtreleme ve hata tespiti gibi uygulamalarda, tek başına doğruluk tüm resmi anlatmaya yetmez. Bir model yüksek doğruluk elde edebilir, ancak nadir ve kritik vakaları tespit edemezse faydadan çok zarar verebilir. F1 skoru bu riski kapsar. Değerlendirme metriklerinde yeniyseniz, devam etmeden önce Python ile Makine Öğreniminin Temelleri içeriğinde temel kavramları keşfetmek isteyebilirsiniz.

F1 Skoru Nedir?

F1 skoru, bir model için kesinlik ve duyarlılık arasındaki dengeyi ölçer. 0 ile 1 arasında değişir; 1 kusursuz kesinlik ve duyarlılığı, 0 ise zayıf performansı ifade eder.

  • Kesinlik, modelin tüm pozitif tahminleri arasında kaçının doğru olduğunu ölçmeye yardımcı olur.
  • Duyarlılık, tüm gerçek pozitifler arasında modelin kaçını doğru sınıflandırdığını analiz etmek için kullanışlıdır. 

F1 skoru ikisini tek bir değerde birleştirir ve birinde iyi, diğerinde zayıf performans sergileyen modelleri cezalandırır. Örneğin, duyarlılığı yüksek ama kesinliği düşük bir model tüm pozitif örnekleri doğru yakalayabilir ancak çok fazla yanlış pozitif üretebilir. F1 ölçüsü her iki ölçütün birlikte ele alınmasını sağlar. 

F1 Skoru Formülü ve Açıklaması

F1 skoru formülü şöyledir:

F1 score formula

Burada kesinlik şu şekilde tanımlanır:

precision formula

Ve duyarlılığın denklemi şöyledir:

recall formula

Burada, TP = True Positives (Gerçek Pozitifler), FP = False Positives (Yanlış Pozitifler) ve FN = False Negatives (Yanlış Negatifler).

Büyük farkları cezalandırdığı için harmonik ortalama, aritmetik ortalama yerine kullanılır. Kesinliğin yüksek ama duyarlılığın düşük olduğu (veya tersi) durumlarda, F1 skoru belirgin biçimde düşer ve dengesizliği yansıtır.

F1 Skoru vs. Doğruluk

Doğruluk, toplam tahminler içinde doğru tahminleri belirler:

Sınıfların dengeli olduğu kümelerde iyi olsa da, doğruluk sınıf dengesizliği olan problemler için yanıltıcıdır.

Örnek:

Bir spam filtreleme sisteminde iletilerin %90'ı spam, %10'u spam değilse, tüm e-postaları "spam" olarak sınıflandıran naif bir sınıflandırıcı %90 doğruluk elde eder ancak spam olmayanları asla doğru sınıflandıramaz. Bu pratikte işe yaramaz.

Bu durumda, F1 ölçüsü daha isabetlidir; çünkü doğruluğun aksine yanlış pozitifler ve yanlış negatiflerin maliyetini hesaba katar.

İkili ve Çok Sınıflı Sınıflandırmada F1 Skoru

İkili sınıflandırma

İkili sınıflandırmada F1 skoru, pozitif sınıfa göre hesaplanır. Örneğin, tıbbi testlerde pozitif sınıf “hastalık var”ı temsil edebilir.

Çok sınıflı sınıflandırma

Çok sınıflı problemlerde F1 skorları, ortalama alma yöntemleri kullanılarak genişletilir:

Yöntem

Açıklama

En uygun

Makro

Her sınıf için F1'i bağımsız olarak hesaplar ve ardından ortalamasını alır.

Dengeli veri kümeleri, tüm sınıflara eşit önem verilmesi.

Ağırlıklı

F1 skorlarını sınıf desteğine (sınıf başına örnek sayısı) göre ağırlıklandırarak ortalar.

Dengesiz veri kümeleri.

Mikro

Tüm sınıfların katkılarını birleştirerek genel bir F1 hesaplar.

Genel performansın daha önemli olduğu durumlar.

Bu esneklik, F1 skorunu çok geniş bir sınıflandırma problem yelpazesinde uygulanabilir kılar.

Python'da F1 Skoru Nasıl Hesaplanır

scikit-learn kütüphanesi, F1 skorunu hesaplamak için basit işlevler içerir.

İkili sınıflandırma örneği

Tahminlerin 0 veya 1 olduğu basit bir ikili sınıflandırma problemini değerlendirerek başlayın. f1_score() işlevi, gerçek ve tahmin edilen etiketleri kullanarak F1 skorunu doğrudan hesaplar.

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

Çok sınıflı sınıflandırma örneği

Ardından, modelin ikiden fazla sınıf tahmin ettiği çok sınıflı problemlere aynı yaklaşımı genişletebilirsiniz. average parametresi, sınıflar arasında F1 skorlarının nasıl birleştirileceğini kontrol eder—yaygın seçenekler 'macro', 'micro' ve 'weighted' içerir.

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

Çok sınıflı veya çok etiketli sınıflandırmada F1 ya da Fβ hesapladığımızda, skorların farklı sınıflar arasında nasıl ortalanacağına karar vermemiz gerekir. scikit-learn'deki average parametresi birkaç seçenek sunar:

  • İkili, iki sınıf söz konusu olduğunda kullanılır. Pozitif sınıfa odaklanır ve öncelikle o sınıf için precision, recall ve F1 hesaplarız.

  • Mikro, tüm sınıfların katkılarını toplayıp ortalamasını alarak ortalama metriği hesaplamayı içerir. Pratikte, sınıflar genelinde toplam gerçek pozitifler, yanlış negatifler ve yanlış pozitifler üzerinden toplar ve ardından bu toplamlar üzerinden kesinlik, duyarlılık ve F1'i hesaplar. Mikro ortalama, sınıf dengesizliğinden bağımsız olarak genel performansı görmeye değer katar.

  • Makro: Her sınıf için metriği hesaplar ve sonra bunları ağırlıklandırmadan ortalar. Bu, tüm sınıflara eşit muameleyi sağlamaz; bu nedenle, veri kümesi dengesiz olsa bile tüm sınıfların eşit önemde olduğu durumlarda makuldür.

  • Ağırlıklı, makroya benzer; ancak her sınıfa eşit ağırlık vermez. Skorları sınıf başına gerçek örnek sayısına göre ağırlıklandırır. Bu, büyük sınıfların nihai skorda daha çok söz sahibi olması anlamına gelir. Ağırlıklı ortalama, sınıf dağılımını göz ardı etmeden dengeli bir görünüm aradığımızda kullanışlıdır.

  • Örnekler (Samples): Bir örneğin birden fazla sınıfa ait olabildiği çok etiketli problemlerde kullanılır. Burada metrik her örnek için hesaplanır ve sonra tüm örnekler üzerinden ortalanır.

Bu ortalama alma seçenekleri, F1 veya Fβ skorunu problem senaryosuna uyarlamamıza olanak tanır. Örneğin, az görülen hastalıkları sınıflandırıyorsak ve azınlık sınıfları çok önemliyse, makro veya β > 1 olan Fβ uygundur. Ancak tüm sınıflarda sınıf bazlı doğruluğu arıyorsak, mikro veya ağırlıklı ortalama daha iyi bir tablo sunar.

Daha gelişmiş ihtiyaçlar için scikit-learn, F1'i genelleyen fbeta_score() işlevini de sağlar. Bu tür araçları daha derinlemesine anlamak, Python ile Makine Öğrenimi Bilimcisi kariyer yolunun bir parçasıdır.

Fβ Skoruyla F1 Skorunun Genelleştirilmesi

Fβ skoru, kesinlik veya duyarlılığın öncelik durumuna bağlı olarak F1 skorunu genelleştirir:

  •  𝛃 > 1 duyarlılığa daha fazla ağırlık verir.
  •  𝛃 < 1  kesinliğe daha fazla vurgu yapar.

Örnekler

  • F2 Skoru, bir hastalığı atlamanın (yanlış negatif) yanlış alarma göre daha kötü olduğu tıbbi teşhiste uygulanır.
  • F0.5 Skoru, yanlış pozitiflerin (gerçek e-postaların yanlışlıkla spam sayılması) daha maliyetli olduğu spam filtrelemede tercih edilir.

Kullanım Senaryosu: Diyabet Tespitinde F1 vs. Doğruluk

Yalnızca hastaların %5'inde gerçekten diyabet bulunan bir tıbbi veri kümesini varsayalım. Diyabet tespiti için eğitilmiş bir model %95 doğruluğa sahip olabilir. Ancak bu %95 doğruluk, herkese sürekli olarak "diyabet yok" diyerek kolayca elde edilebilir ve bu da modeli işe yaramaz kılar.

Bunun yerine, modeli ölçmek için F1 skorunu kullanalım.

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

Burada neden F1 veya F2'yi seçelim?

  • Ağır sınıf dengesizliği nedeniyle doğruluk yanıltıcıdır.
  • F1 skoru, hem yanlış pozitiflerin (sağlıklı hastaları diyabetik olarak sınıflandırmak) hem de yanlış negatiflerin (diyabeti teşhis edememek) hesaba katılmasını sağlar.

Bu kullanımda, kaçırılan bir teşhis hayatı etkileyici olabileceği için duyarlılık değerlidir. Bu nedenle F2 skoru, duyarlılığa daha yüksek ağırlık verdiğinden daha uygundur.

Bu, F1 ailesi metriklerinin klinik kullanım durumlarında doğruluğa göre daha pratik ve kullanılabilir bir ölçüm sunduğunu gösterir.

Öne Çıkanlar

F1 skoru bize model değerlendirmesinin sadece sayı oyunu olmadığını hatırlatır. Aslında her tahminin ardındaki ödünleşimleri anlamakla ilgilidir. Bu önemlidir; çünkü gerçek yaşam uygulamalarında kritik bir vakayı kaçırmak ciddi sonuçlar doğurabilir.

Modelleri geliştirmeye ve iyileştirmeye devam ederken, F1 gibi metriklere dair sezgi geliştirmeniz performans hakkında bağlama duyarlı seçimler yapmanıza yardımcı olur. Bu kavramları gerçek veri kümelerine uygulama becerilerinizi derinleştirmek için, farklı kullanım örneklerinde modelleri nasıl değerlendirip ayarlayacağınızı ve etkili biçimde dağıtacağınızı öğreneceğiniz Python ile Makine Öğrenimi Bilimcisi kariyer yoluna göz atın.

Vidhi Chugh

Yazar

Vidhi Chugh

Veri bilimi, ürün ve mühendisliğin kesişiminde çalışarak ölçeklenebilir makine öğrenimi sistemleri geliştiren bir Yapay Zeka Stratejisti ve Etik Uzmanıyım. Dünyadaki "En İyi 200 İş ve Teknoloji Yenilikçisinden" biri olarak listelenmiş bulunuyorum; makine öğrenimini demokratikleştirmek ve bu dönüşümün parçası olabilmeleri için herkes adına jargonu sadeleştirmek misyonuyla çalışıyorum.

SSS

Makine öğreniminde F1 skorunun önemi nedir?

F1 skoru, kesinliğin (tahmin edilen pozitiflerin kaçı doğru) ve duyarlılığın (gerçek pozitiflerin kaçı tespit edildi) harmonik ortalamasıdır. Her iki hata türünü de yansıtan tek bir metrik sağlar.

Dengesiz veri kümelerinde F1 skoru neden doğruluğa tercih edilir?

Bir sınıf veriye hakim olduğunda doğruluk yanıltıcı olabilir; çünkü bir model çoğunluk sınıfını iyi tahmin ederken azınlık sınıfında başarısız olabilir. F1 skoru hem yanlış pozitifleri hem de yanlış negatifleri hesaba katarak bu gibi durumlarda daha adil bir değerlendirme sunar.

F1 ile Fβ skorları arasındaki fark nedir?

F1 skoru, kesinlik ve duyarlılığa eşit ağırlık verirken, Fβ skoru bu dengeyi ayarlamaya izin verir. Örneğin F2 duyarlılığa daha fazla ağırlık verir (tıbbi teşhiste kullanışlı), F0.5 ise kesinliği önceler (spam tespitinde kullanışlı).

İyi bir F1 skoru değeri nedir?

1'e yakın bir F1 skoru, güçlü kesinlik ve duyarlılığa işaret eder. “İyi”nin tanımı alana bağlıdır. Örneğin, 0.8 sağlık alanında mükemmel olabilirken spam tespitinde düşük sayılabilir.

Python'da F1 skorunu nasıl hesaplayabilirim?

F1 skoru, scikit-learn'ün f1_score() işlevi kullanılarak kolayca hesaplanabilir. İkili, çok sınıflı ve çok etiketli ayarları destekler ve farklı birleştirme stratejileri için bir average parametresi sunar.

Konular

İlgili