ציון F1 (F1 Score)

יסודות בינה מלאכותית

הגדרה

ציון F1 (F1 Score) הוא ממוצע הרמוני בין Precision ל-Recall, שמצמצם את שני המדדים למספר יחיד לדירוג והשוואת מודלי-סיווג.

ההגדרה: ממוצע הרמוני, לא חשבוני

ציון 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, בדיוק כמו שני המרכיבים שממנו הוא נבנה.

Precision מול Recall מול F1
PrecisionRecallF1
השאלה שהוא עונה עליהמתוך מה שסומן 'חיובי', כמה נכון?מתוך כל החיוביים-האמיתיים, כמה נתפס?איך משקללים את שניהם למספר אחד?
נוסחהTP / (TP+FP)TP / (TP+FN)2·Precision·Recall / (Precision+Recall)
איך משיגים ערך מושלם בקלות-יתרלסמן 'חיובי' רק במקרה בודד בטוחלסמן הכול כ'חיובי'אי-אפשר — קורס לאפס אם אחד המרכיבים אפס
מתי הוא המדד המועדףחיובי-כוזב יקר (ספאם, המלצות)שלילי-כוזב יקר (אבחון, הונאות)צריך ציון יחיד להשוואה או דירוג

שאלות נפוצות ❓

למה משתמשים בממוצע הרמוני ולא בממוצע רגיל?

ממוצע הרמוני מעניש בחומרה פער גדול בין Precision ל-Recall, ומתאפס לגמרי אם אחד מהם אפס — בעוד ממוצע חשבוני רגיל היה מסתיר את הפער ונותן ציון גבוה מדי למודל חד-צדדי.

מה ההבדל בין F1 ל-F2 או F0.5?

כולם מקרים פרטיים של נוסחת F-beta הכללית. F1 נותן משקל שווה ל-Precision ול-Recall. F2 נותן משקל גדול יותר ל-Recall (מתאים כשפספוס יקר יותר), ו-F0.5 נותן משקל גדול יותר ל-Precision.

למה לא מספיק להסתכל על Accuracy?

כשמחלקה חיובית נדירה יחסית לשלילית, מודל יכול להשיג Accuracy גבוה רק מכך שהוא תמיד מנחש 'שלילי' — בלי שיהיה שימושי בפועל. F1 מתמקד רק בביצועי המודל על המחלקה החיובית, ולכן פחות ניתן לרמות בו.

האם F1 מתאים לכל משימת-סיווג?

לא בהכרח. F1 מניח שעלות חיובי-כוזב ושלילי-כוזב שוות — הנחה שלא תמיד נכונה. כשעלות-הטעות שונה במובהק בין שני הכיוונים, F-beta עם β שונה מ-1 מתאים יותר.