Chapter 1 of 1
Updating what you believe when new evidence shows up
Bayes' Theorem হলো একটা ছোট্ট সমীকরণ, যেটা যুক্তির জগতের সবচেয়ে দরকারী প্রশ্নগুলোর একটার উত্তর দেয়: নতুন কোনো প্রমাণ (evidence) পেলে, আগের বিশ্বাসটাকে কীভাবে আপডেট করা উচিত?
এই থিওরিটা প্রথম লিখেছিলেন রেভারেন্ড টমাস বেইজ, আঠারো শতকে — তাঁর মৃত্যুর পর ১৭৬৩ সালে এটা প্রকাশিত হয়, আর পরে পিয়ের-সিমোঁ লাপ্লাস এটাকে আরও সাধারণ রূপ দেন। তারপর থেকে এটা পরিসংখ্যান, মেডিসিন, আইন, ইঞ্জিনিয়ারিং — আর এই কোর্সের জন্য সবচেয়ে গুরুত্বপূর্ণ, মেশিন লার্নিং-এর অন্যতম গুরুত্বপূর্ণ একটা আইডিয়ায় পরিণত হয়েছে। স্প্যাম ফিল্টার, মেডিকেল ডায়াগনসিস টুল, সার্চ ইঞ্জিন, ফ্রড ডিটেকশন সিস্টেম, আর Naive Bayes classifier নামের একটা পুরো মডেল-পরিবার — এগুলো সবই, ভেতরে ভেতরে, এই একটামাত্র ফর্মুলার বারবার প্রয়োগ।
Bayes' Theorem-কে বিশেষ করে তোলে কী? এটা যে গাণিতিকভাবে খুব জটিল, তা না — এই চ্যাপ্টারের শেষে দেখবে যে এটা মাত্র দুই লাইনের বীজগণিত থেকে বেরিয়ে আসে। এটাকে বিশেষ করে তোলে এর পেছনের চিন্তার ধরনটা: probability-কে জগতের একটা স্থির, অপরিবর্তনীয় বৈশিষ্ট্য হিসেবে না দেখে, এটাকে দেখা হয় এমন একটা বিশ্বাস হিসেবে, যেটা প্রমাণ আসার সাথে সাথে সংশোধিত হয়। ঠিক এই দৃষ্টিভঙ্গির পরিবর্তনটাই পুরো একটা পরিসংখ্যান-স্কুল (Bayesian statistics) আর আধুনিক মেশিন লার্নিং-এর বিশাল একটা অংশের ভিত্তি।
Bayes' Theorem তোমাকে বলে দেয়, প্রমাণ দেখার আগে যা বিশ্বাস করতে, সেখান থেকে প্রমাণ দেখার পরে যা বিশ্বাস করা উচিত — সেই পথে গাণিতিকভাবে সঠিকভাবে কীভাবে যাওয়া যায়।
সমস্যাটা সহজ ভাষায় বলি। প্রায়ই তুমি একটা conditional probability জানো, কিন্তু আসলে দরকার তার উল্টোটা — আর এই দুইটা এক সংখ্যা না।
ধরো তুমি জানো: "কারো যদি একটা নির্দিষ্ট রোগ থাকে, তার টেস্ট positive আসার সম্ভাবনা ৯০%।" এটা তথ্য হিসেবে দরকারী, কিন্তু এটা সেই প্রশ্ন না যেটা একজন রোগীর আসলে জানার দরকার। রোগী জানতে চায়: "আমার টেস্ট positive এসেছে — আমার আসলে রোগটা থাকার সম্ভাবনা কত?" এই দুইটা সম্পূর্ণ ভিন্ন প্রশ্ন, আর এই দুইটাকে গুলিয়ে ফেলা পরিসংখ্যানের সবচেয়ে সাধারণ আর মারাত্মক ভুলগুলোর একটা।
আর কোনো তথ্য ছাড়া, নিছক অনুমান দিয়ে একটা থেকে আরেকটায় যাওয়ার কোনো উপায় নেই — এমন একটা ফর্মুলা দরকার যেটা এই দুইটাকে সঠিকভাবে যুক্ত করে, রোগটা আসলে কত সাধারণ সেটাও হিসেবে ধরে। সেই ফর্মুলাটাই হলো Bayes' Theorem। মূলত এটা হলো conditional probability-কে সঠিকভাবে উল্টানোর একটা টুল।
ধরো তুমি একটা জানালাবিহীন রুমে ঢুকলে, আর কেউ বলল একটা কয়েন টস করা হয়েছিল: হেড বা টেইল, ৫০/৫০, আর কোনো তথ্য নেই। এটাই তোমার শুরুর বিশ্বাস — তোমার prior।
এখন কেউ তোমাকে একটা নতুন তথ্য দিলো: তারা বলল কয়েনটা এমন একটা পাশ দেখিয়ে পড়েছে যেখানে একটা মানুষের মুখের ছবি আছে (বেশিরভাগ কয়েনে যেটা হেডের বৈশিষ্ট্য, টেইলের না)। এই প্রমাণ প্রমাণ করে না যে এটা হেড, কিন্তু এটা তোমার বিশ্বাসকে সেদিকে একটু ঠেলে দেওয়া উচিত। তুমি আগের বিশ্বাস পুরোপুরি ফেলে দিয়ে নতুন করে শুরু করো না, আবার নতুন প্রমাণকেও অগ্রাহ্য করো না — তুমি দুইটাকে একসাথে মিলিয়ে একটা আপডেটেড বিশ্বাসে পৌঁছাও।
মানুষ এটাই অনানুষ্ঠানিকভাবে সবসময় করে:
Bayes' Theorem আসলে এই মিলানোর ধাপটা গাণিতিকভাবে সঠিকভাবে করার উপায় — শুধু অনুভূতি দিয়ে না — আর এই চ্যাপ্টারের পরের দিকে "Common Misconceptions" অংশে দেখবে, মানুষ নিজে নিজে এটা সঠিকভাবে করতে বিস্ময়করভাবে খারাপ।
Bayes' Theorem বোঝার আগে conditional probability নিয়ে স্বচ্ছন্দ হওয়া দরকার — একটা ইভেন্টের সম্ভাবনা, যখন আমরা জানি আরেকটা ইভেন্ট ইতিমধ্যে ঘটেছে বা সত্যি।
যেখানে:
ইনটুইশন: একবার জানলে B ঘটেছে, তোমার সম্ভাব্য "জগৎ" সংকুচিত হয়ে শুধু সেই আউটকামগুলোতে চলে আসে যেখানে B সত্যি। সেই সংকুচিত জগতের মধ্যে, জিজ্ঞেস করে: এর কত অংশে A-ও সত্যি?
একটা ছোট উদাহরণ। একটা ফেয়ার ছয়-পাশের ডাই রোল করো। = "ফলাফল জোড়" () আর = "ফলাফল ৩-এর বেশি" ()। তাহলে , তাই:
একবার জানলে রোলটা ৩-এর বেশি, বাকি তিনটা সম্ভাবনার () মধ্যে দুইটাই জোড় — তাই , যেটা unconditional জোড় হওয়ার সম্ভাবনা থেকে বেশ আলাদা।
সংজ্ঞার দুই পাশে দিয়ে গুণ করলে পাওয়া যায় product rule: । এই এক লাইনের সাজানোটাই নিচের সেকশনে Bayes' Theorem ডেরাইভ করার পুরো ইঞ্জিন — এটা মাথায় রাখো।
এই পুরো চ্যাপ্টারের সবচেয়ে গুরুত্বপূর্ণ সতর্কবাণী এটাই, কারণ এই দুইটা রাশিকে গুলিয়ে ফেলাকে বলা হয় base rate fallacy বা prosecutor's fallacy, আর এটা মেডিসিন, আইন, আর ডেটা সায়েন্সে বাস্তব, বড়সড় ভুলের জন্ম দেয়।
আর একদম আলাদা সংখ্যা হতে পারে, কারণ এরা আলাদা "জগৎ"-এর ওপর কন্ডিশন করছে।
উদাহরণ দিয়ে বুঝি। ভাবো:
এই দুইটা স্পষ্টতই আলাদা সংখ্যা, ভিন্ন প্রশ্নের উত্তর — যদিও একই দুইটা ইভেন্ট নিয়ে কথা হচ্ছে। আরেকটা ক্লাসিক উদাহরণ: "তুমি কুকুর হলে, তুমি খুব সম্ভবত স্তন্যপায়ী" (), কিন্তু "তুমি স্তন্যপায়ী হলে, তুমি কুকুর হওয়ার সম্ভাবনা কম" ( ছোট, কারণ বেশিরভাগ স্তন্যপায়ী প্রজাতিই কুকুর না)।
কোর্টরুমে মাঝেমধ্যে "নির্দোষ হলে এই প্রমাণ পাওয়ার সম্ভাবনা খুবই কম" — ভুলভাবে "এই প্রমাণ পেলে নির্দোষ হওয়ার সম্ভাবনা খুবই কম" হিসেবে উপস্থাপন করা হয়। এই দুইটা একই দাবি না, আর এদের সমান ধরার কারণে বাস্তবে ভুল রায়ও হয়েছে। Bayes' Theorem ঠিক এই কারণেই আছে — যাতে প্রথমটা থেকে দ্বিতীয়টা সঠিকভাবে হিসাব করা যায়।
Bayes' Theorem হলো সেই ফর্মুলা যেটা তোমাকে বৈধভাবে একটা থেকে আরেকটায় যেতে দেয় — কিন্তু শুধু তখনই, যখন প্রতিটা ইভেন্ট নিজে নিজে কতটা সাধারণ সেটাও হিসাবে ঢোকানো হয়। এই মিসিং উপাদানটাই সাধারণত ইনটুইশনে বাদ পড়ে যায়।
ডেরিভেশনটা ছোট, আর ওপরের Prerequisites সেকশনের product rule-টাই লাগে — শুধু দুই দিক থেকে একবার করে প্রয়োগ করলেই হবে।
Conditional probability-র সংজ্ঞা থেকে শুরু করি, দুইভাবে লিখে:
Product rule দিয়ে প্রতিটাকে সাজালে একই রাশি -এর দুইটা এক্সপ্রেশন পাওয়া যায়:
যেহেতু দুইটা রাইট-হ্যান্ড সাইড একই জিনিসের সমান, ওরা একে অপরের সমান:
শেষে, -কে আলাদা করতে দুই পাশে দিয়ে ভাগ করি (ধরে নিচ্ছি ):
এই তো — এটাই Bayes' Theorem। এটা কোনো গভীর বা রহস্যময় ফলাফল না; শুধু conditional probability-র দুইটা সংজ্ঞাকে সমান ধরে সাজানো হয়েছে। যেটা এটাকে শক্তিশালী করে তোলে, সেটা ডেরিভেশন না — সেটা এর interpretation, যেটা এরপরে আলোচনা করা হচ্ছে।
যেখানে, সবচেয়ে সাধারণ ফ্রেমিংয়ে ( হলো hypothesis, হলো observed evidence):
বাম থেকে ডানে পড়লে ফর্মুলাটা বলছে: তোমার আপডেটেড বিশ্বাস হলো তোমার পুরোনো বিশ্বাস, একটা ফ্যাক্টর দিয়ে পুনর্মাপা — সেই ফ্যাক্টরটা হলো, গড়ে যতটা হওয়া উচিত তার তুলনায় তোমার hypothesis-এর অধীনে প্রমাণটা কতটা বেশি (বা কম) সম্ভব। সেই রিস্কেলিং ফ্যাক্টর, , আসল "আপডেট"-এর কাজটা করছে — যখন প্রমাণটা -কে গড়ের চেয়ে বেশি সমর্থন করে তখন এটা ১-এর বেশি, না করলে ১-এর কম।
Prior, , হলো নতুন প্রমাণ যোগ করার আগে hypothesis সম্পর্কে বিশ্বাস। এটা আসতে পারে ঐতিহাসিক ডেটা থেকে (যেমন, "এই জনগোষ্ঠীর ১% মানুষের এই রোগ আছে"), ডোমেইন এক্সপার্টাইজ থেকে, অথবা এমনকি ইচ্ছাকৃতভাবে অনির্দিষ্ট একটা শুরুর অনুমান থেকেও (যেমন, "৫০/৫০, আমার কোনো ধারণা নেই") যখন ভালো কোনো তথ্য পাওয়া যায় না। Prior-টাই সেই অ্যাঙ্কর, যেখান থেকে বাকি হিসাবটা আপডেট হয়ে দূরে সরে যায়।
Likelihood, , মাপে যে hypothesis সত্যি ধরে নিলে observed evidence-টা কতটা প্রত্যাশিত। এটা hypothesis-এর ওপর কোনো probability distribution না — এটা fixed একটা hypothesis-এর জন্য evidence-এর একটা ফাংশন। উচ্চ likelihood মানে হলো, " সত্যিই সত্যি হলে, -র মতো প্রমাণ দেখাটা মোটেও অবাক করার মতো হতো না।"
Evidence, , হলো দেখার সম্পূর্ণ, unconditional সম্ভাবনা, প্রতিটা সম্ভাব্য hypothesis-এর ওপর গড় করে। যখন দুইটা প্রতিদ্বন্দ্বী hypothesis থাকে, আর "not " (লেখা হয় ), এটা law of total probability দিয়ে বিস্তৃত হয়:
কেন এটা গুরুত্বপূর্ণ: হাতে হিসাব করার সময় এটাই সাধারণত সবচেয়ে কঠিন অংশ, আর এটাই সেই অংশ যেটা মানুষ সবচেয়ে বেশি বাদ দিয়ে ফেলে — নিঃশব্দে এটা বাদ দেওয়া এই চ্যাপ্টারের পরের দিকে "Common Mistakes"-এ আলোচিত সবচেয়ে সাধারণ ভুলগুলোর একটা।
Posterior, , হলো শেষ উত্তর: প্রমাণ -কে সঠিকভাবে হিসাবে নেওয়ার পর সম্পর্কে তোমার আপডেটেড বিশ্বাস। খুবই গুরুত্বপূর্ণ একটা বিষয় — এক রাউন্ড প্রমাণের posterior পরের রাউন্ডের prior হয়ে যেতে পারে। Bayes' Theorem স্বাভাবিকভাবেই বারবার প্রয়োগ করার জন্য উপযুক্ত, যতই নতুন নতুন প্রমাণ আসতে থাকে, প্রতিবার বিশ্বাসটাকে একটু একটু করে আরও পরিমার্জিত করে।
Prior — P(A)
নতুন কোনো প্রমাণের আগে যা বিশ্বাস করতে। শুরুর পয়েন্ট।
Likelihood — P(B|A)
hypothesis সত্যি ধরে নিলে প্রমাণটা কতটা প্রত্যাশিত।
Evidence — P(B)
প্রতিটা hypothesis জুড়ে, সামগ্রিকভাবে প্রমাণটা কতটা সম্ভব।
Posterior — P(A|B)
প্রমাণ হিসাবে নেওয়ার পরের আপডেটেড বিশ্বাস। উত্তর।
Bayes' Theorem কল্পনা করার একটা দারুণ উপায় হলো, বিমূর্ত সিম্বলের বদলে একটা জনগোষ্ঠীকে গ্রুপে ভাগ করে দেখা।

এই "natural frequencies" পদ্ধতিতে Bayes' Theorem কল্পনা করা — বিমূর্ত শতাংশের বদলে ১০০০ জনের মধ্যে কতজন সেই সংখ্যায় চিন্তা করা — আসল ইনটুইশন তৈরির সবচেয়ে কার্যকর টুলগুলোর একটা, আর এই চ্যাপ্টারের কয়েক সেকশন পরে "Medical Diagnosis Example"-এ ঠিক এই টেকনিকটাই ব্যবহার করা হয়েছে।
Prior, sensitivity, আর false positive rate টেনে দেখো — posterior সাথে সাথে আপডেট হয়ে যায়।
How common the condition is
Test's true positive rate
Flags on people without it
1,000 people, split by condition (top) then by test result (bottom)
P(A|B) posterior
15.4%
Of the 59 people who test positive, only 9 actually have the condition — the rest are false alarms from the larger unaffected group.
নিচের Medical Diagnosis উদাহরণটা পড়ার আগে ওপরের স্লাইডারগুলো নাড়িয়ে দেখো — লক্ষ্য করো, খুব sensitive একটা টেস্ট থাকলেও, prior-কে টেনে একটা বিরল, ছোট শতাংশে নামালে posterior কীভাবে ধসে পড়ে। এই একটা ইন্টার্যাকশনই এই চ্যাপ্টারের পরের কয়েকটা সেকশনের পুরো শিক্ষা — শুধু পড়ে না, অনুভব করে বোঝা।
বাস্তব-জগতের উদাহরণে যাওয়ার আগে চলো একটা পরিষ্কার সংখ্যার উদাহরণ পুরোপুরি সমাধান করি।
সেটআপ। একটা কারখানায় দুইটা মেশিন একই পার্ট তৈরি করে। মেশিন A সব পার্টের ৬০% বানায়, আর এর ডিফেক্ট রেট ২%। মেশিন B বাকি ৪০% বানায়, আর এর ডিফেক্ট রেট ৫%। তুমি র্যান্ডমলি একটা পার্ট তুললে এবং দেখলে সেটা ডিফেক্টিভ। এটা মেশিন B থেকে আসার সম্ভাবনা কত?
ধাপ ১ — যা জানা আছে লিখে ফেলি।
ধাপ ২ — law of total probability দিয়ে evidence, , বের করি।
ধাপ ৩ — Bayes' Theorem প্রয়োগ করি, আমরা যেটা আসলে জানতে চাই, :
ফলাফল। যদিও মেশিন B সব পার্টের মাত্র ৪০% বানায়, একটা র্যান্ডমলি পাওয়া ডিফেক্টিভ পার্ট ৬২.৫% সম্ভাবনায় মেশিন B থেকে এসেছে — কারণ এর ডিফেক্ট রেট মেশিন A-র দ্বিগুণেরও বেশি। এটাই ঠিক সেই ধরনের শিফট, যেটা আসল প্রমাণ (ডিফেক্ট) হিসাবে ঢোকানোর পর prior-এর মধ্যে ঘটে।
Bayes' Theorem-এর সবচেয়ে বিখ্যাত প্রয়োগ এটাই, ঠিক এই কারণে যে ইনটুইশন এখানে এতটাই ভুল করে — এমনকি প্রকাশিত গবেষণায় প্রশিক্ষিত ডাক্তারদের মধ্যেও।
সেটআপ। একটা রোগ জনগোষ্ঠীর ১%-কে প্রভাবিত করে ()। এর জন্য একটা টেস্ট ৯০% sensitive (যাদের সত্যিই রোগ আছে তাদের ৯০%কে সঠিকভাবে ধরে: ) এবং ৯৫% specific (যাদের রোগ নেই তাদের ৯৫%কে সঠিকভাবে ক্লিয়ার করে, মানে ৫% false-positive রেট: )। তোমার টেস্ট positive এসেছে। তোমার আসলে রোগটা থাকার সম্ভাবনা কত?
১০,০০০ জনের natural frequencies দিয়ে হিসাব করি:
ফলাফল। "৯০% অ্যাকুরেট" টেস্ট হওয়া সত্ত্বেও, একটা positive রেজাল্ট মানে আসলে রোগ থাকার সম্ভাবনা মাত্র ১৫.৪% — কারণ রোগটা বিরল, তাই false positive তৈরি করা সুস্থ মানুষের পুল, সত্যিকারের রোগী তৈরি করা true positive পুলের চেয়ে অনেক বড়। এটা ব্যাপকভাবে ডকুমেন্টেড একটা ফলাফল: এই ঠিক এই প্রশ্নটা জিজ্ঞেস করলে অনেক ডাক্তারই উত্তরটাকে খুব বেশি ধরে নেন, প্রায়ই ৯০%-এর কাছাকাছি অনুমান করেন। ঠিক এই কারণেই একটা positive স্ক্রিনিং টেস্টের পরে প্রায় সবসময় একটা কনফার্মেটরি দ্বিতীয় টেস্ট করা হয়, একে একা ডায়াগনসিস হিসেবে ধরা হয় না।
স্প্যাম ফিল্টার হলো Bayes' Theorem-এর সবচেয়ে সরাসরি বাস্তব-জগতের প্রয়োগগুলোর একটা, আর এটাই পরের সেকশনে আলোচিত Naive Bayes classifier-এর প্রেরণা।
সেটআপ। ধরো তুমি যত ইমেইল পাও তার ২০% স্প্যাম ()। "free" শব্দটা স্প্যাম ইমেইলের ৬০%-এ থাকে () কিন্তু বৈধ ইমেইলের মাত্র ৫%-এ থাকে ()। একটা ইমেইল আসে যেখানে "free" শব্দটা আছে। এটা স্প্যাম হওয়ার সম্ভাবনা কত?
ফলাফল। "free" শব্দটা দেখলে স্প্যাম হওয়ার সম্ভাবনা ২০% prior থেকে বেড়ে ৭৫% posterior হয়ে যায়। একটা আসল স্প্যাম ফিল্টার ঠিক এটাই করে, কিন্তু একসাথে অনেক শব্দ থেকে প্রমাণ মিলিয়ে নেয় — ইমেইলের প্রতিটা শব্দ নিজের likelihood ratio দিয়ে অবদান রাখে, আর সেগুলো সব একসাথে গুণ হয় (নিচে Naive Bayes সেকশনে বর্ণিত একটা সরলীকরণকারী independence assumption সহ)।
সেটআপ। একটা শহরে, একটা নির্দিষ্ট সিজনে দিনের ৩০%-এ বৃষ্টি হয় ()। যখন বৃষ্টি হবে, সকালে আকাশ মেঘলা থাকে ৮৫% সময় ()। যখন বৃষ্টি হবে না, তখনও সকালে আকাশ মেঘলা থাকে ২০% সময় ()। তুমি ঘুম থেকে উঠে দেখলে আকাশ মেঘলা। আজ বৃষ্টি হওয়ার সম্ভাবনা কত?
ফলাফল। মেঘলা সকাল বৃষ্টির সম্ভাবনাকে ৩০% বেস রেট থেকে প্রায় ৬৪.৬%-এ ঠেলে দেয়। আসল ফোরকাস্টিং মডেল আরও অনেক ভ্যারিয়েবল (আর্দ্রতা, চাপ, স্যাটেলাইট ইমেজারি, ঐতিহাসিক প্যাটার্ন) একই কায়দায় ঢোকায় — প্রতিটাই আরেকটা প্রমাণের টুকরা হিসেবে কাজ করে, posterior-কে আরও পরিমার্জিত করে, অনেক সময় একই অন্তর্নিহিত Bayesian যুক্তির ওপর তৈরি আরও পরিশীলিত মডেলের মধ্য দিয়ে।
সার্চ আর রেকমেন্ডেশন, মূলত, র্যাংকিং সমস্যা: একটা query বা ইউজারের হিস্ট্রি দিয়ে, বা অনুমান করা — আর সেই posterior probability দিয়ে রেজাল্ট বা রেকমেন্ডেশন re-rank করা।
তিনটার মধ্যে যে জিনিসটা মিলে যায়: একটা যুক্তিসঙ্গত prior দিয়ে শুরু করা, তারপর observed evidence (query শব্দ, আগের আচরণ, একই রকম ইউজার) দিয়ে একটা আপডেটেড, evidence-adjusted posterior হিসাব করা — আর raw prior না, সেই posterior দিয়েই র্যাংক বা রেকমেন্ড করা।
ফ্রড ডিটেকশন মেডিকেল ডায়াগনসিস উদাহরণের মতোই একই "বিরল ইভেন্ট" গঠনের মুখোমুখি হয়, আর ঠিক একই ফাঁদে পড়ে: আসল ফ্রড বিরল, তাই একটা খুব নির্ভুল ডিটেক্টরও পরম সংখ্যায় প্রচুর মিথ্যা অ্যালার্ম তৈরি করে।
দৃষ্টান্তমূলক সেটআপ। ধরো লেনদেনের মাত্র ০.১% জালিয়াতি ()। একটা ডিটেকশন মডেল আসল ফ্রডের ৯৫% সঠিকভাবে ফ্ল্যাগ করে (), কিন্তু বৈধ লেনদেনেও ২% ভুল অ্যালার্ম দেয় ()। মেডিকেল উদাহরণের মতো একই natural-frequency পদ্ধতি ব্যবহার করে (১,০০,০০০ লেনদেনের মধ্যে: প্রায় ১০০টা ফ্রড, তার মধ্যে ৯৫টা ফ্ল্যাগ হয়; প্রায় ৯৯,৯০০টা বৈধ, তার মধ্যে প্রায় ১,৯৯৮টাও ফ্ল্যাগ হয়ে যায়), posterior দাঁড়ায়:
ফলাফল। ফ্ল্যাগ হওয়া লেনদেনের মাত্র প্রায় ৪.৫% আসলে জালিয়াতি। এটা মডেলের কোনো ব্যর্থতা না — এটা একটা বিরল ইভেন্ট শনাক্ত করার অনিবার্য গণিত। ঠিক এই কারণেই ব্যাংকগুলো প্রতিটা ফ্ল্যাগ স্বয়ংক্রিয়ভাবে ব্লক না করে ফ্ল্যাগ হওয়া লেনদেনগুলোকে অতিরিক্ত রিভিউ ধাপের মধ্য দিয়ে নিয়ে যায় (আরও প্রমাণের টুকরা), প্রতিটা অতিরিক্ত চেক আরেকটা Bayesian আপডেট হিসেবে কাজ করে যেটা posterior-কে আরও ধারালো করে।
Bayes' Theorem শুধু কিছু classifier-এ মাঝেমধ্যে ব্যবহৃত একটা কৌশল না — এটা মেশিন লার্নিং-এর একটা পুরো শাখার (Bayesian machine learning) ভিত্তি। এর কয়েকটা বড় প্রয়োগ:
যতবার তুমি কোনো মেশিন লার্নিং পেপার বা কোর্সে "prior," "posterior," "likelihood," বা "MAP" শব্দগুলো দেখবে, সেগুলো এই চ্যাপ্টারে ডেরাইভ করা ঠিক একই ফর্মুলাতেই ফিরে যায়। একবার এটা গভীরভাবে বুঝে নিলে, পুরো ফিল্ড জুড়েই এর লাভ পাবে।
Naive Bayes classifier Bayes' Theorem সরাসরি classification-এ প্রয়োগ করে: একগুচ্ছ ফিচার (যেমন, একটা ইমেইলের শব্দগুলো) দিয়ে, সেই ক্লাস (যেমন, স্প্যাম বা স্প্যাম-না) বেছে নাও যেটা posterior probability -কে সর্বোচ্চ করে।
"Naive" সরলীকরণকারী অনুমান: ঠিকঠাক হিসাব করতে প্রতিটা ফিচার-জোড়ার মধ্যে প্রতিটা মিথস্ক্রিয়া মডেল করতে হবে, যেটা ফিচারের সংখ্যা বাড়ার সাথে সাথে অসাধ্য হয়ে যায়। Naive Bayes শুধু ধরে নেয় যে ক্লাস জানা থাকলে প্রতিটা ফিচার বাকি সব ফিচার থেকে conditionally independent:
কেন এটা গুরুত্বপূর্ণ: এই অনুমানটা বাস্তবে প্রায় কখনোই একদম সত্যি না (একটা বাক্যের শব্দগুলো স্পষ্টতই একে অপরের থেকে independent না), তবুও Naive Bayes বাস্তবে বিস্ময়করভাবে ভালো পারফর্ম করে — বিশেষ করে টেক্সট classification-এর মতো কাজে, যেমন স্প্যাম ফিল্টারিং, যেখানে এটা প্রবর্তনের কয়েক দশক পরেও একটা দ্রুত, শক্তিশালী বেসলাইন হিসেবে টিকে আছে।
যেহেতু — evidence — যে ক্লাস মূল্যায়ন করা হচ্ছে তা নির্বিশেষে একই থাকে, classification-এর জন্য শুধু ক্লাসগুলোর মধ্যে তুলনা করলেই হয়, সবচেয়ে বড়টা বেছে নিলেই হয়; কমন denominator-টা পুরোপুরি বাদ দেওয়া যায়। প্রতিটা প্র্যাকটিক্যাল Naive Bayes ইমপ্লিমেন্টেশন ঠিক এই শর্টকাটটাই ব্যবহার করে। Naive Bayes-এর একটা সম্পূর্ণ, ডেডিকেটেড আলোচনা — training, smoothing, আর কোড সহ — নিজের চ্যাপ্টারে থাকা উচিত; এই প্রিভিউটা শুধু এই জন্য, যাতে ওই চ্যাপ্টারে পৌঁছালে ওপরের ফর্মুলাটা তোমার কাছে অচেনা না লাগে।
এই তিনটা শব্দ সাধারণ কথাবার্তায় শিথিলভাবে ব্যবহৃত হয়, কিন্তু Bayes' Theorem-এ এদের প্রত্যেকটার নির্দিষ্ট, আলাদা অর্থ আছে, আর এদের গুলিয়ে ফেলা একটা সাধারণ ভুল বোঝাবুঝির উৎস।
| পরিভাষা | সিম্বল | কী পরিবর্তিত হয় | কী স্থির থাকে | কোন প্রশ্নের উত্তর দেয় |
|---|---|---|---|---|
| Probability | P(B) | প্রমাণ/আউটকাম | কোনো কিছুর ওপর কন্ডিশন না করা | এই আউটকামটা সামগ্রিকভাবে কতটা সম্ভব? |
| Likelihood | P(B|A) | প্রমাণ B, A-এর ফাংশন হিসেবে দেখা | hypothesis A | A সত্যি হলে, B কতটা প্রত্যাশিত হতো? |
| Posterior | P(A|B) | hypothesis, কন্ডিশন করার পরে | observed evidence B | যা দেখেছি তা মিলিয়ে, A কতটা সম্ভব? |
সবচেয়ে সূক্ষ্ম পয়েন্টটা: "likelihood" টেকনিক্যালি hypothesis-এর একটা ফাংশন, fixed, observed ডেটার ওপর মূল্যায়িত — hypothesis-এর ওপর কোনো probability distribution না। দুইটা ভিন্ন hypothesis আর -এর জন্য আর -কে একটা সত্যিকার probability distribution-এর মতো ১-এ যোগ হতেই হবে এমন কোনো বাধ্যবাধকতা নেই। শুধু posterior, , hypothesis-এর ওপর একটা প্রকৃত probability distribution (evidence দিয়ে সঠিকভাবে normalize করার পর, hypothesis-গুলোর ওপর এটা ১-এ যোগ হয়)।
আগে এই চ্যাপ্টারে গভীরভাবে আলোচিত হয়েছে — এই দুইটা ভিন্ন রাশি, ভিন্ন জিনিসের ওপর কন্ডিশন করা, আর এদের অদল-বদল করা যায় ধরে নেওয়াটাই base rate fallacy / prosecutor's fallacy।
মেডিকেল ডায়াগনসিস আর ফ্রড ডিটেকশন উদাহরণ দুইটাতেই দেখানো হয়েছে, যখন অন্তর্নিহিত অবস্থাটা বিরল, তখন খুব নির্ভুল একটা টেস্টও posterior-কে এর বলা নির্ভুলতার চেয়ে অনেক কম করে দিতে পারে — কারণ বিশাল "সুস্থ" বা "বৈধ" জনগোষ্ঠী থেকে আসা false positive, ছোট সংখ্যক true positive-কে ছাপিয়ে যায়।
Prior প্রমাণ দিয়ে মুছে যায় না — এটা প্রমাণের সাথে মিলে যায়। একটা প্রচণ্ড অসম্ভব prior (যেমন, প্রায় ০-এর কাছাকাছি হলে) মাঝারি শক্তিশালী প্রমাণের পরেও অসম্ভবই থেকে যেতে পারে, আর একটা খুব confident prior-কে যথেষ্ট পরিমাণে সরাতে চাপে চাপে প্রমাণ লাগে। Prior-কে পুরোপুরি অগ্রাহ্য করাই ওপরের "৯০% অ্যাকুরেট টেস্ট" ভুলটার কারণ।
মাঝেমধ্যে মানুষ Bayesian reasoning প্রত্যাখ্যান করে কারণ prior সাবজেক্টিভ হতে পারে (বিশাল ডেটাসেটের বদলে এক্সপার্ট বিচারের ওপর ভিত্তি করে)। বাস্তবে, এটা সাংঘাতিক কিছু না: যথেষ্ট প্রমাণ থাকলে, posterior শুরুর নির্দিষ্ট prior-এর প্রতি অনেক কম sensitive হয়ে যায়, আর একটা অসম্পূর্ণ কিন্তু যুক্তিসঙ্গত prior, prior তথ্য পুরোপুরি অগ্রাহ্য করার চেয়ে ভালো।
মেডিসিন
ডায়াগনস্টিক টেস্ট রেজাল্ট সঠিকভাবে ব্যাখ্যা করা, স্ক্রিনিং প্রোটোকল, আর ক্লিনিক্যাল সিদ্ধান্ত সহায়তা।
স্প্যাম ও কনটেন্ট ফিল্টারিং
শব্দ-প্রমাণের ভিত্তিতে ইমেইল ও মেসেজকে স্প্যাম বা বৈধ হিসেবে classify করা।
সার্চ ও রেকমেন্ডেশন
evidence-আপডেটেড posterior relevance বা ক্লিক সম্ভাবনা দিয়ে ডকুমেন্ট ও আইটেম র্যাংক করা।
ব্যাংকিং ও ফ্রড ডিটেকশন
সন্দেহজনক লেনদেন ফ্ল্যাগ করা, আর অসম্পূর্ণ ডিটেক্টর থেকে সত্যিকার ফ্রড সম্ভাবনা অনুমান করা।
আইনগত যুক্তি
prosecutor's fallacy-তে না পড়ে ফরেনসিক প্রমাণ সঠিকভাবে ব্যাখ্যা করা।
মেশিন লার্নিং
Naive Bayes classifier, মডেল প্যারামিটারের ওপর Bayesian inference, আর Bayesian hyperparameter optimization।
আবহাওয়া পূর্বাভাস
পর্যবেক্ষণকৃত বায়ুমণ্ডলীয় প্রমাণ দিয়ে সিজনাল বেস রেট থেকে বৃষ্টির সম্ভাবনা আপডেট করা।
A/B টেস্টিং
এক্সপেরিমেন্টাল ডেটা আসার সাথে সাথে কোন ভ্যারিয়েন্ট ভালো পারফর্ম করছে সে বিশ্বাস আপডেট করা।
উদাহরণ ১ — দুইটা কলস (urn)। কলস A-তে ৩টা লাল আর ৭টা নীল বল। কলস B-তে ৬টা লাল আর ৪টা নীল বল। তুমি র্যান্ডমলি একটা কলস বেছে নাও (৫০/৫০) আর একটা বল তুলো, সেটা লাল হয়ে গেলো। তুমি কলস A বেছে নিয়েছিলে তার সম্ভাবনা কত?
লাল বল তোলাটা কলস A-কে ৫০% prior-এর চেয়ে কম সম্ভাব্য করে দিলো, কারণ কলস B থেকে লাল বল আসার সম্ভাবনা অনেক বেশি।
উদাহরণ ২ — ক্রমান্বয়ে আপডেট (sequential updating)। disease উদাহরণের সংখ্যা ব্যবহার করে, ধরো একই রোগী একই ধরনের একটা দ্বিতীয়, স্বাধীন টেস্ট করায়, আর সেটাও positive আসে। প্রথম টেস্ট থেকে পাওয়া posterior, , এখন দ্বিতীয় টেস্টের নতুন prior হয়ে যায়।
দুইটা স্বাধীন positive টেস্ট রোগ থাকার সম্ভাবনাকে ১% থেকে সরাসরি প্রায় ৭৬.৬%-এ ঠেলে দেয় — এটা সরাসরি দেখায় কেন ডাক্তাররা এক টেস্টের ওপর ভরসা না করে একটা কনফার্মেটরি দ্বিতীয় টেস্ট চান।
ওপরের worked example-এ ব্যবহৃত পদ্ধতি দেখার আগে এগুলো নিজে চেষ্টা করো।
এদের প্রত্যেকটাই step-by-step example-এ ব্যবহৃত একই তিন-ধাপের প্যাটার্ন অনুসরণ করে: prior আর likelihood লিখে ফেলো, law of total probability দিয়ে evidence টার্ম হিসাব করো, তারপর ভাগ করো। আটকে গেলে, এগিয়ে না গিয়ে সেই সেকশনটা আবার পড়ো।
এগুলো এমন দ্রুত, মৌখিক প্রশ্ন যেগুলো viva বা মৌখিক পরীক্ষায় জিজ্ঞেস করা হতে পারে — চ্যাপ্টারের সংশ্লিষ্ট সেকশন দেখার আগে জোরে বলে উত্তর দেওয়ার চেষ্টা করো।
Law of total probability এড়িয়ে গিয়ে আন্দাজ করা, বা আরও খারাপ, ধরে নেওয়া — পুরো হিসাবটাকে নিঃশব্দে ভেঙে দেয়। ভাগ করার আগে সবসময় প্রতিটা প্রাসঙ্গিক hypothesis জুড়ে বিস্তৃত করো।
-কে (likelihood, যেটা প্রায়ই সরাসরি দেওয়া থাকে, যেমন একটা টেস্টের অ্যাকুরেসি) দুর্ঘটনাক্রমে (posterior, যেটা তুমি আসলে চাও) হিসেবে ধরে নেওয়াটা খুবই সাধারণ। এটা লুকানো base rate fallacy — সবসময় দুইবার চেক করো "given" তথ্যটা কন্ডিশনিং বারের কোন পাশে আছে।
Prior যখন খুব ছোট (একটা বিরল রোগ, বিরল ফ্রড, যেকোনো ধরনের বিরল ইভেন্ট), তখন টেস্টের অ্যাকুরেসিকেই চূড়ান্ত উত্তর ধরে নেওয়ার প্রলোভন হয়। এই চ্যাপ্টারের প্রতিটা worked example দেখিয়েছে, prior মুছে যায় না — এটা গুণ হয়ে ঢোকে, আর যথেষ্ট ছোট একটা prior একটা মোটামুটি নির্ভুল টেস্টের পরেও ফলাফলে প্রাধান্য বিস্তার করতে পারে।
ফিচার শক্তিশালীভাবে correlated হলে (যেমন, "'free' আছে" আর "'win' আছে" প্রায়ই স্প্যামে একসাথে থাকে), এদের independent ধরে নেওয়া, একসাথে তারা আসলে কতটা প্রমাণ দেয় সেটাকে বাড়িয়ে দেখায়। এটা বাস্তবে প্রায়ই ভালো কাজ করে, কিন্তু এটা একটা আনুমানিক হিসাব, নির্ভুল হিসাব না — এটাকে নির্ভুল ধরে নেওয়াটাই ভুল।