पूर्वानुमान वितरण और विश्वास स्कोर की निगरानी
शिक्षार्थी पूर्वानुमान प्रायिकताओं को टाइम-सीरीज़ स्टोर में लॉग करेंगे, गतिशील औसत विश्वास का प्लॉट बनाएँगे और औसत विश्वास परिनियोजन सीमा से नीचे जाने पर संकेत देंगे।
पूर्वानुमान वितरण और विश्वास स्कोर की निगरानी, CoddyKit पर Machine Learning Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Machine Learning Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Machine Learning Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
केवल इनपुट की नहीं, पूर्वानुमानों की निगरानी क्यों करें
इनपुट विशेषताओं की निगरानी से डेटा-विचलन का पता चलता है, लेकिन इसके लिए हर विशेषता की निगरानी करनी पड़ती है। पूर्वानुमान की निगरानी एकल एकीकृत संकेत देती है: यदि इनपुट में किसी भी संयोजन के बदलाव से मॉडल अलग आउटपुट देने लगे, तो यह पूर्वानुमान वितरण में दिखाई देगा — भले ही कोई व्यक्तिगत विशेषता अपनी विचलन सीमा को पार न करे। पूर्वानुमानों की निगरानी इनपुट की निगरानी की पूरक है: यह सभी इनपुट पर मॉडल की एकीकृत प्रतिक्रिया देखकर उन बदलावों को पकड़ती है जिन्हें इनपुट निगरानी नहीं पकड़ पाती।
उत्पादन में पूर्वानुमानों का लॉग दर्ज करना
पूर्वानुमान निगरानी का आधार पूर्वानुमान लॉग है: प्रत्येक अनुमान अनुरोध की विशेषताएँ, अनुमानित लेबल, अनुमानित संभावनाएँ और टाइमस्टैम्प किसी डेटाबेस या फ़ाइल में संग्रहीत किए जाते हैं। विचलन या प्रदर्शन में गिरावट का पता चलने पर यह लॉग पिछला विश्लेषण संभव बनाता है। स्कीमा इस तरह डिज़ाइन करें कि इसमें अनुरोध ID (लेबल उपलब्ध होने पर वास्तविक लेबल से जोड़ने के लिए), मॉडल संस्करण और पूर्वानुमान संबंधी विवरणों के साथ विलंबता भी शामिल हो।
import datetime
import json
import os
import torch
import torch.nn.functional as F
PREDICTION_LOG = '/tmp/prediction_log.jsonl'
def predict_and_log(features, model, model_version='v1.2.3'):
import numpy as np
with torch.no_grad():
logits = model(torch.tensor(features, dtype=torch.float32).unsqueeze(0))
probs = F.softmax(logits, dim=1).squeeze().numpy()
pred_class = int(probs.argmax())
confidence = float(probs.max())
record = {
'timestamp': datetime.datetime.utcnow().isoformat(),
'model_version': model_version,
'predicted_class': pred_class,
'confidence': round(confidence, 4),
'probabilities': probs.tolist()
}
with open(PREDICTION_LOG, 'a') as f:
f.write(json.dumps(record) + '\n')
return pred_class, confidenceरोलिंग माध्य विश्वास स्कोर
औसत पूर्वानुमान विश्वास कॉन्सेप्ट ड्रिफ्ट के सबसे संवेदनशील शुरुआती चेतावनी संकेतों में से एक है। जब मॉडल अपने प्रशिक्षण-वितरण से बाहर के डेटा का सामना करता है, तो उसकी सॉफ्टमैक्स प्रायिकताएँ क्लासों में अधिक समान रूप से फैल जाती हैं (यानी समान वितरण के अधिक निकट हो जाती हैं), जिससे अधिकतम प्रायिकता घट जाती है। समय के साथ चलते औसत विश्वास का आलेख बनाएँ: परिनियोजन सीमा से लगातार नीचे गिरना (आमतौर पर कैलिब्रेशन विश्वास के 5वें प्रतिशतक पर निर्धारित) यह संकेत देता है कि मॉडल उत्पादन इनपुट के बारे में अनिश्चित हो रहा है।
import numpy as np
import pandas as pd
np.random.seed(42)
# Simulate confidence scores over 12 weeks
# First 6 weeks: healthy (high confidence)
week1to6 = np.random.beta(8, 2, 600) # mean ~0.8
# Last 6 weeks: degrading (lower confidence)
week7to12 = np.random.beta(3, 3, 600) # mean ~0.5
all_scores = np.concatenate([week1to6, week7to12])
dates = pd.date_range('2024-01-01', periods=len(all_scores), freq='h')
df = pd.DataFrame({'timestamp': dates, 'confidence': all_scores})
df['week'] = df['timestamp'].dt.isocalendar().week
weekly_mean = df.groupby('week')['confidence'].mean()
threshold = weekly_mean.iloc[:6].quantile(0.05) # 5th percentile of healthy period
print(f'Alert threshold: {threshold:.4f}')
for week, mean_conf in weekly_mean.items():
status = 'ALERT' if mean_conf < threshold else 'OK'
print(f'Week {week}: mean confidence = {mean_conf:.4f} [{status}]')पूर्वानुमानित क्लास वितरण की निगरानी
यदि मॉडल और वास्तविक दुनिया का डेटा एक-दूसरे के अनुरूप हैं, तो समय के साथ पूर्वानुमानित क्लासों का वितरण स्थिर रहना चाहिए। पूर्वानुमानित सकारात्मक दर में बदलाव — जैसे, प्रशिक्षण में द्विआधारी वर्गीकारक का 30% मामलों को सकारात्मक बताना, लेकिन उत्पादन में केवल 5% को — ड्रिफ्ट का मजबूत संकेत है। पूर्वानुमानित क्लास वितरण की साप्ताहिक निगरानी करें और जब किसी भी क्लास का अनुपात प्रशिक्षण आधार-रेखा से निर्धारित सीमा से अधिक विचलित हो, तब chi-squared परीक्षण का उपयोग करके चेतावनी दें।
import numpy as np
from scipy.stats import chi2_contingency
# Baseline class distribution from training predictions
train_predictions = np.array([0, 1]).repeat([700, 300]) # 70% neg, 30% pos
np.random.shuffle(train_predictions)
# Current week production predictions (shifted distribution)
prod_predictions = np.random.choice([0, 1], p=[0.92, 0.08], size=500)
train_counts = [np.sum(train_predictions == 0), np.sum(train_predictions == 1)]
prod_counts = [np.sum(prod_predictions == 0), np.sum(prod_predictions == 1)]
chi2, p_val, _, _ = chi2_contingency([train_counts, prod_counts])
print(f'Train distribution: {train_counts[0]/len(train_predictions):.2%} neg, {train_counts[1]/len(train_predictions):.2%} pos')
print(f'Prod distribution: {prod_counts[0]/len(prod_predictions):.2%} neg, {prod_counts[1]/len(prod_predictions):.2%} pos')
print(f'Chi-squared: {chi2:.2f}, p-value: {p_val:.4f}')
print('Prediction distribution drift:', p_val < 0.05)विश्वास कैलिब्रेशन: क्या प्रायिकताएँ भरोसेमंद हैं?
कैलिब्रेशन यह मापता है कि मॉडल की पूर्वानुमानित प्रायिकताएँ वास्तविक आवृत्तियों से मेल खाती हैं या नहीं। 80% विश्वास का पूर्वानुमान देने वाला पूरी तरह कैलिब्रेटेड मॉडल 80% मामलों में सही होना चाहिए। बिना कैलिब्रेशन वाले मॉडल — जो gradient boosting और deep learning में आम हैं — अत्यधिक या अपर्याप्त विश्वास वाली प्रायिकताएँ उत्पन्न करते हैं। विश्वसनीयता आरेख का उपयोग करके समय के साथ कैलिब्रेशन की निगरानी करें: विश्वास के आधार पर पूर्वानुमानों को खंडों में बाँटें और प्रत्येक खंड में पूर्वानुमानित तथा देखी गई सटीकता की तुलना करें।
import numpy as np
from sklearn.calibration import calibration_curve
np.random.seed(42)
# Overconfident model: high probabilities but not that accurate
y_true = np.random.binomial(1, 0.6, 1000)
y_prob_uncalibrated = np.clip(
np.random.beta(5, 2, 1000) * (y_true * 0.6 + 0.2), 0, 1
)
fraction_of_positives, mean_predicted = calibration_curve(
y_true, y_prob_uncalibrated, n_bins=10
)
print('Bin | Predicted | Observed')
for pred, obs in zip(mean_predicted, fraction_of_positives):
gap = abs(pred - obs)
status = '*** MISCALIBRATED' if gap > 0.1 else 'OK'
print(f'{pred:.2f} | {obs:.2f} {status}')अपेक्षित कैलिब्रेशन त्रुटि
Expected Calibration Error (ECE) कैलिब्रेशन की गुणवत्ता का सार प्रस्तुत करने वाला एकल अदिश मान है। यह सभी विश्वास-खंडों में पूर्वानुमानित विश्वास और देखी गई सटीकता के बीच के अंतर का भारित औसत होता है, जिसमें प्रत्येक खंड में मौजूद उदाहरणों की संख्या के अनुसार भार दिया जाता है। 0 के निकट ECE उत्कृष्ट कैलिब्रेशन दर्शाता है; 0.05 से अधिक ECE जाँच की आवश्यकता बताता है; 0.1 से अधिक ECE संकेत देता है कि पुनः कैलिब्रेशन के बिना मॉडल की प्रायिकताओं पर भरोसा नहीं किया जाना चाहिए।
import numpy as np
from sklearn.calibration import calibration_curve
def expected_calibration_error(y_true, y_prob, n_bins=10):
fraction_pos, mean_pred = calibration_curve(y_true, y_prob, n_bins=n_bins)
bin_sizes = []
bins = np.linspace(0, 1, n_bins + 1)
for i in range(n_bins):
in_bin = (y_prob >= bins[i]) & (y_prob < bins[i+1])
bin_sizes.append(in_bin.sum())
n = len(y_true)
ece = sum(
(bin_size / n) * abs(pred - obs)
for bin_size, pred, obs in zip(bin_sizes[:len(mean_pred)],
mean_pred, fraction_pos)
)
return round(ece, 4)
np.random.seed(42)
y_true = np.random.binomial(1, 0.5, 1000)
y_prob = np.random.beta(3, 3, 1000)
ece = expected_calibration_error(y_true, y_prob)
print(f'ECE: {ece}')
print('Calibration quality:', 'Good' if ece < 0.05 else 'Poor')कम-विश्वास वाले अनुरोधों को चिह्नित करना
उत्पादन में, निर्धारित विश्वास सीमा से नीचे वाले अनुरोधों को मानवीय समीक्षा या वैकल्पिक प्रक्रिया के लिए चिह्नित करें। उच्च जोखिम वाले क्षेत्रों में यह विशेष रूप से महत्वपूर्ण है: 51% डिफॉल्ट विश्वास वाला ऋण आवेदन अपने-आप अस्वीकार होने के बजाय मानवीय ऋण-मूल्यांकनकर्ता के पास जाना चाहिए। सीमा उस बिंदु पर निर्धारित करें जहाँ आपका व्यवसाय अनिश्चितता को स्वीकार कर सकता हो, और विश्लेषक की जाँच के लिए सभी चिह्नित अनुरोधों को पूर्ण फीचर वेक्टर तथा पूर्वानुमान सहित समीक्षा कतार में दर्ज करें।
import datetime
CONFIDENCE_THRESHOLD = 0.75
REVIEW_QUEUE = []
def predict_with_human_review(request_id, features, model_func):
pred_class, confidence = model_func(features)
result = {
'request_id': request_id,
'predicted_class': pred_class,
'confidence': confidence,
'timestamp': datetime.datetime.utcnow().isoformat(),
'needs_review': confidence < CONFIDENCE_THRESHOLD
}
if result['needs_review']:
REVIEW_QUEUE.append({**result, 'features': features})
print(f'Request {request_id} FLAGGED for review (conf={confidence:.2f})')
else:
print(f'Request {request_id} auto-decided: class={pred_class} (conf={confidence:.2f})')
return resultसमय-श्रृंखला डेटाबेस में पूर्वानुमान संग्रहीत करना
स्केलेबल निगरानी के लिए, पूर्वानुमान रिकॉर्ड को टाइमस्टैम्प इंडेक्स वाले PostgreSQL, InfluxDB जैसे समय-श्रृंखला स्टोर या क्लाउड विश्लेषण वेयरहाउस में लिखें। SQL विंडो फ़ंक्शनों का उपयोग करके समुच्चय मानों (प्रति घंटा/दैनिक औसत विश्वास, क्लास वितरण) पर क्वेरी चलाएँ। Grafana या किसी BI टूल में स्वचालित डैशबोर्ड स्थापित करें, जो हर घंटे रीफ़्रेश हों, ताकि टीम को बिना किसी निगरानी स्क्रिप्ट को मैन्युअल रूप से लिखे वास्तविक समय की दृश्यता मिलती रहे।
import psycopg2
import json
from datetime import datetime
# Schema (run once):
# CREATE TABLE prediction_log (
# id SERIAL PRIMARY KEY,
# request_id TEXT,
# model_version TEXT,
# predicted_class INT,
# confidence FLOAT,
# probabilities JSONB,
# timestamp TIMESTAMPTZ DEFAULT NOW()
# );
def log_prediction_to_db(conn, request_id, model_version, pred_class, confidence, probs):
cur = conn.cursor()
cur.execute(
'''INSERT INTO prediction_log
(request_id, model_version, predicted_class, confidence, probabilities)
VALUES (%s, %s, %s, %s, %s)''',
(request_id, model_version, pred_class, confidence, json.dumps(probs))
)
conn.commit()
print('DB logging function ready.')कैलिब्रेशन से परिनियोजन सीमाएँ निर्धारित करना
परिनियोजन विश्वास सीमा को अनुमान के बजाय कैलिब्रेशन डेटा का उपयोग करके चुनें। विभिन्न विश्वास सीमाओं पर ECE और सटीकता का आलेख बनाएँ: मॉडल किस विश्वास स्तर पर 95% सटीकता प्राप्त करता है? वही स्तर स्वतः-अनुमोदन सीमा बन जाता है। इससे नीचे के अनुरोध मानवीय समीक्षा के लिए भेजे जाते हैं। इस प्रकार विश्वास-आधारित मार्ग-निर्धारण प्रणाली बनती है, जो स्वतः-अनुमोदित अनुरोधों में उच्च सटीकता बनाए रखती है और अनिश्चित मामलों को मानवीय निर्णय के लिए भेजती है।
import numpy as np
np.random.seed(42)
# Calibrated model: high confidence = high accuracy
y_true = np.random.binomial(1, 0.6, 10000)
base_prob = np.where(y_true == 1, np.random.beta(7, 2, 10000),
np.random.beta(2, 7, 10000))
y_prob = np.clip(base_prob, 0, 1)
results = []
for threshold in np.arange(0.5, 0.96, 0.05):
mask = y_prob > threshold
if mask.sum() < 100:
break
acc = (y_true[mask] == (y_prob[mask] > 0.5)).mean()
coverage = mask.mean()
results.append({'threshold': round(threshold, 2), 'accuracy': round(acc, 3),
'coverage': round(coverage, 3)})
import pandas as pd
df = pd.DataFrame(results)
print(df.to_string(index=False))विश्वास में गिरावट पर चेतावनी देना
एक निर्धारित स्क्रिप्ट चलाकर विश्वास की दैनिक सांख्यिकी की गणना करें और यदि चलता औसत परिनियोजन सीमा से नीचे गिर जाए, तो चेतावनी उत्पन्न करें। z-score परीक्षण का उपयोग करें: गणना करें कि वर्तमान दैनिक औसत विश्वास प्रशिक्षण आधार-रेखा से कितने मानक विचलन नीचे है, और यदि यह 2 मानक विचलनों से अधिक हो, तो चेतावनी दें। यह तरीका कठोर रूप से निर्धारित सीमाओं के बिना विश्वास में होने वाले स्वाभाविक उतार-चढ़ाव के अनुसार अपने-आप अनुकूलित हो जाता है।
import numpy as np
# Training period confidence stats (computed once during deployment)
train_conf_mean = 0.82
train_conf_std = 0.08
Z_THRESHOLD = 2.0 # alert if > 2 std below baseline
def check_confidence_alert(daily_confidences):
daily_mean = np.mean(daily_confidences)
z_score = (train_conf_mean - daily_mean) / train_conf_std
status = 'ALERT' if z_score > Z_THRESHOLD else 'OK'
print(f'Daily mean: {daily_mean:.4f}')
print(f'Z-score below baseline: {z_score:.2f}')
print(f'Status: {status}')
return status
# Healthy day
check_confidence_alert(np.random.beta(8, 2, 500)) # mean ~0.8
print()
# Degraded day
check_confidence_alert(np.random.beta(3, 3, 500)) # mean ~0.5खंड-स्तरीय विश्वास निगरानी
समग्र विश्वास निगरानी उन समस्याओं को छिपा सकती है जो केवल कुछ विशिष्ट उपयोगकर्ता खंडों को प्रभावित करती हैं। किसी नए प्राप्त ग्राहक समूह के लिए विश्वास में तेज़ गिरावट के बावजूद मॉडल का कुल औसत विश्वास स्थिर रह सकता है। निगरानी को हमेशा प्रमुख आयामों के आधार पर विभाजित करें: ग्राहक-अवधि समूह, उत्पाद श्रेणी, भौगोलिक क्षेत्र और डिवाइस प्रकार। किसी विशिष्ट खंड में विश्वास की अचानक गिरावट अक्सर उस खंड के भीतर कॉन्सेप्ट ड्रिफ्ट का सबसे शुरुआती लक्षण होती है, इससे पहले कि उसका प्रभाव समग्र आँकड़ों में दिखाई दे।
import pandas as pd
import numpy as np
# Simulated prediction log
df = pd.DataFrame({
'segment': np.random.choice(['new_user', 'returning', 'premium'], 1000, p=[0.3, 0.5, 0.2]),
'confidence': np.random.beta(8, 2, 1000),
'week': np.random.choice(range(1, 9), 1000)
})
# Simulate drop for new_user segment in weeks 6-8
mask = (df['segment'] == 'new_user') & (df['week'] >= 6)
df.loc[mask, 'confidence'] *= 0.6
print(df.groupby(['week', 'segment'])['confidence'].mean().round(3).to_string())त्वरित जाँच
इस पाठ के Python के साथ मशीन लर्निंग संबंधी अवधारणाओं की अपनी समझ जाँचें।
पाठ का पुनरावलोकन
इस पाठ में आपने सीखा: टाइमस्टैम्प सहित पूर्वानुमानों को दर्ज करने से ऑडिट ट्रेल बनता है, जो पिछला विश्लेषण और वास्तविक समय की निगरानी दोनों संभव करता है, चलता औसत विश्वास और पूर्वानुमानित क्लास वितरण, लेबल के बिना मॉडल के क्षरण के शुरुआती चेतावनी संकेत हैं, और Expected Calibration Error यह मापता है कि पूर्वानुमानित प्रायिकताएँ कितनी भरोसेमंद हैं और इसकी समय के साथ निगरानी की जानी चाहिए। अगले भाग में हम Evidently AI लाइब्रेरी का उपयोग करके व्यापक स्वचालित ड्रिफ्ट रिपोर्ट बनाएँगे और उन्हें चेतावनी पाइपलाइन में एकीकृत करेंगे।
एआई शिक्षक के साथ Python सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “पूर्वानुमान वितरण और विश्वास स्कोर की निगरानी” पाठ निःशुल्क है?
हाँ—“पूर्वानुमान वितरण और विश्वास स्कोर की निगरानी” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Machine Learning Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Machine Learning Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“पूर्वानुमान वितरण और विश्वास स्कोर की निगरानी” में मैं क्या सीखूँगा?
शिक्षार्थी पूर्वानुमान प्रायिकताओं को टाइम-सीरीज़ स्टोर में लॉग करेंगे, गतिशील औसत विश्वास का प्लॉट बनाएँगे और औसत विश्वास परिनियोजन सीमा से नीचे जाने पर संकेत देंगे। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Machine Learning Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Machine Learning Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Machine Learning Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“पूर्वानुमान वितरण और विश्वास स्कोर की निगरानी” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Machine Learning Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Machine Learning Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- डेटा ड्रिफ्ट: समय के साथ विशेषता वितरण में बदलाव
- अवधारणा ड्रिफ्ट: X और Y के बीच संबंध बदलने पर
- पूर्वानुमान वितरण और विश्वास स्कोर की निगरानी
- Evidently AI के साथ डेटा-परिवर्तन चेतावनी पाइपलाइन बनाना