সরাসরি পর্বে যান
পর্ব ৭৫ · ৭৭-এর মধ্যে · মডিউল ১৪

লিখিত ও মৌখিক (ভাইভা) প্রশ্ন — Machine Learning-এর তত্ত্ব আর প্রয়োগ

Machine Learning Written and Viva Questions — Derivations, Comparisons, Design Answers and Follow-ups

Taught in Bangla, this practice page gives a claim, assumptions, steps, check and limits structure with model answers to 17 written ML questions: bias–variance, ridge as MAP, SVM dual and KKT, EM and the ELBO, conformal coverage, backdoor criterion, A/B pitfalls and monitoring design. Eight in-page Python runs verify the derivations, followed by 24 viva questions with follow-ups.

এই পর্বে যা শিখবেন

  • একটি derivation-এর প্রশ্নে অনুমান আগে লেখা, প্রতিটি ধাপের কারণ দেওয়া, আর শেষে ছোট সংখ্যায় যাচাই করা
  • “পার্থক্য লিখুন” প্রশ্নে একই মাপকাঠির ছক বানিয়ে “কখন কোনটি” দিয়ে শেষ করা
  • Bias–variance, ridge = MAP, SVM dual, EM-এর নিম্নসীমা আর conformal-এর নিশ্চয়তা নির্ভুলভাবে লেখা
  • Causal প্রশ্ন, A/B test আর production monitoring-এর নকশার উত্তর সাজানো
  • ভাইভায় ছোট করে বলা, শর্ত উল্লেখ করা, আর না জানলে সৎভাবে যুক্তি দেওয়া

১ · Derivation আর তুলনার উত্তর — দাবি, অনুমান, ধাপ, যাচাই, সীমা

এই কোর্সের লিখিত প্রশ্ন সংজ্ঞা দিয়ে থামে না; বেশিরভাগই চায় “প্রমাণ করুন”, “derive করুন” বা “নকশা করুন”। দর্জির দোকানে মাপ নেওয়ার মতো: প্রতিটি মাপ খাতায় লেখা থাকলে অন্য কারিগরও জামা বানাতে পারেন। উত্তরেও তা-ই চাই, যাতে পরীক্ষক আপনার প্রতিটি ধাপ মেলাতে পারেন। মৌলিক সংজ্ঞার প্রশ্ন (overfitting, precision, k-NN) AI-এর ভিত্তি কোর্সের লিখিত ও ভাইভা পাতায় আছে; এখানে সেগুলো ধরে নেওয়া হয়েছে।

পাঁচ অংশের কাঠামো
দাবি → অনুমান → ধাপ (প্রতিটির কারণসহ) → ছোট সংখ্যায় যাচাই → সীমা ও সিদ্ধান্ত
  1. দাবি: কী প্রমাণ করবেন, এক লাইনে। যেমন “squared loss-এ প্রত্যাশিত ভুল = noise + bias² + variance”.
  2. অনুমান: কোন শর্তে খাটে: noise-এর গড় শূন্য, x স্থির, ডেটা i.i.d. বা exchangeable. শর্ত বাদ দিলে পুরো উত্তর দুর্বল।
  3. ধাপ: প্রতিটি সমান-চিহ্নের পাশে এক শব্দের কারণ: “যোগ-বিয়োগ”, “cross term-এর প্রত্যাশা ০”, “Jensen”.
  4. যাচাই: দুই বা তিনটি সংখ্যায় ফল মিলিয়ে দেখানো। এই পাতার প্রতিটি ১০ নম্বরের প্রশ্নে এমন একটি run আছে।
  5. সীমা: কখন খাটে না, আর বাজারঘরে (এই কোর্সের কাল্পনিক অনলাইন দোকান) আপনি কী করবেন।
প্রশ্নের ধরনদাবি ও অনুমানধাপ বা ছকযাচাই বা উদাহরণসীমা
৫ নম্বর (তুলনা বা ছোট ব্যাখ্যা)১২১১
১০ নম্বর (derivation বা নকশা)২৪২২

এই ভাগ কোনো নির্দিষ্ট পরীক্ষার নিয়ম নয়; আপনার পরীক্ষার নির্দেশনা আলাদা হলে সেটিই মানুন। সময়ের হিসাব সহজ: মোট মিনিট ÷ মোট নম্বর। ১৮০ মিনিটে ৯০ নম্বর হলে ১০ নম্বরের প্রশ্নে কুড়ি মিনিট; আটকে গেলে অনুমান আর ধাপের কাঠামো লিখে এগিয়ে যান।

নিচের stepper-এ ক-০২ প্রশ্নের (ridge মানে MAP) ১০ নম্বরের উত্তর ধাপে ধাপে গড়া হয়েছে।

প্রতিটি অংশ যোগ করার পর
যোগ হলো
খাতায় যা লিখলেন
জমা নম্বর
খরচ হওয়া সময়
  1. দাবি — ১ নম্বর। কী প্রমাণ হবে আর λ-এর মান কী হবে, প্রথম লাইনেই।
  2. অনুমান — আরও ১। Noise Gaussian আর prior Gaussian, দুটিই লেখা। এগুলো ছাড়া প্রমাণ অচল।
  3. দুই ঘনত্ব — আরও ২। শুধু exp-এর ভেতরের অংশ লাগে; ধ্রুবকগুলো পরে কেটে যায়, সেটি এক লাইনে বলা।
  4. মেলানো — আরও ২। সর্বোচ্চ posterior মানে সর্বনিম্ন −log posterior; 2σ² দিয়ে গুণ করলে ridge-এর লক্ষ্য। মোট ৬ নম্বর, ১২ মিনিট।
  5. যাচাই — আরও ২। ছোট সংখ্যায় λ, আর দুই পথের একই উত্তর। মোট ৮ নম্বর।
  6. সীমা — শেষ ২। বিন্দু বনাম পুরো posterior, আর standardization কেন লাগে। কুড়ি মিনিটে দশ নম্বর।
বিষয়পর্বলিখিতভাইভা
শেখার তত্ত্ব, linear algebra, optimisation১–১৭অংশ ২ (ক-০১–ক-০৩)ভ-০১–ভ-০৪
সম্ভাবনার model, linear model গভীরে১৮–২৬অংশ ৩ (খ-০১–খ-০৩)ভ-০৫–ভ-০৮
SVM, tree আর ensemble২৭–৩৮অংশ ৪ (গ-০১–গ-০২)ভ-০৯–ভ-১২
Unsupervised আর Bayesian৩৯–৪৯অংশ ৫ (ঘ-০১–ঘ-০২)ভ-১৩–ভ-১৬
বিশেষ ডেটা, ব্যাখ্যা, অনিশ্চয়তা৫০–৬০অংশ ৬ (ঙ-০১–ঙ-০৩)ভ-১৭–ভ-২০
Data science আর production৬১–৭২অংশ ৭–৮ (চ, ছ)ভ-২১–ভ-২৪

এই পাতার কোনো প্রশ্ন কোনো নির্দিষ্ট পরীক্ষা, বিশ্ববিদ্যালয়, প্রতিষ্ঠান বা কোম্পানির ইন্টারভিউ থেকে নেওয়া নয়; এ ধরনের প্রশ্ন বিশ্ববিদ্যালয়ের ML কোর্স, চাকরির লিখিত পরীক্ষা আর ইন্টারভিউতে প্রায়ই আসে। “পরীক্ষক যা খোঁজেন” সারিটি একটি অনুশীলনী ছক। উদাহরণের সব ডেটা seed দিয়ে বানানো; প্রতিটি সংখ্যা একটি run-এর ফল, সাধারণ নিয়ম নয়। আটটি ব্লক পাতাতেই চলে (ব্রাউজারের Python 3.14, NumPy 2.4.6, SciPy, scikit-learn 1.8.0); scikit-learn-এর প্রথম ব্লকে প্রায় দশ সেকেন্ড লাগে। হাতে-কলমে হিসাবের অনুশীলন পর্ব ৭৩ (Numerical সমস্যার অনুশীলন — ML-এর গণিত আর অ্যালগরিদম)-এ, MCQ পর্ব ৭৪ (MCQ প্রশ্নব্যাংক — Machine Learning)-এ, আর ইন্টারভিউ পর্ব ৭৬ (ML coding ইন্টারভিউ) ও পর্ব ৭৭ (ML ধারণা আর system design ইন্টারভিউ)-এ। মৌলিক স্তরের হিসাব আর MCQ আছে AI-এর ভিত্তি কোর্সের numerical আর MCQ পাতায়।

২ · অংশ ক — শেখার তত্ত্ব, linear algebra আর optimisation (মডিউল ১–৩)

রিভিশন: পর্ব ৩ (ERM আর generalisation), পর্ব ৮ আর পর্ব ৯ (eigen, SVD, PCA), পর্ব ১২ (convexity), পর্ব ১৬ (Lagrange, KKT), পর্ব ১৭ (regularization). প্রাথমিক U-আকৃতির ছবিটি AI-এর ভিত্তি কোর্সের পর্ব ৬১-এ।

ক-০১Squared loss-এ একটি নির্দিষ্ট x-এ প্রত্যাশিত test ভুলকে noise, bias² আর variance-এ ভেঙে দেখান। প্রত্যাশা কিসের ওপর নেওয়া হয়, তা স্পষ্ট করুন। Polynomial-এর মাত্রা বাড়ালে তিনটি অংশ কীভাবে বদলায়, একটি simulation-এর ফল দিয়ে ব্যাখ্যা করুন। — ১০ নম্বর (মাঝারি)

অনুমান: y = f(x) + ε, যেখানে E[ε] = ০, Var(ε) = σ², আর ε training ডেটা থেকে স্বাধীন। f̂D হলো training set D থেকে শেখা model. প্রত্যাশা দুটি এলোমেলোতার ওপর: কোন D এল, আর নতুন y-এর noise. লিখি f̄(x) = ED[f̂D(x)], অর্থাৎ অনেক training set-এর গড় অনুমান।

ধাপ: y − f̂ = (f − f̄) + (f̄ − f̂) + ε. বর্গ করে প্রত্যাশা নিলে তিনটি cross term শূন্য: ε-এর গড় শূন্য আর সে D থেকে স্বাধীন; আর ED[f̄ − f̂] = ০, f̄-এর সংজ্ঞা থেকেই।

E[(y − f̂D(x))²] = σ² + (f(x) − f̄(x))² + ED[(f̂D(x) − f̄(x))²]

প্রথম পদ irreducible error, কোনো model কমাতে পারে না। দ্বিতীয় পদ bias² (গড় অনুমান আসল থেকে কত দূরে), তৃতীয় পদ variance (training set বদলালে অনুমান কতটা নড়ে)। ক্রিকেটের একজন বোলারের কথা ভাবুন: সব বল এক কোণে পড়লে bias, এলোমেলো ছড়ালে variance.

import numpy as np
from numpy.polynomial import Polynomial

rng = np.random.default_rng(75)
f = lambda x: np.sin(2 * np.pi * x)     # true function
sigma, n, R = 0.3, 20, 500             # noise sd, train size, repeats
xs = np.linspace(0, 1, n)              # fixed training x
x0 = (xs[:-1] + xs[1:]) / 2            # test points between them

print("degree  bias^2  variance  noise  sum    test MSE")
for deg in (1, 3, 9):
    preds = np.empty((R, x0.size))
    for r in range(R):                 # R different training sets D
        y = f(xs) + sigma * rng.standard_normal(n)
        preds[r] = Polynomial.fit(xs, y, deg)(x0)
    avg = preds.mean(axis=0)           # f-bar(x)
    bias2 = np.mean((avg - f(x0)) ** 2)
    var = np.mean(preds.var(axis=0))
    y0 = f(x0) + sigma * rng.standard_normal((R, x0.size))
    mse = np.mean((y0 - preds) ** 2)   # fresh test labels
    print(f"{deg:>6}  {bias2:.4f}  {var:.4f}    {sigma**2:.2f}   "
          f"{bias2 + var + sigma**2:.4f} {mse:.4f}")

