সখী Confusion Matrix কারে কয়, সে কি কেবলই যাতনাময় !!!!

মেশিন লার্নিং যারা শুরু করে প্রথম দিকে একটা পেইন খায়। সেটা হচ্ছে আমি যে ক্লাসিফায়ারটা বানালাম সেটা কতখানি ভালো এইটা বিচার করা নিয়ে। এর জন্য একটা টার্ম ব্যাবহার করা হয়। সেটা হচ্ছে কনফিউশন ম্যাট্রিক্স। নামে যেমন কনফিউশন আছে কাজকামেও এইটা কনফিউশনের ব্যাপার। পুরাই ১০০%। এই পোস্টে এই কনফিউশন ভাঙ্গার একটু চেষ্টা চালানো হবে সহজভাবে।

আমরা প্রায় সবাই মনে হয় নীচের ছবিটা ফেসবুকে ভাইরাল হতে দেখেছি। ঢাকা সিটি কর্পোরেশনের উদ্যোগে এমন কিছু ডাস্টবিন রাস্তায় বসানো হয়েছিলো যাতে মানুষজন রাস্তায় ময়লা না ফেলে ডাস্টবিনে ফেলে। কিন্তু বীর বাঙ্গালী ডাস্টবিনই চুরি করে ফেলেছে 😀

Screen Shot 2016-05-08 at 7.05.16 PM

যাই হোক, খুনীদেরই পুলিশ ধরতে পারেনা আর ডাস্টবিন চোর তো দুরের ব্যাপার। তাই চলেন আমরা ব্যাপারটার একটা সুরাহা করি।

ধরা যাক, আমরা একটা রোবট পুলিশ বানালাম। যে রাস্তায় টহল দেবে হাঁটাহাঁটি করবে। কাউকে দেখে যদি মনে হয় যে সে ডাস্টবিন চুরি করতে পারে তাহলে সে তাকে (1) ঠাশ করে এক চড় দেবে। আর নতুবা (2) ধন্যবাদ দেবে। এগুলি সবই করতে হবে ডাস্টবিন চুরি করার আগে ফেসিয়াল এক্সপ্রেশন এনালাইসিস করে। সহজ বাংলায় কাউকে দেখে চোর চোর মনে হলেই ঠাশ। আমরা চাই ঘটনা ঘটার আগেই চোর ধরতে।

এখন এই রোবটের পারফরম্যান্স কেমন আমরা এইটা কেমনে বুঝবো? ধরা যাক রাস্তায় ১০০ জন মানুষ আছে যার মধ্যে ১০ জন চোর। তার মানে রোবট ৯০ জনকে ধন্যবাদ দেবে আর ১০ জনকে ঠাশ। এখন আমরা হিসাব করতে পারি যে রোবট কত পারসেন্ট চোরকে সাকসেসফুলি ঠাশ দিতে পেরেছে আর কতজন ভালো মানুষকে ধন্যবাদ বলেছে। তারমানে একুরেসি হিসাব করবো আমরা। ধরা যাক রোবট ৮০ জনকে ধন্যবাদ দিলো ২০ জনকে ঠাশ। এই ২০ জনের মধ্যে ৭ জন চোর। ৮০ জনের মধ্যে ৩জন চোর, ৭৭ জন ভালো মানুষ।

অভারল চিন্তা যদি করি যে কতজন চোরকে ঠাশ দিলো আর আর কতজন ভালো মানুষ ধন্যবাদ পেলো তাহলে, একুরেসী দারায়, ((৭৭+৭)/১০০)*১০০% = ৮৪%। নট ব্যাড। এ+

কিন্তু ভেজাল লাগলো অন্য জায়গায়। যেই ১৩ জন ভালো মানুষ ঠাশ খেলো এর মধ্যে একজন হচ্ছেন জনাব বান্টি মীর, যিনি গত কয়েকমাস ধরে মানুষজনকে সচেতন করে যাচ্ছেন শহরকে পরিষ্কার রাখতে। তাকে ঠাশ দেয়ায় সাধারণ মানুষ খেপে উঠলো। এইটা একটা ভুয়া রোবট। যদিও একুরেসী ৮৪%। বাকী ১২ জন ভালো মানুষও দিনে দুপুরে মানুষের সামনে অপদস্ত হলেন। এদের বিয়ে হবে কিনা এইটা নিয়ে এরা টেনশনে পড়ে গেলো। এবং ৮০ জনের মধ্যে যে ৩ জন চোর ছিলো তারা পরের দিন ডাস্টবিন চুরি করে বিক্রি করে কটকটি খেয়ে ফেললো।

তাহলে কি করা যায়?

আমরা এইবার একুরেসীর হিসাব উল্টিয়ে দিলাম (ধন্যবাদ পাওয়া মানুষের মধ্যে কত পারসেন্ট ভালো মানুষ) + রোবটে একটা চুরি করলাম। রোবট কাউকেই থাপ্পড় মারবেনা। সবাইকেই ধন্যবাদ দেবে। আগের বার চোর ধরার একুরেসী ৭/১০ *১০০% = ৭০% ছিলো। কিন্তু রোবট ১৩ জন ভালো মানুষকে ঠাশ দিয়ে ফেলেছে। এইটা সমস্যা। যাকে তাকে ঠাশ দেয়া যাবেনা। তাই এই ব্যাবস্থা। সবাই ধন্যবাদ পাক। খুশী থাকুক।

এইবার বান্টি মীর সাহেব ধন্যবাদ পেলেন, খুশী হলেন। আমরাও খুশী। রোবট ১০০ জনকেই ধন্যবাদ দিলো। এর মধ্যে ১০ জন চোর। তাতে কি? একুরেসী (৯০/১০০)*১০০% = ৯০%, আগে ছিলো ৮৪%। এই উন্নয়নের জোয়ারে সবাই খুশী। কিন্তু পরের দিনই ডাস্টবিন আবার চুরি গেলো? 🙁

কি করা যায়? আমাদের রোবটকে তো আর পারসেন্টেজ দিয়ে বিচার করা যাচ্ছেনা।

তাহলে চলেন একটু অন্যভাবে হিসাব করি।

ভালো মানুষ চোর
রোবট বলেছে ধন্যবাদ ৭৭ জন ৩ জন
রোবট দিয়েছে ঠাশ ১৩ জন ৭ জন

এই টেবিল বলছে যে,

১। ভালো মানুষ + রোবট বলেছে ধন্যবাদ এমন মানুষ ৭৭ জন

২। ভালো মানুষ + রোবট দিয়েছে ঠাশ এমন মানুষ ১৩ জন

৩। চোর মানুষ + রোবট বলেছে ধন্যবাদ এমন মানুষ ৩ জন

৪। চোর মানুষ + রোবট দিয়েছে ঠাশ এমন মানুষ ৭ জন

ভালো মানুষকে যদি পজিটিভ ধরি আর চোরকে যদি নেগেটিভ ধরি এবংরোবটের সঠিক সিদ্ধান্তকে ট্রু, ভুল সিদ্ধান্তকে ফলস ধরলে তাহলে,

১ নাম্বার ঘটনায় পজিটিভ মানুষ, ট্রু ডিসিশন। সুতরাং এটাকে আমরা বলবো ট্রু পজিটিভ (TP)

২ নাম্বার ঘটনায়, ফলস ডিসিশন একজন পজিটিভ মানুষকে বানিয়েছে নেগেটিভ। সুতরাং এটাকে আমরা বলবো ফলস নেগেটিভ (FN)

৩ নাম্বার ঘটনায় নেগেটিভ মানুষ ফলস ডিসিশন এর জন্য সমাজে পরিচিত হল পজিটিভ হিসাবে। সুতরাং এটাকে আমরা বলবো ফলস পজিটিভ (FP)

৪ নাম্বার ঘটনায় নেগেটিভ মানুষ, ট্রু ডিসিশন। সুতরাং এটাকে আমরা বলবো ট্রু নেগেটিভ (TN)

এখন আমরা উপরের টেবিলটাকে একটু অন্যভাবে দেখি।

ভালো মানুষ চোর
রোবট বলেছে ধন্যবাদ TP  FP
রোবট দিয়েছে ঠাশ FN  TN

আমরা এই ৪টা ঘটনার নাম্বারগুলি আর তাদের কোড যদি টেবিলে একসাথে বসাই তাহলে টেবিলটা দেখতে হবে এমন,

ভালো মানুষ চোর
রোবট বলেছে ধন্যবাদ TP=৭৭ FP=৩
রোবট দিয়েছে ঠাশ FN=১৩ জন TN=৭ জন

তাহলে আমাদের হাতে ৪ টা মিজারমেন্ট আছে। TP=77, FP=3, FN=13, TN=7

আর এই যে টেবিলটা দেখা যাচ্ছে এটাই হচ্ছে কনফিউশন ম্যাট্রিক্স। 😀

কিন্তু একটা দিয়ে কি হয়?

এই ৪ টা মিজারমেন্ট দিয়ে কয়েকটা হিসাব করা যায়।

১) Precision (প্রিসিশন) বিচার করে রোবট যাদের ধন্যবাদ দিলো তাদের মধ্যে কত পারসেন্ট মানুষ আসলেই ধন্যবাদ পাওয়ার যোগ্য। হিসাবের পদ্ধতি হলো, TP/TP+FP. সহজভাবে বললে, ধন্যবাদ অনেক দামী শব্দ। আমরা চাইনা রোবট যাকে তাকে ধন্যবাদ দিক। কোন চোরকে (নেগেটিভ) সে ধন্যবাদ দিয়ে মিথ্যাভাবে পজিটিভ (FP) বানিয়ে দিক।  প্রিসিশন যত ভালো হবে তত আমরা বুঝবো যে রোবট ভালো মানুষ বাছাইয়ের ক্ষেত্রে ভুল কম করছে। চোরকে সে ভালো মানুষ বলছেনা সহজে। আমাদের ক্ষেত্রে ৮০ জনের মধ্যে ৭৭ জন ধন্যবাদ পাওয়ার যোগ্য। আমাদের ক্ষেত্রে প্রিসিশন হচ্ছে (৭৭/ (৭৭+৩)*১০০% = ৯৬.২৫%। তারমানে রোবট বাঁদরের গলায় তেমন একটা মুক্তার মালা পড়ায়না। যাদেরকে সে ভালো বলে তারা ভালো হবার চান্স প্রায় ৯৬.২৫%।

২) Recall (রিকল) বিচার করে ধন্যবাদ পাওয়ার যোগ্য মানুষগুলির মধ্যে কতজন মানুষকে ধন্যবাদ দিতে পেরেছে রোবট। হিসাবের পদ্ধতি হলো, TP/TP+FN. সহজভাবে বললে, আমরা চাই সব ভালো মানুষকে যোগ্য সম্মান দিতে। কোন ভালো মানুষকে (পজিটিভ) চোর বলে অপমান করতে চাইনা। ফলস অভিযোগ এনে নেগেটিভ (FN) বানাতে চাইনা। আমাদের ক্ষেত্রে রিকল হচ্ছে (৭৭/ (৭৭+১৩))*১০০% = ৮৫.৫৬%।

 

আমাদের সিস্টেমের প্রিসিশন রিকলের তুলনায় ভালো। এইটা বুঝায় যে আমরা যাকে তাকে ধন্যবাদ দেইনা ঠিকি কিন্তু যাকেটাকে নির্বিচারে ঠাশ দিয়ে ফেলি 🙁

এখন এই দুইটা জিনিস দিয়ে আরেকটা স্ট্যাটিস্টিক্যাল মিজারমেন্ট ক্যাল্কুলেট করা হয়। সেইটাকে বলে F-score।

F-score = 2*precision*recall / (precision+recall)

= ২*৯৬.২৫*৮৫.৫৬ / (৯৬.২৫+৮৫.৫৬) = ৯০.৫৯%

 

একই সিস্টেমের একুরেসীর তুলনায় এফ-স্কোর কম। কারণ হচ্ছে আমাদের দুর্বল রিকল। রিকলে উন্নতি করলে এফ-স্কোরও ভালো হবে।

আমাদের রোবটটা ছিলো একটা ক্লাসিফায়ার সিস্টেম। যে দুইটা ক্লাস (ভালো/ চোর) সনাক্ত করতে পারতো। ক্লাসিফায়ার সিস্টেমকে জাজ করার জন্য এফ-স্কোর একটা ভালো মিজারমেন্ট। এবং কনফিউশন ম্যাট্রিক্স দিয়ে খুব  সহজেই এটা বের করা যায়।

ধন্যবাদ পড়ার জন্য 🙂

Facebook Comments

Leave a Comment.