ailiteracynepal 🇳🇵
पाठ आकार

अध्याय ४ · खण्ड I · 20 मिनेट

शुद्धता, र यसले किन झुटो बोल्छ

शुद्धता हरेक सुरुआतीले समात्ने पूर्वनिर्धारित मेट्रिक हो र हरेक वरिष्ठ अभ्यासकर्ताले शङ्का गर्ने मेट्रिक। यो खण्ड ध्यानवान् संस्करण हो। बेकार मोडेलमा शुद्धता 95% किन हुन सक्छ, र बरु के हेर्ने।

तपाईंले यो पाठ्यक्रममा अहिलेसम्म बनाएका हरेक वर्गीकरणकर्ताले शुद्धता सङ्ख्या रिपोर्ट गर्छ। यो सहज लाग्छ: लेबलसँग मेल खाने पूर्वानुमानको प्रतिशत। यो मेसिन लर्निङमा सबैभन्दा दुरुपयोग गरिएका मेट्रिक्समध्ये पनि एक हो, र दर्जनौं उच्च-प्रोफाइल तैनात मोडेल ठ्याक्कै असफल भएका छन् किनभने कसैले “94% शुद्धता” रिपोर्ट गर्‍यो र थप हेरेन। यो खण्ड शुद्धता सङ्ख्या कसरी पढ्ने ध्यानवान् संस्करण हो — र कहिले विश्वास गर्न इन्कार गर्ने।

शुद्धता के हो, ठ्याक्कै

वर्गीकरणकर्ताका लागि, शुद्धता जमिनी-सत्य लेबलसँग मेल खाने पूर्वानुमानको अंश हो:

accuracy = (number correct) / (total predictions)

बस त्यति नै। यो 0 र 1 बीचको एकल सङ्ख्या हो (प्रायः प्रतिशतका रूपमा देखाइन्छ)। उच्च राम्रो हो।

कोडमा:

from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, predictions)

अहिलेसम्म परिचित। समस्या तब सुरु हुन्छ जब तपाईं सङ्ख्या पढ्नुहुन्छ यसले के भन्न सक्छ र सक्दैन नबुझी।

हराउनुपर्ने आधार शुद्धता

कुनै पनि शुद्धता सङ्ख्या मनाउनुअघि, आधार शुद्धता गणना गर्नुहोस् — सधैं सबैभन्दा सामान्य कक्षा पूर्वानुमान गर्दा तुच्छ मोडेलले पाउने स्कोर।

सन्तुलित बाइनरी वर्गीकरण (50/50 बाँड) का लागि, आधार 50% छ। यसभन्दा तलको सिक्का उछाल्नुभन्दा खराब हो।

95/5 असन्तुलित वर्गीकरण (95% कक्षा 0, 5% कक्षा 1) का लागि, आधार 95% हो — सबैका लागि कक्षा 0 पूर्वानुमान गरेर हासिल। 94% शुद्धता रिपोर्ट गर्ने मोडेल आधारभन्दा खराब छ, प्रभावशाली-देखिने सङ्ख्याका बावजुद।

import pandas as pd

# आधार: सधैं बहुसङ्ख्यक कक्षा पूर्वानुमान गर्नुहोस्
majority_class = y_train.value_counts().idxmax()
baseline_accuracy = (y_test == majority_class).mean()
print(f"Baseline (majority-class) accuracy: {baseline_accuracy:.3f}")

सधैं यो गणना गर्नुहोस्। सधैं यसको विरुद्ध तुलना गर्नुहोस्। आधार नहराउने मोडेल मोडेल होइन — यो बहुसङ्ख्यक कक्षा पूर्वानुमान गर्ने घुमाउरो तरिका हो।

शुद्धताले झुटो बोल्ने तीन क्लासिक तरिका

1. कक्षा असन्तुलन। माथिजस्तै। पाठ्यपुस्तकीय जाल; हरेक सुरुआती यसमा पर्छ। 5% डिफल्टरसहितको ऋण-डिफल्ट डाटासेट, 1% सकारात्मकसहितको रोग स्क्रिनिङ, 0.1% ठगीसहितको ठगी-पत्ता लगाउने डाटासेट — सबैले “predict no” मोडेललाई पूर्ण रूपमा बेकार हुँदै 95% शुद्धता स्कोर गर्न दिन्छन्।

2. लागत असमानता। 10 वास्तविक क्यान्सर छुटाउने र 990 गैर-क्यान्सर सही वर्गीकरण गर्ने मोडेलको 99% शुद्धता हुन्छ। 0 वास्तविक क्यान्सर छुटाउने तर 50 झुटा सकारात्मक फ्ल्याग गर्ने मोडेलको 95% शुद्धता हुन्छ। वास्तविक स्क्रिनिङ अनुप्रयोगमा, दोस्रो मोडेल धेरै उपयोगी छ — झुटा सकारात्मकले एक थप परीक्षणमा लैजान्छ, झुटा नकारात्मकले क्यान्सर छुटाउँछ। शुद्धताले दुवै प्रकारका गल्तीलाई बराबर व्यवहार गर्छ; वास्तविकताले गर्दैन।