আসল আউটপুট (ব্রাউজারের Python):

degree  bias^2  variance  noise  sum    test MSE
     1  0.1998  0.0087    0.09   0.2985 0.2974
     3  0.0050  0.0156    0.09   0.1106 0.1100
     9  0.0001  0.0429    0.09   0.1330 0.1335

প্রতিটি সারিতে তিন পদের যোগফল আর আলাদাভাবে মাপা test MSE প্রায় সমান (০.২৯৮৫ বনাম ০.২৯৭৪ ইত্যাদি); বাকি ফারাক ৫০০টি পুনরাবৃত্তির এলোমেলোতা। মাত্রা ১-এ রেখাটি sine ধরতে পারে না, bias² ০.১৯৯৮. মাত্রা ৯-এ bias প্রায় শূন্য, কিন্তু variance ০.০৪২৯, মাত্রা ৩-এর প্রায় তিনগুণ। সবচেয়ে কম মোট ভুল মাঝের মাত্রা ৩-এ। Noise ০.০৯ সব সারিতে একই।

ছবি ৭৫.১ — একই ব্লকের তিনটি সারি, স্তূপ করে

Stacked: noise (grey), variance (orange), bias² (blue); label = sum

Bias-variance decomposition for polynomial degree 1, 3 and 9 00.10.20.3 0.29850.11060.1330 degree 1degree 3degree 9 test MSE = noise + variance + bias² bias² (high at degree 1) variance (grows) noise σ² = 0.09

সীমা: এই ভাঙন squared loss-এর; 0-1 loss-এ এমন পরিষ্কার যোগফল নেই। “জটিলতা বাড়লে variance বাড়ে” সবসময় সত্য নয়: অনেক parameter-এর model-এ double descent দেখা যায় (পর্ব ৩)। Bias–variance আর পর্ব ৩-এর approximation–estimation ভাঙন কাছাকাছি ধারণা, হুবহু এক নয়।

পরীক্ষক যা খোঁজেন: অনুমান আর প্রত্যাশা কিসের ওপর (২); cross term কেন শূন্য, কারণসহ (৩); তিন পদের নাম আর মানে (১); মাত্রা বাড়ার প্রভাব, সংখ্যা বা ছবিসহ (২); সীমা (২)। পর্ব ৩ · পর্ব ১৭ · পর্ব ২৩

যেখানে নম্বর কাটে: একটি training set-এ variance “মাপা”; noise পদ বাদ দেওয়া; cross term কেন যায় তা না বলে মুছে দেওয়া; bias² না লিখে bias লেখা।

ক-০২Linear regression-এ Gaussian noise আর w-এর ওপর Gaussian prior ধরে দেখান যে MAP অনুমানই ridge regression, আর λ-এর মান prior-এর ভাষায় লিখুন। Laplace prior নিলে কী আসে? MAP আর পুরো posterior-এর পার্থক্য কেন জরুরি? — ১০ নম্বর (মাঝারি)

অনুমান: y = Xw + ε, ε ~ N(০, σ²I); প্রতিটি wj ~ N(০, τ²), স্বাধীন। MAP মানে posterior-এর সর্বোচ্চ বিন্দু, আর posterior ∝ likelihood × prior.

ধাপ: log নিয়ে চিহ্ন উল্টালে সর্বোচ্চ posterior মানে সর্বনিম্ন

−log p(w ∣ y) = ‖y − Xw‖²/(2σ²) + ‖w‖²/(2τ²) + ধ্রুবক

2σ² দিয়ে গুণ করলে ‖y − Xw‖² + (σ²/τ²)‖w‖², ঠিক ridge-এর লক্ষ্য, λ = σ²/τ². Prior যত সরু (τ ছোট) বা noise যত বেশি, λ তত বড়। Gradient শূন্য করলে বন্ধ সূত্র w = (XᵀX + λI)⁻¹Xᵀy. Laplace prior p(wj) ∝ exp(−|wj|/b) নিলে একই পথে ‖w‖₁ আসে, λ = 2σ²/b: lasso. Laplace-এর শূন্যে তীক্ষ্ণ চূড়াই অনেক w-কে ঠিক শূন্যে আটকায়।

import numpy as np
from scipy.optimize import minimize
from sklearn.linear_model import Ridge

rng = np.random.default_rng(75)
n, d, sigma, tau = 30, 4, 2.0, 0.5
X = rng.standard_normal((n, d))
y = X @ np.array([1.0, -0.5, 0.0, 0.3]) + sigma * rng.standard_normal(n)

lam = sigma**2 / tau**2                       # lambda = sigma^2 / tau^2
w_ridge = np.linalg.solve(X.T @ X + lam * np.eye(d), X.T @ y)

def neg_log_post(w):                          # -log likelihood - log prior
    return (np.sum((y - X @ w) ** 2) / (2 * sigma**2)
            + np.sum(w**2) / (2 * tau**2))
w_map = minimize(neg_log_post, np.zeros(d), method="BFGS").x
w_sk = Ridge(alpha=lam, fit_intercept=False).fit(X, y).coef_
w_ols = np.linalg.lstsq(X, y, rcond=None)[0]

np.set_printoptions(precision=4, suppress=True)
print("lambda =", lam)
print("closed-form ridge:", w_ridge)
print("numerical MAP    :", w_map)
print("sklearn Ridge    :", w_sk)
print("ridge == MAP (atol 1e-6):", np.allclose(w_ridge, w_map, atol=1e-6))
print("OLS (no prior)   :", w_ols)

আসল আউটপুট (ব্রাউজারের Python):

lambda = 16.0
closed-form ridge: [ 0.4763 -0.4479 -0.331  -0.0644]
numerical MAP    : [ 0.4763 -0.4479 -0.331  -0.0644]
sklearn Ridge    : [ 0.4763 -0.4479 -0.331  -0.0644]
ridge == MAP (atol 1e-6): True
OLS (no prior)   : [ 0.8096 -0.958  -0.6481 -0.0789]

তিন পথ একই w দেয়: বন্ধ সূত্র, −log posterior-এর সরাসরি সংখ্যাগত সর্বনিম্ন বিন্দু, আর Ridge(alpha=16). Prior-হীন OLS-এর তুলনায় প্রতিটি coefficient শূন্যের দিকে ছোট; ৩০টি সারি আর বড় noise-এ (σ = ২) এই টানই variance কমায়।

সীমা: MAP একটি বিন্দু। Laplace prior-এর পুরো posterior-এর গড় সাধারণত ঠিক শূন্য দেয় না, তাই “lasso শূন্য করেছে, তাই feature অকেজো” দাবিটি দুর্বল। সব wj-এ একই prior যুক্তিসঙ্গত কেবল feature একই মাপে থাকলে: তাই আগে standardization, আর intercept-এ শাস্তি নয়।

পরীক্ষক যা খোঁজেন: দুই অনুমান (২); −log posterior আর 2σ² দিয়ে গুণ (৩); λ = σ²/τ² (১); Laplace → L1 (১); যাচাই বা বন্ধ সূত্র (১); সীমা (২)। পর্ব ১৭ · পর্ব ১৮ · পর্ব ৪৫

যেখানে নম্বর কাটে: λ = τ²/σ² উল্টো লেখা; “MAP = posterior mean” সব ক্ষেত্রে বলা (Gaussian-এ মেলে, Laplace-এ নয়); intercept-কেও শাস্তি দেওয়া।

ক-০৩PCA-কে covariance matrix-এর eigen-decomposition আর centred ডেটার SVD, দুই পথে লিখুন, আর দুটির সম্পর্ক দেখান। কোন পথ কখন ভালো? — ৫ নম্বর (মাঝারি)

দুই পথ: X centred (n × d). Covariance S = XᵀX/(n − ১) = VΛVᵀ; principal component হলো V-এর কলাম, eigenvalue λj সেই দিকের variance. আবার SVD X = UΣVᵀ বসালে XᵀX = VΣ²Vᵀ, তাই একই V, আর λj = σj²/(n − ১). Score XV = UΣ.

মাপকাঠিCovariance-এর eighX-এর SVD
নির্ভুলতাXᵀX বানালে condition number বর্গ হয়বর্গ হয় না, ছোট singular value-তে ভালো
খরচn অনেক বড়, d ছোট হলে সস্তা (d × d)n × d-এর ওপর, বড় n-এ ভারী
scikit-learn 1.8svd_solver="covariance_eigh""full", "randomized" ইত্যাদি

সীমা: Center না করলে প্রথম component প্রায়ই শুধু গড়ের দিক দেখায়; আর মাপ আলাদা হলে (টাকা বনাম দিন) আগে standardize. PCA শুধু রৈখিক দিক খোঁজে।

পরীক্ষক যা খোঁজেন: দুই সূত্র (২); λ = σ²/(n − ১) সম্পর্ক (১); কখন কোনটি (১); centering-এর সীমা (১)। পর্ব ৮ · পর্ব ৯

যেখানে নম্বর কাটে: eigenvalue = singular value লেখা; centering বাদ; U আর V গুলিয়ে ফেলা।

৩ · অংশ খ — সম্ভাবনার model আর linear model গভীরে (মডিউল ৪, ৫)

রিভিশন: পর্ব ১৮ (MLE, MAP), পর্ব ২০ (GLM), পর্ব ২২ (model তুলনার পরিসংখ্যান), পর্ব ২৬ (calibration). Metric-এর মৌলিক সংজ্ঞা AI-এর ভিত্তি কোর্সের পর্ব ৬০-এ।

খ-০১Bernoulli likelihood থেকে logistic regression-এর loss derive করুন, আর দেখান gradient Xᵀ(p − y). Logistic regression কোন অর্থে একটি GLM? — ৫ নম্বর (মাঝারি)

ধাপ: yi ∈ {০, ১}, pi = σ(xi·w). Likelihood ∏ piyi(১ − pi)১−yi. ঋণাত্মক log নিলে −∑[yi log pi + (১ − yi) log(১ − pi)], অর্থাৎ log loss বা binary cross-entropy. σ′(z) = σ(১ − σ) ব্যবহার করলে প্রতিটি সারির অবদান (pi − yi)xi, তাই ∇ = Xᵀ(p − y). Hessian XᵀWX, W = diag(p(১ − p)) ⪰ ০, তাই loss convex.

GLM: তিন উপাদান: random অংশ Bernoulli (একটি exponential family), linear predictor η = x·w, আর link logit, log(p/(১ − p)) = η. Logit-ই Bernoulli-র canonical link, তাই gradient এত সরল। Poisson regression একই কাঠামো, log link.

সীমা: ডেটা পুরো আলাদা করা গেলে (perfect separation) MLE অসীমে যায়; তখন regularization লাগে।

পরীক্ষক যা খোঁজেন: likelihood আর −log (২); gradient (১); GLM-এর তিন অংশ (১); separation-এর সীমা (১)। পর্ব ১৮ · পর্ব ২০ · পর্ব ১১

যেখানে নম্বর কাটে: MSE দিয়ে শুরু করা; gradient-এর চিহ্ন উল্টো (y − p-কে loss-এর gradient ধরে gradient descent-এ বিয়োগ); “linear model, তাই output linear” বলা।

খ-০২Calibration আর discrimination-এর পার্থক্য লিখুন। দেখান যে score-এর ওপর একঘেয়ে বাড়ন্ত রূপান্তর AUC বদলায় না কিন্তু Brier score আর ECE বদলায়। কোন সিদ্ধান্তে calibration লাগে, কোনটিতে লাগে না? — ১০ নম্বর (মাঝারি)

