Machine Learning Academy · पाठ

प्रतिगमन माप: MAE, MSE, RMSE और R-Squared

शिक्षार्थी प्रतिगमन आउटपुट पर त्रुटि मापों की गणना करेंगे, MAE/RMSE की पैमाने पर निर्भरता समझेंगे और फिट की गुणवत्ता के मानकीकृत माप के रूप में R-squared का उपयोग करेंगे।

पाठ 3, कुल 4 में से13 चरण

प्रतिगमन माप: MAE, MSE, RMSE और R-Squared, CoddyKit पर Machine Learning Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Machine Learning Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Machine Learning Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

प्रतिगमन के लिए अलग-अलग मापों की आवश्यकता क्यों होती है

प्रतिगमन मॉडल सतत मानों — घरों की कीमतें, तापमान और बिक्री की मात्रा — का अनुमान लगाते हैं। वर्गीकरण के विपरीत, जहाँ कोई पूर्वानुमान सही या गलत होता है, प्रतिगमन के पूर्वानुमान लगभग कभी भी बिल्कुल सही नहीं होते। प्रश्न यह है: पूर्वानुमान कितना गलत है? प्रतिगमन माप पूर्वानुमानित और वास्तविक मानों के बीच के अंतर को मापते हैं। अलग-अलग माप त्रुटियों को अलग-अलग महत्व देते हैं: कुछ छोटी त्रुटियों की तुलना में बड़ी त्रुटियों को अधिक दंडित करते हैं, कुछ असामान्य मानों के प्रति मजबूत होते हैं, और कुछ सामान्यीकृत होते हैं ताकि उन्हें समझाए गए विचरण के अंश के रूप में समझा जा सके। सही माप का चुनाव समस्या की त्रुटि-लागत संरचना पर निर्भर करता है।

import numpy as np

y_true = np.array([100, 150, 200, 250, 300], dtype=float)
y_pred = np.array([110, 140, 210, 240, 320], dtype=float)

errors = y_pred - y_true
print('Actual:   ', y_true)
print('Predicted:', y_pred)
print('Errors:   ', errors)  # Some positive, some negative
print('We need metrics that summarise these errors into a single number.')

MAE: माध्य निरपेक्ष त्रुटि

MAE = mean(|y_true - y_pred|)। Mean Absolute Error पूर्वानुमानों और वास्तविक मानों के बीच निरपेक्ष अंतरों का औसत निकालता है। यह लक्ष्य चर की समान इकाइयों में होता है — घर की कीमत के लिए $15,000 का MAE मतलब है कि पूर्वानुमान औसतन $15,000 से चूकते हैं। MAE सभी त्रुटियों को रैखिक रूप से देखता है: जो पूर्वानुमान दोगुना गलत है, उसकी लागत ठीक दोगुनी होती है। MAE असामान्य मानों के प्रति मजबूत होता है, क्योंकि यह त्रुटियों का वर्ग नहीं करता। जब त्रुटियों का वितरण लगभग सममित हो और असामान्य त्रुटियों को समग्र परिणाम पर हावी नहीं होना चाहिए, तब यह अनुशंसित माप है।

import numpy as np
from sklearn.metrics import mean_absolute_error

y_true = np.array([100, 150, 200, 250, 300], dtype=float)
y_pred = np.array([110, 140, 210, 240, 320], dtype=float)

# Manual calculation
mae_manual = np.mean(np.abs(y_true - y_pred))
print('Manual MAE:', mae_manual)  # |10|+|10|+|10|+|10|+|20| / 5 = 12

# Sklearn
mae = mean_absolute_error(y_true, y_pred)
print('Sklearn MAE:', mae)
print(f'Interpretation: predictions are off by {mae:.1f} units on average')

MSE: माध्य वर्ग त्रुटि

MSE = mean((y_true - y_pred)^2)। Mean Squared Error औसत निकालने से पहले प्रत्येक त्रुटि का वर्ग करता है। इससे MSE असामान्य मानों के प्रति संवेदनशील हो जाता है: 10 की त्रुटि वाला एक पूर्वानुमान MSE में 100 का योगदान देता है, जबकि 1 की त्रुटि वाला पूर्वानुमान केवल 1 का — असामान्य त्रुटियाँ वर्गानुसार बढ़ जाती हैं। MSE रैखिक प्रतिगमन के लिए स्वाभाविक हानि फलन है (MSE को न्यूनतम करने पर साधारण न्यूनतम वर्ग समाधान मिलता है)। इसकी इकाइयाँ लक्ष्य चर की इकाइयों का वर्ग होती हैं (घर की कीमतों के लिए dollars^2), इसलिए यह MAE की तुलना में कम आसानी से समझ आता है, लेकिन अनुकूलन के लिए गणितीय रूप से सुविधाजनक है।

import numpy as np
from sklearn.metrics import mean_squared_error

y_true = np.array([100, 150, 200, 250, 300], dtype=float)
y_pred = np.array([110, 140, 210, 240, 320], dtype=float)

# Squaring emphasises large errors
errors = y_true - y_pred
print('Squared errors:', errors**2)  # 100, 100, 100, 100, 400

mse = mean_squared_error(y_true, y_pred)
print(f'MSE: {mse}')  # 160.0
print(f'Units: (target units)^2 -- less interpretable than MAE')
print(f'The large error at last sample contributes 400/5=80 to MSE alone')

RMSE: मूल माध्य वर्ग त्रुटि

RMSE = sqrt(MSE)। Root Mean Squared Error वर्गमूल निकालकर MSE को लक्ष्य चर की मूल इकाइयों (dollars, न कि dollars^2) में वापस लाता है। यह सबसे अधिक रिपोर्ट किया जाने वाला प्रतिगमन माप है, क्योंकि यह लक्ष्य की समान इकाइयों में समझने योग्य होता है और फिर भी छोटी त्रुटियों की तुलना में बड़ी त्रुटियों को अधिक दंडित करता है। घर की कीमतों के लिए $20,000 का RMSE बताता है कि सामान्य त्रुटि का परिमाण $20,000 है, हालाँकि असामान्य त्रुटियों को MAE की तुलना में अधिक भार मिलता है। समान पूर्वानुमानों के लिए RMSE हमेशा >= MAE होता है; असामान्य त्रुटियाँ होने पर दोनों के बीच का अंतर बढ़ता है।

import numpy as np
from sklearn.metrics import mean_squared_error

y_true = np.array([100, 150, 200, 250, 300], dtype=float)
y_pred = np.array([110, 140, 210, 240, 320], dtype=float)

mse  = mean_squared_error(y_true, y_pred)
rmse = np.sqrt(mse)

print(f'MSE:  {mse:.2f} (units: target^2)')
print(f'RMSE: {rmse:.2f} (units: same as target)')

# RMSE always >= MAE
from sklearn.metrics import mean_absolute_error
mae = mean_absolute_error(y_true, y_pred)
print(f'MAE:  {mae:.2f}')
print(f'MAE <= RMSE: {mae <= rmse}')

MAE बनाम RMSE: किसका उपयोग कब करें

MAE चुनें जब: असामान्य मान अपेक्षित हों और आप नहीं चाहते कि वे माप पर हावी हों; आपको ऐसा माप चाहिए जिसे औसत त्रुटि के रूप में आसानी से समझा जा सके; अलग-अलग आकार की त्रुटियाँ अनुपातिक रूप से समान रूप से महत्वपूर्ण हों। RMSE चुनें जब: छोटी त्रुटियों की तुलना में बड़ी त्रुटियाँ बहुत अधिक महँगी हों (जैसे, बिजली की माँग का पूर्वानुमान — 1x से चूकने की तुलना में 10x से चूकना कहीं अधिक महँगा है); प्रशिक्षण में उपयोग किया गया हानि फलन MSE हो और आप मूल्यांकन को प्रशिक्षण के अनुरूप रखना चाहते हों; पूर्वानुमानों में विचरण माध्यिका त्रुटि से अधिक महत्वपूर्ण हो। व्यवहार में, हमेशा MAE और RMSE दोनों रिपोर्ट करें — यदि RMSE >> MAE है, तो असामान्य त्रुटियाँ हावी हैं; यदि RMSE ≈ MAE है, तो त्रुटियाँ समान रूप से वितरित हैं।

import numpy as np
from sklearn.metrics import mean_absolute_error, mean_squared_error

# Two prediction sets with same MAE but different RMSE
y_true = np.array([100.0, 200.0, 300.0, 400.0, 500.0])

# Set 1: uniform errors of 10
pred1 = y_true + 10

