Feeds:
Posts
Comments

Archive for March, 2020

মনে আছে ক্লাসিফিকেশনস সমস্যার জন্য আমরা ব্যবহার করেছিলাম অ্যাকুরেসির একটা পরিমাপ? আমাদের সুপারভাইজার মডেল কেমন পারফর্ম করছে তার একটা সামারি বোঝা যায় এই অ্যাকুরেসি থেকে। ক্লাসিফিকেশন সমস্যার সবচেয়ে সহজ ব্যাপারটা আমরা দেখেছি বাইনারি ক্লাসিফিকেশন এ। মেশিন লার্নিং সমস্যায় এটা বেশ কমন এবং কনসেপচুয়ালি আমাদের কাজে লাগে। বাইনারি ক্লাসিফিকেশন মানে হচ্ছে সেটার আউটকাম হবে পজেটিভ অথবা নেগেটিভ। হ্যাঁ অথবা না। আমাদের মডেল কেমন ফাংশন করছে সেটা নির্ভর করবে এই পজিটিভ এবং নেগেটিভ ক্লাস কতটা ভুল করছে তার ম্যাট্রিক্স এ। তবে এখানে একটা কথা আছে – পজেটিভ মানে সেটা যে ভালো বা সেটা আমাদেরকে বেশি বেনিফিট বা ভ্যালু দেয় সেরকম না কিন্তু। এটা নির্ভর করবে আমরা কি ধরনের স্টাডি করছি এবং তার অবজেক্টিভ কি? আবার নেগেটিভ মানে যে খারাপ সে রকম নাও হতে পারে, এটা নির্ভর করছে আমরা কি ধরনের আউটকাম আশা করছি।

একটা গল্প দিলে বোঝা যাবে বেশি। আমার পাঠকেরা আমাকে বেশি গল্প দিতে বলেন।

ধরা যাক আমরা একটা অ্যাপ্লিকেশন ডেভলপ করছি যার কাজ হচ্ছে একজন সম্ভাব্য রোগীকে স্ক্রিনিং করে আলাদা করে ফেলবে তার সেই রোগটা আছে অথবা নেই। এটাকে কিছুটা অটোমেটেড আর্লি ডিটেকশন বলতে পারি যাতে সেই সম্ভাব্য রোগী পুরোপুরি অসুস্থ হবার আগেই তাকে ঠিকমতো ট্রিটমেন্ট দেয়া যায়। শুরুতেই যদি টেস্টটা নেগেটিভ হয় তাহলে আমরা ধরে নেব সম্ভাব্য রোগী সুস্থ আছেন। এর পাশাপাশি যদি এই স্ক্রিনিং টেস্ট পজিটিভ হয় তাহলে সেই রোগীকে আরও বাড়তি টেস্ট এর মধ্যে দিয়ে যেতে হবে।

কিভাবে এটা সমস্যা হলো?

এখানে আমরা পজিটিভ ক্লাসকে আসলে নেগেটিভ ধারণা বলতে পারি, কারণ একজন রোগী যখন পজিটিভ হবেন – সেটা আসলে রোগীর কাছে একটা নেগেটিভ জিনিস। আসল কথা কেউ এখানে পজিটিভ হতে চাইবেন না। বরং এই স্ক্রিনিং টেস্ট এর আউটকাম যদি নেগেটিভ হয় সেটাই রোগীর জন্য পজিটিভ। অর্থাৎ আমরা চাইব টেস্টে যত নেগেটিভ হয় ততই ভালো। তাই বলে যে আমাদের মডেল সব সময় ঠিকমতো পজেটিভ বা নেগেটিভ আউটকাম দিতে পারবে সেটাও না। যখন আমাদের অ্যাপ্লিকেশন সত্যিকারের পজিটিভকে নেগেটিভ অথবা সত্যিকারের নেগেটিভকে পজেটিভ বলবে তখনই সমস্যা হয়ে যাবে দুদিকেই। এই ভুল দুদিকে হলেও দুদিকেই দু’ধরনের কনসিকোয়েন্স আছে। হয়তোবা একটা ভুল থেকে আরেকটা ভুলের মাশুল দিতে হবে অনেক বেশি, তবুও আমরা চাইব না কোনভাবেই এই দুই ধরনের ভুল হোক।

সারাজীবন জেনেছি দুধরনের জিনিস হতে পারে। পরে জানবো ভেতরের জিনিস।

১. পজিটিভ (P): স্যাম্পলের অবজারভেশন পজিটিভ, যেমন রোগ আছে একজন মানুষের, সত্যিকারের রোগ

২. নেগেটিভ (N): অবজারভেশন নেগেটিভ, মানে তার আসলে রোগ নেই, স্বাস্থ্যবান মানুষ

বাড়তি গল্প

৩. ট্রু পজিটিভ (TP): সত্যিকারের পজিটিভ মানে আসলে রোগ আছে, এবং প্রেডিকশনও তাই, পজিটিভ – ঠিক প্রেডিকশন করেছে – ট্রু প্রেডিকশন

৪. ফলস নেগেটিভ (FN): সত্যিকারের পজিটিভ মানে অবজারভেশন পজিটিভ, কিন্তু প্রেডিকশন ভুল করেছে, ভুল করে নেগেটিভ দিয়েছে – ফলস প্রেডিকশন

৫. ট্রু নেগেটিভ (TN): আসলে নেগেটিভ, মানে আমাদের অবজারভেশনে নেগেটিভ, এবং প্রেডিকশন এসেছে নেগেটিভ – ট্রু প্রেডিকশন

৬. ফলস পজিটিভ (FP): আসলে নেগেটিভ, মানে অবজারভেশন নেগেটিভ, তবে ভুলে প্রেডিকশন এসেছে পজিটিভ হিসেবে- ফলস প্রেডিকশন

গল্পে গল্পে কি কি ভুল হতে পারে?

প্রথম ভুল হবে যখন একজন সুস্থ মানুষকে সেই অ্যাপ্লিকেশনটা পজিটিভ হিসেবে দেখাবে, তখন সেই মানুষটাকে রোগী বলবো এবং তাকে পরবর্তী কয়েকটা টেস্ট এর মধ্যে দিয়ে যেতে হবে। এতে সমস্যা দুটো। প্রথমত, সেই মানুষটি মানসিকভাবে বিপর্যস্ত হয়ে পড়বে, দ্বিতীয়তঃ তার খরচ বাড়তে থাকবে নতুন টেস্টগুলোর জন্য। এই ভুল পজিটিভ প্রেডিকশন কে আমরা বলি ‘ফলস পজিটিভ’। এটাকে পরিসংখ্যানের ভাষায় আমরা বলি টাইপ ১ এরর।

তবে, দ্বিতীয় ভুলটি ভয়াবহ। একজন সত্যিকারের রোগীকে এই অ্যাপ্লিকেশন নেগেটিভ হিসেবে ক্লাসিফাই করবে, এর মানে হচ্ছে তাকে আর পরবর্তী নতুন কোন টেস্ট এবং তার অ্যাসোসিয়েটেড ট্রিটমেন্ট বাদ পড়ে যেতে পারে। এর ফলাফল সেই সত্যিকারের রোগীকে ভয়াবহ দিকে ঠেলে দিতে পারে। এ ধরনের ভুল যাকে আমরা বলছি ভুল নেগেটিভ প্রেডিকশন, তাকে আমরা মেশিন লার্নিং এ ভাষায় বলি ‘ফলস নেগেটিভ’। পরিসংখ্যানের ভাষায় আমরা এই ‘ফলস নেগেটিভ’কে বলি টাইপ ২ এরর।

এখানে কি চাইবো?

আমরা চাইবো যেকোনোভাবে যাতে আমাদের অ্যাপ্লিকেশন যত কম ‘ফলস নেগেটিভ’ দিতে পারে। ‘ফলস নেগেটিভ’ একটা ভয়াবহ জিনিস বিশেষ করে রোগের ক্ষেত্রে। সেই থেকে ‘ফলস পজিটিভ’ হলে আমরা সেই সুস্থ মানুষের কাছে ক্ষমা চেয়ে নেব। তবে আমরা চেষ্টা করব যাতে দুটো ভুলই কমে আসে আমাদের এপ্লিকেশনে।

আমাদের কি করনীয়?

বাইনারি ক্লাসিফিকেশনকে ঠিকমতো ইভালুয়েট করতে হলে একটা ভালো কম্প্রিহেনসিভ গাইডলাইন হচ্ছে ‘কনফিউশন মাট্রিক্স’ ব্যবহার করা। যখন আমাদের ক্লাসিফিয়ের তার প্রেডিকশন এ কনফিউজড হয়ে ভুল করবে, তখন আমাদের জানা দরকার সে আসলে কোন ভুল করতে অন্য কি ভুল করে ফেলল? বাইনারি ক্লাসিফিকেশন না হলে যদি অন্যান্য ক্লাসিফিকেশন নিয়ে কাজ কাজ করতাম, তাহলে কি হতো? ধরা যাক আমরা ডিজিট রিকগনিশন মানে সংখ্যকে ঠিকমতো ক্লাসিফাই করতে পারছে কিনা সেটা দেখতে চাইছি। তখন আমরা দেখতে চাইবো সংখ্যা ১ আসলে মিসক্লাসিফাই হয়ে অন্য কোন সংখ্যায় রূপান্তর হচ্ছে, অথবা সংখ্যা ৬ কতবার ভুল করে সংখ্যা ৮ এর মত করে ক্লাসিফাই হচ্ছে। বেশি বলে ফেললাম?

আচ্ছা ঠিক আছে, আমরা আপাতত বাইনারি ক্লাসিফিকেশন নিয়েই থাকি। যেহেতু বাইনারি ক্লাসিফিকেশন এর আউটকাম মাত্র দুটো, এর মানে হচ্ছে আমাদের কনফিউশন ম্যাট্রিক্সের দুটো সারি এবং দুটো কলাম থাকবে। আমরা এভাবে বলতে পারি এটা একটা ২ বাই ৩ অ্যারে, যেখানে সারিগুলো রিপ্রেজেন্ট করছে সত্যিকারের আসল ক্লাসকে। ছবি দেখুন, মোট চারটা সেল। আমাদের কলামগুলো রিপ্রেজেন্ট করছে প্রেডিকটেড ক্লাসকে। এখানে প্রথম কলামে কতগুলো পজিটিভ স্যাম্পলকে পজেটিভ অথবা নেগেটিভ হিসেবে প্রেডিক্ট করেছে। এরপরের কলামে আমরা দেখব কতগুলো নেগেটিভ স্যাম্পলকে ভুল করে পজেটিভ অথবা নেগেটিভ হিসেবে প্রেডিক্ট করেছে।

আমরা হাতেকলমের মানুষ, দেখি হাতেকলমে।

https://github.com/raqueeb/Intermediate-scikit-learn/blob/master/book_plot_confusion_matrix.ipynb

Read Full Post »