Home »
Blog »
AI/ML Engineer সিরিজ » Series 05 » Episode 04
Logistic Regression: 'হ্যাঁ/না' prediction (Customer Churn দিয়ে)
প্রথম classifier (Series 05, Episode 04)
🟢 BEGINNER
Series 05 — Classical Machine Learning
Episode 04 / 11
📑 এই পর্বে যা যা আছে
- ১. গল্প: Rahim-এর সেই আসল সমস্যা ফিরে এলো
- ২. সমস্যা: "হ্যাঁ/না" কীভাবে predict করি?
- ৩. কেন Linear Regression এখানে ফেল করে
- ৪. Logistic Regression কী? (৩ স্তরে)
- ৫. Sigmoid — সংখ্যাকে probability-তে চাপা
- ৬. Visual: line নয়, S-curve
- ৭. Decision threshold — probability থেকে সিদ্ধান্ত
- ৮. কোড: Customer Churn model (Project P3)
- ৯. probability পড়া ও threshold টিউন
- ১০. বাংলাদেশের বাস্তব উদাহরণ
- ১১. Boss Question
- ১২. Job Requirement Decoder
- ১৩. সাধারণ ভুল
- ১৪. Interview Prep
- ১৫. হাতে-কলমে
- ১৬. Project Connection ও সারসংক্ষেপ
🧩 ১. গল্প: Rahim-এর সেই আসল সমস্যা ফিরে এলো
মনে আছে E01-এর সেই সমস্যা? "কোন customer পরের মাসে চলে যাবে (churn করবে)?" — এটা তো সংখ্যা নয়,
উত্তর হ্যাঁ/না। এটাই Classification। GP/Robi-র মতো টেলকোতে এটা
সবচেয়ে দামি সমস্যা: কারণ একজন পুরনো customer ধরে রাখা নতুন একজন আনার চেয়ে ৫ গুণ সস্তা।
Rahim: "আমি তো Linear Regression শিখলাম। এটাই লাগিয়ে দিই — churn=1, no-churn=0 predict করব?"
Arif: "থাম! Linear Regression সংখ্যা দেয় — সেটা ১.৮ বা −০.৩ও হতে পারে। কিন্তু 'churn করবে কিনা'
তো probability, ০ থেকে ১-এর মধ্যে থাকা উচিত। এখানেই Logistic Regression —
নাম regression হলেও কাজ classification।"
❓ ২. সমস্যা: "হ্যাঁ/না" কীভাবে predict করি?
Classification-এ output একটা category। সবচেয়ে সাধারণ — binary classification
(দুইটা class): churn/no-churn, spam/not-spam, fraud/legit, রোগ আছে/নেই। আমরা চাই model শুধু
"হ্যাঁ" না বলে বলুক "৮৭% সম্ভাবনায় হ্যাঁ" — কারণ probability দিলে আমরা সিদ্ধান্তের
threshold নিজেরা ঠিক করতে পারি।
দুই ধরনের supervised সমস্যা মনে রাখুন: Regression → সংখ্যা (E02–E03); Classification → class/probability
(এই episode থেকে)। Logistic Regression হলো classification-এর সবচেয়ে সহজ, ভিত্তিমূলক model।
🚫 ৩. কেন Linear Regression এখানে ফেল করে
- সীমার বাইরে যায়: Linear output −∞ থেকে +∞; কিন্তু probability ০–১-এর মধ্যে থাকতে হবে। ১.৮ বা −০.৩ probability অর্থহীন।
- outlier-এ line হেলে যায়: একটা চরম মান পুরো decision boundary টেনে নষ্ট করে।
- ভুল loss: classification-এ MSE নয়, log-loss (cross-entropy) সঠিক।
Logistic Regression এই সমস্যাগুলো সমাধান করে — একটা sigmoid function দিয়ে
যেকোনো সংখ্যাকে ০–১ probability-তে চেপে দেয়।
🧠 ৪. Logistic Regression কী? (৩ স্তরে)
Level 1 — intuition: Linear Regression একটা সংখ্যা বের করে (score)। Logistic Regression
সেই score-টাকে একটা "চাপ দেওয়া" function দিয়ে ০ থেকে ১-এর মধ্যে probability-তে রূপান্তর করে।
৮৭% হলে বলি "খুব সম্ভবত churn করবে"।
Level 2 — technical: প্রথমে linear score z = w1·x1 + ... + b বের করে,
তারপর probability = sigmoid(z) = 1 / (1 + e^(-z))। Training-এ log-loss (cross-entropy)
minimize করা হয়, যাতে model সঠিক class-কে বেশি probability দেয়।
Level 3 — Engineer perspective: Logistic Regression দ্রুত, interpretable, আর অসাধারণ
baseline classifier। বাস্তব fraud/churn system-এ প্রায়ই প্রথম model এটাই। সবচেয়ে বড় সুবিধা —
এটা probability দেয়, তাই business ঠিক করতে পারে "কত% ঝুঁকির উপরে action নেব"। আর
coefficient দেখে বলা যায় কোন feature ঝুঁকি বাড়ায়।
〰️ ৫. Sigmoid — সংখ্যাকে probability-তে চাপা
sigmoid(z) = 1 / (1 + e^(-z))
z = -5 → 0.007 (প্রায় "না")
z = 0 → 0.500 (ঠিক মাঝখানে)
z = +5 → 0.993 (প্রায় "হ্যাঁ")
যত বড় positive z, তত ১-এর কাছে; যত বড় negative, তত ০-এর কাছে।
এই function-ই জাদু: linear score যত বড়/ছোট-ই হোক, output সবসময় ০ আর ১-এর মধ্যে —
একটা বৈধ probability।
🖼️ ৬. Visual: line নয়, S-curve
probability
1.0 | _____•••••••
| __/
0.5 |- - - - - - - - -•- - - - - - - - - ← threshold
| __/
0.0 |••••••_____/
+----------------------------------- feature (z)
"না" এলাকা | "হ্যাঁ" এলাকা
Linear Regression-এর সোজা লাইনের বদলে Logistic-এর এই মসৃণ S-curve (sigmoid)।
মাঝখানে (0.5) দ্রুত বদলায়, দুই প্রান্তে সমতল।
🎚️ ৭. Decision threshold — probability থেকে সিদ্ধান্ত
Model probability দেয় (যেমন 0.72)। কিন্তু শেষ সিদ্ধান্ত "churn / no-churn" — এর জন্য একটা
threshold লাগে। default 0.5: probability ≥ 0.5 হলে "হ্যাঁ"। কিন্তু এটা business
সিদ্ধান্ত!
Churn-এ retention offer সস্তা হলে threshold কমিয়ে 0.3 করুন — বেশি মানুষকে "ঝুঁকিপূর্ণ" ধরে অফার দিন
(recall বাড়ে)। fraud-এ ভুল ব্লক করলে গ্রাহক রাগে — threshold বাড়ান (precision বাড়ে)। এই trade-off
পরের episode (E05)-এর মূল বিষয়।
💻 ৮. কোড: Customer Churn model (Project P3)
কেন এখানে scikit-learn? LogisticRegression একই fit/predict
API, তার সাথে predict_proba দিয়ে probability — production-এ ঠিক যা লাগে:
# pip install scikit-learn pandas
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix
# ১. Telco churn-এর মতো ছোট ডেটা (1 = churn, 0 = stayed)
df = pd.DataFrame({
"tenure_months": [1, 24, 3, 40, 2, 30, 5, 60, 1, 18],
"monthly_bill": [70, 45, 90, 40, 85, 42, 88, 38, 95, 50],
"support_calls": [4, 0, 5, 0, 6, 1, 4, 0, 7, 1],
"churn": [1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
})
X = df[["tenure_months", "monthly_bill", "support_calls"]]
y = df["churn"]
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42, stratify=y
)
# ২. Scaling — Logistic Regression scale-sensitive; feature-দের সমান করি
scaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train) # fit শুধু train-এ (leakage এড়াতে)
X_test_s = scaler.transform(X_test) # test শুধু transform
# ৩. Training
clf = LogisticRegression()
clf.fit(X_train_s, y_train)
# ৪. Prediction ও probability
preds = clf.predict(X_test_s)
probas = clf.predict_proba(X_test_s)[:, 1] # class=1 (churn)-এর probability
print("Accuracy:", accuracy_score(y_test, preds))
print("Churn probabilities:", probas.round(2))
print("Confusion matrix:\n", confusion_matrix(y_test, preds))
খেয়াল করুন stratify=y — train/test দুই ভাগেই churn-এর অনুপাত একই রাখে। আর
scaler.fit শুধু train-এ (test-এ শুধু transform) — এটা data leakage
এড়ানোর গুরুত্বপূর্ণ অভ্যাস (Series 03-এ শেখা, E08-এ আবার আসবে)।
🔍 ৯. probability পড়া ও threshold টিউন
import numpy as np
# default threshold 0.5-এর বদলে custom threshold
threshold = 0.3 # churn ধরার ব্যাপারে বেশি সতর্ক
custom_preds = (probas >= threshold).astype(int)
print("threshold 0.3-এ prediction:", custom_preds)
# কোন feature ঝুঁকি বাড়ায়? coefficient দেখুন
for name, coef in zip(X.columns, clf.coef_[0]):
print(f"{name}: {coef:.2f}")
# support_calls positive হলে: বেশি support call = বেশি churn ঝুঁকি
একই model, ভিন্ন threshold, ভিন্ন business আচরণ — model retrain না করেই। এটাই probability output-এর
শক্তি। কোন threshold ভালো, সেটা E05-এর precision/recall দিয়ে বেছে নেব।
🇧🇩 ১০. বাংলাদেশের বাস্তব উদাহরণ
- GP / Robi / Banglalink: prepaid subscriber churn prediction → targeted recharge offer।
- bKash / Nagad: transaction fraud (fraud/legit) — probability দিয়ে risk score।
- Daraz: কোন order return/cancel হবে তার prediction।
- Bank/NBFI: loan default হবে কিনা (credit risk) — একটা classic logistic use-case।
💼 ১১. Boss Question
Boss: "churn 'হ্যাঁ/না' জেনে আমি কী করব?"
উত্তর: শুধু হ্যাঁ/না নয় — model প্রতিটা customer-কে একটা churn probability দেয়।
আপনি top 5% ঝুঁকিপূর্ণ customer-কে retention offer পাঠাবেন, বাকিদের নয়। ফলে marketing budget সঠিক
জায়গায় খরচ হয়, retention বাড়ে, revenue বাঁচে। ১ লাখ subscriber-এর মধ্যে ২% churn ঠেকাতে পারলেও
মাসে বড় অঙ্কের টাকা — এটাই business value।
🔎 ১২. Job Requirement Decoder
JD: "Build classification models (Logistic Regression, etc.) for problems like churn/fraud prediction."
১. কী বোঝায়? category/probability predict করার model বানানো ও ব্যাখ্যা করা।
২. কেন চায়? churn, fraud, risk — প্রায় সব company-র core সমস্যা classification।
৩. কোন সমস্যা সমাধান করে? "কে/কোনটা এই class-এ পড়বে" — সিদ্ধান্তের ভিত্তি।
৪. junior-এর কী জানা লাগে? Logistic Regression, sigmoid, probability vs class, threshold, predict_proba, scaling ও leakage সতর্কতা।
৫. এখনই master লাগবে না: log-loss-এর derivation, multinomial/softmax-এর গভীর গণিত।
৬. GitHub-এ কীভাবে দেখাবে? Churn notebook: preprocessing → logistic model → confusion matrix → threshold-এর প্রভাব।
৭. Interview: "Classification-এ Linear Regression কেন নয়?", "Sigmoid কী করে?", "Threshold কীভাবে বাছবেন?"
⚠️ ১৩. সাধারণ ভুল
ভুল ১: "Logistic Regression একটা regression algorithm" → ঠিক: নাম regression, কাজ classification।
ভুল ২: scaling না করা → Logistic Regression feature scale-sensitive; বড় স্কেলের feature অন্যায় প্রাধান্য পায়।
ভুল ৩: সবসময় threshold 0.5 ধরে নেওয়া → business-এ optimal threshold ভিন্ন হতে পারে।
ভুল ৪: imbalanced churn data-তে শুধু accuracy দেখা → ৯৫% "no-churn" হলে সব "no" বলেও ৯৫% accuracy! (E05-এ সমাধান)।
ভুল ৫: scaler.fit পুরো data-তে (test সহ) → data leakage; শুধু train-এ fit করুন।
🎤 ১৪. Interview Prep
প্র: Classification-এ Linear Regression কেন ব্যবহার করি না?
উ: output সীমাহীন (০–১ নয়), outlier-এ boundary হেলে যায়, ভুল loss; probability দরকার।
প্র: Sigmoid কী করে?
উ: যেকোনো real সংখ্যাকে ০–১ probability-তে map করে (S-curve)।
প্র: predict আর predict_proba-র পার্থক্য?
উ: predict চূড়ান্ত class দেয় (threshold প্রয়োগ করে); predict_proba কাঁচা probability দেয়।
প্র: Logistic Regression কি non-linear সম্পর্ক ধরতে পারে?
উ: মূলত linear decision boundary; feature engineering (polynomial) ছাড়া strongly non-linear ধরতে পারে না।
প্র: Threshold কীভাবে বাছেন?
উ: precision/recall trade-off ও business cost দেখে (E05); default 0.5 বাধ্যতামূলক নয়।
✍️ ১৫. হাতে-কলমে
১. উপরের churn কোড চালান। predict_proba দিয়ে প্রতিটা test customer-এর churn probability ছাপান।
২. threshold 0.5 → 0.3 → 0.7 বদলে দেখুন কতজন "churn" ধরা পড়ে — এটাই recall/precision trade-off-এর হাতেকলমে অনুভব।
৩. clf.coef_ দেখে বলুন কোন feature churn ঝুঁকি সবচেয়ে বাড়ায়। এটা Boss-কে বোঝানোর মতো insight।
🚀 ১৬. Project Connection ও সারসংক্ষেপ
এটা আমাদের Project P3 (Customer Churn Prediction)-এর শুরু — portfolio-র প্রথম
classification project। পরের episode-গুলোতে এটাকেই আমরা সঠিকভাবে evaluate (E05), তারপর Random Forest
(E06) ও XGBoost (E07) দিয়ে improve করব। flagship Career Assistant-এও classification লাগবে —
"এই job description junior না senior role?" ঠিক এই ধরনের binary/multi-class সমস্যা।
এই Episode-এ শিখলাম:
✓ Classification = category/probability predict; churn হলো ক্লাসিক binary সমস্যা
✓ Linear Regression classification-এ কেন ফেল করে
✓ Logistic Regression: linear score → sigmoid → probability (নাম regression, কাজ classification)
✓ Sigmoid S-curve যেকোনো সংখ্যাকে ০–১-এ চাপে; threshold দিয়ে সিদ্ধান্ত
✓ scikit-learn-এ predict_proba, scaling, stratify, leakage সতর্কতা — Project P3 শুরু
✓ coefficient পড়ে কোন feature ঝুঁকি বাড়ায় বোঝা যায়
পরবর্তী Episode: "Accuracy কেন মিথ্যা বলে?" — Classification Evaluation। Precision, Recall,
F1, ROC-AUC, Confusion Matrix আর imbalanced data-র ভয়ংকর ফাঁদ।