Regression Evaluation: MAE, MSE, RMSE, R² — model 'ভালো' মানে কী?

regression মেট্রিক বোঝা (Series 05, Episode 03)

🟢 BEGINNER Series 05 — Classical Machine Learning Episode 03 / 11

📑 এই পর্বে যা যা আছে

🧩 ১. গল্প: "model কি ভালো?" — Boss-এর সহজ প্রশ্ন, কঠিন উত্তর

গত episode-এ Rahim House Price model বানাল। খুশি হয়ে Boss-কে দেখাতে গেল। Boss একটাই প্রশ্ন করল: "ঠিক আছে, তোমার model কি ভালো?" Rahim থমকে গেল — সে জানে model prediction দেয়, কিন্তু "ভালো" মানে কী, সংখ্যায় বলবে কীভাবে?

Arif বলল: "একটা model বানানো সহজ; সেটা কতটা ভুল করছে সংখ্যায় বলতে পারাটাই আসল engineering। Boss-কে '৮৫% ভালো' বললে হবে না — বলতে হবে 'গড়ে model ৭ লাখ টাকা ভুল করে', সেটা business-এ গ্রহণযোগ্য কিনা তুমি ঠিক করবে। এখানেই evaluation metric।"

২. সমস্যা: "ভালো" মানে কী, সংখ্যায়?

Regression-এ prediction একটা সংখ্যা, আসল উত্তরও একটা সংখ্যা। তাই "ভালো" মানে — prediction গুলো আসল মানের কতটা কাছাকাছি। এই দূরত্ব (error) মাপার কয়েকটা standard উপায় আছে, প্রতিটা একটু ভিন্ন গল্প বলে। এদের নাম: MAE, MSE, RMSE, R²

মূল কথা: একটা সংখ্যা দিয়ে model-এর ভালোত্ব মাপা যায় না — কোন metric দেখছেন আর কেন, সেটা সমস্যার উপর নির্ভর করে। একজন engineer জানে কখন কোনটা।

📐 ৩. Error মাপার মূল ধারণা

প্রতিটা bাড়ির জন্য: error = actual − predicted (residual)। ৫টা বাড়ির উদাহরণ (লাখ টাকায়):

বাড়ি actual predicted error (actual-pred) 1 55 58 -3 2 82 76 +6 3 110 112 -2 4 60 50 +10 5 140 145 -5

এখন প্রশ্ন — এই আলাদা আলাদা error-গুলোকে একটা সংখ্যায় সারাংশ করব কীভাবে? সরাসরি যোগ করলে +আর− কাটাকাটি হয়ে ভুল ছবি দেবে। তাই বিভিন্ন metric বিভিন্ন কৌশল নেয়।

📊 ৪. MAE — Mean Absolute Error

সবচেয়ে সহজ: প্রতিটা error-এর absolute value (চিহ্ন ফেলে) নিয়ে গড় করুন।

MAE = mean(|error|) = (3 + 6 + 2 + 10 + 5) / 5 = 26 / 5 = 5.2 লাখ টাকা
ব্যাখ্যা: "model গড়ে ৫.২ লাখ টাকা ভুল করে।" — এটাই MAE-র বড় সুবিধা: target-এর একই একক, Boss-কে সহজে বোঝানো যায়। MAE outlier-এর প্রতি অপেক্ষাকৃত সহনশীল (robust), কারণ বড় ভুলকে বাড়তি শাস্তি দেয় না।

📈 ৫. MSE — Mean Squared Error

প্রতিটা error বর্গ (square) করে গড়:

MSE = mean(error^2) = (9 + 36 + 4 + 100 + 25) / 5 = 174 / 5 = 34.8 (একক: লাখ^2 — ব্যাখ্যা করা কঠিন)
বর্গ করার ফলে বড় ভুল অনেক বেশি শাস্তি পায় (১০-এর বর্গ ১০০, ২-এর বর্গ ৪)। তাই যদি বড় ভুল খুব ক্ষতিকর হয় (যেমন দাম ৫০ লাখ ভুল), MSE সেটা তীব্রভাবে ধরিয়ে দেয়। অসুবিধা: একক বর্গ হয়ে যায় (লাখ²), মানুষকে বোঝানো কঠিন — এজন্যই RMSE।

📉 ৬. RMSE — Root Mean Squared Error

MSE-এর বর্গমূল (square root):

RMSE = sqrt(MSE) = sqrt(34.8) = 5.9 লাখ টাকা
RMSE = MSE-এর "বড় ভুলকে শাস্তি" গুণ + MAE-এর "একই একক" সুবিধা — দুটোরই সেরা দিক। তাই বাস্তবে RMSE সবচেয়ে বেশি reported। খেয়াল করুন RMSE (৫.৯) > MAE (৫.২) — এই ব্যবধান বলছে কিছু বড় ভুল (বাড়ি ৪-এর মতো) আছে। RMSE ≈ MAE হলে বুঝবেন error গুলো মোটামুটি সমান।