সংজ্ঞা: Model calibrated, যদি P(Y = ১ ∣ p̂ = p) = p: যেসব অর্ডারে model ০.৩ বলে, তাদের প্রায় ৩০% ফেরত আসে। Discrimination হলো ক্রম ঠিক রাখা: ফেরত-অর্ডারকে বেশি score. AUC = একটি এলোমেলো positive-এর score একটি এলোমেলো negative-এর চেয়ে বেশি হওয়ার সম্ভাবনা, তাই শুধু ক্রমের ওপর নির্ভর করে। g একঘেয়ে বাড়ন্ত হলে g(s₁) > g(s₂) ⇔ s₁ > s₂, তাই AUC অপরিবর্তিত। Brier = গড় (p̂ − y)² আর ECE = ∑b(nb/N)|ōb − p̄b| সংখ্যার মানের ওপর নির্ভর করে, তাই বদলায়।

import numpy as np
from sklearn.metrics import roc_auc_score, brier_score_loss

rng = np.random.default_rng(75)
p_true = rng.beta(2, 5, 20000)              # each order's real return risk
y = rng.binomial(1, p_true)

def ece(y, p, bins=10):                     # equal-width bins
    idx = np.minimum((p * bins).astype(int), bins - 1)
    return sum(np.mean(idx == b) * abs(y[idx == b].mean() - p[idx == b].mean())
               for b in range(bins) if np.any(idx == b))

scores = {
    "honest p        ": p_true,
    "p ** 3 (too low) ": p_true ** 3,
    "sqrt p (too high)": np.sqrt(p_true),
    "constant 0.286  ": np.full_like(p_true, y.mean()),
}
print("model              AUC     Brier   ECE")
for name, p in scores.items():
    print(f"{name}  {roc_auc_score(y, p):.4f}  "
          f"{brier_score_loss(y, p):.4f}  {ece(y, p):.4f}")
print("base rate:", round(y.mean(), 4))

আসল আউটপুট (ব্রাউজারের Python):

model              AUC     Brier   ECE
honest p          0.7252  0.1777  0.0083
p ** 3 (too low)   0.7252  0.2459  0.2388
sqrt p (too high)  0.7252  0.2289  0.2242
constant 0.286    0.5000  0.2044  0.0000
base rate: 0.2864

প্রথম তিনটির AUC হুবহু ০.৭২৫২, কারণ p³ আর √p ক্রম বদলায় না; কিন্তু Brier ০.১৭৭৭ থেকে ০.২৪৫৯-এ, ECE ০.০০৮৩ থেকে ০.২৩৮৮-এ লাফ দেয়। শেষ সারিটি উল্টো ছবি: সবাইকে গড় হার বললে ECE শূন্য (সংজ্ঞা অনুযায়ী calibrated), অথচ AUC ০.৫. মজার কথা, তার Brier (০.২০৪৪) ভুল-calibrated দুটির চেয়ে ভালো: Brier দুই গুণই একসঙ্গে মাপে।

সিদ্ধান্তCalibration লাগে?
সবচেয়ে ঝুঁকির ২০০ অর্ডারে ফোন (শুধু ক্রম)না, AUC বা precision@k যথেষ্ট
খরচ থেকে threshold, যেমন p > ০.২ হলে ফোনহ্যাঁ, ০.২-এর অর্থ থাকতে হবে
মাসের মোট প্রত্যাশিত ফেরত (∑p)হ্যাঁ
দুই model-এর সম্ভাবনা মেলানোহ্যাঁ

প্রতিকার আর সীমা: আলাদা calibration ভাগে Platt scaling (দুই parameter-এর sigmoid) বা isotonic regression (বেশি ডেটা লাগে)। Train ডেটায় calibrate করলে overconfidence থেকে যায়। আর ১০টি bin-এর ECE bin-এর সংখ্যার ওপর নির্ভর করে; reliability diagram-এর পাশে দেখুন।

পরীক্ষক যা খোঁজেন: দুই সংজ্ঞা (২); AUC কেন অপরিবর্তিত, যুক্তিসহ (২); Brier/ECE কেন বদলায় (১.৫); সংখ্যায় উদাহরণ (১.৫); সিদ্ধান্তের ছক (১.৫); প্রতিকার ও সীমা (১.৫)। পর্ব ২৬ · পর্ব ৫০

যেখানে নম্বর কাটে: “AUC বেশি, তাই সম্ভাবনা ঠিক” লেখা; test ভাগে calibrator fit করা; resampling-এর পরে সম্ভাবনা সংশোধন না করা।

খ-০৩একই test set-এ দুটি classifier-এর accuracy ০.৮৪ আর ০.৮৬. পার্থক্যটি এলোমেলোতার বেশি কি না কীভাবে যাচাই করবেন? দশটি model-এর সঙ্গে baseline-এর তুলনা করলে কী সমস্যা? — ৫ নম্বর (কঠিন)

একই test set: দুটি accuracy স্বাধীন নয়, তাই দুই অনুপাতের সাধারণ z-test ভুল। McNemar test শুধু মতভেদের ঘর দেখে: b = A ঠিক, B ভুল; c = A ভুল, B ঠিক। χ² = (|b − c| − ১)²/(b + c), ১ df; b + c ছোট হলে exact binomial test. দুজনই ঠিক বা দুজনই ভুল সারি কিছু বলে না।

Cross-validation: fold-এর training set বেশিরভাগ সারি ভাগ করে, তাই fold-এর পার্থক্যের ওপর সাধারণ paired t-test অতি-আশাবাদী; Nadeau–Bengio-র corrected resampled t-test বা 5×2cv test.

অনেক তুলনা: দশটি test-এ প্রতিটি α = ০.০৫ হলে অন্তত একটি ভুয়া “জয়”-এর সম্ভাবনা অনেক বেশি (multiple comparisons). Holm বা Bonferroni পরিবারভিত্তিক ভুল রক্ষা করে; Benjamini–Hochberg আবিষ্কারের মধ্যে ভুলের অনুপাত।

পরীক্ষক যা খোঁজেন: স্বাধীন নয় কেন (১); McNemar-এর সূত্র আর b, c (২); CV-এর সমস্যা (১); multiple comparisons (১)। পর্ব ২২ · পর্ব ৪

যেখানে নম্বর কাটে: “০.০২ বেশি, তাই ভালো” লেখা; p-value-কে প্রভাবের আকার ভাবা; একটি seed-এর ফল দিয়ে সিদ্ধান্ত।

৪ · অংশ গ — SVM, tree আর ensemble (মডিউল ৬, ৭)

রিভিশন: পর্ব ২৭, পর্ব ২৮ (soft margin আর dual), পর্ব ২৯ (kernel), পর্ব ৩৩ (bagging), পর্ব ৩৪ (AdaBoost), পর্ব ৩৫ (gradient boosting).

গ-০১Soft-margin SVM-এর primal লিখুন, Lagrangian থেকে dual derive করুন, আর KKT শর্ত দিয়ে দেখান কোন বিন্দু support vector আর কোনগুলো margin-এর ঠিক ওপরে বসে। Dual কেন kernel-এর দরজা খোলে? — ১০ নম্বর (কঠিন)

Primal: min ½‖w‖² + C∑ξi, শর্ত yi(w·xi + b) ≥ ১ − ξi, ξi ≥ ০. এখানে ξi margin ভাঙার পরিমাণ, C ভুলের দাম।

Lagrangian: αi, μi ≥ ০ দিয়ে L = ½‖w‖² + C∑ξi − ∑αi[yi(w·xi + b) − ১ + ξi] − ∑μiξi. ঢাল শূন্য করলে: ∂/∂w ⇒ w = ∑αiyixi; ∂/∂b ⇒ ∑αiyi = ০; ∂/∂ξi ⇒ C − αi − μi = ০, তাই αi ≤ C. ফেরত বসালে:

maxα ∑αi − ½∑i∑j αiαjyiyj(xi·xj), শর্ত ০ ≤ αi ≤ C, ∑αiyi = ০

KKT: Complementary slackness αi[yif(xi) − ১ + ξi] = ০ আর (C − αi)ξi = ০. তাই α = ০ ⇒ y·f ≥ ১ (বাইরে, ভূমিকা নেই); ০ < α < C ⇒ ξ = ০, y·f = ১ (ঠিক margin-এ, “মুক্ত” support vector; b এখান থেকে); α = C ⇒ y·f ≤ ১ (ভেতরে বা ভুল দিকে)।

import numpy as np
from sklearn.svm import SVC

rng = np.random.default_rng(75)
X = np.vstack([rng.normal([-1, -1], 1.0, (40, 2)),
               rng.normal([1.5, 1.5], 1.0, (40, 2))])
y = np.array([-1] * 40 + [1] * 40)
C = 1.0
svm = SVC(kernel="linear", C=C).fit(X, y)

ay = svm.dual_coef_.ravel()                  # alpha_i * y_i for SVs
alpha = np.abs(ay)
sv = svm.support_vectors_
w = ay @ sv                                  # w = sum alpha_i y_i x_i
margin = y[svm.support_] * svm.decision_function(sv)
free = alpha < C - 1e-8

print("support vectors:", len(alpha), "| free (0 < a < C):", free.sum(),
      "| at bound (a = C):", (~free).sum())
print("sum alpha*y is 0:", np.isclose(ay.sum(), 0))
print("w from alphas :", w.round(4))
print("svm.coef_     :", svm.coef_.ravel().round(4))
print("y*f(x) of free SVs    :", margin[free].round(3))
print("max y*f(x) of bound SVs:", margin[~free].max().round(3))

আসল আউটপুট (ব্রাউজারের Python):

support vectors: 9 | free (0 < a < C): 3 | at bound (a = C): 6
sum alpha*y is 0: True
w from alphas : [1.1225 1.0613]
svm.coef_     : [1.1225 1.0613]
y*f(x) of free SVs    : [1. 1. 1.]
max y*f(x) of bound SVs: 0.467

৮০টি বিন্দুর মাত্র ৯টির α শূন্য নয়; বাকি ৭১টি মুছে দিলেও সমাধান একই। ∑αiyi = ০, আর ∑αiyixi থেকে বানানো w হুবহু coef_. তিনটি মুক্ত support vector ঠিক y·f = ১-এ; C-তে আটকানো ছয়টির y·f সর্বোচ্চ ০.৪৬৭, অর্থাৎ সবাই margin-এর ভেতরে। KKT-র তিন দল সংখ্যায় মিলে গেল।

Kernel-এর দরজা: Dual-এ ডেটা আসে শুধু xi·xj হিসেবে, আর অনুমান f(x) = ∑αiyi(xi·x) + b. Dot product-কে K(xi, xj) দিয়ে বদলালে feature map না বানিয়েই উঁচু মাত্রার সীমারেখা (kernel trick). Primal convex আর শর্ত রৈখিক, তাই strong duality খাটে।

সীমা: Dual-এর Gram matrix n × n; লাখো সারিতে মেমরি আর সময় ভারী, তখন linear SVM, Nyström বা random features (পর্ব ৩১)। মুক্ত support vector না থাকলে b একটি পরিসর।

পরীক্ষক যা খোঁজেন: primal (১); Lagrangian আর তিন ঢাল (৩); dual-এর রূপ আর box constraint (২); KKT-র তিন দল (২); kernel আর সীমা (২)। পর্ব ২৮ · পর্ব ১৬ · পর্ব ২৯

যেখানে নম্বর কাটে: α ≤ C শর্ত বাদ (তাহলে hard-margin-এর dual); max আর min গুলিয়ে ফেলা; “সব support vector margin-এর ওপর” লেখা।

