লজিস্টিক রিগ্রেশন একটি Σταтистиকল টেকনিক যা বাইনারি আউটকাম প্রেডিক্ট করতে ব্যবহৃত হয়। এটি নতুন নয়—বর্তমানে ফাইন্যান্স, মেডিসিন, ক্রিমিনোলজি এবং অন্যান্য সোশ্যাল সায়েন্সে ব্যবহৃত হচ্ছে।
এই সেকশনে পাইথন দিয়ে লজিস্টিক রিগ্রেশন ইমপ্লিমেন্ট করা দেখানো হলো (R-ও দিয়ে করা যায়)।
ইনস্টলেশন
নিচের লাইব্রেরিগুলো ব্যবহার করা হবে:
- NumPy: न्यুমেরিক্যাল অ্যারে ও ম্যাট্রিক্স ডিফাইন করতে।
- Pandas: ডেটা হ্যান্ডল ও অপারেশনের জন্য।
- Statsmodels: প্যারামিটার এস্টিমেশন ও স্ট্যাটিস্টিক্যাল টেস্টিংয়ের জন্য।
- Pylab: প্লট জেনারেট করতে।
CLI-তে নিচের কমান্ড রান করে ইনস্টল করুন:
>pip install numpy pandas statsmodels
লজিস্টিক রিগ্রেশনের উদাহরণ ইউজ কেস
UCLA-এর (Institute for Digital Research and Education) লজিট রিগ্রেশন ডেটা ব্যবহার করব। CSV ফরম্যাটে ডেটা: binary.csv
এই ডেটা দিয়ে গ্রেজুয়েট স্কুলে অ্যাডমিশনকে প্রভাবিত করার ফ্যাক্টরগুলো বের করব।
প্রয়োজনীয় লাইব্রেরি ইম্পোর্ট ও ডেটাসেট লোড
import pandas as pd
import statsmodels.api as sm
import pylab as pl
import numpy as np
df = pd.read_csv('binary.csv')
# সরাসরি লিংক থেকে পড়তে চাইলে:
# df = pd.read_csv('https://stats.idre.ucla.edu/stat/data/binary.csv')
print(df.head())
আউটপুট
admit gre gpa rank 0 0 380 3.61 3 1 1 660 3.67 3 2 1 800 4.00 1 3 1 640 3.19 4 4 0 520 2.93 4
rank কলাম নেম pandas-এ মেথড নামের সাথে конфликт করতে পারে, তাই এটিকে prestige করে রিনেম করি:
df.columns = ["admit", "gre", "gpa", "prestige"] print(df.columns)
আউটপুট
Index(['admit', 'gre', 'gpa', 'prestige'], dtype='object')
ডেটা সারমারাইজ করা
print(df.describe())
আউটপুট
admit gre gpa prestige count 400.000000 400.000000 400.000000 400.00000 mean 0.317500 587.700000 3.389900 2.48500 std 0.466087 115.516536 0.380567 0.94446 min 0.000000 220.000000 2.260000 1.00000 25% 0.000000 520.000000 3.130000 2.00000 50% 0.000000 580.000000 3.395000 2.00000 75% 1.000000 660.000000 3.670000 3.00000 max 1.000000 800.000000 4.000000 4.00000
স্ট্যান্ডার্ড ডেভিয়েশন এবং ফ্রিকোয়েন্সি টেবিল
print(df.std())
admit 0.466087 gre 115.516536 gpa 0.380567 prestige 0.944460 dtype: float64
print(pd.crosstab(df['admit'], df['prestige'], rownames=['admit']))
prestige 1 2 3 4 admit 0 28 97 93 55 1 33 54 28 12
হিস্টোগ্রাম প্লট
df.hist() pl.show()
ডামি ভেরিয়েবল তৈরি (One-Hot Encoding)
dummy_ranks = pd.get_dummies(df['prestige'], prefix='prestige') print(dummy_ranks.head())
আউটপুট
prestige_1 prestige_2 prestige_3 prestige_4 0 0 0 1 0 1 0 0 1 0 2 1 0 0 0 3 0 0 0 1 4 0 0 0 1
ক্লিন ডেটাফ্রেম তৈরি
cols_to_keep = ['admit', 'gre', 'gpa'] data = df[cols_to_keep].join(dummy_ranks.ix[:, 'prestige_2':]) print(data.head())
আউটপুট
admit gre gpa prestige_2 prestige_3 prestige_4 0 0 380 3.61 0 1 0 1 1 660 3.67 0 1 0 2 1 800 4.00 0 0 0 3 1 640 3.19 0 0 1 4 0 520 2.93 0 0 1
রিগ্রেশন পারফর্ম করা
train_cols = data.columns[1:] # Index(['gre', 'gpa', 'prestige_2', 'prestige_3', 'prestige_4'], dtype=object) logit = sm.Logit(data['admit'], data[train_cols]) result = logit.fit()
আউটপুট
Optimization terminated successfully. Current function value: 0.573147 Iterations 6
রেজাল্ট ইন্টারপ্রিটেশন
print(result.summary2())
আউটপুট (সারাংশ)
Results: Logit
===============================================================
Model: Logit No. Iterations: 6.0000
Dependent Variable: admit Pseudo R-squared: 0.083
Date: 2019-03-03 14:16 AIC: 470.5175
No. Observations: 400 BIC: 494.4663
Df Model: 5 Log-Likelihood: -229.26
Df Residuals: 394 LL-Null: -249.99
Converged: 1.0000 Scale: 1.0000
----------------------------------------------------------------
Coef. Std.Err. z P>|z| [0.025 0.975]
----------------------------------------------------------------
gre 0.0023 0.0011 2.0699 0.0385 0.0001 0.0044
gpa 0.8040 0.3318 2.4231 0.0154 0.1537 1.4544
prestige_2 -0.6754 0.3165 -2.1342 0.0328 -1.2958 -0.0551
prestige_3 -1.3402 0.3453 -3.8812 0.0001 -2.0170 -0.6634
prestige_4 -1.5515 0.4178 -3.7131 0.0002 -2.3704 -0.7325
intercept -3.9900 1.1400 -3.5001 0.0005 -6.2242 -1.7557
============================================================
কনফিডেন্স ইন্টারভাল:
print(result.conf_int())
0 1 gre 0.000120 0.004409 gpa 0.153684 1.454391 prestige_2 -1.295751 -0.055135 prestige_3 -2.016992 -0.663416 prestige_4 -2.370399 -0.732529 intercept -6.224242 -1.755716
ফলাফল থেকে দেখা যায়, অ্যাডমিশন প্রোব্যাবিলিটি এবং আন্ডারগ্রেজুয়েট স্কুলের প্রেস্টিজের মধ্যে ইনভার্স রিলেশনশিপ রয়েছে। টপ র্যাঙ্কড কালেজের (prestige_1=True) ছাত্রদের গ্রেজুয়েট প্রোগ্রামে নেওয়ার সম্ভাবনা নিম্ন র্যাঙ্কড স্কুলের (prestige_3 বা prestige_4) ছাত্রদের চেয়ে বেশি।