Classification Evaluation: Accuracy কেন মিথ্যা বলে? Precision, Recall, F1, ROC-AUC

imbalanced data-র ফাঁদ (Series 05, Episode 05)

🟡 INTERMEDIATE Series 05 — Classical Machine Learning Episode 05 / 11

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

🧩 ১. গল্প: ৯৯% accuracy-র ফাঁদ

Rahim gর্বভরে এসে বলল: "আমার fraud detection model-এর accuracy ৯৯.২%!" Maya (senior) ভ্রু কুঁচকে জিজ্ঞেস করল — "তোমার data-তে কত শতাংশ transaction আসলে fraud?" Rahim: "প্রায় ১%।" Maya হাসল: "তাহলে model যদি সব transaction-কে 'legit' বলে দেয়, তাও তো ৯৯% accuracy পাবে — একটাও fraud না ধরেই! তোমার model কি আদৌ fraud ধরছে?"

Rahim চুপ। সে confusion matrix বের করল — দেখা গেল ১০০টা fraud-এর মধ্যে model ধরেছে মাত্র ৩টা। ৯৯% accuracy, অথচ কাজের দিক থেকে model প্রায় অকেজো।

Maya: "এটাই accuracy paradox। imbalanced data-তে accuracy মিথ্যা বলে। তোমার লাগবে precision, recall, F1।"

২. সমস্যা: Accuracy কেন মিথ্যা বলে

Accuracy = (সঠিক prediction) / (মোট prediction)। সহজ, কিন্তু বিপজ্জনক যখন class imbalanced (একটা class অন্যটার চেয়ে অনেক বেশি)। fraud (১%), বিরল রোগ, churn — সব বাস্তব সমস্যাই সাধারণত imbalanced।

নিয়ম: class imbalanced হলে accuracy একা কখনো বিশ্বাস করবেন না। বরং দেখুন — model কি আসলে বিরল কিন্তু গুরুত্বপূর্ণ class (fraud/churn/রোগ) ধরতে পারছে? সেটা বলে precision ও recall।

🔲 ৩. Confusion Matrix — সব metric-এর মা

সব classification metric আসে একটা টেবিল থেকে — confusion matrix। binary সমস্যায় (positive = fraud/churn):

Predicted: হ্যাঁ Predicted: না Actual: হ্যাঁ | TP (ঠিক ধরল) | FN (মিস করল) | Actual: না | FP (ভুল অ্যালার্ম)| TN (ঠিক ছাড়ল) |

🔤 ৪. TP, FP, FN, TN — চারটা ঘর

FP আর FN-এর মধ্যে কোনটা বেশি ক্ষতিকর — সেটা business ঠিক করে। fraud-এ FN ভয়ংকর (fraud মিস); কিন্তু গ্রাহক-facing spam filter-এ FP বিরক্তিকর (ভালো mail spam-এ গেল)। এই পার্থক্যই metric বাছাই করায়।

🎯 ৫. Precision — "যাদের হ্যাঁ বললাম, তারা কি সত্যি?"

Precision = TP / (TP + FP)

Model যতগুলোকে "positive" বলল, তার কতভাগ আসলেই positive। FP-কে শাস্তি দেয়। উদাহরণ: ১০০ transaction-কে fraud বললাম, ৮০টা সত্যি fraud → precision 0.80. যখন ভুল অ্যালার্মের খরচ বেশি (গ্রাহক account ব্লক করে দিলাম, অথচ সে নির্দোষ) তখন precision গুরুত্বপূর্ণ।

🕸️ ৬. Recall — "সত্যিকারের হ্যাঁ-দের কতজন ধরলাম?"

Recall = TP / (TP + FN)

আসল positive-দের মধ্যে model কতভাগ ধরতে পারল। FN-কে শাস্তি দেয়। উদাহরণ: ১০০টা আসল fraud ছিল, model ৭০টা ধরল → recall 0.70. যখন মিস করার খরচ বেশি (fraud/ক্যান্সার মিস করা) তখন recall গুরুত্বপূর্ণ। Rahim-এর ৯৯% accuracy model-এর recall ছিল মাত্র 0.03 — এজন্যই সেটা অকেজো ছিল।

⚖️ ৭. Precision vs Recall trade-off

সাধারণত একটা বাড়ালে আরেকটা কমে। মনে আছে E04-এর threshold? threshold কমালে (0.5 → 0.3) model বেশি জিনিসকে "হ্যাঁ" বলে → recall বাড়ে, কিন্তু ভুল অ্যালার্মও বাড়ে → precision কমে। উল্টোটাও সত্য।

