मुख्य सामग्री पर जाएँ

मशीन लर्निंग में F1 स्कोर: प्रिसिजन और रिकॉल के बीच संतुलित मीट्रिक

जानें कि F1 स्कोर कैसे प्रिसिजन और रिकॉल को मिलाकर मॉडल का प्रदर्शन आँकता है। बाइनरी और मल्टीक्लास वर्गीकरण में इसका उपयोग, Python उदाहरणों सहित।
· 6 मि॰ पढ़ें

AI के साथ खोजें

ML-समर्थित मॉडल बनाते समय, मॉडल के प्रदर्शन का मूल्यांकन करना उतना ही महत्वपूर्ण है जितना उसका प्रशिक्षण। यद्यपि सटीकता (accuracy) अक्सर डिफ़ॉल्ट मीट्रिक होती है, यह भ्रामक हो सकती है, खासकर उन असंतुलित डेटासेट में जहाँ एक वर्ग डेटा पर हावी होता है। 

F1 स्कोर प्रिसिजन और रिकॉल का हार्मोनिक माध्य है। यह फॉल्स पॉज़िटिव और फॉल्स नेगेटिव के बीच समझौते (trade-off) को संतुलित करता है और मॉडल के प्रदर्शन का अधिक सटीक माप प्रदान करता है।

धोखाधड़ी पहचान, चिकित्सा निदान, स्पैम फ़िल्टरिंग और दोष पहचान जैसे अनुप्रयोगों में, केवल सटीकता पूरी कहानी नहीं बताती। कोई मॉडल उच्च सटीकता हासिल कर सकता है, लेकिन यदि वह दुर्लभ महत्वपूर्ण मामलों का पता लगाने में विफल रहता है, तो वह लाभ से अधिक नुकसान कर सकता है। F1 स्कोर इस जोखिम को कवर करता है। यदि आप अभी भी मूल्यांकन मीट्रिक के नए हैं, तो आगे बढ़ने से पहले आप Machine Learning Fundamentals in Python में मूल बातें देखना चाहेंगे।

F1 स्कोर क्या है?

F1 स्कोर किसी मॉडल के लिए प्रिसिजन और रिकॉल के बीच संतुलन को मापता है। इसका दायरा 0 से 1 तक होता है, जहाँ 1 का अर्थ है पूर्ण प्रिसिजन और रिकॉल, और 0 का अर्थ है कमजोर प्रदर्शन।

  • प्रिसिजन यह आकलन करने में मदद करता है कि मॉडल की सभी पॉज़िटिव भविष्यवाणियों में से कितनी सही थीं।
  • रिकॉल यह विश्लेषण करने के लिए अच्छा है कि सभी वास्तविक पॉज़िटिव में से कितनों को मॉडल ने सही वर्गीकृत किया। 

F1 स्कोर दोनों को एक एकल आंकड़े में जोड़ता है, उन मॉडलों को दंडित करता है जो एक पर अच्छा प्रदर्शन करते हैं लेकिन दूसरे पर नहीं। उदाहरण के लिए, जो मॉडल बहुत अच्छा रिकॉल करता है लेकिन बहुत सटीक नहीं है, वह सभी पॉज़िटिव उदाहरणों को सही तरह से पकड़ सकता है, लेकिन बहुत अधिक फॉल्स पॉज़िटिव दे देगा। F1 माप सुनिश्चित करता है कि दोनों मानकों को साथ में लिया जाए। 

F1 स्कोर का सूत्र और व्याख्या

F1 स्कोर का सूत्र है:

F1 score formula

जहाँ प्रिसिजन इस प्रकार परिभाषित है:

precision formula

और रिकॉल का समीकरण है:

recall formula

यहाँ, TP = True Positives, FP = False Positives, और FN = False Negatives।

यहाँ हार्मोनिक माध्य को अंकगणित माध्य की जगह इसलिए लिया जाता है क्योंकि हार्मोनिक माध्य बड़ी असमानताओं को अधिक दंडित करता है। यदि प्रिसिजन उच्च हो लेकिन रिकॉल कम (या इसके विपरीत), तो F1 स्कोर में उल्लेखनीय गिरावट आती है, जो असंतुलन को दर्शाती है।

F1 स्कोर बनाम सटीकता (Accuracy)

सटीकता यह निर्धारित करती है कि कुल भविष्यवाणियों में से कितनी सही थीं:

क्लास-संतुलित सेट्स के लिए यह उपयोगी है, लेकिन क्लास-असंतुलित समस्याओं में सटीकता भ्रामक हो सकती है।

उदाहरण:

यदि किसी स्पैम फ़िल्टरिंग सिस्टम में 90% स्पैम और 10% गैर-स्पैम संदेश हैं, तो एक भोला क्लासिफ़ायर जो सभी ईमेल को "spam" के रूप में वर्गीकृत करता है, 90% सटीकता प्राप्त कर लेता है लेकिन कभी भी गैर-स्पैम ईमेल को सही नहीं पहचानता। व्यवहार में यह बेकार है।

यहाँ, F1 माप अधिक सटीक है, क्योंकि यह फॉल्स पॉज़िटिव और फॉल्स नेगेटिव की लागत को ध्यान में रखता है, जो सटीकता नहीं रखती।

बाइनरी और मल्टीक्लास वर्गीकरण के लिए F1 स्कोर

बाइनरी वर्गीकरण

बाइनरी वर्गीकरण में, F1 स्कोर पॉज़िटिव क्लास के सापेक्ष निकाला जाता है। उदाहरण के लिए, चिकित्सा परीक्षण में पॉज़िटिव क्लास का अर्थ “रोग उपस्थित” हो सकता है।

मल्टीक्लास वर्गीकरण

मल्टीक्लास समस्याओं में, F1 स्कोर को औसतकरण विधियों द्वारा विस्तारित किया जाता है:

विधि

विवरण

श्रेष्ठ किसके लिए

मैक्रो

प्रत्येक क्लास के लिए F1 अलग से गणना करता है, फिर औसत लेता है।

संतुलित डेटासेट, सभी क्लासों को समान वरीयता।

वेटेड

क्लास सपोर्ट (प्रति क्लास नमूनों की संख्या) के अनुसार वेट देकर F1 स्कोर का औसत।

असंतुलित डेटासेट।

माइक्रो

सभी क्लासों के योगदान को एकत्र करके एक वैश्विक F1 की गणना करता है।

जहाँ समग्र प्रदर्शन अधिक महत्वपूर्ण हो।

यह लचीलापन F1 स्कोर को व्यापक प्रकार की वर्गीकरण समस्याओं में लागू बनाता है।

Python में F1 स्कोर कैसे गणना करें

scikit-learn लाइब्रेरी में F1 स्कोर की गणना के लिए सरल फ़ंक्शन शामिल हैं।

बाइनरी वर्गीकरण उदाहरण

एक सरल बाइनरी वर्गीकरण समस्या का मूल्यांकन करके शुरू करें जहाँ भविष्यवाणियाँ 0 या 1 होती हैं। f1_score() फ़ंक्शन सच और अनुमानित लेबल के आधार पर सीधे F1 स्कोर की गणना करता है।

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

मल्टीक्लास वर्गीकरण उदाहरण

अगले चरण में, आप इसी दृष्टिकोण को मल्टीक्लास समस्याओं तक बढ़ा सकते हैं, जहाँ मॉडल दो से अधिक क्लास की भविष्यवाणी करता है। average पैरामीटर नियंत्रित करता है कि क्लासों में F1 स्कोर कैसे संकलित किए जाएँ—सामान्य विकल्पों में 'macro', 'micro', और 'weighted' शामिल हैं।

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