গ-০২Bagging আর boosting-এর তুলনা করুন: কোনটি bias কমায়, কোনটি variance; base learner, training-এর ধরন, overfitting আর label noise. গড়ের variance-এর সূত্র ρσ² + (১ − ρ)σ²/B দিয়ে random forest-এর কৌশল ব্যাখ্যা করুন। — ১০ নম্বর (মাঝারি)

সূত্র: B টি অনুমানের প্রত্যেকের variance σ², জোড়ায় correlation ρ হলে গড়ের variance ρσ² + (১ − ρ)σ²/B. B বাড়ালে দ্বিতীয় পদ মিলিয়ে যায়, কিন্তু ρσ²-এর মেঝে থাকে। Random forest প্রতিটি split-এ এলোমেলো কিছু feature দেখে গাছগুলোর ρ কমায়, একক গাছ একটু খারাপ হলেও।

মাপকাঠিBagging / random forestBoosting (AdaBoost, gradient boosting)
মূলত কমায়VarianceBias (আর কিছুটা variance)
Base learnerগভীর, কম-bias, নড়বড়ে গাছদুর্বল: stump বা ছোট গাছ
Trainingসমান্তরাল, bootstrap নমুনাধারাবাহিক, আগের ভুলে মনোযোগ
গাছ বাড়ালেপ্রায় overfit করে নাকরতে পারে; learning rate আর early stopping লাগে
Label noiseতুলনায় শক্তAdaBoost-এর exponential loss ভুল label-এ ওজন ফোলায়
বাড়তি সুবিধাOOB মূল্যায়ন বিনা খরচেসাধারণত tabular ডেটায় বেশি নির্ভুল, বেশি tuning
import numpy as np
from sklearn.datasets import make_moons
from sklearn.tree import DecisionTreeClassifier as Tree
from sklearn.ensemble import BaggingClassifier, AdaBoostClassifier

X, y = make_moons(1200, noise=0.3, random_state=75)
Xtr, ytr, Xte, yte = X[:600], y[:600], X[600:], y[600:]
models = {
    "stump (depth 1)      ": Tree(max_depth=1),
    "deep tree            ": Tree(random_state=0),
    "bagging, 100 deep    ": BaggingClassifier(Tree(), n_estimators=100,
                                               random_state=0),
    "AdaBoost, 200 stumps ": AdaBoostClassifier(Tree(max_depth=1),
                                                n_estimators=200, random_state=0),
}
rng = np.random.default_rng(75)
flip = rng.random(600) < 0.2                 # 20% wrong labels in training
print("model                  train   test | test, 20% label noise")
for name, m in models.items():
    m.fit(Xtr, ytr)
    tr, te = m.score(Xtr, ytr), m.score(Xte, yte)
    te_noisy = m.fit(Xtr, np.where(flip, 1 - ytr, ytr)).score(Xte, yte)
    print(f"{name}  {tr:.3f}  {te:.3f} | {te_noisy:.3f}")

আসল আউটপুট (ব্রাউজারের Python):

model                  train   test | test, 20% label noise
stump (depth 1)        0.810  0.787 | 0.798
deep tree              1.000  0.870 | 0.738
bagging, 100 deep      1.000  0.878 | 0.822
AdaBoost, 200 stumps   0.922  0.897 | 0.872

Stump-এর train আর test দুটিই কম: উচ্চ bias. AdaBoost একই stump দিয়ে test ০.৭৮৭ থেকে ০.৮৯৭-এ তোলে: bias কমানো। গভীর গাছ train-এ ১.০০০, test-এ ০.৮৭০: উচ্চ variance; ২০% ভুল label-এ সে ০.৭৩৮-এ পড়ে, আর bagging সেই পতনের বড় অংশ সামলে ০.৮২২ রাখে। এই ছোট run-এ AdaBoost noise-এ ভেঙে পড়েনি; পর্ব ৩৪-এর run-এ উল্টানো label-এর সারিগুলো মোট ওজনের বড় অংশ দখল করেছিল। দুর্বলতাটি ডেটা আর রাউন্ড-সংখ্যার ওপর নির্ভর করে, তাই একটি run দিয়ে সাধারণ সিদ্ধান্ত নয়।

সিদ্ধান্ত: কম tuning-এর শক্ত baseline চাইলে random forest; সর্বোচ্চ নির্ভুলতা আর tuning-এর সময় থাকলে gradient boosting (পর্ব ৩৬)। Bagging উচ্চ-bias model-এ (stump, linear regression) প্রায় লাভ দেয় না।

পরীক্ষক যা খোঁজেন: variance-সূত্র আর ρ-এর ভূমিকা (২); অন্তত পাঁচ সারির ছক (৪); সংখ্যা বা উদাহরণ (২); কখন কোনটি (২)। পর্ব ৩৩ · পর্ব ৩৪ · পর্ব ৩৫ · পর্ব ৩৮

যেখানে নম্বর কাটে: “boosting variance কমায়” মূল কথা হিসেবে লেখা; ρ-এর মেঝে বাদ; random forest-কে শুধু “অনেক গাছের bagging” বলা, feature subsampling ছাড়া।

৫ · অংশ ঘ — Unsupervised আর Bayesian ML (মডিউল ৮, ৯)

রিভিশন: পর্ব ৩৯ (GMM আর EM), পর্ব ৪২ (t-SNE, UMAP), পর্ব ৪৫, পর্ব ৪৬, পর্ব ৪৭ (MCMC), পর্ব ৪৮ (VI).

ঘ-০১Gaussian mixture-এর জন্য EM-এর E-step আর M-step লিখুন। Jensen's inequality দিয়ে log-likelihood-এর একটি নিম্নসীমা (ELBO) বের করুন, আর প্রমাণ করুন প্রতি পাকে log-likelihood কখনো কমে না। EM-এর দুটি সীমা বলুন। — ১০ নম্বর (কঠিন)

ধাপ: EM-এর E-step: rik = πkN(xi; μk, Σk) ÷ ∑jπjN(xi; μj, Σj), পুরোনো θ দিয়ে (responsibility). M-step: Nk = ∑irik, πk = Nk/n, μk = ∑rikxi/Nk, Σk = ∑rik(xi − μk)(xi − μk)ᵀ/Nk, নতুন μ দিয়ে।

নিম্নসীমা: লুকানো z-এর ওপর যেকোনো q নিন। log concave, তাই Jensen:

log p(x ∣ θ) = log ∑z q(z)·p(x, z ∣ θ)/q(z) ≥ ∑z q(z) log[p(x, z ∣ θ)/q(z)] = ELBO(q, θ)

দুই দিকের ফাঁক ঠিক KL(q ‖ p(z ∣ x, θ)) ≥ ০. প্রমাণ: E-step-এ q = posterior, তাই KL = ০ আর ELBO(q, θপুরোনো) = ℓ(θপুরোনো)। M-step-এ q স্থির রেখে θ বদলে ELBO বাড়ে। তাই ℓ(θনতুন) ≥ ELBO(q, θনতুন) ≥ ELBO(q, θপুরোনো) = ℓ(θপুরোনো)।

import numpy as np
from scipy.stats import norm

x = np.array([1.0, 2.0, 4.0, 7.0])
pi, mu, sd = np.array([0.5, 0.5]), np.array([2.0, 6.0]), np.array([2.0, 2.0])

def joint(pi, mu, sd):                       # p(x_i, z_i = k), shape (4, 2)
    return pi * norm.pdf(x[:, None], mu, sd)

def loglik(pi, mu, sd):
    return np.log(joint(pi, mu, sd).sum(axis=1)).sum()

def elbo(q, pi, mu, sd):                     # sum q log(p(x, z) / q)
    return np.sum(q * (np.log(joint(pi, mu, sd)) - np.log(q)))

for it in range(1, 4):
    J = joint(pi, mu, sd)
    q = J / J.sum(axis=1, keepdims=True)     # E-step: q = posterior r_ik
    l_old, e_old = loglik(pi, mu, sd), elbo(q, pi, mu, sd)
    Nk = q.sum(axis=0)                       # M-step
    pi, mu = Nk / len(x), (q * x[:, None]).sum(axis=0) / Nk
    sd = np.sqrt((q * (x[:, None] - mu) ** 2).sum(axis=0) / Nk)
    e_new, l_new = elbo(q, pi, mu, sd), loglik(pi, mu, sd)
    print(f"it {it}: l {l_old:.4f} = ELBO {e_old:.4f} "
          f"<= ELBO' {e_new:.4f} <= l' {l_new:.4f}")
print("mu after 3 iterations:", mu.round(4))

আসল আউটপুট (ব্রাউজারের Python):

it 1: l -9.0537 = ELBO -9.0537 <= ELBO' -8.6006 <= l' -8.4965
it 2: l -8.4965 = ELBO -8.4965 <= ELBO' -8.4285 <= l' -8.3991
it 3: l -8.3991 = ELBO -8.3991 <= ELBO' -8.3802 <= l' -8.3699
mu after 3 iterations: [1.9686 5.7797]

চারটি বিন্দু ১, ২, ৪, ৭ আর শুরু μ = (২, ৬), σ = ২: পর্ব ৩৯-এর হাতের উদাহরণ, আর প্রথম পাকের ℓ −৯.০৫৩৭ থেকে −৮.৪৯৬৫ সেখানকার হিসাবের সঙ্গে মেলে। প্রতিটি লাইনে প্রমাণের শৃঙ্খলটি সংখ্যায়: E-step-এর পরে ELBO ঠিক ℓ-এর সমান, M-step ELBO বাড়ায়, আর নতুন ℓ নতুন ELBO-র চেয়ে বেশি। পরের পাকের শুরুর ℓ আগের পাকের শেষ ℓ.

সীমা: (১) নিশ্চয়তা শুধু stationary বিন্দুর, প্রায়ই local maximum; তাই কয়েকটি শুরু থেকে চালিয়ে সেরা ℓ নিন। (২) একটি component একটি বিন্দুতে সংকুচিত হলে variance → ০, ℓ → ∞ (singularity); scikit-learn-এর reg_covar এটি আটকায়। শেষের দিকে গতি ধীর।

পরীক্ষক যা খোঁজেন: E আর M-step-এর সূত্র (২); Jensen দিয়ে ELBO (২); ফাঁক = KL (১); একঘেয়ে বৃদ্ধির শৃঙ্খল (৩); দুটি সীমা (২)। পর্ব ৩৯ · পর্ব ৪৮

যেখানে নম্বর কাটে: M-step-এ পুরোনো μ দিয়ে Σ; “EM global maximum দেয়” লেখা; Jensen-এর অসমতার দিক উল্টো।

ঘ-০২Variational inference আর MCMC-এর তুলনা করুন: লক্ষ্য, ভুলের ধরন, KL-এর দিক, অগ্রগতি মাপা আর কোথায় কোনটি। — ৫ নম্বর (মাঝারি)
মাপকাঠিVIMCMC
মূল কাজOptimization: পরিবার Q-এর ভেতরে ELBO বাড়ানোSampling: posterior যার stationary distribution, এমন Markov chain
সময় বাড়ালেQ-এর সেরা q-তে থামে; ফাঁক থেকে যায় (bias)আসল posterior-এর দিকে যায়; ভুল নমুনার এলোমেলোতা (variance)
KLKL(q ‖ p): mode-seeking, অনিশ্চয়তা কম দেখায়KL নয়, নমুনা
অগ্রগতিELBO-র বক্ররেখা; ফাঁক কত, বলে নাR-hat, effective sample size, trace plot
ভালো ক্ষেত্রবড় ডেটা, topic model, দ্রুত অনেক modelছোট-মাঝারি ডেটা, নির্ভুল অনিশ্চয়তা