🎯 ৭. R² — Coefficient of Determination

উপরের তিনটা error-এর একক থাকে, কিন্তু "৫.৯ লাখ ভুল কি ভালো?" — সেটা দামের স্কেলের উপর নির্ভর করে। একটা unit-free স্কোর (সাধারণত ০ থেকে ১): model target-এর কতটা তারতম্য (variance) ব্যাখ্যা করতে পারল।

উদাহরণ: R² = 0.85 মানে "model দামের তারতম্যের ৮৫% ব্যাখ্যা করতে পেরেছে"। তুলনার জন্য দারুণ, কিন্তু একা যথেষ্ট নয় — সবসময় একটা error metric (RMSE/MAE)-এর সাথে দেখুন।

💻 ৮. কোড: সব metric একসাথে (Project P2-তে)

কেন scikit-learn.metrics? সব standard metric একই জায়গায়, পরীক্ষিত ও দ্রুত — নিজে হাতে বর্গমূল হিসাব করার দরকার নেই:

import numpy as np from sklearn.metrics import ( mean_absolute_error, mean_squared_error, r2_score, ) y_true = np.array([55, 82, 110, 60, 140]) y_pred = np.array([58, 76, 112, 50, 145]) mae = mean_absolute_error(y_true, y_pred) mse = mean_squared_error(y_true, y_pred) rmse = np.sqrt(mse) # RMSE = sqrt(MSE) r2 = r2_score(y_true, y_pred) print(f"MAE : {mae:.2f} লাখ") print(f"MSE : {mse:.2f} (লাখ^2)") print(f"RMSE: {rmse:.2f} লাখ") print(f"R2 : {r2:.3f}") # আউটপুট (আনুমানিক): # MAE : 5.20 লাখ # MSE : 34.80 # RMSE: 5.90 লাখ # R2 : 0.968
নতুন sklearn-এ RMSE সরাসরি চাইলে mean_squared_error(y_true, y_pred, squared=False) দিতে পারেন, অথবা উপরের মতো নিজে np.sqrt করুন — দুটোই ঠিক।

🖼️ ৯. Visual: metric-রা কী দেখায়

actual - prediction = residual (কতটা দূরে) MAE : সব দূরত্বের সরল গড় → "গড়ে কত ভুল?" MSE : দূরত্ব^2-এর গড় → "বড় ভুল কি আছে?" (শাস্তি দেয়) RMSE : sqrt(MSE) → MSE-র শাস্তি + আসল একক R^2 : model বনাম "শুধু গড়" → "কতটা ভালো, ০–১ স্কেলে?"

🧭 ১০. কোন metric কখন? (decision guide)

পরিস্থিতিব্যবহার করুনকেন
Boss/stakeholder-কে বোঝানোMAE বা RMSEtarget-এর একই একক, সহজবোধ্য
বড় ভুল খুব ক্ষতিকরRMSE / MSEবড় error-কে বেশি শাস্তি দেয়
outlier অনেক, robust চাইMAEবড় ভুলে কম প্রভাবিত হয়
দুই model তুলনা (স্কেল-নিরপেক্ষ)unit-free, ০–১ স্কেল
Engineer perspective: সাধারণত আমি RMSE + R² একসাথে দেখাই, আর Boss-কে MAE-তে বলি ("গড়ে X টাকা ভুল")। কখনো শুধু একটা সংখ্যায় সিদ্ধান্ত নেবেন না।

💼 ১১. Boss Question

Boss: "এই MAE, RMSE, R² দিয়ে আমার ব্যবসার কী?"

উত্তর: ধরুন আপনি model দিয়ে property price দিচ্ছেন। MAE ৫ লাখ মানে গড়ে ৫ লাখ ভুল — ৮০ লাখের flat-এ সেটা হয়তো সহনীয়, কিন্তু ১০ লাখের জমিতে বিপর্যয়। এই metric-ই ঠিক করে দেয় model production-এ ছাড়া যাবে কিনা। খারাপ metric নিয়ে deploy করলে ভুল দামে deal হবে, সরাসরি টাকা লস। তাই evaluation = risk management।

🔎 ১২. Job Requirement Decoder

JD: "Ability to evaluate ML models using appropriate metrics."

১. কী বোঝায়? সমস্যা অনুযায়ী সঠিক metric বেছে model-এর মান মাপতে পারা।
২. কেন চায়? ভুল metric = ভুল সিদ্ধান্ত = production disaster।
৩. কোন সমস্যা সমাধান করে? "model কি deploy-যোগ্য?" — objective উত্তর দেয়।
৪. junior-এর কী জানা লাগে? MAE/MSE/RMSE/R² কী মাপে, একক কী, কখন কোনটা, sklearn-এ বের করা।
৫. এখনই master লাগবে না: MAPE, adjusted R², advanced statistical test।
৬. GitHub-এ কীভাবে দেখাবে? notebook-এ metric report + actual-vs-predicted plot + short interpretation।
৭. Interview: "RMSE vs MAE কখন?", "R² negative হয় কীভাবে?", "কেন শুধু একটা metric যথেষ্ট নয়?"

