Practical MLপড়তে ৭ মিনিট লাগবে

কনফিউশন ম্যাট্রিক্স (Confusion Matrix)

ট্রু পজিটিভস (True positives), ফলস অ্যালার্ম (false alarms) — অর্থাৎ যে বিষয়গুলো মাপা সবচেয়ে বেশি জরুরি
true positive:সঠিক অ্যালার্ম (Correct alarm) · যেমন: সত্যিকারের আগুন ধরেছে এবং অ্যালার্ম বেজেছেfalse positive:ফলস অ্যালার্ম (False alarm) · যেমন: ভুল করে কেবল টোস্ট পুড়ে যাওয়ার কারণে অ্যালার্ম বেজে উঠেছেfalse negative:মিসড ডিটেকশন (Missed detection) · যেমন: সত্যিকারের আগুন ধরেছে, কিন্তু কোনো অ্যালার্ম বাজেনি

ধরা যাক, আপনার বাসায় একটি ফায়ার অ্যালার্ম (fire alarm) রয়েছে। এটি মূলত এই চারটি কাজ করতে পারে:

  • ট্রু পজিটিভ (True Positive বা TP) — সত্যিই আগুন লেগেছে এবং অ্যালার্মটি বেজে উঠেছে। পারফেক্ট। এটিই মূলত আপনার চাওয়া ছিল।
  • ট্রু নেগেটিভ (True Negative বা TN) — কোথাও কোনো আগুন নেই এবং কোনো অ্যালার্মও বাজেনি। এটাও পারফেক্ট বা ঠিক আছে। খুব সুন্দর শান্ত একটি রাত।
  • ফলস পজিটিভ (False Positive বা FP) — আপনি শুধু পাউরুটি বা টোস্ট পোড়াচ্ছিলেন, আর ফলস্বরূপ রাত ৩টায় খামোখাই অ্যালার্মটি চিৎকার করে বেজে উঠলো। এটি অনেক বিরক্তিকর একটি জিনিস হলেও, এতে অন্তত আপনি বেঁচে আছেন।
  • ফলস নেগেটিভ (False Negative বা FN)সত্যি সত্যিই আগুন লেগেছে, কিন্তু এখানকার ফায়ার অ্যালার্মটি তখনও চুপ করে আছে। আর আপনি ঘুমিয়ে আছেন। এটি হলো সবচেয়ে ভয়ংকর অবস্থা বা ওয়ার্স্ট কেস (worst case)

কনফিউশন ম্যাট্রিক্স (confusion matrix) হলো এমন একটি টেবিল যেখানে মূলত আপনার মডেলটি কোন ধরনের প্রেডিকশন বা অনুমান কতবার করেছে, সেগুলোর হিসাব রাখা হয়। এটিকে 'কনফিউশন' বলা হয় কারণ এটি আপনাকে ঠিক এ কথাটিই জানিয়ে দেয় যে, আপনার মডেলটি আসলে ঠিক কোন জায়গাতে গিয়ে কনফিউজড (confused) বা বিভ্রান্ত হচ্ছে

ম্যাট্রিক্সটি (matrix) পড়ার নিয়ম

একটি বাইনারি ক্লাসিফায়ারের (binary classifier) (যেমন: ফায়ার/নো-ফায়ার) ক্ষেত্রে কনফিউশন ম্যাট্রিক্স মূলত একটি 2×2 গ্রিড (grid) বা টেবিল হয়:

প্রেডিক্টেড (Predicted): আগুন আছে (Fire)প্রেডিক্টেড (Predicted): আগুন নেই (No Fire)
আসল (Actual): আগুন আছে (Fire)TP (সঠিক অ্যালার্ম)FN (আগুন মিস করেছে!)
আসল (Actual): আগুন নেই (No Fire)FP (ফলস বা ভুয়া অ্যালার্ম)TN (শান্ত ও নিরাপদ রাত)

এখান থেকে আসা মেট্রিক্সগুলো (The metrics that flow from it)

  • অ্যাকুরেসি (Accuracy) = (TP + TN) / Total — আপনি সবমিলিয়ে কতবার সঠিক হয়েছেন বা মডেলটি কতটা সঠিক হয়েছে
  • প্রিসিশন (Precision) = TP / (TP + FP) — আপনি যখন "আগুন (fire)" বলেন, তখন সেটি আসলেই কতটা সত্যি থাকে?
  • রিকল (Recall) = TP / (TP + FN) — সত্যিকারের আগুনের মধ্যে, আপনি ঠিক কতটা কভার করতে বা ধরতে পেরেছেন?
  • F1 স্কোর (F1 Score) = 2 × (Precision × Recall) / (Precision + Recall) — এটি মূলত প্রিসিশন এবং রিকলের হারমোনিক মিন (harmonic mean) বা গড়

ফায়ার অ্যালার্মের ক্ষেত্রে রিকলই (recall) সবচেয়ে বেশি গুরুত্বপূর্ণ। কারণ একটি আসল আগুন মিস করার চেয়ে বরং আপনার ১০ বার ফলস বা ভুয়া অ্যালার্ম শোনা ভালো, এতে করে অন্তত আপনার জীবন বেঁচে যাবে।

কনফিউশন ম্যাট্রিক্স (Confusion Matrix) তৈরি করা