3. वितरण सर्ने। परीक्षण शुद्धता तालिम कै वितरणबाट नमुना लिइएको परीक्षण सेटमा गणना गरिन्छ। यदि तैनाती वितरण फरक छ भने (Course 02 को ललितपुर-vs-कर्णाली उदाहरण सम्झनुहोस्), परीक्षण शुद्धताले वास्तविक-संसार शुद्धतालाई overstate गर्छ — कहिलेकाहीं नाटकीय रूपमा।

तीन फरक झुट, तीन फरक प्रतिक्रिया। हामी (1) र (2) लाई अर्को खण्डमा precision/recall र confusion मेट्रिक्ससँग सम्बोधन गर्छौँ। हामी (3) लाई Course 02 अध्याय 6 क्षेत्रमा सम्बोधन गर्छौँ — प्रति-समूह मूल्याङ्कन र प्रतिनिधि डाटासेट।

जालको कार्यगत उदाहरण

import numpy as np
from sklearn.dummy import DummyClassifier
from sklearn.metrics import accuracy_score, classification_report
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification

# 95/5 असन्तुलित बाइनरी वर्गीकरण समस्या बनाउनुहोस्
X, y = make_classification(
    n_samples=10000, n_features=10, weights=[0.95, 0.05],
    random_state=42,
)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42,
)

# आधार: सधैं बहुसङ्ख्यक पूर्वानुमान गर्नुहोस्
baseline = DummyClassifier(strategy="most_frequent")
baseline.fit(X_train, y_train)
print(f"Baseline accuracy: {accuracy_score(y_test, baseline.predict(X_test)):.3f}")

# वास्तविक मोडेल
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
print(f"Model accuracy:    {accuracy_score(y_test, model.predict(X_test)):.3f}")

# इमानदार रिपोर्ट
print(classification_report(y_test, model.predict(X_test)))

आउटपुट (चित्रात्मक):

Baseline accuracy: 0.950
Model accuracy:    0.952

              precision    recall  f1-score   support
           0       0.96      0.99      0.97      1900
           1       0.61      0.21      0.31       100

    accuracy                           0.95      2000

मोडेल आधारभन्दा हिस्सी माथि (0.952 vs 0.950) छ। classification report पढ्दा किन प्रकट हुन्छ: कक्षा 1 मा recall 21% छ — मोडेलले अल्पसङ्ख्यक केसका पाँचौं भाग समात्दै छ। मोडेलको अधिकांश “शुद्धता” प्रचुर बहुसङ्ख्यक कक्षालाई सही वर्गीकरण गर्नबाट आउँछ, जुन आधारले पनि गर्छ।

यदि तपाईं 95.2% सङ्ख्यामा रोकिनुभयो भने, तपाईंले आफूलाई र आफ्नो रिपोर्ट उपभोग गर्ने जुनसुकैलाई झुट बोल्नुहुनेछ। classification report ले सत्य भन्छ।

दार्शनिक टिप्पणी

शुद्धता खराब होइन। यो वैध मेट्रिक हो, गहिरो सहज, र तब रिपोर्ट गर्ने सही कुरा जब:

  • कक्षा सन्तुलित छन् (वा त्यसको नजिक)।
  • सबै गलत वर्गीकरणको लगत लगभग बराबर छ।
  • तालिम र तैनाती वितरण मेल खान्छन्।

जब ती तीन सर्त सत्य हुन्छन्, शुद्धता मोडेल प्रदर्शनको सफा सारांश हो। गल्ती शुद्धतालाई विश्वव्यापी रूपमा सूचनात्मक ठान्नु हो — यो होइन, र माथिका सर्त वास्तविक-संसार समस्यामा झन्डै कहिल्यै सबै पूरा हुँदैनन्।

परिपक्व चाल भनेको सधैं classification report हेर्ने (जुन हामी अर्को खण्डमा खोल्नेछौं), सधैं आधारसँग तुलना गर्ने, र यदि महत्त्वपूर्ण समूह छन् भने सधैं प्रति-समूह मूल्याङ्कन गर्ने हो।

आफ्नो बुझाइ जाँच्नुहोस्

Quick check

एक टिमले 1% बिरामीमा TB भएको डाटासेटमा 99% परीक्षण शुद्धतासहित क्षयरोग-स्क्रिनिङ वर्गीकरणकर्ता रिपोर्ट गर्छ। सबैभन्दा विचारशील पहिलो प्रतिक्रिया कुन हो?

Quick check

एक टिम सदस्यले तर्क गर्छिन्: 'हामीलाई आधार चाहिँदैन, मोडेलले 89% शुद्धता पाउँछ।' यो खण्डको तर्कमा, सही प्रतिक्रिया के हो?

अब के आउँछ

शुद्धताले झुटो बोल्छ। अर्को खण्डले नबोल्ने मेट्रिक्स भेट्छ: precision, recall, F1, र confusion मेट्रिक्स। सँगै तिनले तपाईंलाई वर्गीकरणकर्ताले के गरिरहेको छ, कुन कक्षामा, र यसका गल्ती कहाँ बस्छन् पढ्न दिन्छन्। यो तपाईंले कहिल्यै उत्पादन गर्ने हरेक इमानदार ML रिपोर्टको शब्दावली हो।