Linear Regression: prediction-এর 'Hello World' (House Price দিয়ে)

প্রথম trained model (Series 05, Episode 02)

🟢 BEGINNER Series 05 — Classical Machine Learning Episode 02 / 11

📑 এই পর্বে যা যা আছে

🏠 ১. গল্প: বাড়ির দাম কে ঠিক করে?

Rahim ঢাকায় একটা flat কিনতে চায়। bikroy আর property site ঘুরে সে confused — একই এলাকায় কেন একটার দাম ৮০ লাখ, আরেকটার ১.২ কোটি? Nila (data scientist) বলল — "তুই ভাব, দাম আসলে কয়েকটা জিনিসের উপর নির্ভর করে: আয়তন (sqft), bedroom সংখ্যা, এলাকা, বয়স। যদি আমরা অনেক বাড়ির এই তথ্য আর তাদের দাম জোগাড় করি, একটা model শিখতে পারে — কোন feature দাম কতটা বাড়ায়/কমায়।"

Rahim: "কিন্তু দাম তো একটা সংখ্যা — হ্যাঁ/না নয়। আগের churn উদাহরণে তো উত্তর ছিল Yes/No।"

Nila: "ঠিক ধরেছিস। যখন উত্তর একটা সংখ্যা (continuous value), সেটা Regression। আর সবচেয়ে সহজ, সবচেয়ে ভিত্তিমূলক regression হলো Linear Regression — ML-এর 'Hello World'।"

২. সমস্যা: একটা সংখ্যা predict করা

গত episode-এ শিখেছি — supervised learning-এর দুই ভাগ। এবার আমরা Regression দিকটা ধরছি: input features দিয়ে একটা সংখ্যা predict করা। উদাহরণ:

Regression = continuous সংখ্যা predict। Classification = category/label predict। একই সমস্যা কখনো দুইভাবে দেখা যায়: "দাম কত?" (regression) বনাম "দাম কি ১ কোটির বেশি?" (classification)।

📈 ৩. Linear Regression আসলে কী? (৩ স্তরে)

Level 1 — intuition: একটা graph-এ অনেকগুলো বিন্দু (প্রতিটা একটা বাড়ি: x = আয়তন, y = দাম) ছড়ানো আছে। এই বিন্দুগুলোর মাঝ দিয়ে একটা সোজা রেখা (straight line) টানুন যেটা সব বিন্দুর যতটা সম্ভব কাছ দিয়ে যায়। নতুন একটা বাড়ির আয়তন দিলে, সেই রেখা ধরে দাম পড়ে নেওয়াই prediction।
Level 2 — technical: Linear Regression একটা function শেখে: y = w1·x1 + w2·x2 + ... + b। এখানে x-গুলো feature, w-গুলো weight (coefficient — প্রতিটা feature-এর গুরুত্ব), আর b হলো bias/intercept। Training মানে এমন wb খুঁজে বের করা যাতে prediction আর আসল দামের গড় ভুল (error) সবচেয়ে কম হয়।
Level 3 — Engineer perspective: Linear Regression প্রায়ই আপনার প্রথম baseline। এটা দ্রুত, ব্যাখ্যাযোগ্য (কোন feature দাম কতটা বাড়ায় সরাসরি বলা যায়), আর হালকা। একজন ভালো engineer আগে এই simple baseline বানায়, তারপর জটিল model (Random Forest, XGBoost) এর চেয়ে ভালো করছে কিনা মাপে। জটিলতা তখনই, যখন সেটা সত্যিই value দেয়।

🖼️ ৪. Visual: সেই বিখ্যাত "best-fit line"

দাম (y) | • | • / | • / | • / • ← best-fit line | • / • | • / • | • / • | / • +--------------------------------------- আয়তন (x, sqft) নতুন আয়তন x=1500 দিলে → line-এ গিয়ে y (দাম) পড়ে নিই

Model-এর কাজ এমন একটা line খোঁজা যেখানে প্রতিটা বিন্দু থেকে line পর্যন্ত উল্লম্ব দূরত্ব (এটাই error) সব মিলিয়ে সবচেয়ে ছোট।

🎯 ৫. Model কীভাবে line টানে (intuition)

Model শুরুতে যেকোনো একটা line ধরে (random w, b)। তারপর মাপে — এই line দিয়ে prediction কতটা ভুল হচ্ছে। এই ভুল মাপার নাম loss function; regression-এ সাধারণত Mean Squared Error (MSE)। এরপর line-টা একটু নাড়িয়ে error কমানোর চেষ্টা করে, বারবার — যতক্ষণ না error আর কমে। এই "ভুল থেকে শেখার" পদ্ধতির নাম Gradient Descent (Series 04-এ বিস্তারিত)।

সুখবর: scikit-learn-এর LinearRegression এই গণিতটা closed-form (Normal Equation) দিয়ে এক ধাপেই solve করে — আপনাকে gradient descent হাতে লিখতে হয় না। কিন্তু কী ঘটছে সেটা বোঝা জরুরি, কারণ Deep Learning-এ (Series 06) এই gradient descent-ই সবকিছুর ভিত্তি।