সিদ্ধান্ত: সম্প্রদায়ে মতভেদ আছে: অনেক পরিসংখ্যানবিদ চূড়ান্ত বিশ্লেষণে MCMC (HMC/NUTS) চান, বড় মাপের ML-এ VI-ই সাধারণ। ছোট নমুনায় দুটি চালিয়ে মিলিয়ে দেখা একটি ভালো অভ্যাস।

পরীক্ষক যা খোঁজেন: optimization বনাম sampling (১); bias বনাম variance ধরনের ভুল (১); KL-এর দিক আর তার ফল (১); diagnostic (১); কখন কোনটি (১)। পর্ব ৪৭ · পর্ব ৪৮

যেখানে নম্বর কাটে: “VI সঠিক posterior দেয়” লেখা; KL-এর দিক উল্টো; MCMC-তে burn-in আর chain মেশার কথা বাদ।

৬ · অংশ ঙ — বিশেষ ডেটা, ব্যাখ্যা আর অনিশ্চয়তা (মডিউল ১০, ১১)

রিভিশন: পর্ব ৫০ (imbalance), পর্ব ৫২ (backtesting), পর্ব ৫৬, পর্ব ৫৭ (ব্যাখ্যা), পর্ব ৫৮ (conformal), পর্ব ৫৯ (shift), পর্ব ৬০ (ন্যায্যতা).

ঙ-০১Split conformal prediction-এর পদ্ধতি লিখুন, আর প্রমাণ করুন যে k = ⌈(n + ১)(১ − α)⌉-তম score নিলে coverage অন্তত ১ − α. নিশ্চয়তাটি কোন অর্থে marginal, আর distribution shift-এ কী হয়? — ১০ নম্বর (কঠিন)

পদ্ধতি: Train ভাগে model fit. আলাদা calibration ভাগের n টি উদাহরণে score si = |yi − ŷ(xi)|. সাজিয়ে k-তম ছোট মান q̂. নতুন x-এ পরিসর [ŷ(x) − q̂, ŷ(x) + q̂]।

প্রমাণ: অনুমান: calibration-এর n টি আর নতুন উদাহরণ মিলিয়ে n + ১টি score exchangeable (সমান মান নেই ধরি)। তাহলে নতুন score-টির ক্রম ১ থেকে n + ১-এর যেকোনোটি, প্রতিটি ১/(n + ১) সম্ভাবনায়। নতুন y পরিসরে থাকে ঠিক যখন তার score ≤ q̂, অর্থাৎ তার ক্রম ≤ k. তাই P(cover) ≥ k/(n + ১) ≥ ১ − α, কারণ k ≥ (n + ১)(১ − α)। k > n হলে পরিসর অসীম।

import numpy as np

rng = np.random.default_rng(75)
n, alpha, trials = 19, 0.1, 20000
k = int(np.ceil((n + 1) * (1 - alpha)))      # rank of the conformal quantile
print("n =", n, "| k =", k, "| promised coverage >=", 1 - alpha)

# scores |y - y_hat| of an imperfect model; any continuous law works
cal = np.abs(rng.standard_t(3, (trials, n)))
new = np.abs(rng.standard_t(3, trials))            # same distribution
shifted = 1.5 * np.abs(rng.standard_t(3, trials))  # noise grew after deploy

q_conf = np.sort(cal, axis=1)[:, k - 1]
q_naive = np.quantile(cal, 1 - alpha, axis=1)      # plain 90% quantile

print("conformal k-th score, coverage:", np.mean(new <= q_conf).round(4))
print("plain np.quantile,   coverage:", np.mean(new <= q_naive).round(4))
print("theory k/(n+1) =", k / (n + 1))
print("after shift, conformal coverage:", np.mean(shifted <= q_conf).round(4))

আসল আউটপুট (ব্রাউজারের Python):

n = 19 | k = 18 | promised coverage >= 0.9
conformal k-th score, coverage: 0.8994
plain np.quantile,   coverage: 0.865
theory k/(n+1) = 0.9
after shift, conformal coverage: 0.7997

২০,০০০টি আলাদা calibration ভাগে k-তম score-এর গড় coverage ০.৮৯৯৪, তত্ত্বের k/(n + ১) = ০.৯-এর সঙ্গে মেলে (এলোমেলোতার SE প্রায় ০.০০২)। সাধারণ ৯০% quantile (interpolation-সহ) মাত্র ০.৮৬৫ দেয়: ছোট n-এ “+১” আর ceiling-ই পার্থক্য গড়ে। Score-এর বণ্টন ইচ্ছা করে ভারী লেজের (t, ৩ df), তবু নিশ্চয়তা টেকে, কারণ প্রমাণে বণ্টনের কোনো রূপ লাগেনি। Deploy-এর পরে noise দেড়গুণ হলে exchangeability ভাঙে, আর coverage ০.৮-এ নামে।

Marginal: ১ − α হলো সব x আর সব calibration ভাগের গড়; “এই নির্দিষ্ট অর্ডারের জন্য ৯০%” নয় (conditional coverage). দূরের এলাকার অর্ডারে coverage অনেক কম হয়েও গড় ৯০% থাকতে পারে। প্রতিকার: ঝুঁকির সঙ্গে চওড়া হয় এমন score (conformalized quantile regression), বা জানা দলে আলাদা calibration (Mondrian). Shift-এ নিয়মিত নতুন করে calibrate করুন, আর coverage নজরে রাখুন।

পরীক্ষক যা খোঁজেন: পদ্ধতির চার ধাপ (২); exchangeability অনুমান (১); ক্রমের যুক্তি আর k/(n + ১) (৩); marginal বনাম conditional (২); shift আর প্রতিকার (২)। পর্ব ৫৮ · পর্ব ৫৯

যেখানে নম্বর কাটে: train ভাগেই score মাপা; n দিয়ে quantile, n + ১ নয়; “প্রতিটি গ্রাহকের ৯০% নিশ্চয়তা” লেখা; i.i.d. না বলে “কোনো অনুমান নেই” দাবি।

ঙ-০২২% জালিয়াতির ডেটায় একটি classifier বানাতে threshold সরানো, class weight আর SMOTE-এর তুলনা করুন। কোন metric দেখবেন, আর resampling কোথায় করবেন? — ৫ নম্বর (মাঝারি)

প্রথম চেষ্টা threshold: সম্ভাবনা calibrated থাকলে খরচ থেকে সীমা: ভুয়া alarm-এর খরচ cFP, ধরা না পড়ার খরচ cFN হলে p > cFP/(cFP + cFN) হলে আটকান। Model একই থাকে।

Class weight আর resampling: loss-এ বিরল শ্রেণিকে বেশি ওজন; এতে সম্ভাবনা ফুলে যায় (balanced ওজন odds-কে n₀/n₁ গুণ করে), তাই সম্ভাবনা লাগলে prior সংশোধন বা আবার calibrate. SMOTE দুটি বিরল প্রতিবেশীর মাঝে কৃত্রিম বিন্দু বানায়; কিছু পড়ে সাধারণ ভিড়ে।

Metric আর জায়গা: Accuracy নয়; PR AUC, নির্দিষ্ট precision-এ recall, প্রত্যাশিত খরচ। Resampling শুধু training fold-এর ভেতরে, pipeline দিয়ে; ভাগের আগে করলে test-এ কৃত্রিম বিন্দুর আত্মীয় ঢুকে score ফোলে।

পরীক্ষক যা খোঁজেন: খরচের threshold সূত্র (১.৫); weight-এর সম্ভাবনা-বিকৃতি (১); SMOTE আর তার দুর্বলতা (১); metric আর leakage-মুক্ত জায়গা (১.৫)। পর্ব ৫০ · পর্ব ২৬

যেখানে নম্বর কাটে: ৯৮% accuracy-কে সাফল্য বলা; পুরো ডেটায় SMOTE করে তারপর ভাগ; threshold ০.৫ অপরিবর্তিত রাখা।

ঙ-০৩Permutation importance আর SHAP-এর পার্থক্য লিখুন। একজন ব্যবস্থাপক বলছেন, “SHAP-এ ডেলিভারি দেরির মান সবচেয়ে বড়, তাই দেরি কমালেই churn কমবে।” এই দাবির সমস্যা কী? — ৫ নম্বর (মাঝারি)

পার্থক্য: Permutation importance global: একটি কলাম এলোমেলো করলে held-out score কত কমে। SHAP local: একটি অনুমানকে base value থেকে প্রতিটি feature-এর অবদানে ভাগ করে, Shapley value-এর axiom মেনে (অবদানগুলোর যোগফল = অনুমান − base value). গড় |SHAP| দিয়ে global ছবিও আঁকা যায়।

দাবির সমস্যা: SHAP model-এর হিসাবের ভাগ, পৃথিবীর কারণ নয়। দেরি হয়তো দূরের এলাকার প্রতিনিধি (confounding), আর সম্পর্কিত feature-এ অবদান ভাগাভাগি হয়। “দেরি কমালে কী হবে” একটি causal প্রশ্ন: A/B test বা causal নকশা লাগে (অংশ ৭)। দুই পদ্ধতিই সম্পর্কিত feature-এ অবাস্তব সারি বানাতে পারে (off-manifold).

পরীক্ষক যা খোঁজেন: দুই সংজ্ঞা, global বনাম local (২); additivity (১); causal-ভুল আর confounding (১.৫); সম্পর্কিত feature-এর সমস্যা (০.৫)। পর্ব ৫৬ · পর্ব ৫৭ · পর্ব ৬৪

যেখানে নম্বর কাটে: training ডেটায় permutation importance মাপা; impurity importance-কে নিরপেক্ষ ভাবা; SHAP-কে causal প্রভাব বলা।

৭ · অংশ চ — Causal প্রশ্ন আর A/B test (মডিউল ১২)

রিভিশন: পর্ব ৬২ (power, peeking, SRM), পর্ব ৬৩ (বিশ্লেষণ, CUPED), পর্ব ৬৪ (DAG, matching, DiD).

চ-০১একটি দোকান অনুগত গ্রাহকদের বেশি coupon দেয়। Coupon (T)-এর খরচ (Y)-এর ওপর প্রভাব জানতে একটি causal DAG আঁকুন, backdoor criterion লিখুন, আর দেখান কোন চলক ধরলে প্রভাব ঠিক আসে, কোনটি ধরলে নতুন bias জন্মায়। Randomization না থাকলে আর কোন নকশা আছে? — ১০ নম্বর (কঠিন)

DAG: L (আনুগত্য) → T, L → Y, T → Y, আর T → R ← Y, যেখানে R = review লেখা। L একটি confounder (fork), R একটি collider.

Backdoor criterion: সেট S বৈধ, যদি (ক) S-এর কোনো চলক T-এর বংশধর না হয়, আর (খ) T-তে ঢোকা তীর দিয়ে শুরু প্রতিটি পথ S বন্ধ করে। এখানে একমাত্র backdoor T ← L → Y; S = {L} বৈধ। R T-এর বংশধর, তাই নিষিদ্ধ: ধরলে বন্ধ collider-পথ খুলে যায়। Mediator ধরলেও প্রভাবের অংশ মুছে যায়।

import numpy as np

rng = np.random.default_rng(75)
n = 50_000
L = rng.standard_normal(n)                          # loyalty (confounder)
T = (L + rng.standard_normal(n) > 0).astype(float)  # loyal people get coupons
Y = 2.0 * T + 3.0 * L + rng.standard_normal(n)      # true effect of T = 2.0
R = (T + Y + rng.standard_normal(n) > 3).astype(float)  # wrote a review

def effect(*covs, rows=slice(None)):                # OLS coefficient of T
    A = np.column_stack([np.ones(n), T, *covs])[rows]
    return np.linalg.lstsq(A, Y[rows], rcond=None)[0][1]