जब हम मल्टी-क्लास या मल्टी-लेबल वर्गीकरण में F1 या Fβ की गणना करते हैं, तो हमें अलग-अलग क्लासों में स्कोर का औसत कैसे लें, यह तय करना होता है। scikit-learn में average पैरामीटर कुछ विकल्प देता है:

  • Binary दो क्लास के मामले में उपयोग होता है। हम पॉज़िटिव क्लास पर ध्यान केंद्रित करते हैं और मुख्यतः उसी के लिए precision, recall और F1 की गणना करते हैं।

  • Micro सभी क्लासों के योगदान को जोड़ता है और फिर औसत निकालकर औसत मीट्रिक की गणना करता है। व्यवहार में, यह सभी क्लासों में कुल true positives, false negatives और false positives को जोड़ता है और फिर इन पर आधारित प्रिसिजन, रिकॉल और F1 निकालता है। माइक्रो-एवरेजिंग क्लास असंतुलन की परवाह किए बिना समग्र प्रदर्शन देखने में सहायक है।

  • Macro: हम प्रत्येक क्लास के लिए मीट्रिक की गणना करते हैं और फिर उन्हें बिना वेट के औसत करते हैं। यह सभी क्लासों को समान व्यवहार प्रदान नहीं करता, इसलिए तब उपयुक्त है जब सभी क्लास समान रूप से महत्वपूर्ण हों, भले ही डेटासेट असंतुलित हो।

  • Weighted मैक्रो के समान है, लेकिन प्रत्येक क्लास को समान वेट नहीं देता। यह स्कोर को प्रति क्लास सही उदाहरणों की संख्या के अनुसार वेट करता है। इसका अर्थ है कि बड़े क्लास अंतिम स्कोर में अधिक योगदान देते हैं। जब हम क्लास वितरण की अनदेखी किए बिना संतुलित दृष्टि चाहते हैं, तो वेटेड एवरेजिंग उपयोगी है।

  • Samples: यह मल्टी-लेबल समस्याओं में उपयोग होता है, जहाँ एक सैंपल एक से अधिक क्लास का हो सकता है। यहाँ, प्रत्येक इंस्टेंस के लिए मीट्रिक की गणना की जाती है और फिर सभी इंस्टेंसेज़ पर औसत लिया जाता है।

औसत करने के ये विकल्प हमें समस्या परिदृश्य के अनुसार F1 या Fβ स्कोर को अनुकूलित करने देते हैं। उदाहरण के लिए, यदि हम दुर्लभ रोगों का वर्गीकरण कर रहे हैं जहाँ अल्पसंख्यक क्लास अत्यधिक महत्वपूर्ण हैं, तो मैक्रो या Fβ (जहाँ β > 1) उपयुक्त होगा। लेकिन यदि हमें सभी क्लासों पर क्लास-आधारित सटीकता चाहिए, तो माइक्रो या वेटेड एवरेजिंग बेहतर तस्वीर देता है।

अधिक उन्नत जरूरतों के लिए, scikit-learn fbeta_score() भी प्रदान करता है, जो F1 का सामान्यीकरण है। ऐसे टूल की गहन समझ Machine Learning Scientist in Python करियर ट्रैक का हिस्सा है।

Fβ स्कोर के साथ F1 स्कोर का सामान्यीकरण

Fβ स्कोर इस पर निर्भर करते हुए F1 स्कोर का सामान्यीकरण करता है कि प्राथमिक चिंता प्रिसिजन है या रिकॉल:

  • 𝛃 > 1 होने पर रिकॉल को अधिक वेट मिलता है।
  • 𝛃 < 1 होने पर प्रिसिजन पर अधिक जोर दिया जाता है।

उदाहरण

  • F2 स्कोर चिकित्सा निदान में लागू होता है जहाँ बीमारी छूट जाना (फॉल्स नेगेटिव) झूठे अलार्म से अधिक बुरा है।
  • F0.5 स्कोर स्पैम फ़िल्टरिंग में वांछनीय है, जहाँ फॉल्स पॉज़िटिव (वास्तविक ईमेल का गलत तौर पर स्पैम होना) अधिक महंगा पड़ता है।

उपयोग मामला: F1 बनाम सटीकता से डायबिटीज़ की पहचान

मान लें एक चिकित्सा डेटासेट में केवल 5% रोगियों को वास्तव में डायबिटीज़ है। डायबिटीज़ पहचान के लिए प्रशिक्षित मॉडल 95% सटीकता दिखा सकता है। लेकिन यह 95% सटीकता हर किसी के लिए हमेशा "no diabetes" भविष्यवाणी करके आसानी से हासिल की जा सकती है, जिससे यह मॉडल बेकार हो जाता है।

इसके बजाय, आइए मॉडल को मापने के लिए F1 स्कोर का उपयोग करें।

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

यहाँ F1 या F2 क्यों चुने?

  • भारी क्लास-असंतुलन के कारण सटीकता भ्रामक है।
  • F1 स्कोर सुनिश्चित करता है कि फॉल्स पॉज़िटिव (सामान्य रोगियों को डायबिटीज़ बताना) और फॉल्स नेगेटिव (डायबिटीज़ न पहचान पाना) दोनों का हिसाब हो।

इस उपयोग मामले में, रिकॉल मूल्यवान है क्योंकि छूटा हुआ निदान जीवन-परिवर्तनकारी हो सकता है। इसलिए F2 स्कोर अधिक उपयुक्त है क्योंकि यह रिकॉल को अधिक वेट देता है।