💻 ৬. কোড: scikit-learn দিয়ে House Price model (Project P2)

কেন scikit-learn? classical ML-এর standard; fit/predict একই API সব model-এ। চলুন Project P2 (House Price Prediction) শুরু করি:

# pip install scikit-learn pandas numpy import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_absolute_error, r2_score # ১. ডেটা (বাস্তবে bikroy/property CSV থেকে আসবে) df = pd.DataFrame({ "sqft": [850, 1200, 1500, 950, 1800, 1100, 1650, 2000, 750, 1350], "bedrooms": [2, 3, 3, 2, 4, 2, 3, 4, 1, 3], "age_yrs": [10, 5, 2, 12, 1, 8, 3, 1, 15, 6], # দাম লাখ টাকায় "price": [55, 82, 110, 60, 140, 70, 118, 160, 42, 95], }) X = df[["sqft", "bedrooms", "age_yrs"]] y = df["price"] X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, random_state=42 ) # ২. Training — best-fit "hyperplane" খুঁজছে model = LinearRegression() model.fit(X_train, y_train) # ৩. Test set-এ prediction (inference) preds = model.predict(X_test) print("MAE (লাখ টাকা):", round(mean_absolute_error(y_test, preds), 2)) print("R2 score:", round(r2_score(y_test, preds), 3)) # ৪. নতুন একটা বাড়ি: 1400 sqft, 3 bed, 4 yrs new_house = pd.DataFrame( [[1400, 3, 4]], columns=["sqft", "bedrooms", "age_yrs"] ) print("অনুমানিত দাম (লাখ):", round(model.predict(new_house)[0], 1))
লক্ষণীয়: এই সিরিজে MAE/R² সংক্ষেপে দেখাচ্ছি — পরের episode (E03) পুরোপুরি regression evaluation নিয়ে, তখন MAE, MSE, RMSE, R² গভীরে বুঝব।

🧮 ৭. Multiple features — সোজা লাইন থেকে plane

একটা feature (শুধু sqft) হলে model একটা line। দুটো feature (sqft + bedrooms) হলে একটা plane। তিন বা তার বেশি হলে একটা hyperplane — যেটা কল্পনা করা কঠিন, কিন্তু গণিত একই: price = w1·sqft + w2·bedrooms + w3·age + b। এটাকে বলে Multiple Linear Regression, আর বাস্তবে প্রায় সবসময় এটাই ব্যবহার হয়।

🔍 ৮. Coefficient পড়া: model কী শিখল

Linear Regression-এর সবচেয়ে বড় সুবিধা — এটা interpretable। কী শিখল দেখা যায়:

for name, coef in zip(X.columns, model.coef_): print(f"{name}: {coef:.2f}") print("intercept (b):", round(model.intercept_, 2)) # উদাহরণ output (আনুমানিক): # sqft: 0.06 <- প্রতি ১ sqft-এ দাম ~0.06 লাখ বাড়ে # bedrooms: 3.50 <- প্রতি bedroom-এ ~3.5 লাখ বাড়ে # age_yrs: -1.20 <- প্রতি বছর পুরনো হলে ~1.2 লাখ কমে (negative!)
age_yrs-এর coefficient negative — মানে বাড়ি যত পুরনো, দাম তত কম। Model এই সম্পর্ক data থেকে নিজে শিখেছে, কেউ বলে দেয়নি। এই ব্যাখ্যাযোগ্যতাই Boss/stakeholder-দের বোঝানোর সময় সোনার মতো কাজে দেয়।

📏 ৯. Linear Regression-এর assumptions

Interview-তে প্রায়ই আসে "assumptions of linear regression"। মূল কয়েকটা:

Must Know: linearity ও multicollinearity-র ধারণা। Good to Know: homoscedasticity, residual plot। Learn Later: এদের formal statistical test — junior চাকরির জন্য এখন লাগবে না। বাস্তবে সম্পর্ক non-linear হলে polynomial feature বা tree-based model (E06, E07) ভালো কাজ করে।

🇧🇩 ১০. বাংলাদেশের বাস্তব উদাহরণ

💼 ১১. Boss Question

Boss: "এই line টানা দিয়ে আমার কী লাভ?"

উত্তর: ধরুন আপনি property business-এ। এখন প্রতিটা flat-এর দাম ঠিক করতে একজন অভিজ্ঞ লোক ২ ঘণ্টা সময় নেয় এবং মেজাজ অনুযায়ী ভুল করে। একটা Linear Regression model সেকেন্ডে হাজারটা flat-এর consistent, ব্যাখ্যাযোগ্য price estimate দেবে — আর কেন এই দাম, সেটাও coefficient দেখিয়ে justify করা যাবে। business value: দ্রুত, সস্তা, স্বচ্ছ pricing।

🔎 ১২. Job Requirement Decoder

JD: "Experience building regression models (e.g., Linear Regression) with scikit-learn."