print("true effect                  : 2.00")
print(f"naive difference in means    : {Y[T == 1].mean() - Y[T == 0].mean():.2f}")
print(f"adjust for L (backdoor shut) : {effect(L):.2f}")
print(f"adjust for L and collider R  : {effect(L, R):.2f}")
print(f"only reviewers (R = 1), adj L: {effect(L, rows=R == 1):.2f}")

আসল আউটপুট (ব্রাউজারের Python):

true effect                  : 2.00
naive difference in means    : 5.43
adjust for L (backdoor shut) : 2.01
adjust for L and collider R  : 1.64
only reviewers (R = 1), adj L: 1.43

সরল পার্থক্য ৫.৪৩, আসলের প্রায় তিনগুণ: অনুগতরা coupon-ও বেশি পান, খরচও বেশি করেন। L ধরলে ২.০১, প্রায় হুবহু। L-এর সঙ্গে R যোগ করলে ১.৬৪, আর শুধু review-লেখকদের নিলে ১.৪৩: “বেশি চলক ধরলে ক্ষতি কী” ভাবনার দাম। ডেটা বানানো, তাই আসল প্রভাব জানা; বাস্তবে DAG-টি নিজেই একটি দাবি।

Randomization ছাড়া: Propensity score দিয়ে matching বা IPW (একই unconfoundedness অনুমান, সাথে overlap যাচাই); difference-in-differences (অনুমান parallel trends, placebo test দিয়ে আংশিক যাচাই); regression discontinuity; instrumental variable. প্রতিটির অনুমান লিখে sensitivity analysis দিন।

পরীক্ষক যা খোঁজেন: DAG, তিন ধরনের চলক চিহ্নিত (২); backdoor criterion-এর দুই শর্ত (২); বৈধ সেট আর collider-এর ব্যাখ্যা (২); সংখ্যায় বা যুক্তিতে যাচাই (২); বিকল্প নকশা আর অনুমান (২)। পর্ব ৬৪

যেখানে নম্বর কাটে: “সব চলক regression-এ দিলেই causal” লেখা; collider আর confounder গুলিয়ে ফেলা; DiD-এর অনুমান বাদ।