Recall বাড়াও
threshold কমাও। যখন মিস করা যাবে না (fraud, রোগ)। মূল্য: বেশি false alarm।
Precision বাড়াও
threshold বাড়াও। যখন ভুল অ্যালার্ম ব্যয়বহুল (গ্রাহক block)। মূল্য: বেশি মিস।

🎼 ৮. F1 Score — দুইয়ের ভারসাম্য

F1 = 2 * (Precision * Recall) / (Precision + Recall)

Precision ও recall-এর harmonic mean। কেন harmonic (সাধারণ গড় নয়)? কারণ একটা খুব কম হলে F1 টেনে নামায় — দুটোই ভালো হলে তবেই F1 বেশি। imbalanced data-তে single-number সারাংশ হিসেবে accuracy-র চেয়ে F1 অনেক সৎ।

📈 ৯. ROC-AUC — threshold-নিরপেক্ষ মান

উপরের metric-গুলো একটা নির্দিষ্ট threshold-এ মাপা। ROC curve সব threshold-এ True Positive Rate (recall) বনাম False Positive Rate আঁকে। AUC (Area Under Curve) হলো সেই curve-এর নিচের ক্ষেত্রফল — একটা single সংখ্যা (০.৫ থেকে ১)।

AUC ব্যাখ্যা: এলোমেলোভাবে একটা positive ও একটা negative নিলে, model positive-কে বেশি score দেওয়ার probability। threshold না বেছেই model-এর ranking ক্ষমতা তুলনা করতে দারুণ। তবে খুব imbalanced হলে precision-recall curve (PR-AUC) প্রায়ই বেশি তথ্যপূর্ণ।

💻 ১০. কোড: সব metric (Churn P3-তে)

from sklearn.metrics import ( accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, confusion_matrix, classification_report, ) # E04-এর churn model থেকে: preds (class), probas (probability) print("Accuracy :", accuracy_score(y_test, preds)) print("Precision:", precision_score(y_test, preds)) print("Recall :", recall_score(y_test, preds)) print("F1 :", f1_score(y_test, preds)) print("ROC-AUC :", roc_auc_score(y_test, probas)) # class নয়, probability! print("\nConfusion Matrix:\n", confusion_matrix(y_test, preds)) print("\nFull report:\n", classification_report(y_test, preds))
গুরুত্বপূর্ণ: roc_auc_score-এ predicted class নয়, probability (predict_proba-র output) দিন। এটা একটা খুব সাধারণ বাগ। আর classification_report এক নজরে সব class-এর precision/recall/F1 দেয় — interview demo-তে দারুণ।

🇧🇩 ১১. কোন metric কখন? Bangladesh উদাহরণ

সমস্যাযেটা বেশি জরুরিকেন
bKash fraud detectionRecallfraud মিস করলে টাকা লস — FN ভয়ংকর
গ্রাহক-facing spam filterPrecisionভালো mail spam-এ গেলে গ্রাহক ক্ষুব্ধ — FP খারাপ
GP churn (offer সস্তা)Recall (threshold কম)বেশি ঝুঁকিপূর্ণ ধরা ভালো, offer সস্তা
ক্যান্সার screeningRecallরোগ মিস করা জীবনঘাতী
সাধারণ ভারসাম্য দরকারF1 / ROC-AUCimbalanced-এও সৎ single সংখ্যা

💼 ১২. Boss Question

Boss: "আমাকে এত metric বুঝিয়ে লাভ কী? একটা সংখ্যা দাও।"

উত্তর: "স্যার, একটা সংখ্যাই বিপদ ডেকে আনে। আমাদের fraud model ৯৯% 'accurate' দেখাতে পারে অথচ ৯৭% fraud মিস করে — সরাসরি টাকা লস। তাই আমি বলি: 'model ১০০টা fraud-এর ৮৫টা ধরে (recall ০.৮৫), আর যাদের ব্লক করে তার ৯০% সত্যি fraud (precision ০.৯০)।' এই দুই সংখ্যাই আপনাকে বলবে আমরা কত টাকা বাঁচাচ্ছি আর কত গ্রাহক বিরক্ত করছি।" — metric = সরাসরি টাকা ও গ্রাহক অভিজ্ঞতা।

🔎 ১৩. Job Requirement Decoder

JD: "Strong understanding of classification metrics (precision, recall, F1, ROC-AUC) and handling imbalanced data."

