Home »
Blog »
AI/ML Engineer সিরিজ » Series 05 » Episode 05
Classification Evaluation: Accuracy কেন মিথ্যা বলে? Precision, Recall, F1, ROC-AUC
imbalanced data-র ফাঁদ (Series 05, Episode 05)
🟡 INTERMEDIATE
Series 05 — Classical Machine Learning
Episode 05 / 11
📑 এই পর্বে যা যা আছে
- ১. গল্প: ৯৯% accuracy-র ফাঁদ
- ২. সমস্যা: Accuracy কেন মিথ্যা বলে
- ৩. Confusion Matrix — সব metric-এর মা
- ৪. TP, FP, FN, TN — চারটা ঘর
- ৫. Precision — "যাদের হ্যাঁ বললাম, তারা কি সত্যি?"
- ৬. Recall — "সত্যিকারের হ্যাঁ-দের কতজন ধরলাম?"
- ৭. Precision vs Recall trade-off
- ৮. F1 Score — দুইয়ের ভারসাম্য
- ৯. ROC-AUC — threshold-নিরপেক্ষ মান
- ১০. কোড: সব metric (Churn P3-তে)
- ১১. কোন metric কখন? Bangladesh উদাহরণ
- ১২. Boss Question
- ১৩. Job Requirement Decoder
- ১৪. সাধারণ ভুল ও Interview Prep
- ১৫. হাতে-কলমে
- ১৬. Project Connection ও সারসংক্ষেপ
🧩 ১. গল্প: ৯৯% 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 — চারটা ঘর
- TP (True Positive): fraud ছিল, model fraud বলল — ঠিক।
- TN (True Negative): legit ছিল, model legit বলল — ঠিক।
- FP (False Positive): legit ছিল, model fraud বলল — ভুল অ্যালার্ম (গ্রাহক বিরক্ত)।
- FN (False Negative): fraud ছিল, model legit বলল — বিপজ্জনক মিস (টাকা লস)।
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 = 1.0 → নিখুঁত separator।
- AUC = 0.5 → random guessing (কয়েন টস)।
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 detection | Recall | fraud মিস করলে টাকা লস — FN ভয়ংকর |
| গ্রাহক-facing spam filter | Precision | ভালো mail spam-এ গেলে গ্রাহক ক্ষুব্ধ — FP খারাপ |
| GP churn (offer সস্তা) | Recall (threshold কম) | বেশি ঝুঁকিপূর্ণ ধরা ভালো, offer সস্তা |
| ক্যান্সার screening | Recall | রোগ মিস করা জীবনঘাতী |
| সাধারণ ভারসাম্য দরকার | F1 / ROC-AUC | imbalanced-এও সৎ 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।