⚠️ ১৩. সাধারণ ভুল

ভুল ১: শুধু R² দেখে সিদ্ধান্ত → error metric ছাড়া R² অসম্পূর্ণ ছবি দেয়।

ভুল ২: Training set-এ metric মেপে খুশি হওয়া → সবসময় test set-এ মাপুন; training metric optimistic।

ভুল ৩: MSE-র সংখ্যা সরাসরি Boss-কে বলা → একক বর্গ (লাখ²), মানুষ বোঝে না; RMSE বলুন।

ভুল ৪: classification-এ RMSE ব্যবহার → classification-এর জন্য accuracy/F1 (E05), regression metric নয়।

ভুল ৫: "RMSE ৫" ভালো না খারাপ বলা target scale না জেনে → context ছাড়া কোনো error সংখ্যা অর্থহীন।

🎤 ১৪. Interview Prep

প্র: MAE আর RMSE-র মূল পার্থক্য?
উ: RMSE বড় ভুলকে বেশি শাস্তি দেয় (বর্গ করে); MAE সব ভুলকে সমান ওজন দেয়, outlier-এ robust।

প্র: RMSE > MAE হলে কী বোঝায়?
উ: কিছু বড় error আছে (error-এর variance বেশি)। সমান হলে error গুলো মোটামুটি একরকম।

প্র: R² = 0 মানে?
উ: model শুধু গড় বলার সমান — কোনো predictive value নেই।

প্র: R² negative হতে পারে?
উ: হ্যাঁ, model গড়ের চেয়েও খারাপ হলে (বিশেষত test set-এ)।

প্র: কেন একটার বেশি metric দেখেন?
উ: প্রতিটা এক দিক দেখায় (গড় ভুল, বড় ভুল, স্কেল-নিরপেক্ষ মান) — একসাথে পূর্ণ ছবি।

✍️ ১৫. হাতে-কলমে

১. E02-এর House Price model-এর test set-এ MAE, RMSE, R² তিনটাই বের করুন।
২. ইচ্ছে করে একটা prediction-এ বড় error ঢোকান (একটা মান ১০০ বাড়িয়ে দিন)। খেয়াল করুন RMSE MAE-র চেয়ে কত বেশি লাফ দেয় — এই থেকেই RMSE-র "বড় ভুলে সংবেদনশীলতা" বুঝবেন।
৩. একটা actual-vs-predicted scatter plot আঁকুন (Series 03-এর Matplotlib দিয়ে); নিখুঁত হলে বিন্দুগুলো ৪৫° রেখায় থাকবে।

🚀 ১৬. Project Connection ও সারসংক্ষেপ

এখন Project P2 (House Price)-কে আমরা সংখ্যায় বিচার করতে পারি — শুধু "বানালাম" নয়, "কতটা ভালো" বলতে পারি। এই evaluation অভ্যাসটাই E11-এর end-to-end project এবং flagship Career Assistant-এ প্রতিটা model deploy করার আগে "gate" হিসেবে কাজ করবে: metric গ্রহণযোগ্য না হলে production-এ যাবে না।

এই Episode-এ শিখলাম:

✓ MAE = গড় absolute ভুল (একই একক, robust, সহজবোধ্য)
✓ MSE = বর্গ করা ভুলের গড় (বড় ভুলকে শাস্তি, একক বর্গ)
✓ RMSE = sqrt(MSE) — শাস্তি + আসল একক, সবচেয়ে বেশি reported
✓ R² = model কতটা variance ব্যাখ্যা করল (০–১, negative-ও হতে পারে)
✓ কোন metric কখন — সমস্যা ও audience অনুযায়ী
✓ সবসময় test set-এ মাপুন, একাধিক metric একসাথে দেখুন
পরবর্তী Episode: Regression তো হলো — এবার Classification। Logistic Regression দিয়ে "হ্যাঁ/না" prediction, Customer Churn সমস্যা দিয়ে (Project P3 শুরু)।
© 2025 Sheikh Thanbir Alam. All Rights Reserved. thanbirtamim.github.io
এই লেখা মূল লেখকের সম্পত্তি — লিখিত অনুমতি ছাড়া কপি করে অন্য কোনো ওয়েবসাইট, ব্লগ, বই বা প্ল্যাটফর্মে প্রকাশ/বিতরণ করা কঠোরভাবে নিষিদ্ধ। Content may not be copied or republished without permission.