১. কী বোঝায়? accuracy-র বাইরে গিয়ে সঠিক metric দিয়ে classifier বিচার করা।
২. কেন চায়? বাস্তব সমস্যা (fraud/churn/health) প্রায় সবই imbalanced; ভুল metric = ভুল model deploy।
৩. কোন সমস্যা সমাধান করে? accuracy paradox থেকে বাঁচায়, business risk-এর সাথে metric মেলায়।
৪. junior-এর কী জানা লাগে? confusion matrix, precision/recall/F1/ROC-AUC-এর মানে ও trade-off, threshold-এর প্রভাব।
৫. এখনই master লাগবে না: PR-AUC-র গভীর গণিত, calibration, multi-class averaging-এর সূক্ষ্মতা (micro/macro নাম জানলেই যথেষ্ট)।
৬. GitHub-এ কীভাবে দেখাবে? Churn notebook-এ confusion matrix heatmap + ROC curve + কোন metric কেন বাছলেন তার লেখা।
৭. Interview: "Precision vs recall কখন?", "accuracy কখন মিথ্যা বলে?", "F1 কেন harmonic mean?", "ROC-AUC-এ কী input দেবেন?"

⚠️ ১৪. সাধারণ ভুল ও Interview Prep

ভুল ১: imbalanced data-তে শুধু accuracy → precision/recall/F1 দেখুন।

ভুল ২: roc_auc_score-এ class দেওয়া → probability দিন।

ভুল ৩: precision ও recall গুলিয়ে ফেলা → precision "যাদের হ্যাঁ বললাম", recall "আসল হ্যাঁ-দের কতজন"।

ভুল ৪: business context ছাড়া F1 optimize → কখনো recall, কখনো precision বেশি জরুরি।

ভুল ৫: imbalance সামলাতে কিছু না করা → class_weight='balanced', resampling, threshold টিউন — এগুলো ভাবুন।
🎤 Interview Prep

প্র: Accuracy কখন misleading? উ: class imbalanced হলে (majority বললেই বেশি accuracy)।

প্র: Precision আর recall এক লাইনে? উ: Precision = ভবিষ্যদ্বাণীর বিশুদ্ধতা (FP শাস্তি); Recall = আসল positive ধরার হার (FN শাস্তি)।

প্র: F1 কেন? উ: precision-recall-এর harmonic mean; একটা কম হলে টেনে নামায়, তাই ভারসাম্য বোঝায়।

প্র: ROC-AUC কী মাপে? উ: সব threshold জুড়ে positive/negative আলাদা করার ক্ষমতা (০.৫=random, ১=নিখুঁত)।

প্র: fraud-এ কোনটা বেশি জরুরি? উ: সাধারণত recall (fraud মিস করা যাবে না), তবে ভুল অ্যালার্মের খরচ দেখে precision-ও।

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

১. E04-এর churn model-এ precision, recall, F1, ROC-AUC সব বের করুন।
২. threshold 0.5 → 0.3 → 0.7 বদলে প্রতিটাতে precision ও recall লিখে রাখুন — trade-off টেবিল বানান।
৩. LogisticRegression(class_weight="balanced") দিয়ে retrain করে দেখুন recall বাড়ে কিনা।
৪. confusion matrix-কে Matplotlib দিয়ে heatmap হিসেবে আঁকুন — portfolio-তে সুন্দর দেখায়।

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

এখন Project P3 (Churn)-কে আমরা সৎভাবে বিচার করতে পারি — "accuracy ৯৫%" নয়, "recall ০.৮, precision ০.৭৫, AUC ০.৮৮"। flagship Career Assistant-এ যখন job-role classifier বানাব, তখন এই metric-ই বলবে model production-ready কিনা। পরের episode-এ আমরা আরও শক্তিশালী classifier — Decision Tree ও Random Forest — দিয়ে এই metric-গুলো উন্নত করার চেষ্টা করব।

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

✓ imbalanced data-তে Accuracy মিথ্যা বলে (accuracy paradox)
✓ Confusion Matrix → TP/FP/FN/TN → সব metric এখান থেকে
✓ Precision (FP শাস্তি) vs Recall (FN শাস্তি) ও তাদের trade-off
✓ F1 = harmonic mean; imbalanced-এ সৎ single সংখ্যা
✓ ROC-AUC = threshold-নিরপেক্ষ separability (probability input দিন)
✓ কোন metric কখন — business cost (FP vs FN) অনুযায়ী
পরবর্তী Episode: Decision Tree ও Random Forest — "নিয়ম দিয়ে সিদ্ধান্ত"। tree কীভাবে ভাগ করে, ensemble কীভাবে variance কমায়, আর feature importance।
© 2025 Sheikh Thanbir Alam. All Rights Reserved. thanbirtamim.github.io
এই লেখা মূল লেখকের সম্পত্তি — লিখিত অনুমতি ছাড়া কপি করে অন্য কোনো ওয়েবসাইট, ব্লগ, বই বা প্ল্যাটফর্মে প্রকাশ/বিতরণ করা কঠোরভাবে নিষিদ্ধ। Content may not be copied or republished without permission.