# Set 2: mostly 0 error, one huge error of 50
pred2 = y_true.copy()
pred2[-1] += 50
pred2[0:4] += 0

for name, pred in [('Uniform errors', pred1), ('One outlier error', pred2)]:
    mae  = mean_absolute_error(y_true, pred)
    rmse = np.sqrt(mean_squared_error(y_true, pred))
    print(f'{name}: MAE={mae:.2f}, RMSE={rmse:.2f}')

R-Squared: निर्धारण गुणांक

R^2 = 1 - MSE(model) / Var(y_true)। R-squared लक्ष्य में मौजूद उस विचरण के अंश को मापता है जिसे मॉडल समझाता है। R^2 = 1.0 का अर्थ है पूर्ण पूर्वानुमान (अवशिष्ट विचरण शून्य)। R^2 = 0.0 का अर्थ है कि प्रत्येक नमूने के लिए y के माध्य का पूर्वानुमान करने से मॉडल बेहतर नहीं है। यदि मॉडल माध्य-आधारित आधाररेखा से भी खराब हो, तो R^2 ऋणात्मक हो सकता है। R^2 मापनी से स्वतंत्र है — 0.85 का मान चाहे लक्ष्य घरों की कीमत हो या तापमान, एक ही अर्थ रखता है। इसलिए अलग-अलग समस्याओं या मापनियों पर प्रतिगमन मॉडलों की तुलना करने के लिए यह प्राथमिक माप है।

import numpy as np
from sklearn.metrics import r2_score

y_true = np.array([100, 150, 200, 250, 300], dtype=float)
y_pred = np.array([110, 140, 210, 240, 320], dtype=float)
y_mean = np.mean(y_true)

# Manual R^2
ss_res = np.sum((y_true - y_pred)**2)   # Residual sum of squares
ss_tot = np.sum((y_true - y_mean)**2)   # Total sum of squares
r2_manual = 1 - ss_res / ss_tot

print(f'SS_res (model): {ss_res}')
print(f'SS_tot (mean):  {ss_tot}')
print(f'R^2 manual: {r2_manual:.4f}')
print(f'R^2 sklearn: {r2_score(y_true, y_pred):.4f}')

समायोजित R-Squared: अतिरिक्त विशेषताओं पर दंड

प्रतिगमन मॉडल में अधिक विशेषताएँ जोड़ने पर प्रशिक्षण डेटा पर R^2 हमेशा बढ़ता है (या समान रहता है) — भले ही वे विशेषताएँ यादृच्छिक शोर हों। Adjusted R^2 विशेषताओं की संख्या पर दंड लगाकर इसे सुधारता है: जब आप ऐसी विशेषता जोड़ते हैं जो अतिरिक्त जटिलता को उचित ठहराने लायक मॉडल सुधार नहीं करती, तो यह घट जाता है। सूत्र: Adj R^2 = 1 - (1 - R^2) * (n-1) / (n-p-1), जहाँ n = नमूने और p = विशेषताएँ हैं। अत्यधिक जटिल मॉडल चुनने से बचने के लिए अलग-अलग संख्या वाली विशेषताओं के मॉडल की तुलना करते समय adjusted R^2 का उपयोग करें।

import numpy as np

def adjusted_r2(y_true, y_pred, n_features):
    n = len(y_true)
    r2 = r2_score(y_true, y_pred)
    return 1 - (1 - r2) * (n - 1) / (n - n_features - 1)

from sklearn.metrics import r2_score
from sklearn.linear_model import LinearRegression
import numpy as np

np.random.seed(42)
n = 100
X_2 = np.random.randn(n, 2)
X_10 = np.random.randn(n, 10)  # 8 noise features added
y = X_2[:, 0] * 2 + X_2[:, 1] + np.random.randn(n) * 0.5

for X, p in [(X_2, 2), (X_10, 10)]:
    pred = LinearRegression().fit(X, y).predict(X)
    print(f'p={p}: R^2={r2_score(y,pred):.3f}, Adj R^2={adjusted_r2(y,pred,p):.3f}')

MAPE: माध्य निरपेक्ष प्रतिशत त्रुटि

MAPE = 100 * mean(|y_true - y_pred| / |y_true|)। Mean Absolute Percentage Error त्रुटि को वास्तविक मान के प्रतिशत के रूप में व्यक्त करता है, जिससे यह मापनी से स्वतंत्र और आसानी से समझने योग्य बनता है: 5% का MAPE मतलब है कि पूर्वानुमान औसतन वास्तविक मान से 5% चूकते हैं। सीमाएँ: वास्तविक मान शून्य होने पर MAPE परिभाषित नहीं होता (शून्य से भाग देना), और यह असममित है — समान मात्रा से कम पूर्वानुमान करने पर अधिक पूर्वानुमान करने की तुलना में अधिक त्रुटि मिलती है। बिक्री और माँग जैसे पूर्वानुमान कार्यों के लिए MAPE का उपयोग करें, जहाँ हितधारक प्रतिशत विचलनों को स्वाभाविक रूप से समझते हैं।

import numpy as np

def mape(y_true, y_pred):
    y_true = np.array(y_true, dtype=float)
    # Avoid division by zero
    mask = y_true != 0
    return 100 * np.mean(np.abs((y_true[mask] - np.array(y_pred)[mask]) / y_true[mask]))

y_true = [100, 200, 300, 400, 500]
y_pred = [110, 190, 315, 380, 510]

print(f'MAPE: {mape(y_true, y_pred):.2f}%')

# Asymmetry example
print(f'Over by 50: MAPE = {mape([100],[150]):.1f}%')
print(f'Under by 50: MAPE = {mape([100],[50]):.1f}%')
# Underprediction by 50% gives 50% error; overprediction by 50% also 50% (same amount, asymmetric impact)

scikit-learn से प्रतिगमन मापों की गणना

Scikit-learn सभी प्रमुख प्रतिगमन माप sklearn.metrics में उपलब्ध कराता है। cross_val_score का उपयोग करते समय scoring='neg_mean_squared_error' दें (परंपरा के अनुसार अधिक मान बेहतर होने के कारण यह ऋणात्मक होता है) और परिणाम को ऋणात्मक करें, या सीधे RMSE के लिए 'neg_root_mean_squared_error' का उपयोग करें। R^2 के लिए scoring='r2' का उपयोग करें। हमेशा कई माप रिपोर्ट करें: औसत निरपेक्ष त्रुटि के लिए MAE, असामान्य मानों के प्रति संवेदनशीलता दिखाने के लिए RMSE और समझाए गए विचरण के लिए R^2। इससे मॉडल के प्रदर्शन की पूरी तस्वीर मिलती है।

from sklearn.linear_model import LinearRegression
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import cross_val_score
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
import numpy as np

X, y = fetch_california_housing(return_X_y=True)

for metric in ['neg_mean_absolute_error', 'neg_root_mean_squared_error', 'r2']:
    scores = cross_val_score(LinearRegression(), X, y, cv=5, scoring=metric)
    mean_val = scores.mean()
    if 'neg' in metric:
        mean_val = -mean_val
    print(f'{metric.replace("neg_",""):30}: {mean_val:.4f}')

अवशिष्ट विश्लेषण: मॉडल की गुणवत्ता का निदान

सारांश मापों से आगे, अवशिष्ट विश्लेषण यह बताता है कि मॉडल की धारणाएँ पूरी होती हैं या नहीं। अवशिष्टों (y_true - y_pred) का पूर्वानुमानित मानों के विरुद्ध आलेख बनाएँ। एक अच्छा मॉडल दिखाता है: (1) शून्य के आसपास बिना किसी पैटर्न के यादृच्छिक रूप से बिखरे अवशिष्ट (समविचरणीय), (2) अवशिष्ट के परिमाण और पूर्वानुमानित मान के बीच कोई संबंध नहीं (विषमविचरणता नहीं)। चेतावनी संकेत: कीप जैसी आकृति (पूर्वानुमानित मान के साथ अवशिष्ट बढ़ते हैं) बताती है कि मॉडल को लघुगणकीय रूपांतरण की आवश्यकता हो सकती है; घुमावदार पैटर्न बताता है कि संबंध अरैखिक है और मॉडल गलत रूप से निर्दिष्ट है। किसी भी प्रतिगमन मॉडल को परिनियोजित करने से पहले हमेशा अवशिष्ट विश्लेषण करें।

import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split

X, y = fetch_california_housing(return_X_y=True)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=42)

model = LinearRegression()
model.fit(X_tr, y_tr)
y_pred = model.predict(X_te)

