ההגדרה: ממוצע הרמוני, לא חשבוני
ציון F1 משלב Precision ו-Recall למספר יחיד באמצעות ממוצע הרמוני, לא ממוצע חשבוני רגיל: F1 = 2 כפול (Precision כפול Recall) חלקי (Precision ועוד Recall) — או, בנוסח שקול במונחי-בסיס, 2TP חלקי (2TP ועוד FP ועוד FN), כפי שמציג מדריך-scikit-learn. הבחירה בממוצע הרמוני, ולא בממוצע פשוט, אינה מקרית: ממוצע הרמוני 'מעניש' בחומרה פער גדול בין שני המדדים, בעוד ממוצע חשבוני מטשטש אותו.
למה זה משנה: דוגמה שממחישה את ההבדל
מודל היפותטי עם Precision של 1.0 ו-Recall של 0.0 יקבל ממוצע חשבוני של 0.5 — ציון שנשמע סביר, למרות שהמודל הזה כמעט חסר-תועלת (הוא צדק תמיד כשכן ניבא 'חיובי', אבל פספס לגמרי את כל המקרים החיוביים). ה-F1 של אותו מודל, לעומת זאת, יוצא 0 בדיוק — הממוצע ההרמוני קורס לאפס ברגע שאחד המרכיבים הוא אפס. בדוגמה המספרית שמופיעה במדריך-scikit-learn — Precision של 1.0 ו-Recall של 0.5 — ה-F1 יוצא 0.66, נמוך משמעותית מהממוצע החשבוני (0.75), משום שהוא רגיש יותר לפער בין השניים.
מקור המושג: ועידת MUC-4, 1992
ציון F1 הוצג לראשונה בוועידת Message Understanding Conference הרביעית (MUC-4) ב-1992 — סדרת-ועידות שמימן DARPA כדי לעודד ולהשוות שיטות חילוץ-מידע מטקסט, שאופיין התחרותי חייב סטנדרט-הערכה משותף. שם המדד עצמו מיוחס לפונקציה נפרדת מספרו של ואן-רייסברגן על אחזור-מידע (1979), שממנו נגזרה הנוסחה המקורית של 'מדד-האפקטיביות' — נוסחה כללית יותר שמאפשרת גם משקל שונה בין Precision ל-Recall, לא רק משקל שווה.
הכללה: F-beta ומשקל לא-שווה
F1 הוא מקרה פרטי של נוסחה כללית יותר, F-beta: F_β = (1 ועוד β בריבוע) כפול Precision כפול Recall, חלקי (β בריבוע כפול Precision ועוד Recall). כש-β שווה 1 מתקבל F1, שנותן משקל שווה לשני המדדים. β גדול מ-1 (למשל F2) מעניק משקל גבוה יותר ל-Recall, ומתאים למצבים שבהם פספוס יקר יותר מהתראת-שווא; β קטן מ-1 (למשל F0.5) מעניק משקל גבוה יותר ל-Precision, למצבים הפוכים. על אותה דוגמה ממדריך-scikit-learn (Precision 1.0, Recall 0.5), F0.5 יוצא 0.83 — קרוב יותר ל-Precision הגבוה — בעוד F2 יוצא 0.55 בלבד, קרוב יותר ל-Recall הנמוך, מה שממחיש בבירור איך β מזיז את הציון לכיוון המדד שמקבל יותר משקל.
מתי F1 משמש, ומה החיסרון שלו
F1 נפוץ בעיקר כשצריך לדרג או להשוות כמה מודלים לפי ציון יחיד — בלוחות-תוצאות של תחרויות, או כשמחלקה חיובית נדירה הופכת את Accuracy הרגיל לבלתי-אמין. החיסרון המרכזי: F1 מתעלם לחלוטין מהשליליים-האמיתיים (True Negatives) — שני מודלים עם אותו F1 יכולים להיות שונים מאוד בהתנהגותם מול מקרים שליליים. בנוסף, המשקל השווה שהוא נותן ל-Precision ול-Recall לא תמיד משקף את עלות-הטעות האמיתית של המשימה — שיקול שמחייב לפעמים לעבור ל-F-beta עם β שונה מ-1.
שימוש בפועל: fbeta_score ואיחוד ל-multiclass
בספריות כמו scikit-learn, הפונקציה f1_score (ו-fbeta_score הכללית יותר) מחשבות את הציון גם לבעיות עם יותר משתי מחלקות, באותה שיטת-איחוד כמו Precision ו-Recall — 'macro', 'weighted' או 'micro', לפי הפרמטר average. בדוגמה מתועדת של שלוש מחלקות, F1 עם average='weighted' יוצא 0.267 — נמוך בהרבה מ-1.0 המושלם, כי הממוצע המשוקלל 'מעניש' על ביצועים חלשים במחלקות שכיחות. מכיוון ש-F1 נבנה משני מדדים שכל אחד יכול להתאפס בנפרד, הוא יורש את אותה בעיית-קצה: כש-Precision או Recall אינם מוגדרים (חלוקה באפס), גם F1 דורש טיפול מפורש דרך הפרמטר zero_division, בדיוק כמו שני המרכיבים שממנו הוא נבנה.