यह दर्शाता है कि नैदानिक उपयोग मामलों में सटीकता की तुलना में F1 परिवार के मीट्रिक अधिक व्यावहारिक और उपयोगी माप प्रदान करते हैं।

मुख्य निष्कर्ष

F1 स्कोर हमें याद दिलाता है कि मॉडल मूल्यांकन केवल अंकों का खेल नहीं है। यह वास्तव में हर भविष्यवाणी के पीछे के समझौते को समझने के बारे में है। यह महत्वपूर्ण है क्योंकि वास्तविक जीवन के अनुप्रयोगों में, एक महत्वपूर्ण मामला चूक जाना गंभीर परिणाम दे सकता है।

जैसे-जैसे आप मॉडल बनाते और परिष्कृत करते जाते हैं, F1 जैसे मीट्रिक के लिए अंतर्दृष्टि विकसित करना आपको संदर्भ-सचेत प्रदर्शन निर्णय लेने में मदद करेगा। इन संकल्पनाओं को वास्तविक डेटासेट पर लागू करने में अपनी कौशल को गहरा करने के लिए, Machine Learning Scientist with Python करियर ट्रैक देखें, जहाँ आप विभिन्न उपयोग मामलों में प्रभावी ढंग से मॉडल का मूल्यांकन, ट्यून और परिनियोजन करना सीखेंगे।

Vidhi Chugh

लेखक

Vidhi Chugh

मैं एक एआई रणनीतिकार और नैतिकतावादी हूं, जो डेटा साइंस, प्रोडक्ट और इंजीनियरिंग के संगम पर स्केलेबल मशीन लर्निंग सिस्टम बनाने का काम करता/करती हूं। दुनिया के "टॉप 200 बिज़नेस और टेक्नोलॉजी इनोवेटर्स" में सूचीबद्ध, मेरा लक्ष्य मशीन लर्निंग को सबके लिए सुलभ बनाना और जटिल शब्दावली को सरल करना है, ताकि हर कोई इस परिवर्तन का हिस्सा बन सके।

FAQs

मशीन लर्निंग में F1 स्कोर का महत्व क्या है?

F1 स्कोर प्रिसिजन (अनुमानित पॉज़िटिव में से कितने सही थे) और रिकॉल (वास्तविक पॉज़िटिव में से कितने पहचाने गए) का हार्मोनिक माध्य है। यह एक एकल मीट्रिक देता है जो दोनों प्रकार की त्रुटियों को परिलक्षित करता है।

असंतुलित डेटासेट में सटीकता के बजाय F1 स्कोर क्यों पसंद किया जाता है?

जब एक क्लास डेटा पर हावी हो, तो सटीकता भ्रामक हो सकती है, क्योंकि कोई मॉडल बहुसंख्यक क्लास की अच्छी भविष्यवाणी कर सकता है पर अल्पसंख्यक क्लास पर विफल हो सकता है। F1 स्कोर फॉल्स पॉज़िटिव और फॉल्स नेगेटिव दोनों को ध्यान में रखता है, जिससे ऐसे मामलों में अधिक निष्पक्ष मूल्यांकन मिलता है।

F1 और Fβ स्कोर में क्या अंतर है?

F1 स्कोर प्रिसिजन और रिकॉल को समान वेट देता है, जबकि Fβ स्कोर इस संतुलन को समायोजित करने देता है। उदाहरण के लिए, F2 रिकॉल को अधिक वेट देता है (चिकित्सा निदान में उपयोगी), और F0.5 प्रिसिजन को प्राथमिकता देता है (स्पैम पहचान में उपयोगी)।

एक अच्छा F1 स्कोर मान क्या होता है?

1 के करीब F1 स्कोर मज़बूत प्रिसिजन और रिकॉल दर्शाता है। “अच्छा” क्या है, यह डोमेन पर निर्भर करता है। उदाहरण के लिए, 0.8 स्वास्थ्य-सेवा में उत्कृष्ट हो सकता है, पर स्पैम पहचान में कम माना जा सकता है।

मैं Python में F1 स्कोर कैसे गणना कर सकता/सकती हूँ?

F1 स्कोर को scikit-learn के f1_score() फ़ंक्शन से आसानी से गणना किया जा सकता है। यह बाइनरी, मल्टीक्लास और मल्टीलेबल सेटिंग का समर्थन करता है और विभिन्न समाकलन रणनीतियों के लिए average पैरामीटर देता है।

विषय