residuals = y_te - y_pred

plt.figure(figsize=(8, 4))
plt.scatter(y_pred, residuals, alpha=0.3, s=10)
plt.axhline(0, color='red', linestyle='--')
plt.xlabel('Predicted Value')
plt.ylabel('Residual (Actual - Predicted)')
plt.title('Residual Plot')
plt.show()

सही प्रतिगमन माप चुनना

एक व्यावहारिक मार्गदर्शिका: MAE का उपयोग तब करें जब आप औसत निरपेक्ष त्रुटि को न्यूनतम करना चाहते हों और असामान्य मानों को अत्यधिक महत्व नहीं देना चाहते हों — सामान्य रिपोर्टिंग के लिए यह मजबूत विकल्प है। RMSE का उपयोग तब करें जब आपका मॉडल प्रशिक्षण के दौरान MSE को न्यूनतम करता हो और आप मूल्यांकन को उसके अनुरूप रखना चाहते हों, या जब बड़ी त्रुटियाँ विशेष रूप से महँगी हों (माँग का पूर्वानुमान, ऊर्जा का अनुमान)। समान डेटासेट पर मॉडलों की तुलना करने या गैर-तकनीकी हितधारकों को मॉडल की गुणवत्ता 'समझाए गए विचरण के प्रतिशत' के रूप में समझाने के लिए R^2 का उपयोग करें। व्यावसायिक पूर्वानुमान में MAPE का उपयोग करें, जहाँ वास्तविक मानों से प्रतिशत विचलन हितधारकों की स्वाभाविक भाषा होती है।

# Metric selection guide
def recommend_metric(has_outliers, need_interpretable_units, compare_across_scales):
    if compare_across_scales:
        return 'R^2 (scale-independent, 0-1 range)'
    elif need_interpretable_units and has_outliers:
        return 'MAE (same units as target, robust to outliers)'
    elif need_interpretable_units:
        return 'RMSE (same units, penalises large errors more)'
    else:
        return 'MSE (convenient for optimisation, same loss as linear regression)'

print(recommend_metric(True, True, False))   # MAE
print(recommend_metric(False, True, False))  # RMSE
print(recommend_metric(False, False, True))  # R^2

त्वरित जाँच

इस पाठ के Python सहित Machine Learning संबंधी अवधारणाओं की अपनी समझ जाँचें।

पाठ का पुनरावलोकन

इस पाठ में आपने सीखा: MAE पूर्ण त्रुटियों का औसत निकालता है और असामान्य मानों के प्रति अधिक मजबूत होता है, RMSE त्रुटियों का वर्ग करता है और बड़े विचलनों को अधिक दंडित करता है, R^2 समझाए गए विचरण के अंश को मापता है (0 = औसत आधाररेखा, 1 = पूर्ण परिणाम), और MAE तथा RMSE के बीच का अंतर त्रुटियों के असामान्य मानों में संकेंद्रण को उजागर करता है। अब हम आपके विशिष्ट व्यावसायिक समस्या के लिए सही मेट्रिक चुनने का तरीका देखेंगे।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
30
पाठ
120

अक्सर पूछे जाने वाले प्रश्न

क्या “प्रतिगमन माप: MAE, MSE, RMSE और R-Squared” पाठ निःशुल्क है?

हाँ—“प्रतिगमन माप: MAE, MSE, RMSE और R-Squared” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Machine Learning Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Machine Learning Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“प्रतिगमन माप: MAE, MSE, RMSE और R-Squared” में मैं क्या सीखूँगा?

शिक्षार्थी प्रतिगमन आउटपुट पर त्रुटि मापों की गणना करेंगे, MAE/RMSE की पैमाने पर निर्भरता समझेंगे और फिट की गुणवत्ता के मानकीकृत माप के रूप में R-squared का उपयोग करेंगे। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Machine Learning Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Machine Learning Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Machine Learning Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“प्रतिगमन माप: MAE, MSE, RMSE और R-Squared” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Machine Learning Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Machine Learning Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. वर्गीकरण माप: Accuracy, Precision, Recall, F1
  2. ROC वक्र और AUC-ROC
  3. प्रतिगमन माप: MAE, MSE, RMSE और R-Squared
  4. अपने व्यावसायिक प्रश्न के लिए सही माप चुनना
← Machine Learning Academy पर वापस जाएँ