এই পর্বে যা শিখবেন
- একটি অস্পষ্ট ব্যবসায়িক ইচ্ছাকে পাঁচ ধাপে একটি নির্দিষ্ট problem statement-এ রূপ দেওয়া
- AI-এর প্রধান সমস্যার ধরন চেনা, প্রতিটির আউটপুট কী আর সাফল্য কীভাবে মাপা হয়, আর কোর্সের কোন পর্বে সেটি শিখবেন
- কখন AI দরকার নেই, আর কখন AI ব্যবহার করা বিপজ্জনক
- Majority class, শেষ মান আর গড় দিয়ে baseline বানিয়ে মডেলের দাবি যাচাই করা
- Framing-এর তিনটি সাধারণ ফাঁদ চেনা: আগেই জানা জিনিস অনুমান, target leakage আর ভুল proxy
১ · অস্পষ্ট ইচ্ছা থেকে স্পষ্ট সমস্যা
“বাজারঘর” এই কোর্সের একটি কাল্পনিক অনলাইন দোকান। এর মালিক একদিন বললেন, “AI দিয়ে বিক্রি বাড়াতে চাই।” কথাটি শুনতে পরিষ্কার, কিন্তু একজন ডেটা বিশ্লেষকের কাছে এর কোনো কাজের অর্থ নেই। কোন বিক্রি? কাদের কাছে? কোন সিদ্ধান্ত বদলাবে? কীভাবে বুঝব যে বেড়েছে?
ডাক্তারের কাছে গিয়ে “শরীর ভালো লাগছে না” বললে তিনি সঙ্গে সঙ্গে ওষুধ লেখেন না। তিনি প্রশ্ন করেন: কোথায় ব্যথা, কবে থেকে, জ্বর আছে কি না। তারপর পরীক্ষা দেন, আর ঠিক করেন কী দেখে বুঝবেন রোগ সারছে। AI প্রকল্পও এভাবে শুরু হয়। “বিক্রি বাড়াতে চাই” হলো রোগীর প্রথম কথা; রোগনির্ণয় হলো problem statement.
একটি ভালো problem statement-এ পাঁচটি জিনিস লেখা থাকে। নিচের ডায়াগ্রামে “পরে” চাপুন, আর দেখুন বাজারঘরের ইচ্ছাটি ধাপে ধাপে কেমন নির্দিষ্ট হয়ে ওঠে। ডান দিকের ছকটি প্রতিটি ধাপে ভরে উঠবে।
- ইচ্ছাবিক্রি বাড়াতে চাই
- সিদ্ধান্তকাকে কুপন
- Input → Outputকী জানি, কী চাই
- ডেটাউত্তরসহ পুরোনো খাতা
- মাপ আর দামসাফল্য ও ভুলের খরচ
| সিদ্ধান্ত | |
| Input | |
| Output | |
| ডেটা | |
| সাফল্যের মাপ | |
| ভুলের দাম |
- ধাপ ১ — ইচ্ছা। “বিক্রি বাড়াতে চাই” বাক্যে ছকের একটি ঘরও ভরে না। বিক্রি বাড়ানোর পথ অনেক: নতুন ক্রেতা আনা, পুরোনো ক্রেতা ধরে রাখা, ঝুড়ির আকার বাড়ানো, ডেলিভারির দেরি কমানো। প্রতিটি পথ আলাদা সমস্যা।
- ধাপ ২ — একটি সিদ্ধান্ত বেছে নেওয়া। মডেল নিজে বিক্রি বাড়ায় না; মডেল একটি সিদ্ধান্ত বদলায়। বাজারঘর ঠিক করল: যে ক্রেতারা আর ফিরবেন না বলে মনে হয়, তাঁদের ৫০ টাকার কুপন পাঠানো হবে। এখন প্রশ্ন একটাই, কাকে পাঠাব।
- ধাপ ৩ — Input আর output. Input হলো সিদ্ধান্তের মুহূর্তে যা জানা থাকে: ক্রেতার প্রথম ৩০ দিনের অর্ডার-সংখ্যা, মোট টাকা, ডেলিভারির দেরি, রিভিউ। Output: পরের ৬০ দিনে আর না কেনার সম্ভাবনা। আউটপুট হ্যাঁ/না ধরনের, তাই এটি binary classification.
- ধাপ ৪ — ডেটা। শেখার জন্য উত্তরসহ উদাহরণ লাগে: পুরোনো ক্রেতাদের প্রথম ৩০ দিনের তথ্য, আর তার পরের ৬০ দিনে তাঁরা সত্যিই কিনেছিলেন কি না। এই উত্তরটিই label. Label না থাকলে আগে ডেটা জমাতে হবে।
- ধাপ ৫ — সাফল্যের মাপ আর ভুলের দাম। অকারণে কুপন পেলে খরচ ৫০ টাকা; একজন ভালো ক্রেতা হারালে ক্ষতি অনেক বেশি। তাই শুধু accuracy নয়, recall আর precision দেখা হবে, সবসময় baseline-এর পাশে। শেষ বিচার হবে A/B test-এ: কুপন পাওয়া দল কি সত্যিই বেশি ফিরল?
খেয়াল করুন, পাঁচ ধাপের কোথাও কোনো algorithm-এর নাম নেই। Problem statement ঠিক না হলে সবচেয়ে ভালো algorithm-ও ভুল প্রশ্নের নিখুঁত উত্তর দেবে।
প্রতিটি AI সমস্যার পাঁচটি প্রশ্ন: (১) Input — সিদ্ধান্তের মুহূর্তে কী জানা থাকে? (২) Output — মডেলের কাছে ঠিক কী চাই, কোন আকারে? (৩) ডেটা — উত্তরসহ কত উদাহরণ আছে, কতটা বিশ্বাসযোগ্য? (৪) সাফল্যের মাপ — কোন সংখ্যা দেখে বলব কাজ হয়েছে? (৫) ভুলের দাম — কোন ভুল কতটা ক্ষতি করে? মডেল যে কলামটি অনুমান করে তাকে বলে target, আর যে কলামগুলো দেখে অনুমান করে সেগুলো feature.
২ · আউটপুটের আকারই সমস্যার ধরন বলে দেয়
AI-এর বইয়ে সমস্যার ধরনের লম্বা তালিকা থাকে। সেগুলো মুখস্থ না করে একটি প্রশ্ন মনে রাখুন: “আমি মডেলের কাছে কী আকারের উত্তর চাই?” উত্তরটি একটি শ্রেণি, একটি সংখ্যা, একটি সাজানো তালিকা, কয়েকটি দল, নতুন একটি লেখা, নাকি কয়েকটি কাজের ধারাবাহিকতা? এই আকারই প্রায় সবসময় বলে দেয় কোন পরিবারের সমস্যা।
আউটপুটের আকার থেকে সমস্যার ধরন
The shape of the answer you want decides the problem type
সবুজ বাক্সগুলোর জন্য উত্তরসহ উদাহরণ লাগে; একে বলে supervised learning. হলুদগুলো label ছাড়াই ডেটার গঠন খোঁজে; একে বলে unsupervised learning. লাল বাক্সগুলো প্রায়ই শেখা নয়, খোঁজা। শেখার তিন ধরন (supervised, unsupervised, reinforcement) নিয়ে বিস্তারিত আসবে পর্ব ৫৫-এ।
একটি সূক্ষ্ম কথা। “Computer vision” বা “NLP” শুনলে মনে হয় এগুলো আলাদা সমস্যার ধরন। আসলে এগুলো input-এর ধরন। ছবি দেখে “এটি কি ভাঙা প্যাকেট?” বলা হলো classification; ছবিতে কতগুলো প্যাকেট আছে গোনা হলো regression-এর কাছাকাছি; ছবির বর্ণনা লেখা হলো generation. তাই প্রথমে আউটপুট ঠিক করুন, তারপর input-এর ধরন অনুযায়ী টুল বাছুন।
৩ · Classification আর regression — সবচেয়ে বেশি দেখা দুই ধরন
বাস্তবের AI প্রকল্পের বড় অংশই এই দুটির একটি। দুটিতেই উত্তরসহ পুরোনো উদাহরণ থেকে শিখে নতুন উদাহরণের উত্তর অনুমান করা হয়। পার্থক্য শুধু উত্তরের আকারে।
Classification — কোন বাক্সে পড়বে
পরীক্ষার খাতা দেখার কথা ভাবুন। শিক্ষক প্রতিটি খাতাকে “পাস” বা “ফেল” বাক্সে রাখেন; অথবা A+, A, B, C-এর কোনো একটিতে। Classification-ও তাই করে: প্রতিটি উদাহরণকে আগে থেকে ঠিক করা কয়েকটি শ্রেণির (class) কোনো একটিতে রাখে। তিনটি রূপ আছে:
⚖️ Binary
দুটি শ্রেণি। বাজারঘরে: “এই অর্ডারটি দেরিতে পৌঁছাবে কি না?” “এই ক্রেতা ৬০ দিনে আবার কিনবেন কি না?” আউটপুট সাধারণত একটি সম্ভাবনা, যেমন 0.73; একটি threshold (যেমন 0.5) পেরোলে “হ্যাঁ”।
মাপ: precision, recall, F1🗃️ Multi-class
দুইয়ের বেশি শ্রেণি, কিন্তু প্রতিটি উদাহরণ ঠিক একটিতে। বাজারঘরে: একটি রিভিউ মূলত কী নিয়ে — দাম, ডেলিভারি, পণ্যের মান, না ব্যবহার? আউটপুট প্রতিটি শ্রেণির একটি করে সম্ভাবনা, যোগফল ১।
মাপ: accuracy, macro-F1, confusion matrix🏷️ Multi-label
একটি উদাহরণ একসঙ্গে কয়েকটি শ্রেণিতে পড়তে পারে। “ডেলিভারি দেরি, কিন্তু পণ্য ভালো” রিভিউটির ট্যাগ একসঙ্গে “ডেলিভারি” আর “মান”। আউটপুট প্রতিটি ট্যাগের আলাদা হ্যাঁ/না।
মাপ: প্রতি ট্যাগে F1, Hamming lossMulti-class আর multi-label গুলিয়ে ফেলা খুব সাধারণ ভুল। প্রশ্নটি সহজ: একটি রিভিউয়ের কি একাধিক সঠিক উত্তর থাকতে পারে? থাকলে multi-label. মডেলের শেষ ধাপও আলাদা: multi-class-এ সব শ্রেণির সম্ভাবনা মিলে ১ হয়, multi-label-এ প্রতিটি ট্যাগের সম্ভাবনা আলাদা আলাদা ০ থেকে ১।
Regression — কত হবে
আউটপুট যদি একটি সংখ্যা হয়, যার মাঝামাঝি মানেরও অর্থ আছে, তাহলে সেটি regression. বাজারঘরে: “এই অর্ডারটি পৌঁছাতে কত দিন লাগবে?” “এই পণ্যের সঠিক দাম কত হলে বিক্রি সবচেয়ে বেশি?” “এই ক্রেতা আগামী তিন মাসে কত টাকার কেনাকাটা করবেন?” Regression-এর ভুল মাপা হয় অনুমান আর আসল মানের দূরত্ব দিয়ে।
ধরুন চারটি অর্ডারের আসল ডেলিভারি সময় ২, ৫, ৩, ৪ দিন, আর মডেল বলেছিল ৩, ৪, ৩, ৬ দিন। ভুলগুলো: ১, ১, ০, ২ দিন।
MAE = (১ + ১ + ০ + ২) / ৪ = ১.০ দিন
এখানে MAE (mean absolute error) মানে প্রতিটি ভুলের পরম মান (ঋণাত্মক চিহ্ন বাদ দিয়ে) নিয়ে গড়। আরেকটি জনপ্রিয় মাপ RMSE: ভুলগুলোর বর্গের গড়ের বর্গমূল, √((১ + ১ + ০ + ৪) / ৪) = √১.৫ ≈ ১.২২ দিন। RMSE বড় ভুলকে বেশি শাস্তি দেয়, কারণ ২ দিনের ভুল বর্গ করে ৪ হয়ে যায়। কোনটি বাছবেন, সেটি ব্যবসার প্রশ্ন: একবার ৫ দিন দেরি কি পাঁচবার ১ দিন দেরির চেয়ে খারাপ? তাহলে RMSE.
Classification-এর প্রথম মাপ — accuracy আর তার সীমা
Classification-এ সবচেয়ে সহজ মাপ accuracy: যত উদাহরণ ঠিক হলো, তাকে মোট দিয়ে ভাগ। ১০০টি অর্ডারের ৯০টির “দেরি হবে কি না” ঠিক বললে accuracy ৯০%. কিন্তু ভুল সব সমান নয়: “দেরি হবে না” বলে দেরি হলে ক্রেতা রেগে যান, আর “দেরি হবে” বলে না হলে বড়জোর একটি অকারণ SMS যায়। এই দুই ভুলকে আলাদা করে গোনে confusion matrix; সেখান থেকে আসে precision (মডেল যাদের “হ্যাঁ” বলল তাদের কত ভাগ সত্যিই হ্যাঁ) আর recall (সত্যিকারের হ্যাঁ-দের কত ভাগ মডেল ধরতে পারল)। এগুলোর পূর্ণ হিসাব পর্ব ৬০-এ; এখানে শুধু মনে রাখুন, accuracy একা প্রায়ই প্রতারণা করে। কেন, সেটি অংশ ৮-এ সংখ্যা দিয়ে দেখবেন।
Regression-কে classification বানানোর লোভ। ডেলিভারির দিনকে “দ্রুত / মাঝারি / ধীর” বানালে তথ্য হারায়: ৩.৯ আর ৪.১ দিন আলাদা বাক্সে পড়ে, কিন্তু ১ আর ৩.৯ দিন একই বাক্সে। সিদ্ধান্ত সত্যিই তিন বাক্সে নেওয়া হলে তবেই এটি ঠিক; নইলে সংখ্যাটিই অনুমান করুন।
৪ · একই ডেটা, চার রকম প্রশ্ন
একটি গুরুত্বপূর্ণ সত্য: ডেটা নিজে কোনো সমস্যার ধরন নয়। একই টেবিল থেকে আপনি কোন প্রশ্ন করছেন, তা-ই ঠিক করে সমস্যাটি কী। বাজারঘরের ১০টি অর্ডারের একটি ছোট টেবিল দিয়ে দেখি। কলামগুলো: order (অর্ডার নম্বর), items (পণ্যের সংখ্যা), amount (টাকা), km (গুদাম থেকে দূরত্ব), days (পৌঁছাতে কত দিন লাগল) আর late (৩ দিনের বেশি লাগলে yes).
order items amount km days late 101 1 1721 151 2 no 102 4 2934 112 2 no 103 4 2286 56 1 no 104 3 2355 278 5 yes 105 3 2237 234 4 yes 106 5 2422 193 3 no 107 1 48000 121 3 no 108 4 645 247 5 yes 109 2 2567 164 3 no 110 1 1516 134 3 no
order items amount km late 101 1 1721 151 no 102 4 2934 112 no 103 4 2286 56 no 104 3 2355 278 yes 105 3 2237 234 yes 106 5 2422 193 no 107 1 48000 121 no 108 4 645 247 yes 109 2 2567 164 no 110 1 1516 134 no days বাদ (late তারই রূপ)
order items amount km days 101 1 1721 151 2 102 4 2934 112 2 103 4 2286 56 1 104 3 2355 278 5 105 3 2237 234 4 106 5 2422 193 3 107 1 48000 121 3 108 4 645 247 5 109 2 2567 164 3 110 1 1516 134 3 late বাদ (days-এরই রূপ)
order items km → দল 101 1 151 → 1 102 4 112 → 2 103 4 56 → 2 104 3 278 → 0 105 3 234 → 0 106 5 193 → 0 107 1 121 → 1 108 4 247 → 0 109 2 164 → 1 110 1 134 → 1 দলের নম্বর শুধু নাম
order amount score 101 1721 1.4 102 2934 1.5 103 2286 0.1 104 2355 0.1 105 2237 0.2 106 2422 0.2 107 48000 108.0 ← 108 645 4.0 109 2567 0.6 110 1516 1.9 score = |amount − median| / MAD
- শুধু টেবিল। দশটি অর্ডার, ছয়টি কলাম। এখনো কেউ কোনো প্রশ্ন করেনি, তাই এটি কোনো “সমস্যা” নয়, শুধু ডেটা।
- প্রশ্ন: দেরি হবে কি না? Target কলাম
late, দুটি মান yes/no, তাই binary classification. সাবধান:daysকলামটি feature হিসেবে রাখা যাবে না, কারণlateতৈরিই হয়েছেdaysথেকে, আর অর্ডার দেওয়ার মুহূর্তেdaysজানা থাকে না। - প্রশ্ন: কত দিন লাগবে? Target
days, একটি সংখ্যা, তাই regression. একই কারণে এখনlateকলাম বাদ। একই টেবিল, ভিন্ন target, ভিন্ন সমস্যা। - প্রশ্ন: কয়েক রকম অর্ডার কী কী? এবার কোনো target নেই। একটি clustering algorithm
itemsআরkmদেখে অর্ডারগুলোকে তিনটি দলে ভাগ করল (সংখ্যা নিচের কোডের আসল আউটপুট)। ০, ১, ২ শুধু নাম; “দূরের অর্ডার” অর্থটি মানুষ দেখে বসিয়েছে। - প্রশ্ন: কোন অর্ডারটি অস্বাভাবিক? এখনো কোনো label নেই। টাকার median ২৩২০.৫, আর median থেকে দূরত্বগুলোর median (MAD) হলো ৪২৩। প্রতিটি অর্ডারের দূরত্বকে ৪২৩ দিয়ে ভাগ করলে ১০৭ নম্বরের score ১০৮, বাকি সবার ৪-এর নিচে; সীমা ৫ ধরলে শুধু ১০৭ অস্বাভাবিক। এটি জালিয়াতি, ভুল টাইপ, নাকি একজন পাইকার? মডেল শুধু বলে “অস্বাভাবিক”; কারণ খোঁজা মানুষের কাজ।
নিচের কোডটি এই চারটি framing সত্যিই চালিয়ে দেখায়। ডেটা তৈরি হয় seed দেওয়া random সংখ্যা দিয়ে (default_rng(42)), তাই সবার স্ক্রিনে একই সংখ্যা আসবে। প্রথমবার চালালে পাতায় Python, pandas আর scikit-learn নামতে কয়েক সেকেন্ড (scikit-learn-এর জন্য প্রায় ১০ সেকেন্ড) লাগতে পারে; পরের বার দ্রুত।
import numpy as np, pandas as pd
from sklearn.cluster import AgglomerativeClustering
rng = np.random.default_rng(42)
n = 10
df = pd.DataFrame({
"order": range(101, 101 + n),
"items": rng.integers(1, 6, n),
"amount": rng.integers(300, 3000, n),
"km": rng.integers(2, 300, n),
})
df.loc[6, "amount"] = 48000 # একটি অস্বাভাবিক বড় অর্ডার
df["days"] = 1 + df["km"] // 80 + rng.integers(0, 2, n)
df["late"] = np.where(df["days"] > 3, "yes", "no")
print(df.to_string(index=False))
# ১) Classification: target = late (হ্যাঁ/না)
print("\n1 classification, target late:", df["late"].tolist())
# ২) Regression: target = days (একটি সংখ্যা)
print("2 regression, target days:", df["days"].tolist())
# ৩) Clustering: কোনো target নেই, শুধু feature থেকে দল
X = df[["items", "km"]]
X = (X - X.mean()) / X.std() # দুই কলাম এক মাপে
model = AgglomerativeClustering(n_clusters=3).fit(X)
print("3 clustering, no target; groups:", model.labels_.tolist())
# ৪) Anomaly detection: median থেকে অনেক দূরের অর্ডার
med = df["amount"].median()
mad = (df["amount"] - med).abs().median()
score = (df["amount"] - med).abs() / mad
print("4 anomaly, unusual orders:", df.loc[score > 5, "order"].tolist())আসল আউটপুটের শেষ চার লাইন:
1 classification, target late: ['no', 'no', 'no', 'yes', 'yes', 'no', 'no', 'yes', 'no', 'no']
2 regression, target days: [2, 2, 1, 5, 4, 3, 3, 5, 3, 3]
3 clustering, no target; groups: [1, 2, 2, 0, 0, 0, 1, 0, 1, 1]
4 anomaly, unusual orders: [107]
প্রথম দুই লাইন দুটি আলাদা target কলাম: একটিতে শব্দ (শ্রেণি), অন্যটিতে সংখ্যা। তৃতীয় লাইনে কোনো target নেই; AgglomerativeClustering (কাছের বিন্দুগুলোকে ধাপে ধাপে জুড়ে দল বানানোর একটি পদ্ধতি) নিজেই দশটি অর্ডারকে তিন দলে ভাগ করেছে, আর দূরের চারটি অর্ডার (১০৪, ১০৫, ১০৬, ১০৮) দল ০-তে পড়েছে। items আর km-কে আগে এক মাপে আনা হয়েছে, নইলে বড় সংখ্যার কলাম km একাই দল ঠিক করে দিত। চতুর্থ লাইনে median থেকে দূরত্বকে MAD (median absolute deviation, অর্থাৎ median থেকে দূরত্বগুলোর median) দিয়ে ভাগ করে একটি স্কোর বানানো হয়েছে; ৫-এর বেশি স্কোর শুধু ১০৭ নম্বরের। Mean-এর বদলে median নেওয়া হয়েছে, কারণ ৪৮,০০০ টাকার একটি অর্ডার mean-কে নিজের দিকে টেনে নেয়, median-কে প্রায় নড়াতে পারে না।
৫ · Label ছাড়া কাজ, সাজানো আর সময়ের ক্রম
Classification আর regression-এর বাইরেও বাজারঘরের অনেক প্রশ্ন আছে। প্রতিটির জন্য দেখি: কী চাই, আউটপুট কেমন, আর সাফল্য কীভাবে মাপব।
Ranking আর recommendation — কোনটি আগে দেখাব
বাজারঘরের সার্চ বক্সে কেউ “শাড়ি” লিখলেন। মিলে যায় ৮০০টি পণ্য, কিন্তু ফোনের স্ক্রিনে প্রথমে আসে মাত্র ছয়টি। এখানে প্রতিটি পণ্যকে আলাদা করে “ভালো/খারাপ” বলা দরকার নেই; দরকার একটি ক্রম। একেই বলে ranking. আর ক্রেতা কিছু না খুঁজলেও “আপনার পছন্দ হতে পারে” তালিকা বানানো হলো recommendation. আউটপুট একটি সাজানো তালিকা। মাপা হয় তালিকার ওপরের অংশ দিয়ে, যেমন precision@k (ওপরের k-টির কতগুলো কাজের) বা NDCG (ওপরের দিকে ভালো জিনিস থাকলে বেশি নম্বর); শেষ বিচার ক্লিক আর কেনায়।
Clustering — ক্রেতাদের কয়েকটি দল
বাজারঘর জানতে চায় তার ক্রেতারা কয়েক রকম কি না: মাসের শুরুতে বড় বাজার করা পরিবার, ঈদের আগে শুধু পোশাক কেনা তরুণ, প্রতি সপ্তাহে ছোট অর্ডার দেওয়া অফিসকর্মী। কেউ আগে থেকে এই দল ঠিক করে দেয়নি, তাই label নেই। Clustering ডেটা থেকে নিজেই দল খোঁজে। আউটপুট প্রতিটি ক্রেতার একটি দল-নম্বর। মাপা কঠিন, কারণ “সঠিক উত্তর” নেই; silhouette score-এর মতো সংখ্যা বলে দলগুলো কতটা আলাদা, কিন্তু আসল পরীক্ষা হলো দলগুলো দিয়ে ব্যবসার কোনো সিদ্ধান্ত ভালো হয় কি না।
Anomaly detection — কোনটি স্বাভাবিক নয়
উপরের ১০৭ নম্বর অর্ডারের মতো অস্বাভাবিক জিনিস খোঁজা হলো anomaly detection: হঠাৎ এক ঠিকানা থেকে ৪০টি ক্যাশ-অন-ডেলিভারি অর্ডার, এক রাতে একটি পণ্যের দাম ১০ গুণ, একটি সার্ভারের response time হঠাৎ বেড়ে যাওয়া। জালিয়াতির উদাহরণ খুব কম, আর জালিয়াতেরা কৌশল বদলায়, তাই অনেক সময় label ছাড়াই “স্বাভাবিক কেমন” শিখে তার বাইরের জিনিস চিহ্নিত করা হয়। আউটপুট একটি স্কোর বা পতাকা; মাপা হয় সন্দেহজনক তালিকার কত ভাগে মানুষ যাচাই করে সত্যিই সমস্যা পেলেন তা দিয়ে।
Dimensionality reduction — অনেক কলামকে কয়েকটিতে আনা
বাজারঘরের প্রতিটি ক্রেতার ৫০টি কলাম থাকতে পারে: কোন বিভাগে কত টাকা, কোন সময়ে কেনেন, কত ছাড় নেন। ৫০ মাত্রার ছবি চোখে দেখা যায় না। Dimensionality reduction এই ৫০টি কলামকে ২–৩টি নতুন কলামে আনে, যতটা সম্ভব তথ্য রেখে, যাতে ছবি আঁকা যায় বা পরের মডেল দ্রুত চলে। জনপ্রিয় পদ্ধতি PCA. মাপা হয় কতটা তথ্য (variance) রয়ে গেল দিয়ে। এটি প্রায়ই নিজে লক্ষ্য নয়, অন্য কাজের প্রস্তুতি।
Sequence prediction আর forecasting — এরপর কী
আবহাওয়ার পূর্বাভাসের মতো: অতীতের ক্রম দেখে ভবিষ্যৎ বলা। বাজারঘরে: আগামী সপ্তাহে প্রতিদিন কত অর্ডার আসবে, যাতে ডেলিভারি রাইডার ঠিক করা যায়। এটি forecasting, regression-এরই একটি রূপ, কিন্তু একটি বড় শর্তসহ: ভবিষ্যৎ দিয়ে অতীত শেখানো যাবে না, তাই ডেটা ভাগ হয় সময় ধরে। আরও সাধারণ রূপ sequence prediction: ক্রমের পরের জিনিস অনুমান, যেমন ক্রেতা এরপর কোন পাতা খুলবেন, বা একটি বাক্যের পরের শব্দ কী। মজার কথা, আধুনিক LLM-এর ভেতরের মূল কাজটিও এটাই, পরের token-এর অনুমান (পর্ব ৭০)। Forecasting মাপা হয় MAE বা MAPE (শতকরা ভুল) দিয়ে, আর সবসময় “গত সপ্তাহের একই দিন”-এর মতো সহজ পূর্বাভাসের পাশে।
৬ · খোঁজা, পরিকল্পনা, খেলা আর সৃষ্টি — আর পুরো মানচিত্র
এখন পর্যন্ত সব সমস্যা ছিল “ডেটা থেকে শেখা”। কিন্তু AI-এর ইতিহাসের বড় অংশ অন্য এক ধরনের সমস্যা নিয়ে: যেখানে জগতের নিয়ম জানা, আর প্রশ্ন হলো সেরা কাজের ক্রম কী।
- Search আর optimization: বাজারঘরের একজন রাইডারের ১২টি ঠিকানা আছে। কোন ক্রমে গেলে মোট পথ সবচেয়ে কম? রিকশাওয়ালা যেমন জ্যাম মাথায় রেখে রুট ঠিক করেন। আউটপুট একটি সমাধান (রুট, রুটিন); মাপ খরচ বা সময়। এতে ডেটা থেকে শেখার দরকারই নাও থাকতে পারে।
- Planning: একটি লক্ষ্য (“সব অর্ডার আজ সন্ধ্যার মধ্যে প্যাক ও রওনা”) থেকে কাজের ধারাবাহিকতা বের করা: কোন কাজ আগে, কোনটি কোনটির পরে, কোন যন্ত্র কখন খালি। আউটপুট কাজের একটি তালিকা; মাপ লক্ষ্য পূরণ হলো কি না, কত ধাপে, কত খরচে।
- Game playing: প্রতিপক্ষ আছে এমন খোঁজা, যেমন দাবা বা লুডু। আউটপুট প্রতিটি অবস্থায় একটি চাল; মাপ জয়ের হার। ১৯৯৭ সালে IBM-এর Deep Blue দাবায় Garry Kasparov-কে একটি ম্যাচে হারায়; ২০১৬ সালে DeepMind-এর AlphaGo Go খেলায় Lee Sedol-কে হারায়, search আর শেখা মিলিয়ে।
- Generation: নতুন কিছু তৈরি: পণ্যের বর্ণনা লেখা, রিভিউয়ের সারাংশ, বিজ্ঞাপনের ছবি। আউটপুট লেখা, ছবি বা শব্দ। মাপা সবচেয়ে কঠিন, কারণ একটি প্রশ্নের অনেক ভালো উত্তর হয়; তাই মানুষের মূল্যায়ন আর নিয়ম যাচাই (দাম ঠিক লিখেছে কি না) লাগে। Generative model বিশ্বাসযোগ্য শোনায় এমন ভুলও লিখতে পারে।
- Perception: ছবি, ভিডিও বা শব্দ থেকে অর্থ বের করা। গুদামের ক্যামেরায় ভাঙা প্যাকেট চেনা (vision-এ classification), কল সেন্টারের কথা লেখায় রূপান্তর (speech recognition, মাপ word error rate).
- ভাষার কাজ (NLP): বাংলা রিভিউ ইতিবাচক না নেতিবাচক (classification), রিভিউ থেকে পণ্যের নাম তুলে আনা, প্রশ্নের উত্তর খোঁজা (ranking), সারাংশ লেখা (generation). বাংলার মতো ভাষায় ডেটা আর টুল ইংরেজির তুলনায় কম, যা একটি বাস্তব বাধা।
পুরো মানচিত্র — কোন ধরন, কোন পর্বে
| ধরন | বাজারঘরের উদাহরণ | আউটপুট | যেভাবে মাপবেন | এই কোর্সে |
|---|---|---|---|---|
| Binary classification | অর্ডার দেরিতে পৌঁছাবে? | হ্যাঁ/না, সম্ভাবনা | precision, recall, F1 | পর্ব ৫৭, ৫৯, ৬০ |
| Multi-class | রিভিউ কোন বিষয়ে | একটি শ্রেণি | accuracy, macro-F1 | পর্ব ৫১, ৬৭ |
| Multi-label | রিভিউয়ের সব ট্যাগ | কয়েকটি হ্যাঁ/না | প্রতি ট্যাগে F1 | পর্ব ৬০-এর মাপ দিয়ে |
| Regression | কত দিনে পৌঁছাবে | একটি সংখ্যা | MAE, RMSE | পর্ব ৫৮ |
| Ranking, recommendation | “শাড়ি” সার্চের ক্রম | সাজানো তালিকা | precision@k, NDCG, ক্লিক | পর্ব ৩৩, ৬৯ |
| Clustering | ক্রেতাদের দল | দল-নম্বর | silhouette, ব্যবসায় কাজে লাগে কি না | পর্ব ৬৫ |
| Anomaly detection | সন্দেহজনক অর্ডার | স্কোর, পতাকা | যাচাই করা তালিকায় সত্যি সমস্যার ভাগ | আলাদা পর্ব নেই; ভিত্তি পর্ব ৩৬–৩৭ |
| Dimensionality reduction | ৫০ কলাম থেকে ২ | কম কলামের টেবিল | রয়ে যাওয়া variance | পর্ব ৬৫ |
| Forecasting, sequence | আগামী সপ্তাহের অর্ডার | ভবিষ্যতের মান | MAE, MAPE | পর্ব ২৬, ৫৩, ৭০ |
| Generation | পণ্যের বর্ণনা লেখা | লেখা, ছবি | মানুষের মূল্যায়ন, নিয়ম যাচাই | পর্ব ৭০, ৭১ |
| Search, optimization | রাইডারের রুট | একটি সমাধান | খরচ, সময় | পর্ব ৩৯–৪১, ৪৩, ৪৪ |
| Planning | সন্ধ্যার মধ্যে সব প্যাকিং | কাজের ধারা | লক্ষ্য পূরণ, ধাপ, খরচ | পর্ব ৪৯, ৫৪ |
| Game playing | দাবা, লুডু | প্রতি অবস্থায় চাল | জয়ের হার | পর্ব ৪২ |
| Perception | ভাঙা প্যাকেটের ছবি | শ্রেণি, বাক্স, লেখা | accuracy, word error rate | পর্ব ১৮, ৬৮, ৭১ |
| ভাষার কাজ | বাংলা রিভিউয়ের মনোভাব | শ্রেণি, তালিকা, লেখা | কাজ অনুযায়ী | পর্ব ৫১, ৬৭, ৬৯, ৭০ |
যুক্তি আর জ্ঞান নিয়ে কাজ (logic, rule-based system, knowledge graph) মডিউল ৮-এ (পর্ব ৪৫–৪৮) আসবে; সেখানে আউটপুট একটি সিদ্ধান্ত বা প্রমাণ, যা নিয়ম থেকে বের হয়। Speech আর গভীর computer vision-এর পূর্ণ আলোচনা পরের একটি deep learning কোর্সের বিষয়; এই কোর্সে শুধু ভিত্তিটুকু থাকবে।
নিচের ছোট function-টি এই মানচিত্রকে কোডে রূপ দেয়। একটি ছোট spec (dictionary-তে লেখা কয়েকটি তথ্য) দেখে এটি সমস্যার ধরনের প্রথম খসড়া বলে। খেয়াল করুন, প্রথম দুটি শর্তই হলো “ML লাগবে কি না”। Python-এর dictionary পরিচিত না হলে Python কোর্সের dictionary পর্ব দেখে নিতে পারেন।
def choose(spec):
"""ছোট একটি spec থেকে সমস্যার ধরন অনুমান করে (শুধু প্রথম খসড়া)।"""
if spec.get("exact_rule_known"):
return "no ML: a rule, query or spreadsheet"
if spec.get("examples", 0) < 100 and spec.get("needs_labels", True):
return "no ML yet: collect data first"
out = spec["output"]
if out == "category":
if spec.get("many_labels_at_once"):
return "multi-label classification"
k = spec.get("n_classes", 2)
return "binary classification" if k == 2 else f"multi-class ({k})"
if out == "number":
return "forecasting" if spec.get("future_in_time") else "regression"
simple = {"ordered_list": "ranking / recommendation",
"groups": "clustering", "unusual_items": "anomaly detection",
"new_content": "generation", "action_plan": "planning / search"}
return simple.get(out, "unclear: refine the problem statement")
specs = {
"late delivery?": {"output": "category", "examples": 5000},
"review topic": {"output": "category", "n_classes": 4, "examples": 900},
"review tags": {"output": "category", "many_labels_at_once": True, "examples": 900},
"delivery days": {"output": "number", "examples": 5000},
"next week sales": {"output": "number", "future_in_time": True, "examples": 700},
"VAT on bill": {"output": "number", "exact_rule_known": True},
"customer groups": {"output": "groups", "needs_labels": False},
"rider route": {"output": "action_plan", "needs_labels": False},
"fraud alert": {"output": "category", "examples": 40},
}
for name, s in specs.items():
print(f"{name:16s} -> {choose(s)}")আসল আউটপুট:
late delivery? -> binary classification
review topic -> multi-class (4)
review tags -> multi-label classification
delivery days -> regression
next week sales -> forecasting
VAT on bill -> no ML: a rule, query or spreadsheet
customer groups -> clustering
rider route -> planning / search
fraud alert -> no ML yet: collect data first
শেষ দুটি লাইন সবচেয়ে শিক্ষণীয়। VAT-এর হিসাব একটি জানা সূত্র, তাই ML লাগে না। আর “fraud alert”-এ মাত্র ৪০টি উদাহরণ; এত কম label দিয়ে একটি নির্ভরযোগ্য classifier শেখানো কঠিন, তাই উত্তর “আগে ডেটা জমান” (অথবা label ছাড়া anomaly detection ভাবুন)। 100 সীমাটি শেখানোর জন্য বেছে নেওয়া একটি সংখ্যা, কোনো সর্বজনীন নিয়ম নয়; কত উদাহরণ লাগবে তা সমস্যার কঠিনতা আর শ্রেণির ভারসাম্যের ওপর নির্ভর করে। spec.get(key, default) না-থাকা চাবির জন্য default মান দেয়, তাই প্রতিটি spec-এ সব চাবি লিখতে হয়নি।
৭ · কখন AI ভুল টুল
এই কোর্সটি AI নিয়ে, তবু সৎভাবে বলা দরকার: বাস্তবের অনেক সমস্যায় AI দরকার নেই, আর কিছু সমস্যায় AI ব্যবহার করা ক্ষতিকর। চারটি সংকেত মনে রাখুন।
📐 নিয়ম জানা আছে
VAT ১৫%, ৫০০ টাকার বেশি অর্ডারে ঢাকায় ডেলিভারি ফ্রি, স্টকে ৫টির কম থাকলে সতর্কবার্তা — এগুলো সূত্র। মডেল শেখালে সে প্রায় ঠিক হবে, কিন্তু কখনো কখনো ভুল; সূত্র সবসময় ঠিক।
সমাধান: if-else বা সূত্র🗄️ প্রশ্নটি আসলে একটি query
“গত মাসে কোন জেলায় সবচেয়ে বেশি বিক্রি?” “কোন পণ্য ৩০ দিনে একবারও বিক্রি হয়নি?” এর উত্তর ডেটাতেই আছে; অনুমানের দরকার নেই। একটি SQL GROUP BY বা spreadsheet-এর pivot table যথেষ্ট।
সমাধান: SQL, pandas groupby📉 ডেটা নেই বা খুব কম
নতুন চালু করা একটি সেবা, ২০টি অর্ডার। বা label-ই নেই: কোন ক্রেতা “অসন্তুষ্ট” কেউ লিখে রাখেনি। মডেল শূন্য থেকে শেখে না; কম ডেটায় সে কাকতালীয় মিল মুখস্থ করে।
সমাধান: আগে ডেটা সংগ্রহ, সহজ নিয়ম⚠️ ভুলের দাম খুব বেশি, বা মাপার উপায় নেই
স্বয়ংক্রিয়ভাবে কারও অ্যাকাউন্ট বন্ধ করা, ঋণ নাকচ করা, ওষুধের মাত্রা ঠিক করা — এখানে একটি ভুল একজন মানুষের বড় ক্ষতি। আর যদি জানার উপায়ই না থাকে মডেল ঠিক বলছে কি না, তাহলে উন্নতি বা ক্ষতি কোনোটাই ধরা পড়বে না।
সমাধান: মানুষের সিদ্ধান্ত, AI শুধু সাহায্যকারীএকটি সৎ উদাহরণ: বাজারঘরের মালিক চান “AI দিয়ে বুঝব কোন পণ্যের স্টক ফুরিয়ে যাচ্ছে।” কিন্তু প্রতিটি পণ্যের বর্তমান স্টক আর গত ৭ দিনের গড় বিক্রি জানা থাকলে, “স্টক ÷ দৈনিক গড় বিক্রি < ৫ দিন হলে সতর্কবার্তা” — এই এক লাইনের নিয়মই প্রথম সংস্করণ হিসেবে যথেষ্ট। ঈদের মৌসুমে নিয়মটি বারবার ভুল করলে তখন forecasting মডেল ভাবা যায়, আর এই নিয়মই হবে তার baseline.
২০১৫ সালে D. Sculley ও সহকর্মীদের প্রবন্ধ “Hidden Technical Debt in Machine Learning Systems” দেখায়, বাস্তব ML সিস্টেমে মডেলের কোড খুব ছোট একটি অংশ; চারপাশের ডেটা সংগ্রহ, যাচাই আর পর্যবেক্ষণের বোঝা অনেক বড়। অর্থাৎ ML বেছে নেওয়া মানে একটি স্থায়ী খরচও বেছে নেওয়া (ভাবনার প্রশ্ন ৪ দেখুন)।
৮ · Baseline — আগে সবচেয়ে সহজ পদ্ধতির সঙ্গে তুলনা
ক্রিকেটে একজন ব্যাটসম্যানের গড় ৩৫ শুনে কিছু বোঝা যায় না, যতক্ষণ না জানেন দলের বাকিদের গড় কত। মডেলের “৯৫% accurate”-ও তাই; তুলনা ছাড়া অর্থহীন। তুলনার প্রথম মানদণ্ড হলো baseline: এমন একটি পদ্ধতি যা কোনো বুদ্ধি ছাড়াই উত্তর দেয়।
| সমস্যা | সবচেয়ে সহজ baseline | বাজারঘরে |
|---|---|---|
| Classification | সবসময় সবচেয়ে বেশি দেখা শ্রেণি (majority class) | “কোনো অর্ডারই ফেরত আসবে না” |
| Regression | train ডেটার গড় বা median | “সব অর্ডার ৩ দিনে পৌঁছাবে” |
| Forecasting | শেষ মান, বা গত মৌসুমের একই সময়ের মান | “আগামী শুক্রবার = গত শুক্রবার” |
| Ranking | সবচেয়ে জনপ্রিয় আগে, বা নতুন আগে | “বেশি বিক্রি হওয়া শাড়ি আগে” |
| যেকোনো সমস্যা | বর্তমান হাতে-লেখা নিয়ম | “৫০০ টাকার বেশি হলে আগে প্যাক” |
Majority class-এর ফাঁদ — সংখ্যা দিয়ে
বাজারঘরে পণ্য ফেরত আসে খুব কম, ধরা যাক প্রতি ১০০টি অর্ডারে ৩টির কিছু বেশি। এমন ডেটাকে বলে imbalanced (এক শ্রেণি অনেক বেশি)। এখানে একটি মডেল বানানো হলো, আর পাশে রাখা হলো সবচেয়ে বোকা baseline: “কোনো অর্ডারই ফেরত আসবে না”। নিচের কোড দুটিকে একই test ডেটায় মাপে।
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.dummy import DummyClassifier
from sklearn.metrics import accuracy_score, recall_score
rng = np.random.default_rng(42)
n = 2000
X = rng.normal(size=(n, 3)) # তিনটি feature, যেমন দাম, দূরত্ব, আগের রিটার্ন
risk = 1.5 * X[:, 0] + X[:, 1] + rng.normal(scale=1.0, size=n)
y = (risk > 3.8).astype(int) # 1 = পণ্য ফেরত এসেছে (বিরল)
print("returns (1) share:", round(y.mean(), 3))
X_tr, X_te, y_tr, y_te = train_test_split(
X, y, test_size=0.5, random_state=42, stratify=y)
base = DummyClassifier(strategy="most_frequent").fit(X_tr, y_tr)
tree = DecisionTreeClassifier(random_state=42).fit(X_tr, y_tr)
for name, m in [("baseline: always 0", base), ("decision tree", tree)]:
p = m.predict(X_te)
print(f"{name:20s} accuracy={accuracy_score(y_te, p):.3f}"
f" recall(1)={recall_score(y_te, p, zero_division=0):.2f}")আসল আউটপুট:
returns (1) share: 0.033
baseline: always 0 accuracy=0.967 recall(1)=0.00
decision tree accuracy=0.951 recall(1)=0.27
মাত্র ৩.৩% অর্ডার ফেরত এসেছে। Decision tree-র accuracy ৯৫.১%, শুনতে চমৎকার। কিন্তু যে baseline কিছুই শেখেনি, শুধু সবাইকে “ফেরত আসবে না” বলেছে, তার accuracy ৯৬.৭%. অর্থাৎ accuracy-র বিচারে মডেলটি একটি বোকা নিয়মের কাছে হেরেছে। আবার recall দেখুন: baseline একটিও ফেরত ধরতে পারেনি (০.০০), মডেল ধরেছে ২৭%. কোনটি ভালো, তা নির্ভর করে ভুলের দামের ওপর। নিচের ডায়াগ্রামে হিসাবটি ধাপে ধাপে দেখুন। DummyClassifier scikit-learn-এর তৈরি baseline; stratify=y train আর test-এ ফেরতের অনুপাত সমান রাখে। এখানে ডেটা কৃত্রিম, আর সংখ্যাগুলো এই একটি seed-এর ফল।
| মডেল | |
| ঠিক “না” (TN) | |
| ভুল “হ্যাঁ” (FP) | |
| ধরা পড়েনি (FN) | |
| ঠিক “হ্যাঁ” (TP) | |
| Accuracy | |
| Recall | |
| মোট ভুলের দাম |
- Test ডেটা। ১০০০টি অর্ডার, যার মধ্যে ৩৩টি সত্যিই ফেরত এসেছে আর ৯৬৭টি আসেনি। মডেলগুলো এই ডেটা শেখার সময় দেখেনি।
- Baseline: সবাইকে “না”। ৯৬৭টি “না” ঠিক (TN), ৩৩টি ফেরত একটিও ধরা পড়েনি (FN). Accuracy = ৯৬৭ / ১০০০ = ৯৬.৭%, কোনো বুদ্ধি ছাড়াই।
- Decision tree. ৯টি ফেরত ঠিক ধরেছে (TP), ২৪টি ধরতে পারেনি (FN), আর ২৫টি ভালো অর্ডারকে ভুল করে “ফেরত আসবে” বলেছে (FP). Accuracy = (৯৪২ + ৯) / ১০০০ = ৯৫.১% — baseline-এর চেয়ে কম।
- Recall. সত্যিকারের ৩৩টি ফেরতের কত ভাগ ধরা পড়ল? মডেল: ৯ / ৩৩ ≈ ২৭.৩%; baseline: ০ / ৩৩ = ০%. Precision: মডেল যে ৩৪টিকে “হ্যাঁ” বলেছে তার ৯টি ঠিক, ৯ / ৩৪ ≈ ২৬.৫%.
- দাম দিয়ে বিচার। ধরা যাক, একটি ফেরত আগে ধরতে না পারলে ক্ষতি ৩০০ টাকা, আর ভুল সতর্কতায় একটি ফোনকলের খরচ ২০ টাকা। Baseline: ৩৩ × ৩০০ = ৯,৯০০ টাকা। মডেল: ২৪ × ৩০০ + ২৫ × ২০ = ৭,২০০ + ৫০০ = ৭,৭০০ টাকা। Accuracy-তে হারা মডেলটিই এখানে সস্তা। দাম উল্টো হলে উত্তরও উল্টো হতে পারত।
Imbalanced ডেটায় majority-class baseline-এর accuracy হলো সবচেয়ে বড় শ্রেণির অনুপাত। ৯৭% অর্ডার ফেরত না এলে, কিছু না শিখেই ৯৭% accuracy পাওয়া যায়। তাই যেকোনো classification ফলাফলের সঙ্গে তিনটি জিনিস চাই: (১) majority-class baseline-এর সংখ্যা, (২) recall আর precision, (৩) ভুলের দাম ধরে মোট খরচ।
Forecasting-এর baseline — গড়, শেষ মান, গত সপ্তাহ
Regression আর forecasting-এও একই নীতি। নিচের কোডে বাজারঘরের ২৮ দিনের দৈনিক অর্ডার আছে, সপ্তাহের শেষে (শুক্র-শনি) বেশি। প্রথম ২১ দিন দেখে শেষ ৭ দিন অনুমান করা হয় তিনটি সহজ উপায়ে: train-এর গড়, শেষ দিনের মান, আর গত সপ্তাহের একই দিনের মান।
import numpy as np, pandas as pd
rng = np.random.default_rng(42)
days = pd.date_range("2026-09-05", periods=28, freq="D") # শনিবার থেকে
week = np.array([120, 110, 105, 100, 115, 160, 175]) # শনি ... শুক্র
orders = np.tile(week, 4) + np.arange(28) + rng.integers(-8, 9, 28)
s = pd.Series(orders, index=days)
train, test = s[:21], s[21:] # শেষ ৭ দিন লুকানো
print("test days:", test.index.strftime("%a").tolist())
print("actual :", test.tolist())
forecasts = {
"mean of train": np.full(7, round(train.mean())),
"last value": np.full(7, train.iloc[-1]),
"same day last week": train.iloc[-7:].to_numpy(),
}
for name, f in forecasts.items():
mae = np.abs(test.to_numpy() - f).mean()
print(f"{name:19s} MAE = {mae:5.1f} orders/day")আসল আউটপুট:
test days: ['Sat', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri']
actual : [139, 127, 135, 129, 142, 184, 207]
mean of train MAE = 20.6 orders/day
last value MAE = 46.6 orders/day
same day last week MAE = 8.1 orders/day
“শেষ মান” baseline সবচেয়ে খারাপ (৪৬.৬), কারণ শেষ train দিনটি ছিল শুক্রবার, সপ্তাহের সবচেয়ে ব্যস্ত দিন; সেই সংখ্যা সারা সপ্তাহে টেনে নিলে শনি থেকে বুধ পর্যন্ত বড় ভুল হয়। “গত সপ্তাহের একই দিন” (seasonal naive) মাত্র ৮.১ অর্ডার ভুল করে। এখন কেউ যদি একটি জটিল forecasting মডেল এনে বলেন “MAE ১২”, আপনি জানেন সেটি গত সপ্তাহ দেখে বলার চেয়েও খারাপ। কোন baseline শক্ত, তা ডেটার গঠনের ওপর নির্ভর করে, তাই কয়েকটিই চালিয়ে দেখুন। strftime("%a") তারিখ থেকে বারের ইংরেজি সংক্ষিপ্ত নাম দেয়; তারিখ নিয়ে বিস্তারিত পর্ব ২৬-এ।
৯ · Framing-এর তিন ফাঁদ
সমস্যার ধরন ঠিক হলেও framing-এ এমন ভুল হতে পারে যে মডেল test-এ দারুণ, বাস্তবে অকেজো। তিনটি সবচেয়ে সাধারণ ফাঁদ:
ফাঁদ ১ — যা পরে এমনিই জানবেন, তা অনুমান করা
বাজারঘরের একজন বিশ্লেষক একটি মডেল বানালেন, যা বলে “অর্ডারটি ক্যাশ-অন-ডেলিভারি হবে কি না”। কিন্তু ক্রেতা চেকআউটের সময় নিজেই পেমেন্ট পদ্ধতি বেছে নেন, আর সেই মুহূর্তেই উত্তরটি জানা হয়ে যায়। আগে জানার কোনো সিদ্ধান্ত যদি না থাকে, তাহলে এই অনুমানের কোনো মূল্য নেই। প্রতিটি framing-এ জিজ্ঞেস করুন: উত্তরটি আগে জানলে আমি কোন কাজটি ভিন্নভাবে করব, আর কতটা আগে জানতে হবে?
ফাঁদ ২ — Target leakage
অংশ ৪-এ দেখেছেন, “দেরি হবে কি না” অনুমানে days কলাম রাখা যায় না। এটিই target leakage: এমন feature ব্যবহার করা যা সিদ্ধান্তের মুহূর্তে জানা থাকে না, বা target থেকেই তৈরি। আরও লুকানো উদাহরণ: “ক্রেতা অভিযোগ করবেন কি না” অনুমানে “কল সেন্টারে কলের সংখ্যা” feature রাখা, অথচ অভিযোগ করতেই সেই কলগুলো হয়েছিল। Test-এ accuracy প্রায় নিখুঁত আসে, আর সেটিই সতর্ক হওয়ার সংকেত। সন্দেহজনক রকম ভালো ফল দেখলে আগে leakage খুঁজুন। Train, validation, test ভাগ আর leakage-এর পূর্ণ আলোচনা পর্ব ৫৬-এ।
ফাঁদ ৩ — Proxy target যা ভুল জিনিসকে পুরস্কৃত করে
অনেক সময় আসল লক্ষ্য সরাসরি মাপা যায় না, তাই কাছাকাছি একটি সংখ্যা নেওয়া হয়। একে বলে proxy target. বাজারঘর চায় “ক্রেতা যে পণ্যে সন্তুষ্ট হবেন তা আগে দেখাতে”, কিন্তু সন্তুষ্টি মাপা কঠিন, তাই মডেলকে শেখানো হলো “ক্লিক বেশি হবে এমন পণ্য আগে”। ফল: চকচকে ছবি আর অবিশ্বাস্য ছাড়ের পণ্য ওপরে উঠল, ক্লিক বাড়ল, কিন্তু ফেরত আর খারাপ রিভিউও বাড়ল। মডেল ঠিক সেটাই করেছে যা বলা হয়েছিল; বলাটাই ভুল ছিল।
অর্থনীতিবিদ Charles Goodhart ১৯৭৫ সালে মুদ্রানীতি নিয়ে একটি পর্যবেক্ষণ দেন, যা পরে নৃবিজ্ঞানী Marilyn Strathern (১৯৯৭) জনপ্রিয় রূপে লেখেন: “যখন একটি মাপ লক্ষ্য হয়ে যায়, তখন সেটি আর ভালো মাপ থাকে না।” একে বলে Goodhart's law. মেশিন লার্নিং মডেল এই নিয়মের সবচেয়ে নিষ্ঠুর উদাহরণ, কারণ মডেল proxy-কে বাড়ানোর যেকোনো ফাঁক খুঁজে নেয়, মানুষের মতো “আসলে কী চাওয়া হয়েছিল” ভাবে না।
আরও গভীরে। Leakage নিয়ে একটি ভিত্তিমূলক প্রবন্ধ হলো Kaufman, Rosset ও Perlich-এর “Leakage in Data Mining: Formulation, Detection, and Avoidance” (KDD ২০১১; পরে ACM TKDD-তে বিস্তৃত রূপ), যেখানে ডেটা-প্রতিযোগিতার বাস্তব উদাহরণ দিয়ে leakage-এর সংজ্ঞা আর ধরার উপায় আলোচনা করা হয়েছে। Ranking মূল্যায়নের মাপ NDCG এসেছে Järvelin ও Kekäläinen-এর ২০০২ সালের কাজ থেকে। আর সম্ভাবনা-আকারের পূর্বাভাস মাপার Brier score প্রস্তাব করেন আবহাওয়াবিদ Glenn Brier, ১৯৫০ সালে; আজও classifier-এর সম্ভাবনা কতটা নির্ভরযোগ্য তা মাপতে এটি ব্যবহৃত হয়।
পরীক্ষা ও ইন্টারভিউতে (বিশ্ববিদ্যালয়, চাকরি বা ইন্টারভিউর পরীক্ষায় এ ধরনের প্রশ্ন সাধারণ):
- Classification আর regression-এর পার্থক্য? Classification আগে থেকে ঠিক করা শ্রেণি অনুমান করে; regression একটি অবিচ্ছিন্ন সংখ্যা।
- Multi-class বনাম multi-label? Multi-class-এ প্রতিটি উদাহরণ ঠিক একটি শ্রেণিতে; multi-label-এ একসঙ্গে কয়েকটিতে।
- ৯৮% accuracy কি ভালো? Baseline না জেনে বলা যায় না; ৯৮% ডেটা এক শ্রেণির হলে এটি কিছু না শেখারই সমান।
- Clustering কি supervised? না; label ছাড়া ডেটার ভেতরের দল খোঁজে, তাই unsupervised.
- Target leakage কী? সিদ্ধান্তের মুহূর্তে অজানা, বা target থেকে তৈরি তথ্য feature হিসেবে ঢুকে পড়া, যাতে test-এ ফল অবাস্তব ভালো আসে।
১০ · AI-এর যুগে — AI সহকারী দিয়ে সমস্যা বাছাই
AI সহকারীকে বিক্রি বাড়ানোর একটি ML মডেল চাইলে সে কয়েক সেকেন্ডে কোড দেবে, প্রায়ই একটি চমৎকার accuracy-সহ। কিন্তু সে আপনার ব্যবসা, ডেটার সময়ক্রম আর ভুলের দাম জানে না। এই সহকারীরা প্রায়ই যেসব ভুল করে:
- সমস্যার ধরন না জিজ্ঞেস করেই একটি algorithm বেছে নেয়, আর baseline দেখায় না।
- Imbalanced ডেটায় শুধু accuracy জানায়, train ডেটাতেই মাপা ফল দেখায়, বা test ডেটা ভাগ করার আগেই পুরো ডেটায় scaling করে (leakage).
- পুরোনো বা ভুল API লেখে: pandas-এ সরানো
DataFrame.append, NumPy 2-এ সরানোnp.float, বা এমন parameter যা সেই version-এ নেই। - Warning চাপা দেয় (
warnings.filterwarnings("ignore")), আর বিশ্বাসযোগ্য শোনায় এমন কিন্তু ভুল পরিসংখ্যান লেখে।
কোড চাওয়ার আগে AI-কে প্রথমে সমস্যা গোছাতে সাহায্য করতে বলুন। নিচের প্রম্পটে খেয়াল করুন: কোড নিষেধ, প্রশ্ন করা বাধ্যতামূলক, আর baseline আর ভুলের দাম চাওয়া হয়েছে।
AI-এর পরামর্শ হাতে পেলে — যাচাইয়ের চেকলিস্ট
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন, তারপর “→ উত্তর” চাপুন।
প্র ০১একটি মুভি-সুপারিশের সমস্যাকে regression বলা ভালো, না ranking? Netflix Prize থেকে কী শেখা যায়?
২০০৬ সালে Netflix একটি প্রকাশ্য প্রতিযোগিতা ঘোষণা করে: যে দল তাদের নিজস্ব রেটিং-অনুমান পদ্ধতির চেয়ে ১০% কম RMSE অর্জন করবে, তারা পাবে ১০ লাখ ডলার। সমস্যাটি সাজানো হয়েছিল regression হিসেবে: একজন ব্যবহারকারী একটি মুভিকে ১ থেকে ৫ তারার মধ্যে কত দেবেন। ২০০৯ সালে “BellKor's Pragmatic Chaos” নামের একটি মিলিত দল লক্ষ্যে পৌঁছে পুরস্কার জেতে। বিজয়ী সমাধানটি ছিল শত শত মডেলের মিশ্রণ।
পরে, ২০১২ সালের দিকে, Netflix-এর প্রকৌশল ব্লগে জানানো হয় যে বিজয়ী পুরো মিশ্রণটি তারা হুবহু ব্যবহারে আনেনি। মাঝপথের পুরস্কারের দুটি পদ্ধতি তারা গ্রহণ করেছিল, কিন্তু শেষ ধাপের বাড়তি নির্ভুলতা প্রকৌশলের বিশাল খরচের তুলনায় যথেষ্ট মনে হয়নি। তার ওপর ব্যবসাটাই বদলে যাচ্ছিল: ডিভিডি ডাকে পাঠানো থেকে স্ট্রিমিং। স্ট্রিমিং-এ প্রশ্নটি আর “এই মুভিকে কত তারা দেবেন” নয়, বরং “হোম স্ক্রিনের প্রথম সারিতে কোন মুভিগুলো রাখলে মানুষ সত্যিই দেখবেন”। এটি একটি ranking সমস্যা, যার মাপ দেখা হয়েছে কি না, কতক্ষণ দেখা হয়েছে।
শিক্ষাটি গভীর। RMSE কমানো আর ভালো তালিকা বানানো একই জিনিস নয়। কেউ যে মুভিকে ২ তারা দেবেন, সেটির অনুমান ২.৮ না ২.২, তাতে তালিকার কিছু যায় আসে না, কারণ সেটি তালিকায় উঠবেই না। Ranking-এর মাপ (NDCG, precision@k) তালিকার ওপরের অংশে মনোযোগ দেয়। আবার রেটিং নিজেও একটি proxy: মানুষ যে ডকুমেন্টারিকে ৫ তারা দেন, সব সময় সেটিই দেখেন না।
মূল উপলব্ধি: একই ব্যবসায়িক প্রশ্নকে একাধিক ধরনে সাজানো যায়, আর কোন ধরন বাছবেন তা ঠিক হয় আসল সিদ্ধান্ত থেকে, ডেটার আকার থেকে নয়। Framing ভুল হলে নিখুঁত অপ্টিমাইজেশনও ভুল জিনিসকে নিখুঁত করে।
প্র ০২একটি proxy target কীভাবে হাজার হাজার মানুষের সঙ্গে অন্যায় করতে পারে? স্বাস্থ্যসেবার একটি বিখ্যাত গবেষণা কী দেখিয়েছিল?
২০১৯ সালে Science সাময়িকীতে Ziad Obermeyer ও সহকর্মীরা যুক্তরাষ্ট্রে বহুল ব্যবহৃত একটি স্বাস্থ্য-অ্যালগরিদম বিশ্লেষণ করেন। অ্যালগরিদমটির কাজ ছিল চিহ্নিত করা কোন রোগীদের বাড়তি যত্নের কর্মসূচিতে নেওয়া উচিত। আসল লক্ষ্য ছিল “কার স্বাস্থ্যের প্রয়োজন বেশি”। কিন্তু প্রয়োজন সরাসরি মাপা কঠিন, তাই মডেলকে শেখানো হয়েছিল একটি proxy: পরের বছর রোগীর পেছনে কত স্বাস্থ্য-খরচ হবে।
সমস্যা হলো, খরচ শুধু অসুস্থতার ওপর নির্ভর করে না; চিকিৎসা পাওয়ার সুযোগের ওপরও নির্ভর করে। গবেষকেরা দেখান, ঐতিহাসিক ও সামাজিক কারণে একই মাত্রায় অসুস্থ কৃষ্ণাঙ্গ রোগীদের পেছনে গড়ে কম খরচ হতো। ফলে একই ঝুঁকি-স্কোর পাওয়া কৃষ্ণাঙ্গ রোগীরা আসলে শ্বেতাঙ্গ রোগীদের চেয়ে বেশি অসুস্থ ছিলেন, আর বাড়তি যত্নের কর্মসূচিতে তাঁদের কম নেওয়া হচ্ছিল। মডেলটি খরচ অনুমানে খারাপ ছিল না; সে ঠিকই খরচ অনুমান করছিল। ভুলটা ছিল প্রশ্নে।
গবেষকেরা দেখান, target বদলে খরচের বদলে সরাসরি স্বাস্থ্যের সূচক (যেমন সক্রিয় দীর্ঘস্থায়ী রোগের সংখ্যা) নিলে পক্ষপাত অনেকটা কমে। অর্থাৎ সমাধানটি কোনো জটিল algorithm নয়, framing-এর একটি পরিবর্তন।
বাজারঘরের মতো ছোট ব্যবসাতেও একই ঝুঁকি আছে। “ভালো ক্রেতা” মানে যদি “বেশি টাকা খরচ করেন” ধরা হয়, তাহলে যাঁদের আয় কম কিন্তু নিয়মিত কেনেন, বা যাঁরা দূরের জেলায় থাকায় কম অর্ডার দিতে পারেন, তাঁরা কখনো ছাড় পাবেন না। ডেটা অতীতের অসমতাকে ধারণ করে, আর proxy সেই অসমতাকে ভবিষ্যতের নিয়ম বানিয়ে ফেলে।
মূল উপলব্ধি: Target বাছাই একটি মূল্যবোধের সিদ্ধান্ত, শুধু প্রযুক্তিগত নয়। প্রতিটি proxy-র জন্য জিজ্ঞেস করুন: আসল লক্ষ্য থেকে এটি কোথায় আলাদা, আর সেই পার্থক্যের ভার কারা বহন করবেন? দায়িত্বশীল AI-এর অভ্যাস নিয়ে পর্ব ৭২-এ আরও আসবে।
প্র ০৩Google Flu Trends কেন ব্যর্থ হয়েছিল, আর forecasting-এর framing সম্পর্কে এটি কী শেখায়?
২০০৮ সালে Google ঘোষণা করে, মানুষ ফ্লু-সংক্রান্ত কী কী সার্চ করছেন তা দেখে তারা যুক্তরাষ্ট্রে ফ্লু-এর প্রকোপ সরকারি পরিসংখ্যানের আগেই অনুমান করতে পারে। ২০০৯ সালে Nature-এ এ নিয়ে একটি প্রবন্ধ প্রকাশিত হয়, আর ধারণাটি “big data”-র সাফল্যের প্রতীক হয়ে ওঠে। Framing ছিল: input সার্চের সংখ্যা, output ডাক্তারের কাছে ফ্লু-জাতীয় উপসর্গ নিয়ে যাওয়া রোগীর অনুপাত, এক ধরনের forecasting বা “nowcasting”.
কিন্তু ২০১২-১৩ মৌসুমে এর অনুমান সরকারি হিসাবের চেয়ে অনেক বেশি আসে; ২০১৩ সালে Nature-এর একটি সংবাদ প্রতিবেদন অনুযায়ী এক পর্যায়ে প্রায় দ্বিগুণ। ২০১৪ সালে David Lazer ও সহকর্মীরা Science-এ “The Parable of Google Flu: Traps in Big Data Analysis” প্রবন্ধে কয়েকটি কারণ বিশ্লেষণ করেন। প্রথমত, লাখ লাখ সার্চ-শব্দের মধ্যে থেকে যেগুলো অতীতের ফ্লু-এর সঙ্গে মেলে সেগুলো বাছা হয়েছিল, তাই কিছু শব্দ কাকতালীয়ভাবে মৌসুমের সঙ্গে মিলেছিল (যেমন শীতকালের অন্য বিষয়)। দ্বিতীয়ত, সার্চ ইঞ্জিন নিজেই সময়ের সঙ্গে বদলেছে, সার্চের পরামর্শ দেখানো শুরু করেছে, ফলে ডেটা তৈরির প্রক্রিয়াই বদলে গেছে। তৃতীয়ত, ফ্লু নিয়ে সংবাদ বেশি হলে অসুস্থ না হয়েও মানুষ বেশি সার্চ করেন।
লেখকেরা আরও দেখান, সরকারি তথ্যের মাত্র কয়েক সপ্তাহ পুরোনো মান দিয়ে বানানো একটি সহজ মডেল অনেক সময় Flu Trends-এর চেয়ে ভালো করত। অর্থাৎ একটি শক্ত baseline-এর সঙ্গে নিয়মিত তুলনা থাকলে সমস্যাটি আগেই ধরা পড়ত।
মূল উপলব্ধি: Forecasting-এ input আর output-এর সম্পর্ক সময়ের সঙ্গে বদলায়। মডেল একবার বানিয়ে ছেড়ে দেওয়া যায় না; “গত সপ্তাহের মান”-এর মতো baseline-এর সঙ্গে নিয়মিত তুলনা আর ডেটা তৈরির প্রক্রিয়া বোঝা জরুরি। বড় ডেটা ভালো framing-এর বিকল্প নয়।
প্র ০৪অনেক অভিজ্ঞ প্রকৌশলী কেন বলেন “আগে ML ছাড়া চালু করুন”? এটি কি AI-বিরোধী কথা?
না, এটি AI-বিরোধী নয়; এটি AI-কে কাজে লাগানোর সবচেয়ে বাস্তবসম্মত পথ। Google-এর প্রকৌশলী Martin Zinkevich তাঁর “Rules of Machine Learning” নির্দেশিকা শুরুই করেন এই পরামর্শ দিয়ে: ML ছাড়া একটি পণ্য চালু করতে ভয় পাবেন না। কারণগুলো কয়েক স্তরের।
প্রথমত, ডেটা। নতুন পণ্যে শেখার মতো ডেটা থাকে না। একটি সহজ নিয়ম (যেমন “সবচেয়ে জনপ্রিয় পণ্য আগে”) চালু করলে ব্যবহারকারীরা ক্লিক করেন, কেনেন, ফেরত দেন; সেই আচরণই পরে ML-এর ডেটা হয়।
দ্বিতীয়ত, পরিকাঠামো। ডেটা সংগ্রহ, লগ রাখা, মাপার ব্যবস্থা, A/B test, এগুলো ML-এর আগে লাগে। সহজ নিয়ম দিয়ে শুরু করলে এই পাইপলাইন তৈরি ও যাচাই হয়, আর পরে মডেল বসালে বোঝা যায় উন্নতি মডেলের কারণে, পাইপলাইনের ভুলের কারণে নয়।
তৃতীয়ত, baseline. চালু থাকা নিয়মটি স্বয়ংক্রিয়ভাবে প্রথম baseline হয়ে যায়। ২০১৫ সালে Sculley ও সহকর্মীদের “Hidden Technical Debt in Machine Learning Systems” প্রবন্ধ দেখায়, ML সিস্টেম রক্ষণাবেক্ষণের খরচ সাধারণ সফটওয়্যারের চেয়ে বেশি, কারণ ডেটা বদলালে আচরণ চুপচাপ বদলে যায়। তাই ML-কে তার খরচের যোগ্য হতে হয়, আর সেটি প্রমাণ হয় শুধু baseline-এর সঙ্গে তুলনায়।
তবে এর উল্টো দিকও আছে। কিছু সমস্যায় নিয়ম লেখা প্রায় অসম্ভব: ছবি থেকে ভাঙা প্যাকেট চেনা, বাংলা রিভিউয়ের মনোভাব বোঝা, হাজার রকম স্প্যাম। এখানে হাতে-লেখা নিয়ম দ্রুত জটিল আর ভঙ্গুর হয়ে যায়, আর ML সত্যিই সুবিধা দেয়।
মূল উপলব্ধি: প্রশ্নটি “AI না নিয়ম” নয়, বরং “কোনটি দিয়ে শুরু, আর কখন বদলাব”। সহজ নিয়ম দিয়ে শুরু, মাপার ব্যবস্থা তৈরি, তারপর baseline হারাতে পারলেই ML.
প্র ০৫একটি মডেল বলল “হাঁপানি থাকলে নিউমোনিয়ায় মৃত্যুর ঝুঁকি কম” — ডেটা কি মিথ্যা বলছে, না প্রশ্নটি ভুল?
১৯৯০-এর দশকে নিউমোনিয়া রোগীদের ঝুঁকি অনুমানের একটি গবেষণা প্রকল্পে একটি নিয়মভিত্তিক মডেল শিখেছিল: হাঁপানি (asthma) আছে এমন রোগীদের মৃত্যুঝুঁকি কম। ঘটনাটি পরে Rich Caruana ও সহকর্মীরা ২০১৫ সালের KDD সম্মেলনের একটি প্রবন্ধে (বোধগম্য মডেল নিয়ে) বিস্তারিত আলোচনা করেন, এবং তাঁদের নিজেদের বোধগম্য মডেলেও একই প্যাটার্ন দেখা যায়। চিকিৎসাবিজ্ঞান বলে উল্টো কথা: হাঁপানি নিউমোনিয়াকে বেশি বিপজ্জনক করে।
তাহলে ডেটায় এমন দেখা গেল কেন? কারণ হাঁপানির রোগী নিউমোনিয়া নিয়ে এলে হাসপাতাল তাঁদের সঙ্গে সঙ্গে নিবিড় চিকিৎসায় নিত। সেই আগ্রাসী চিকিৎসার ফলে তাঁদের মৃত্যুর হার সত্যিই কম ছিল। ডেটা মিথ্যা বলেনি; ডেটা বলছিল “বর্তমান চিকিৎসা-ব্যবস্থার মধ্যে কী ঘটে”। কিন্তু মডেলটি ব্যবহারের পরিকল্পনা ছিল ঠিক উল্টো কাজে: কম ঝুঁকির রোগীদের বাড়ি পাঠিয়ে দেওয়া। মডেল মেনে চললে হাঁপানির রোগীদের বাড়ি পাঠানো হতো, যা প্রাণঘাতী হতে পারত।
এটি framing-এর একটি সূক্ষ্ম ফাঁদ। প্রশ্ন ছিল “এই রোগী কি মারা যাবেন?”, কিন্তু সিদ্ধান্তের দরকার ছিল “চিকিৎসা না দিলে এই রোগী কি মারা যাবেন?” প্রথমটির উত্তরে আগের সিদ্ধান্তের (চিকিৎসার) প্রভাব মিশে আছে। মডেলের accuracy যত বেশিই হোক, প্রশ্ন আর সিদ্ধান্তের মধ্যে এই ফাঁক থেকে যায়। এ ধরনের সমস্যা leakage-এর আত্মীয়: target-এর ভেতরে এমন কিছু ঢুকে আছে যা সিদ্ধান্ত নেওয়ার পর ঘটে।
বাজারঘরেও একই রকম ফাঁদ: “যেসব অর্ডারে আগে ফোন করা হয়েছিল সেগুলো কম ফেরত এসেছে” দেখে যদি মডেল শেখে “এ ধরনের অর্ডার ঝুঁকিহীন”, তাহলে ফোন করা বন্ধ করলেই ঝুঁকি ফিরে আসবে।
মূল উপলব্ধি: ডেটা দেখায় অতীতের ব্যবস্থায় কী ঘটেছে, আপনার নতুন সিদ্ধান্তে কী ঘটবে তা নয়। Problem statement-এ সবসময় লিখুন মডেলের আউটপুট দিয়ে কোন সিদ্ধান্ত নেওয়া হবে, আর পরীক্ষা করুন target সেই সিদ্ধান্তের আগের অবস্থা মাপছে কি না।
অনুশীলন
প্রথমটি হিসাবের, দ্বিতীয়টি আউটপুট অনুমানের, তৃতীয়টি নকশা ও সমালোচনার, শেষটি মানচিত্র মেলানোর।
-
Baseline-এর হিসাব: বাজারঘরের ৫০০টি অর্ডারের মধ্যে ২০টি বাতিল হয়েছে। একটি মডেল ৩০টি অর্ডারকে “বাতিল হবে” বলেছে, যার ১২টি সত্যিই বাতিল হয়েছিল। (ক) Majority-class baseline-এর accuracy কত? (খ) মডেলের accuracy, recall আর precision কত? (গ) একটি বাতিল আগে ধরতে না পারলে ক্ষতি ৪০০ টাকা আর ভুল সতর্কতায় খরচ ৩০ টাকা হলে, কোনটি সস্তা?
(ক) সবাইকে “বাতিল হবে না” বললে ৪৮০টি ঠিক। Accuracy = ৪৮০ / ৫০০ = ৯৬%.
(খ) TP = ১২, FP = ৩০ − ১২ = ১৮, FN = ২০ − ১২ = ৮, TN = ৪৮০ − ১৮ = ৪৬২. Accuracy = (১২ + ৪৬২) / ৫০০ = ৪৭৪ / ৫০০ = ৯৪.৮% (baseline-এর চেয়ে কম)। Recall = ১২ / ২০ = ৬০%. Precision = ১২ / ৩০ = ৪০%.
(গ) Baseline: ২০ × ৪০০ = ৮,০০০ টাকা। মডেল: ৮ × ৪০০ + ১৮ × ৩০ = ৩,২০০ + ৫৪০ = ৩,৭৪০ টাকা. Accuracy কম হলেও মডেলটি অর্ধেকের কম খরচ করায়।
-
আউটপুট অনুমান করুন: অংশ ৬-এর
choose()function-টি ধরে নিচের দুটি লাইনের আউটপুট কী হবে, চালানোর আগে লিখুন। তারপর অংশ ৬-এর কোডের শেষে লাইন দুটি যোগ করে চালিয়ে মিলিয়ে দেখুন।print(choose({"output": "number", "future_in_time": True, "examples": 50})) print(choose({"output": "groups", "needs_labels": False, "examples": 10}))no ML yet: collect data first clusteringপ্রথমটিতে
examples৫০, যা ১০০-এর কম, আরneeds_labelsদেওয়া নেই বলে defaultTrueধরা হয়; তাই forecasting-এর শর্তে পৌঁছানোর আগেই function ফিরে আসে। দ্বিতীয়টিতে উদাহরণ মাত্র ১০টি, কিন্তুneeds_labelsFalse, তাই দ্বিতীয় শর্ত মিথ্যা হয় আর আউটপুট “clustering”. তবে বাস্তবে ১০টি উদাহরণে clustering-ও খুব কিছু বলবে না; function-টি শুধু প্রথম খসড়া, বিচারবুদ্ধির বিকল্প নয়। -
নকশা ও সমালোচনা: একজন সহকর্মী লিখলেন: “AI দিয়ে বের করব কোন ক্রেতা ভালো। Input: ক্রেতার সব তথ্য, শেষ ছয় মাসের মোট কেনাকাটা আর ফেরতের সংখ্যাসহ। Output: ভালো বা খারাপ। মাপ: accuracy.” এই problem statement-এর অন্তত চারটি দুর্বলতা চিহ্নিত করে একটি ভালো সংস্করণ লিখুন।
- সিদ্ধান্ত নেই: “ভালো ক্রেতা” জেনে কী করা হবে? কুপন, আগে ডেলিভারি, না ক্যাশ-অন-ডেলিভারি বন্ধ? সিদ্ধান্ত না জানলে target-ও ঠিক হয় না।
- “ভালো” অসংজ্ঞায়িত, আর proxy-র ঝুঁকি: বেশি টাকা খরচ মানেই ভালো ধরলে কম আয়ের নিয়মিত ক্রেতা বাদ পড়বেন।
- সময়ের গোলমাল (leakage): “শেষ ছয় মাসের মোট কেনাকাটা” যদি target-এর সময়কালকেও ঢেকে দেয়, তাহলে ভবিষ্যতের তথ্য input-এ ঢুকছে।
- “সব তথ্য”: গোপনীয়তার ঝুঁকি, আর অপ্রয়োজনীয় তথ্য (যেমন নাম, ফোন) মডেলে পক্ষপাত ঢোকাতে পারে।
- শুধু accuracy: baseline নেই, ভুলের দাম নেই।
ভালো সংস্করণ: “সিদ্ধান্ত: কোন ক্রেতাকে ক্যাশ-অন-ডেলিভারির আগে ফোন করে নিশ্চিত হওয়া হবে। Input: অর্ডার দেওয়ার মুহূর্ত পর্যন্ত জানা তথ্য (আগের অর্ডার-সংখ্যা, আগের ফেরতের হার, এই অর্ডারের টাকা ও জেলা)। Output: এই অর্ডার ফেরত বা বাতিল হওয়ার সম্ভাবনা। ডেটা: গত বছরের অর্ডার, সময় ধরে train/test ভাগ। মাপ: recall আর precision, majority-class baseline আর বর্তমান হাতে-লেখা নিয়মের পাশে; একটি ফোনকলের খরচ বনাম একটি ফেরতের ক্ষতি ধরে মোট খরচ।”
-
মানচিত্র মেলান: নিচের প্রতিটি ইচ্ছার জন্য সমস্যার ধরন আর এই কোর্সের কোন পর্বে শিখবেন লিখুন: (ক) বাংলা রিভিউ থেকে বলা, ক্রেতা খুশি না অখুশি; (খ) আগামী ঈদের আগের সপ্তাহে প্রতিদিন কত অর্ডার আসবে; (গ) একজন রাইডারের ১৫টি ঠিকানার সবচেয়ে ছোট রুট; (ঘ) “এটি কিনলে এগুলোও পছন্দ হতে পারে” তালিকা; (ঙ) এক রাতে একটি কার্ড থেকে ৩০টি অর্ডার চিহ্নিত করা; (চ) প্রতিটি জেলার গত মাসের মোট বিক্রি।
- (ক) ভাষার কাজে binary classification — পর্ব ৫১ (Naive Bayes), ৬৭ (বাংলা লেখার ডেটা)।
- (খ) Forecasting — পর্ব ২৬ (time series); baseline হিসেবে গত বছরের ঈদের আগের সপ্তাহ বা গত সপ্তাহ।
- (গ) Search/optimization — পর্ব ৩৯–৪১, আর বড় হলে local search পর্ব ৪৪। শেখার ডেটা লাগে না।
- (ঘ) Recommendation/ranking — পর্ব ৩৩ (similarity), ৬৯ (embedding আর vector search).
- (ঙ) Anomaly detection; শুরুতে একটি সহজ নিয়মও চলে (“এক ঘণ্টায় একই কার্ডে ১০টির বেশি অর্ডার”)। ভিত্তি পর্ব ৩৬–৩৭-এর distribution আর পরিসংখ্যান।
- (চ) কোনো AI নয়: একটি SQL
GROUP BYবা pandas groupby (পর্ব ২৪)।
নিজেকে যাচাই করুন
ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।
ক্রমএকটি অস্পষ্ট ইচ্ছাকে AI সমস্যায় রূপ দেওয়ার ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)
- 💭 ব্যবসায়িক ইচ্ছাটি লেখা (“বিক্রি বাড়াতে চাই”)
- 🎯 একটি সিদ্ধান্ত বেছে নেওয়া, যা মডেলের আউটপুট বদলাবে
- 🔁 Input (সিদ্ধান্তের মুহূর্তে যা জানা) আর output ঠিক করা
- 🗂️ উত্তরসহ (label) ডেটা আছে কি না যাচাই করা
- 📏 সাফল্যের মাপ, ভুলের দাম আর baseline ঠিক করা
একটি অনলাইন দোকান প্রতিটি রিভিউকে ঠিক একটি বিষয়ে ফেলতে চায়: দাম, ডেলিভারি, পণ্যের মান বা ব্যবহার। এটি কোন ধরনের সমস্যা?
- Binary classification
- Multi-class classification
- Multi-label classification
- Clustering
১০০০টি লেনদেনের মধ্যে ৩০টি জালিয়াতি। একটি মডেলের accuracy ৯৬%. কোন সিদ্ধান্তটি সঠিক?
- ৯৬% accuracy মানে মডেলটি চমৎকার
- মডেলটি majority-class baseline-এর চেয়ে accuracy-তে ভালো
- সবাইকে “জালিয়াতি নয়” বললেই ৯৭% পাওয়া যায়, তাই accuracy-তে মডেলটি baseline-এর চেয়ে খারাপ; recall আর ভুলের দাম দেখতে হবে
- Imbalanced ডেটায় classification করাই যায় না
অর্ডার দেওয়ার মুহূর্তে “এই অর্ডার দেরিতে পৌঁছাবে কি না” অনুমানের একটি মডেলে নিচের কোন feature রাখলে target leakage হবে?
- গুদাম থেকে ঠিকানার দূরত্ব
- অর্ডারে কয়টি পণ্য
- অর্ডার দেওয়ার দিনটি কোন বার
- ডেলিভারির পরে ক্রেতা কতবার অভিযোগ করেছেন
একটি সাইট “ক্রেতার সন্তুষ্টি” বাড়াতে চেয়ে সুপারিশ-মডেলকে শুধু ক্লিক বাড়ানোর লক্ষ্য দিল। কয়েক সপ্তাহে ক্লিক বাড়ল, কিন্তু পণ্য ফেরত আর খারাপ রিভিউও বাড়ল। এটি কোন সমস্যার উদাহরণ?
- ভুল proxy target যা ভুল জিনিসকে পুরস্কৃত করেছে
- মডেলটি যথেষ্ট জটিল ছিল না
- ডেটা খুব কম ছিল
- ক্রেতাদের ভুল clustering
নিচের কোন কাজের জন্য machine learning মডেল সবচেয়ে কম যুক্তিসংগত?
- হাজার হাজার বাংলা রিভিউয়ের মনোভাব চেনা
- প্রতিটি বিলে ১৫% VAT হিসাব করা
- আগামী সপ্তাহের দৈনিক অর্ডার অনুমান
- গুদামের ছবিতে ভাঙা প্যাকেট চেনা
একটি দোকানের দৈনিক অর্ডারে শক্ত সাপ্তাহিক ছন্দ আছে (শুক্র-শনি বেশি)। আগামী সাত দিনের পূর্বাভাসের জন্য প্রথমে কোন baseline-এর সঙ্গে তুলনা করা সবচেয়ে যুক্তিসংগত?
- শেষ দিনের মান সাত দিনেই
- সব অতীত দিনের গড়
- গত সপ্তাহের একই বারের মান
- কোনো baseline নয়, সরাসরি জটিল মডেল
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন, অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:
মনে রাখুন
- ইচ্ছা সমস্যা নয়; problem statement-এ লাগে input, output, ডেটা, সাফল্যের মাপ আর ভুলের দাম, আর তার পেছনে একটি নির্দিষ্ট সিদ্ধান্ত।
- আউটপুটের আকার ধরন বলে দেয়: শ্রেণি → classification, সংখ্যা → regression, তালিকা → ranking, দল → clustering, কাজের ধারা → planning.
- একই ডেটা থেকে target বদলালেই ভিন্ন সমস্যা; vision, speech আর language হলো input-এর ধরন।
- সবসময় baseline: majority class, গড়, শেষ মান বা গত মৌসুম। Imbalanced ডেটায় accuracy একা প্রতারণা করে।
- নিয়ম জানা, প্রশ্নটি query, ডেটা নেই, বা ভুল খুব দামি হলে AI ভুল টুল; আর leakage ও ভুল proxy থেকে সাবধান।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ০৬ · বাস্তবে AI — কোথায় কাজ করে, কোথায় ভুল করে আর দায় কারপরবর্তী পর্বAI-এর বাস্তব প্রয়োগ, ব্যর্থতা আর দায়িত্ব।
- AI-এর ভিত্তি আর Python for AI · কোর্স হোম৭৯টি পর্বপুরো কোর্সের রোডম্যাপ — কোন পর্ব কখন।
- DBMS ও SQL · Aggregation — GROUP BY আর HAVINGপাশের ট্র্যাকযে প্রশ্নের উত্তর ডেটাতেই আছে, তার জন্য AI নয়, query.
- System Design · Search — inverted index আর rankingগভীরে যানবড় সিস্টেমে সার্চ আর ranking কীভাবে সাজানো হয়।
- Python · dictionary — চাবি দিয়ে খোঁজাঝালাইউপরের
choose()function-এর spec যেভাবে লেখা হয়েছে।