from sklearn.metrics import confusion_matrix, classification_report
# আসল লেবেল (Actual labels) এবং প্রেডিকশন (predictions)
y_true = [1, 1, 1, 0, 0, 0, 1, 0, 1, 0]
y_pred = [1, 0, 1, 0, 0, 1, 1, 0, 0, 0]
# 1 = আগুন আছে (fire), 0 = আগুন নেই (no fire)
cm = confusion_matrix(y_true, y_pred)
print("কনফিউশন ম্যাট্রিক্স (Confusion Matrix):")
print(cm)
print()
print(classification_report(y_true, y_pred,
target_names=['আগুন নেই (No Fire)', 'আগুন আছে (Fire)']))
Output
কনফিউশন ম্যাট্রিক্স (Confusion Matrix):
[[4 1]
 [2 3]]

              precision    recall  f1-score
   আগুন নেই (No Fire)       0.67      0.80      0.73
      আগুন আছে (Fire)       0.75      0.60      0.67
  accuracy                           0.70

যখন অ্যাকুরেসি (accuracy) মিথ্যে প্রমাণ হয়

ভাবুন তো, একটি এয়ারপোর্টের নিরাপত্তায় ১,০০০ জন মানুষ পার হচ্ছে। তাদের মধ্যে মাত্র ২ জনের কাছে খুবই বিপজ্জনক কিছু আছে। তখন এক ফাঁকিবাজ ডিটেক্টর (detector) বা মডেল বললো "এখানে কেউই বিপজ্জনক নয় (nobody is dangerous)", আর এতে করে সে 998/1000 = ৯৯.৮% অ্যাকুরেসি (99.8% accuracy) নিয়ে পাস করে গেলো। শুনে এটা দারুণ মনে হলেও — এটি দুটো আসল হুমকি বা ডেঞ্জারকে পুরোপুরি মিস করেছে। আর এক্ষেত্রে এর রিকল (recall) হলো ০% (0%)

ঠিক এই কারণেই মূলত কনফিউশন ম্যাট্রিক্সের (confusion matrix) জন্ম হয়েছে। ভারসাম্যহীন বা ইমব্যালেন্সড ডেটাসেটগুলোর (imbalanced datasets) ক্ষেত্রে শুধুমাত্র অ্যাকুরেসির ওপর নির্ভর করা খুবই বিপজ্জনক。 এজন্য আপনাকে পুরো পরিস্থিতিটা দেখতে হবে: আপনার মডেলটি আসলে ঠিক কোন জায়গায় গিয়ে ফেইল বা ব্যর্থ হচ্ছে?

Note: ভুলের বা এররের (errors) "চরম মূল্য" প্রায়শই অসম বা সমান (asymmetric) হয় না। ক্যান্সার স্ক্রিনিংয়ের ক্ষেত্রে একটি ফলস নেগেটিভ (অর্থাৎ ক্যান্সারের আসল কেস মিস করে যাওয়া) একটি ফলস পজিটিভের (অর্থাৎ সাধারণ সমস্যাকে ভুল করে ক্যান্সার বলে চিকিৎসা করার) চেয়ে অনেক বেশি ভয়ংকর এবং খারাপ। তাই সবসময় নিজেকে প্রশ্ন করুন: আপনার নিজের কাজের ক্ষেত্রে কোন ধরনের ভুলটি বা এররটি আপনার জন্য বেশি ক্ষতির বা সমস্যার কারণ হতে পারে?

Key Metrics

🎯 অ্যাকুরেসি (Accuracy)
ক্লাসগুলো ভারসাম্যহীন বা ইমব্যালেন্সড (imbalanced) হলে, এটি আপনাকে দারুণভাবে বোকা বানাতে পারে
(TP+TN)/Total সবমিলিয়ে এর সঠিক হওয়ার হার
🔍 প্রিসিশন (Precision)
হাই প্রিসিশন (High precision) = খুব কম ফলস বা ভুয়া অ্যালার্ম
TP/(TP+FP) পজিটিভ (positive) প্রেডিকশনগুলোর গুণমান বা কোয়ালিটি
🔔 রিকল (Recall)
হাই রিকল (High recall) = খুব সামান্য কিছু মিস হবে (few missed cases)
TP/(TP+FN) আসল বা একচুয়াল (actual) পজিটিভগুলোর কভারেজ (Coverage)
⚖️ F1 স্কোর (F1 Score)
যখন আপনার প্রিসিশন (precision) এবং রিকল (recall) — উভয়েরই প্রয়োজন হবে, তখন এটি ব্যবহার করা হয়
হারমোনিক গড় বা মিন (Harmonic mean) উভয়ের ভালো ব্যালেন্স বা ভারসাম্য

ছোট কুইজ

একটি স্প্যাম ফিল্টার ১০০টি ইমেইলকে আটকে দিলো। যার মধ্যে ৯০টি আসলেই স্প্যাম ছিল এবং বাকি ১০টি খুবই আসল ও দরকারি (legitimate) ছিল। স্প্যাম ডিটেকশনের ক্ষেত্রে ফিল্টারটির প্রিসিশন (precision) কত হবে?
Challenge

পড়া চালিয়ে যান

মডেল ইভ্যালুয়েশন বা মূল্যায়ন (Model Evaluation)
অ্যাকুরেসি বা নির্ভুলতাই সবকিছু নয় — আসুন আরও ভালোভাবে আরওসি (ROC), এইউসি (AUC), এফ১ (F1) সম্পর্কে জেনে নিই
মেশিন লার্নিং ফেয়ারনেস (ML Fairness)
বায়াসড (Biased) বা পক্ষপাতমূলক ইনপুট দিলে, এর প্রেডিকশন বা আউটপুটও বায়াসড (biased) আসবে
ক্রস-ভ্যালিডেশন (Cross-Validation)
প্রতিটি ফোল্ডে (fold) টেস্ট করুন, যাতে কোনো ডেটাই নষ্ট না হয়