১. কী বোঝায়? সংখ্যা predict করার model বানাতে ও ব্যাখ্যা করতে পারা।
২. কেন চায়? pricing, demand, forecasting — সব business-এই regression-এর দরকার হয়।
৩. কোন সমস্যা সমাধান করে? continuous outcome অনুমান (কত টাকা, কত unit)।
৪. junior-এর কী জানা লাগে? fit/predict, coefficient পড়া, MAE/R² দিয়ে মাপা, assumption-এর মূল ধারণা।
৫. এখনই master লাগবে না: regularization-এর গভীর গণিত (Ridge/Lasso নাম জানলেই যথেষ্ট এখন), statistical inference।
৬. GitHub-এ কীভাবে দেখাবে? House Price notebook — EDA → model → coefficient interpretation → error metric, পরিষ্কার README।
৭. Interview: "Assumptions of linear regression?", "Coefficient কী বোঝায়?", "Regression vs classification?"

⚠️ ১৩. সাধারণ ভুল

ভুল ১: Classification সমস্যায় Linear Regression লাগানো → ঠিক: Yes/No হলে Logistic Regression (E04)।

ভুল ২: feature-এর scale ভুলে যাওয়া → একটা feature ০-১, আরেকটা ০-২০০০ হলে interpretation ঘোলাটে; scaling সাহায্য করে (Series 03)।

ভুল ৩: "R² বেশি মানেই ভালো" — training R² বেশি কিন্তু test R² কম হলে overfitting (E08)।

ভুল ৪: non-linear সম্পর্কে জোর করে straight line — তখন model খারাপ করবে; feature transform বা অন্য model দরকার।

ভুল ৫: outlier উপেক্ষা — একটা ভুল entry (১০০ কোটি দাম) পুরো line কে টেনে নষ্ট করে দিতে পারে।

🎤 ১৪. Interview Prep

প্র: Linear Regression কী শেখে?
উ: প্রতিটা feature-এর weight (coefficient) আর একটা intercept, যাতে predicted ও actual-এর MSE সবচেয়ে কম হয়।

প্র: Coefficient negative হলে কী মানে?
উ: ওই feature বাড়লে target কমে (যেমন বাড়ির বয়স বাড়লে দাম কমে)।

প্র: Linear Regression-এর মূল assumption?
উ: linearity, independence, homoscedasticity, low multicollinearity।

প্র: কখন Linear Regression খারাপ করে?
উ: সম্পর্ক strongly non-linear হলে, বা outlier বেশি থাকলে।

প্র: MSE loss কেন?
উ: বড় ভুলকে বেশি শাস্তি দেয় (বর্গ করার কারণে) এবং গাণিতিকভাবে সহজে minimize করা যায়।

✍️ ১৫. হাতে-কলমে

১. উপরের House Price কোডটা চালান। তারপর dataset-এ আরও ৫টা বাড়ির (কাল্পনিক) row যোগ করুন এবং দেখুন R² বদলায় কিনা।
২. শুধু sqft feature দিয়ে model train করুন (একটা feature)। তারপর সব feature দিয়ে। MAE কি কমল?
৩. model.coef_ ছাপান — কোন feature দাম সবচেয়ে বেশি প্রভাবিত করে বলুন।

লক্ষ্য: feature বাড়লে কীভাবে prediction উন্নত হয়, নিজের চোখে দেখা।

🚀 ১৬. Project Connection ও সারসংক্ষেপ

এটা ছিল আমাদের standalone Project P2 (House Price Prediction)-এর শুরু — portfolio-র প্রথম regression project। পরের কয়েক episode-এ এই model-কেই আমরা ভালোভাবে evaluate (E03), তারপর আরও শক্তিশালী model (E06, E07) দিয়ে improve করব। আমাদের flagship Career Assistant-এও regression লাগবে — যেমন একটা role-এর expected salary range অনুমান।

এই Episode-এ শিখলাম:

✓ Regression = সংখ্যা predict; Linear Regression হলো এর সবচেয়ে সহজ রূপ ও প্রথম baseline
✓ Model শেখে y = w1·x1 + ... + b — best-fit line/hyperplane
✓ Training = MSE সবচেয়ে কম করা (gradient descent/normal equation)
✓ scikit-learn-এ LinearRegression().fit().predict() — Project P2 শুরু
✓ Coefficient পড়ে model কী শিখল বোঝা যায় (interpretable)
✓ মূল assumption ও কখন এটা খারাপ করে
✓ single vs multiple feature — line → hyperplane
পরবর্তী Episode: "model ভালো হলো কিনা কীভাবে বুঝব?" — Regression Evaluation। MAE, MSE, RMSE, R² — কোনটা কী বলে, আর কখন কোনটা দেখতে হয়।
© 2025 Sheikh Thanbir Alam. All Rights Reserved. thanbirtamim.github.io
এই লেখা মূল লেখকের সম্পত্তি — লিখিত অনুমতি ছাড়া কপি করে অন্য কোনো ওয়েবসাইট, ব্লগ, বই বা প্ল্যাটফর্মে প্রকাশ/বিতরণ করা কঠোরভাবে নিষিদ্ধ। Content may not be copied or republished without permission.