চ-০২একটি checkout-বদলের A/B test-এর পরিকল্পনা আর বিশ্লেষণে পাঁচটি সাধারণ ফাঁদ লিখুন: প্রতিটি কেন ভুল ফল দেয় আর প্রতিকার কী। CUPED কীভাবে variance কমায়, সূত্রসহ দেখান। — ১০ নম্বর (মাঝারি)
ফাঁদকেন ভুলপ্রতিকার
Peeking: রোজ দেখে প্রথম p < ০.০৫-এ থামাপ্রতিটি দেখা একটি নতুন সুযোগ; পর্ব ৬২-এর simulation-এ ১৪ বার দেখায় ভুয়া “জয়” ২২.৯%আগে ঠিক করা n-এ একবার, বা group-sequential সীমা
Power না মেপে শুরুছোট আসল প্রভাব ধরা পড়ে না; significant হলেও প্রভাব ফোলানো (winner's curse)MDE, α, power থেকে আগে n
Sample ratio mismatch৫০/৫০ পরিকল্পনায় দলের আকার আলাদা মানে দুই দল আর তুলনীয় নয়Chi-square goodness-of-fit, কড়া সীমা (যেমন p < ০.০০১); কারণ না পেলে ফল বাতিল
Randomization-এর একক আর বিশ্লেষণের একক আলাদাZone ধরে ভাগ করে গ্রাহক ধরে z-test করলে SE অতি-ছোটCluster-স্তরে বিশ্লেষণ বা design effect
অনেক metric আর segmentকোথাও না কোথাও p < ০.০৫ পাওয়া যায়একটি primary metric আগে লেখা, বাকিগুলোতে সংশোধন

CUPED: X = পরীক্ষার আগের খরচ, Y = পরীক্ষার সময়ের আয়। Ycv = Y − θ(X − X̄). Randomization-এর জন্য দুই দলে X-এর প্রত্যাশিত গড় সমান, তাই পার্থক্যের প্রত্যাশা বদলায় না। Var(Y − θX) = σY² − 2θσXY + θ²σX², θ-তে derivative শূন্য করলে θ = σXY/σX², আর Var(Ycv) = σY²(১ − ρ²)। ρ = ০.৫ হলে variance ২৫% কম। শর্ত: X-কে treatment প্রভাবিত করতে পারবে না।

পরীক্ষক যা খোঁজেন: পাঁচটি ফাঁদ, কারণ আর প্রতিকারসহ (৫); CUPED-এর unbiased যুক্তি (১.৫); θ আর (১ − ρ²) derivation (২.৫); pre-period শর্ত (১)। পর্ব ৬২ · পর্ব ৬৩

যেখানে নম্বর কাটে: “p = ০.০৩, মানে treatment ভালো হওয়ার সম্ভাবনা ৯৭%”; পরীক্ষার সময়ের চলক দিয়ে CUPED; SRM থাকা সত্ত্বেও ফল রিপোর্ট।

৮ · অংশ ছ — Production ML আর নজরদারি (মডিউল ১৩)

রিভিশন: পর্ব ৬৮ (serving, skew), পর্ব ৬৯ (test আর নজরদারি), পর্ব ৭১ (system design), পর্ব ৭২ (ক্যাপস্টোন).

ছ-০১একটি জালিয়াতি-ধরার model চালু হয়েছে; আসল label আসে গড়ে ১৪ দিন পরে। একটি monitoring ব্যবস্থার নকশা করুন: কী কী মাপবেন, কোন স্তরে, alert-এর সীমা কীভাবে ঠিক করবেন, আর কখন retrain বা rollback. — ১০ নম্বর (কঠিন)

লক্ষ্য: সমস্যা দ্রুত ধরা, কিন্তু ভুয়া alert-এ দল ক্লান্ত না করা। Label delay-এর জন্য দ্রুত কিন্তু পরোক্ষ সংকেত আর ধীর কিন্তু সরাসরি সংকেত, দুটিই লাগে।

স্তরকী মাপবেনকখন পাওয়া যায়কী ধরে না
Servicep95 latency, error-এর হার, অনুরোধসেকেন্ডেদ্রুত কিন্তু ভুল উত্তর
ডেটার মানnull-এর হার, schema, সতেজতা, অচেনা শ্রেণিমিনিট থেকে দিনেঠিক দেখতে কিন্তু বদলানো ডেটা
অনুমানের বণ্টনscore-এর গড়, আটকানো অর্ডারের ভাগ, feature-এর PSIদিনেinput একই রেখে নিয়ম বদল (concept drift)
আসল মানPR AUC, precision, calibration, slice ধরে; টাকায় ক্ষতিlabel এলে (১৪ দিন)কিছু নয়, কিন্তু দেরিতে

Alert-এর সীমা: ৩০টি স্বাধীন metric-এ প্রতিটিতে ±2σ নিয়ম হলে কোনো সমস্যা ছাড়াই একদিনে একটিও না বাজার সম্ভাবনা ০.৯৫৪৫৩০ ≈ ০.২৪৭, অর্থাৎ বেশিরভাগ দিনেই ভুয়া alert আর alert fatigue. তাই: সাপ্তাহিক ছন্দ মেনে একই বারের reference, কড়া সীমা (3σ বা Bonferroni), টানা দুই দিনের শর্ত, আর প্রতিটি alert-এর মালিক ও runbook. PSI-এর ০.১ আর ০.২৫ সীমা প্রচলিত হাতের নিয়ম, তত্ত্ব নয়।

Label-এর ফাঁক: প্রতিদিন এলোমেলো কিছু অর্ডার হাতে যাচাই; label এলে slice ধরে মান। Drift মানেই মান কমা নয়; মান কমার প্রমাণে retrain.

Retrain আর rollback: ডেটার মানের ভাঙনে (একটি কলাম হঠাৎ ৩০% ফাঁকা) retrain নয়, আগে pipeline ঠিক, দরকারে আগের version-এ rollback. মান কমলে নতুন ডেটায় retrain, পুরোনো model-এর সঙ্গে একই holdout-এ তুলনা, তারপর shadow বা canary. ঘটনার পরে লিখিত postmortem.

পরীক্ষক যা খোঁজেন: চার স্তর আর label delay (৩); অন্তত দুটি নির্দিষ্ট metric প্রতি স্তরে (২); alert-এর multiple-comparison যুক্তি আর প্রতিকার (২); retrain বনাম rollback-এর সিদ্ধান্ত (২); মালিক, runbook বা postmortem (১)। পর্ব ৬৯ · পর্ব ৫৯ · পর্ব ৭১

যেখানে নম্বর কাটে: শুধু accuracy নজরে রাখা (যা ১৪ দিন দেরিতে আসে); drift দেখলেই স্বয়ংক্রিয় retrain; ভাঙা ডেটায় retrain করে সমস্যাটি model-এ ঢুকিয়ে দেওয়া।

ছ-০২Training–serving skew কী? দুটি উদাহরণ আর তিনটি প্রতিরোধ লিখুন। Batch scoring আর online inference-এর মধ্যে কখন কোনটি বাছবেন? — ৫ নম্বর (সহজ)

সংজ্ঞা: Training–serving skew মানে model শেখার সময় যে feature-মান দেখেছিল, চালু অবস্থায় তা অন্যভাবে হিসাব হয়ে আসে। দর্জি মাপ নিলেন ইঞ্চিতে, কারিগর কাটলেন সেন্টিমিটারে।

উদাহরণ: notebook-এ “গত ৩০ দিনের অর্ডার” আজকের দিনসহ গোনা, সার্ভিসে আজকের দিন বাদে; training-এ টাকা, সার্ভিসে পয়সা; অচেনা শ্রেণি training-এ “other”, সার্ভিসে NaN.

প্রতিরোধ: এক জায়গায় লেখা feature কোড (একই pipeline বা feature store); golden set: কয়েকটি সারির প্রত্যাশিত feature আর score, deploy-এর আগে মেলানো; চালুর পরে feature-এর বণ্টন training-এর সঙ্গে তুলনা।

Batch বনাম online: রাতে সব গ্রাহকের churn score, যেখানে সিদ্ধান্ত দেরিতে নিলেও চলে: batch (সস্তা, সহজ)। Checkout-এর মুহূর্তে জালিয়াতি আটকানো: online, latency বাজেটসহ।

পরীক্ষক যা খোঁজেন: সংজ্ঞা (১); দুটি উদাহরণ (১); তিনটি প্রতিরোধ (১.৫); batch বনাম online, শর্তসহ (১.৫)। পর্ব ৬৮ · পর্ব ৭১

যেখানে নম্বর কাটে: skew-কে data drift বলা (drift পৃথিবী বদলায়, skew আমাদের কোড); “সবসময় online ভালো” লেখা।

৯ · ভাইভা — কৌশল, ২৪টি প্রশ্ন, ফাঁদ, সৎ উত্তর আর AI

ভাইভায় পরীক্ষক আপনার শেষ বাক্য থেকে পরের প্রশ্ন বানান। এই স্তরে দুটি পরের প্রশ্ন প্রায় নিশ্চিত: “কোন শর্তে?” আর “কীভাবে যাচাই করবেন?” তাই প্রথম উত্তরেই একটি শর্ত আর একটি যাচাইয়ের পথ রাখুন।

কী (এক বাক্য) → কোন শর্তে (অনুমান) → কখন ভাঙে বা কীভাবে যাচাই

“Conformal কী?” — “একটি পরিসর, যা নতুন উদাহরণকে অন্তত ১ − α সম্ভাবনায় ধরে, model যেমনই হোক (কী)। শর্ত exchangeability, আর নিশ্চয়তাটি গড়ে, প্রতিটি গ্রাহকের নয় (শর্ত)। সময়ের drift-এ ভাঙে, তাই চালুর পরে coverage মাপতে হয় (কখন ভাঙে)।”

প্রতিটি প্রশ্ন-উত্তরের পর
পরীক্ষক
প্রার্থী (মূল কথা)
কেন ভালো উত্তর
জোড়া পর্ব
  1. শুরু। “Variance কমে, bias সামান্য বাড়ে”: বিনিময়টি নিজে থেকে বলা।
  2. এক লাইনের সূত্র। λ = σ²/τ² বললেই পরীক্ষক বোঝেন derivation জানা আছে।
  3. দুই দিক থেকে। জ্যামিতি আর prior, একই সত্যের দুই রূপ।
  4. ব্যবহারিক। λ বাছাইয়ে leakage-এর কথা না বললে পরের প্রশ্ন সেখানেই আসত।
  5. সীমা থেকে লাভ। MAP একটি বিন্দু; পরিসর লাগলে posterior.
  6. ভারসাম্য। খরচ আর মতভেদ স্বীকার করা পরিপক্বতার লক্ষণ।

২৪টি ছোট প্রশ্ন — মুখে বলার উত্তর আর পরের প্রশ্ন

জোরে উত্তর বলুন, তারপর প্রশ্নে চেপে মেলান; প্রতিটিতে ৩০ সেকেন্ডের বেশি নয়। “পরের প্রশ্ন”-এর উত্তরও মুখে বলুন।

শেখার তত্ত্ব আর optimisation (পর্ব ১–১৭)

ভ-০১Generalisation gap কী, আর VC dimension তার সঙ্গে কীভাবে যুক্ত? (মাঝারি)

Gap = আসল ঝুঁকি − training ঝুঁকি। Hypothesis class যত সমৃদ্ধ (বড় VC dimension), একই n-এ gap-এর সীমা তত ঢিলা; n বাড়লে কমে। পর্ব ৩

পরের প্রশ্ন: বড় neural network তাহলে generalise করে কেন? — Worst-case সীমা সেখানে প্রায় অর্থহীন; implicit regularization আর double descent নিয়ে গবেষণা চলছে, পুরো ব্যাখ্যা এখনো বিতর্কিত।

ভ-০২Matrix-এর rank কম হলে least squares-এ কী হয়? (সহজ)

XᵀX singular, সমাধান অনন্য নয়; অসীম সমাধানের মধ্যে pseudo-inverse সবচেয়ে ছোট norm-এরটি দেয়। পর্ব ৬ · পর্ব ৯

পরের প্রশ্ন: প্রায়-singular হলে? — Condition number বিশাল, coefficient অস্থির; ridge বা কলাম বাদ।

ভ-০৩Adam কেন প্রায়ই SGD-র চেয়ে দ্রুত শুরু করে? (মাঝারি)

Momentum-এর মতো gradient-এর চলমান গড় আর প্রতিটি parameter-এর gradient²-এর চলমান গড় দিয়ে ধাপ মাপে, সাথে bias correction; ফলে খারাপ-scaled দিকেও যুক্তিসংগত ধাপ। পর্ব ১৪

পরের প্রশ্ন: L2 আর weight decay কি Adam-এ এক? — না; Adam-এ L2-এর gradient-ও ভাগ হয়ে যায়, তাই আলাদা weight decay (AdamW).

ভ-০৪Newton পদ্ধতি দ্রুত, তবু বড় model-এ কেন সরাসরি ব্যবহার হয় না? (মাঝারি)

প্রতি ধাপে d × d Hessian বানানো আর সমাধান: মেমরি O(d²), সময় প্রায় O(d³)। তাই L-BFGS-এর মতো quasi-Newton. পর্ব ১৫

পরের প্রশ্ন: Non-convex loss-এ Newton-এর বিপদ? — Hessian indefinite হলে ধাপ saddle point বা ওপরের দিকে যেতে পারে; line search বা damping লাগে।

সম্ভাবনা আর linear model (পর্ব ১৮–২৬)

ভ-০৫MLE কি সবসময় unbiased? (সহজ)

না। Normal-এর variance-এর MLE n দিয়ে ভাগ করে, প্রত্যাশা (n − ১)σ²/n. তবে সাধারণ শর্তে consistent. পর্ব ১৮

পরের প্রশ্ন: Bias থাকলে সমস্যা? — সবসময় নয়; মোট MSE = bias² + variance, সামান্য bias দিয়ে variance কমানো লাভজনক হতে পারে।

ভ-০৬Mahalanobis দূরত্ব Euclidean-এর চেয়ে কোথায় ভালো? (মাঝারি)

Covariance দিয়ে মাপ আর সম্পর্ক সংশোধন করে: (x − μ)ᵀΣ⁻¹(x − μ)। সম্পর্কিত feature-এ outlier খুঁজতে। পর্ব ১৯

পরের প্রশ্ন: Σ অনুমান খারাপ হলে? — অল্প ডেটায় Σ⁻¹ অস্থির; shrinkage (Ledoit–Wolf) বা robust অনুমান।

ভ-০৭Bootstrap confidence interval কখন ভুল? (মাঝারি)

সারিগুলো স্বাধীন না হলে (সময়ের ডেটা, একই গ্রাহকের অনেক সারি), খুব ভারী লেজে, আর সর্বোচ্চ মানের মতো statistic-এ। পর্ব ২১

পরের প্রশ্ন: সময়ের ডেটায় কী করবেন? — Block bootstrap, বা গ্রাহক ধরে cluster bootstrap.

ভ-০৮OvR আর softmax-এর পার্থক্য? (সহজ)

OvR K টি আলাদা binary model, তাদের সম্ভাবনার যোগফল আপনা-আপনি ১ নয় (আলাদা করে normalize করতে হয়); softmax একসঙ্গে K শ্রেণির সম্ভাবনা, যোগফল ১. পর্ব ২৫

পরের প্রশ্ন: Multilabel-এ softmax চলে? — না; একাধিক label একসঙ্গে সত্য হতে পারে, তাই প্রতিটির আলাদা sigmoid বা classifier chain.

SVM আর ensemble (পর্ব ২৭–৩৮)

ভ-০৯SVM-এ C বাড়ালে কী হয়? (সহজ)

ভুলের দাম বাড়ে: margin সরু, কম slack, training-এ কম ভুল, overfit-এর ঝুঁকি বেশি। পর্ব ২৮

পরের প্রশ্ন: RBF-এর γ? — বড় γ মানে প্রতিটি বিন্দুর প্রভাব কাছে সীমিত, আঁকাবাঁকা সীমারেখা; C আর γ একসঙ্গে grid-এ, scaling-এর পরে।

ভ-১০একটি function কখন বৈধ kernel? (মাঝারি)

Mercer-এর শর্ত: যেকোনো বিন্দুর সেটে Gram matrix symmetric positive semidefinite. তখন কোনো feature space-এ dot product হিসেবে লেখা যায়। পর্ব ২৯

পরের প্রশ্ন: দুটি kernel যোগ বা গুণ করলে? — আবার বৈধ kernel; তাই kernel জোড়া দিয়ে নতুন kernel বানানো যায়।

ভ-১১Gradient boosting-এ residual কেন “gradient”? (মাঝারি)

Squared loss ½(y − F)²-এর F-এর সাপেক্ষে ঋণাত্মক gradient ঠিক y − F; প্রতিটি গাছ function space-এ একটি gradient ধাপ। অন্য loss-এ এর নাম pseudo-residual. পর্ব ৩৫

পরের প্রশ্ন: Learning rate ছোট কেন? — ছোট ধাপ আর বেশি গাছ সাধারণত ভালো generalise করে; early stopping দিয়ে গাছের সংখ্যা।

ভ-১২Impurity-ভিত্তিক feature importance-এ ভরসা কম কেন? (মাঝারি)

Training ডেটায় মাপা, আর অনেক মানের (high-cardinality) কলামকে বেশি split-সুযোগ দেয়, এমনকি এলোমেলো ID-কেও। পর্ব ৩৩

পরের প্রশ্ন: বিকল্প? — Held-out ডেটায় permutation importance; সম্পর্কিত কলামে grouped permutation.

Unsupervised আর Bayesian (পর্ব ৩৯–৪৯)

ভ-১৩K-means কি GMM-এর একটি বিশেষ রূপ? (মাঝারি)

প্রায়: সব component-এর একই গোল covariance σ²I, আর σ → ০ হলে responsibility ০ বা ১ হয়ে যায়, EM তখন k-means. পর্ব ৩৯

পরের প্রশ্ন: K কীভাবে বাছবেন? — GMM-এ BIC; সাথে ব্যবসার অর্থ আর stability.

ভ-১৪t-SNE-এর ছবিতে cluster-এর আকার আর দূরত্ব কি অর্থবহ? (সহজ)

সাধারণত না; t-SNE স্থানীয় প্রতিবেশ রাখে, দূরের cluster-এর মাঝের দূরত্ব আর cluster-এর আকার perplexity আর seed-এ বদলায়। পর্ব ৪২

পরের প্রশ্ন: তাহলে কী কাজে লাগে? — অনুসন্ধানের ছবি; সিদ্ধান্তের আগে মূল ডেটায় যাচাই, কয়েকটি perplexity আর seed-এ।

ভ-১৫Gaussian process-এর predictive variance কোথায় বড়? (মাঝারি)

Training বিন্দু থেকে দূরে; সেখানে prior-এর variance-এ ফেরে। কাছে ডেটা থাকলে noise-এর কাছাকাছি নামে। পর্ব ৪৬

পরের প্রশ্ন: বড় n-এ সমস্যা? — n × n matrix-এর সমাধান O(n³); inducing points বা sparse GP.

ভ-১৬Bayesian optimization কখন grid search-এর চেয়ে ভালো? (সহজ)

প্রতিটি মূল্যায়ন দামি আর parameter কম হলে: surrogate model (প্রায়ই GP) আর acquisition function পরের চেষ্টা বাছে। পর্ব ৪৯

পরের প্রশ্ন: কখন random search-ই যথেষ্ট? — সস্তা মূল্যায়ন, অনেক মাত্রা, বা সমান্তরালে অনেক চেষ্টা চালানো গেলে।

বিশেষ ডেটা আর ব্যাখ্যা (পর্ব ৫০–৬০)

ভ-১৭Time series-এ এলোমেলো k-fold কেন ভুল? (সহজ)

ভবিষ্যতের সারি দিয়ে অতীত শেখা হয়, আর পাশাপাশি সারির মিল ফল ফোলায়। Rolling-origin backtesting লাগে। পর্ব ৫২

পরের প্রশ্ন: Lag feature-এ leakage কোথায় ঢোকে? — Rolling window-এ আজকের মান ঢুকলে; shift করে তারপর window.

ভ-১৮Survival analysis-এ censored গ্রাহক বাদ দিলে কী হয়? (মাঝারি)

যাঁরা এখনো আছেন তাঁরা বাদ পড়েন, তাই টিকে থাকার সময় কম দেখায়। Kaplan–Meier আর Cox censored তথ্য ঠিকভাবে ব্যবহার করে। পর্ব ৫৫

পরের প্রশ্ন: Cox-এর মূল অনুমান? — Proportional hazards: hazard ratio সময়ের সঙ্গে স্থির; Schoenfeld residual দিয়ে যাচাই।

ভ-১৯Covariate shift আর concept drift-এর পার্থক্য? (সহজ)

Covariate shift: P(x) বদলায়, P(y ∣ x) একই। Concept drift: P(y ∣ x) বদলায়, input একই দেখালেও। পর্ব ৫৯

পরের প্রশ্ন: Label ছাড়া কোনটি ধরা যায়? — Covariate shift (PSI, KS, domain classifier); concept drift ধরতে সাধারণত label লাগে।

ভ-২০Demographic parity আর equalized odds একসঙ্গে মেলানো যায় না কেন? (কঠিন)

দলগুলোর base rate আলাদা হলে দুটি একসঙ্গে মেলে কেবল অকেজো model-এ (TPR = FPR); আর নিখুঁত নয় এমন model-এ equalized odds আর দলভিত্তিক calibration-ও একসঙ্গে মেলে না। কোনটি বেছে নিলেন, লিখে দায় নিতে হয়। পর্ব ৬০

পরের প্রশ্ন: সংবেদনশীল কলাম মুছলেই হয়? — না; proxy (এলাকা, নাম) একই তথ্য বহন করে; দল ধরে মাপতেই হয়।

Data science আর production (পর্ব ৬১–৭২)

ভ-২১p-value ০.০৩ মানে কী? (সহজ)

Null hypothesis সত্য ধরলে এমন বা আরও চরম ফল পাওয়ার সম্ভাবনা ০.০৩. Treatment ভালো হওয়ার সম্ভাবনা নয়, প্রভাবের আকারও নয়। পর্ব ৬৩

পরের প্রশ্ন: তাহলে কী রিপোর্ট করবেন? — প্রভাবের অনুমান আর confidence interval, আগে ঠিক করা MDE-র পাশে।

ভ-২২DiD-এর মূল অনুমান কী, আর কীভাবে আংশিক যাচাই করবেন? (মাঝারি)

Parallel trends: treatment না হলে দুই দলের গড় একই হারে বদলাত। পরিবর্তনের আগের সময়ে ধারা মেলানো আর placebo test. পর্ব ৬৪

পরের প্রশ্ন: Standard error-এ কী সাবধানতা? — একই জেলার সারিগুলো জড়িত; জেলা ধরে cluster-robust SE.

ভ-২৩Shadow deployment আর canary-র পার্থক্য? (সহজ)

Shadow: নতুন model আসল অনুরোধ পায় কিন্তু সিদ্ধান্ত দেয় না, শুধু log. Canary: অল্প কিছু ব্যবহারকারীর সিদ্ধান্ত সত্যিই নতুন model দেয়। পর্ব ৬৮

পরের প্রশ্ন: Shadow কী ধরতে পারে না? — সিদ্ধান্তের প্রভাব: নতুন model আটকালে গ্রাহক কী করতেন, তা দেখা যায় না।

ভ-২৪Data drift দেখা গেলেই কি retrain? (মাঝারি)

না। Drift মানে মান কমা নয়; আগে দেখুন ডেটা ভাঙা কি না (তাহলে pipeline ঠিক), তারপর মান সত্যিই কমেছে কি না। পর্ব ৬৯

পরের প্রশ্ন: Label দেরিতে এলে মান কীভাবে আন্দাজ করবেন? — প্রতিদিন এলোমেলো কিছু হাতে যাচাই, আর score-এর বণ্টন ও calibration-এর পরোক্ষ সংকেত।

সাধারণ ফাঁদ — যেসব কথায় নম্বর কাটে

ফাঁদের কথাকেন ভুলঠিক কথা
“AUC ০.৯, তাই সম্ভাবনা ঠিক”AUC শুধু ক্রম মাপেReliability diagram, ECE, Brier
“EM global maximum দেয়”শুধু stationary বিন্দুকয়েকটি শুরু, সেরা ℓ
“Conformal প্রতিটি গ্রাহকের ৯০%”নিশ্চয়তা marginalদল ধরে coverage মাপা
“SHAP বড়, তাই কারণ”Model-এর হিসাব, পৃথিবী নয়Causal নকশা বা A/B
“সব চলক regression-এ দিলাম”Collider বা mediator ধরলে biasDAG আর backdoor criterion
“রোজ দেখে significant হলেই থামি”Peeking-এ ভুল জয় বাড়েFixed horizon বা sequential সীমা
বানানো সংখ্যা, সাল বা paperএকটি ভুলেই সব উত্তরে সন্দেহউৎস বলুন, না জানলে স্বীকার

না জানলে — সৎভাবে উত্তর

আংশিক জানলে বলুন “পুরো নিশ্চিত নই; যা জানি, dual-এ ডেটা শুধু dot product হিসেবে আসে, এর বাইরে অনুমান করব না।” সূত্র মনে না থাকলে সংজ্ঞা থেকে ধাপে ধাপে বের করুন। নিজের ভুল ধরা পড়লে “আগে যা বলেছি, তা ভুল; ঠিক হলো …” বলুন। Library-র parameter, সাল বা benchmark-এর সংখ্যা কখনো বানাবেন না।

AI-এর যুগে — AI-কে কড়া পরীক্ষক বানান

AI সহকারী প্রশ্ন বানাতে আর উত্তর যাচাই করাতে কাজে লাগে, কিন্তু ML-এ তারা প্রায়ই পুরোনো library API দেয় (scikit-learn-এর বাদ পড়া parameter, পুরোনো XGBoost বা LightGBM argument, pandas-এর append), এমন function বা hyperparameter বানায় যা নেই, test set দেখে tuning করে বা target-এর তথ্য leak করে, training-এর বা একটি split-এর metric-কে চূড়ান্ত বলে, imbalance আর calibration উপেক্ষা করে, SHAP-কে causal পড়ে, আর বিশ্বাসযোগ্য কিন্তু ভুল derivation লেখে (চিহ্ন উল্টো, শর্ত বাদ)। তাই তাকে পরীক্ষক বানান, আর প্রতিটি দাবি নিজের version-এর official docs আর নিজের run-এ মেলান; ব্যক্তিগত ডেটা কখনো পেস্ট করবেন না।

তুমি একজন কড়া পরীক্ষক, বিষয় Machine Learning (তত্ত্ব আর প্রয়োগ)। আমি Python 3.14, NumPy 2.4, pandas 3.0 আর scikit-learn 1.8 দিয়ে পড়ছি। নিচে একটি ১০ নম্বরের প্রশ্ন আর আমার উত্তর দিলাম। [প্রশ্ন] [আমার উত্তর — derivation-এর প্রতিটি ধাপ, ছক থাকলে লিখিত বর্ণনা] ১. মার্ক-স্কিম বানাও: দাবি ও অনুমান, ধাপ, যাচাই, সীমা — কোনটিতে কত। তারপর নম্বর দাও। ২. Derivation-এর প্রতিটি সমান-চিহ্ন আলাদা করে যাচাই করো; কোন ধাপে চিহ্ন, শর্ত বা প্রত্যাশা ভুল, লাইন ধরে বলো। ৩. কোনো অনুমান বাদ পড়েছে কি না দেখো (i.i.d., exchangeability, convexity, Gaussian noise, parallel trends). ৪. একটি ছোট সংখ্যার উদাহরণ দাও যেখানে আমার সূত্র নিজে মিলিয়ে দেখতে পারি; উত্তরটি নিজে হিসাব করে দিও না। ৫. কোনো library API এই version-এ পুরোনো বা অস্তিত্বহীন হলে বলো, আর কোন official docs-এর পাতায় দেখব তার নাম দাও। ৬. Leakage, test দেখে বাছাই, বা correlation-কে causation বলা আছে কি না দেখো। ৭. নিশ্চিত না হলে "নিশ্চিত নই" লেখো; কোনো paper, সাল বা সংখ্যা বানাবে না। ৮. শেষে "কোন শর্তে?" আর "কীভাবে যাচাই করবেন?" ধরনের তিনটি ভাইভা প্রশ্ন দাও, উত্তর ছাড়া।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমএকটি checkout-বদলের A/B test-এর ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. Hypothesis আর একটি primary metric লিখে রাখা
  2. MDE, α আর power থেকে sample size আর সময় ঠিক করা
  3. Randomization চালু করে sample ratio mismatch যাচাই
  4. আগে ঠিক করা দিন পর্যন্ত না থেমে চালানো
  5. আগে লেখা test দিয়ে বিশ্লেষণ (দরকারে CUPED), interval-সহ
  6. সিদ্ধান্তের memo, সীমা আর পরের পরীক্ষাসহ

(সহজ) ২০টি বিন্দুতে মাত্রা ৯-এর polynomial fit করা হলো; training ভুল প্রায় শূন্য, test ভুল বেশি। একই x-পরিসরে training ডেটা দশগুণ করলে test ভুলের কোন অংশ মূলত কমবে?

  • Irreducible noise
  • Bias²
  • Variance
  • কোনো অংশই নয়

(মাঝারি) Linear regression-এ noise-এর standard deviation σ = ২, আর প্রতিটি coefficient-এর prior N(০, ০.৫²)। এই MAP অনুমান কোন λ-এর ridge-এর সমান (লক্ষ্য ‖y − Xw‖² + λ‖w‖²)?

  • ০.২৫
  • ৪
  • ০.০৬২৫
  • ১৬

(মাঝারি) একটি classifier-এর প্রতিটি সম্ভাবনা p-কে p³ দিয়ে বদলানো হলো। একই test set-এ কী হবে?

  • AUC আর Brier দুটিই একই থাকবে
  • AUC একই, কিন্তু Brier আর ECE বদলাবে
  • AUC কমবে, Brier একই থাকবে
  • AUC বাড়বে, calibration একই থাকবে

(মাঝারি) Soft-margin SVM-এর সমাধানে একটি training বিন্দুর α = ০.৩, আর C = ১. KKT অনুযায়ী বিন্দুটি কোথায়?

  • ঠিক margin-এর ওপর, y·f(x) = ১
  • Margin-এর বাইরে, সমাধানে ভূমিকা নেই
  • Margin-এর ভেতরে, ξ > ০
  • তথ্য যথেষ্ট নয়

(মাঝারি) Split conformal-এ calibration-এর score ১৯টি, লক্ষ্য coverage ৯০% (α = ০.১)। সাজানো score-এর কততম মানটি q̂ হবে?

  • ১৭তম
  • ১৮তম
  • ১৯তম
  • ২০তম, অর্থাৎ অসীম পরিসর

(কঠিন) Coupon (T) খরচ (Y) বাড়ায় কি না জানতে চান। আনুগত্য (L) দুটিকেই প্রভাবিত করে, আর “review লেখা” (R) T আর Y দুটির ফল। কোন চলক-সেট ধরলে T-এর মোট প্রভাব ঠিক আসে?

  • কোনোটিই নয়
  • শুধু R
  • শুধু L
  • L আর R দুটিই

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব শব্দ এখানে একসাথে:

মনে রাখুন

  1. কাঠামোই নম্বর: দাবি → অনুমান → কারণসহ ধাপ → ছোট সংখ্যায় যাচাই → সীমা; তুলনায় একই সারির ছক আর “কখন কোনটি”.
  2. Derivation-এর চাবি: bias–variance-এ cross term শূন্য, ridge-এ λ = σ²/τ², SVM-এ α ≤ C আর ∑αiyi = ০, EM-এ ℓ ≥ ELBO আর E-step-এ সমতা, conformal-এ k/(n + ১)।
  3. শর্ত ছাড়া দাবি নয়: conformal exchangeability-তে, DiD parallel trends-এ, CUPED pre-period চলকে, backdoor সেট বংশধর ছাড়া।
  4. নকশার প্রশ্নে স্তর আর সীমা: monitoring-এ চার স্তর, label delay আর ভুয়া alert-এর হিসাব; A/B-তে আগে n, পরে একবার বিশ্লেষণ।
  5. ভাইভায় তিন বাক্য: কী → কোন শর্তে → কখন ভাঙে বা কীভাবে যাচাই; না জানলে সৎভাবে বলুন, কিছু বানাবেন না।

পরের পর্বে: পর্ব ৭৬ (ML coding ইন্টারভিউ — NumPy দিয়ে algorithm, pandas আর scikit-learn)-এ এখানকার ধারণাগুলো কোড লেখা, leakage খোঁজা আর ডিবাগিংয়ে কাজে লাগবে।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান