کیمپس بھرتی: لاجسٹک ریگریشن کے ساتھ درجہ بندی کا مسئلہ

کیمپس بھرتی: لاجسٹک ریگریشن کے ساتھ درجہ بندی کا مسئلہ

ماخذ نوڈ: 1996810

تعارف

اس پروجیکٹ میں ہم ہندوستان کے ڈیٹا پر توجہ مرکوز کریں گے۔ اور ہمارا مقصد ایک تخلیق کرنا ہے۔ پیشن گوئی ماڈل، جیسے لاجسٹک ریگریشن، وغیرہ تاکہ جب ہم کسی امیدوار کی خصوصیات دیں تو ماڈل یہ پیشین گوئی کر سکے کہ آیا وہ بھرتی کریں گے۔

۔ ڈیٹاسیٹ ہندوستان میں بزنس اسکول کے پلیسمنٹ سیزن کے گرد گھومتا ہے۔ ڈیٹا سیٹ میں امیدواروں پر مختلف عوامل ہوتے ہیں، جیسے کام کا تجربہ، امتحان کا فیصد، وغیرہ۔ آخر میں، اس میں بھرتی کی حیثیت اور معاوضے کی تفصیلات شامل ہیں۔

لاجسٹک ریگریشن کے ساتھ ڈیٹا سائنس کا مسئلہ

کیمپس بھرتی انٹرن شپ اور داخلہ سطح کے عہدوں کے لیے نوجوان ٹیلنٹ کو تلاش کرنے، مشغول کرنے اور ان کی خدمات حاصل کرنے کی حکمت عملی ہے۔ اس میں اکثر یونیورسٹی کے کیرئیر سروسز سینٹرز کے ساتھ کام کرنا اور کالج کے طلباء اور حالیہ گریجویٹس کے ساتھ ذاتی طور پر ملنے کے لیے کیریئر میلوں میں شرکت کرنا شامل ہوتا ہے۔

اس مضمون کے ایک حصے کے طور پر شائع کیا گیا تھا۔ ڈیٹا سائنس بلاگتھون۔

کی میز کے مندرجات

  1. مسئلے کو حل کرنے میں شامل اقدامات
  2. ڈیٹا تیار کریں
  3. ایک لاجسٹک ریگریشن ماڈل بنائیں
  4. لاجسٹک ریگریشن ماڈل کے نتائج
  5. نتیجہ

مسئلے کو حل کرنے میں شامل اقدامات

اس مضمون میں، ہم اس ڈیٹاسیٹ کو درآمد کریں گے، اسے صاف کریں گے، اور پھر اسے ایک لاجسٹک ریگریشن ماڈل بنانے کے لیے تیار کریں گے۔ یہاں ہمارے مقاصد درج ذیل ہیں:

سب سے پہلے، ہم اپنا ڈیٹا سیٹ تیار کرنے جا رہے ہیں۔ بائنری درجہ بندی. اب میرا کیا مطلب ہے؟ جب ہم ایک مسلسل قیمت کی پیشن گوئی کرنے کی کوشش کرتے ہیں، جیسے کہ ایک اپارٹمنٹ کی قیمت، یہ صفر اور کئی ملین ڈالر کے درمیان کوئی بھی نمبر ہو سکتا ہے۔ ہم اسے رجعت کا مسئلہ کہتے ہیں۔

لیکن اس منصوبے میں، چیزیں تھوڑی مختلف ہیں. ایک مسلسل قدر کی پیشن گوئی کرنے کے بجائے، ہمارے پاس مجرد گروپس یا کلاسز ہیں جن کے درمیان ہم پیشین گوئی کرنے کی کوشش کر رہے ہیں۔ لہذا اسے درجہ بندی کا مسئلہ کہا جاتا ہے، اور کیونکہ ہمارے پروجیکٹ میں، ہمارے پاس صرف دو گروپ ہوں گے جن میں سے ہم انتخاب کرنے کی کوشش کر رہے ہیں، جو کہ اسے بائنری درجہ بندی بناتا ہے۔

دوسرا مقصد بھرتی کی پیشن گوئی کرنے کے لیے ایک لاجسٹک ریگریشن ماڈل بنانا ہے۔ اور ہمارا تیسرا مقصد مشکلات کے تناسب کا استعمال کرتے ہوئے اپنے ماڈل کی پیشین گوئیوں کی وضاحت کرنا ہے۔

اب مشین لرننگ ورک فلو کے لحاظ سے، ہم جن مراحل کی پیروی کریں گے، اور کچھ نئی چیزیں، ہم راستے میں سیکھیں گے۔ لہذا درآمدی مرحلے میں، ہم اپنے ڈیٹا کو بائنری ہدف کے ساتھ کام کرنے کے لیے تیار کریں گے۔ دریافت کے مرحلے میں، ہم طبقاتی توازن کو دیکھیں گے۔ تو بنیادی طور پر، امیدواروں کا کون سا تناسب hird تھا، اور کون سا تناسب نہیں تھا؟ اور خصوصیات کے انکوڈنگ کے مرحلے میں، ہم اپنی واضح خصوصیات کے لیے انکوڈنگ کریں گے۔ تقسیم شدہ حصے میں، ہم ایک بے ترتیب ٹرین ٹیسٹ اسپلٹ کریں گے۔

ماڈل بنانے کے مرحلے کے لیے، سب سے پہلے، ہم اپنی بیس لائن سیٹ کریں گے، اور چونکہ ہم درستگی کے اسکور استعمال کریں گے، اس لیے ہم اس بارے میں مزید بات کریں گے کہ درستگی کا اسکور کیا ہے اور جب یہ میٹرک میں ہماری دلچسپی ہے تو بیس لائن کیسے بنائی جائے۔ دوسرا، ہم لاجسٹک ریگریشن کر رہے ہوں گے۔ اور پھر آخری لیکن کم از کم، ہمارے پاس تشخیص کا مرحلہ ہوگا۔ ہم دوبارہ درستگی کے اسکور پر توجہ مرکوز کریں گے۔ آخر میں، نتائج کو بتانے کے لیے، ہم مشکلات کے تناسب کو دیکھیں گے۔

آخر میں، کام میں غوطہ لگانے سے پہلے، آئیے اپنے آپ کو لائبریریوں سے متعارف کراتے ہیں جن کو ہم تھرو دی پروجیکٹ استعمال کریں گے۔ سب سے پہلے، ہم اپنا ڈیٹا گوگل کولابی نوٹ بک کو io لائبریری میں درآمد کریں گے۔ اس کے بعد، جیسا کہ ہم ایک لاجسٹک ریگریشن ماڈل استعمال کریں گے، ہم اسے اسکیٹ لرن سے درآمد کریں گے۔ اس کے بعد سے بھی سائنٹ سیکھنا، ہم اپنی کارکردگی کے میٹرکس، درستگی کا سکور، اور ٹرین ٹیسٹ-سپلٹ درآمد کریں گے۔

ہم استعمال کریں گے میٹپلوٹلیب اور ہمارے تصور کے لیے سیبورن، اور بے حس  صرف تھوڑا سا ریاضی کے لئے ہو گا.
ہمیں ضرورت ہے pandas ہمارے ڈیٹا میں ہیرا پھیری کرنے کے لیے، ہمارے واضح متغیرات کو انکوڈ کرنے کے لیے لیبلین کوڈر، اور ڈیٹا کو معمول پر لانے کے لیے معیاری اسکیلر۔ یہ وہ لائبریریاں ہوں گی جن کی ہمیں ضرورت ہے۔

آئیے ڈیٹا کی تیاری میں کودتے ہیں۔

#import libraries
import io
import warnings import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from sklearn.preprocessing import LabelEncoder
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler warnings.simplefilter(action="ignore", category=FutureWarning)

ڈیٹا تیار کریں

درآمد کریں

اپنے ڈیٹا کی تیاری شروع کرنے کے لیے، آئیے اپنا اہم کام کرتے ہیں۔ سب سے پہلے، ہم اپنی ڈیٹا فائل لوڈ کرتے ہیں، اور پھر ہمیں انہیں ڈیٹا فریم `df` میں ڈالنے کی ضرورت ہے۔

from google.colab import files
uploaded = files.upload()
# Read CSV file
df = pd.read_csv(io.BytesIO(uploaded["Placement_Data_Full_Class.csv"]))
print(df.shape)
df.head()
لاجسٹک ریگریشن کے لیے ڈیٹا سیٹ

ہم اپنا خوبصورت ڈیٹا فریم دیکھ سکتے ہیں، اور ہمارے پاس 215 ریکارڈز اور 15 کالم ہیں جن میں 'اسٹیٹس' کی خصوصیت، ہمارا ہدف شامل ہے۔ یہ تمام خصوصیات کی تفصیل ہے۔

لاجسٹک ریگریشن۔

کھنگالیں

اب ہمارے پاس یہ تمام خصوصیات ہیں جنہیں ہم دریافت کرنے جا رہے ہیں۔ تو آئیے اپنی شروعات کرتے ہیں۔ تحقیقی ڈیٹا کا تجزیہ. سب سے پہلے، آئیے اس ڈیٹا فریم کی معلومات پر ایک نظر ڈالتے ہیں اور دیکھتے ہیں کہ آیا ان میں سے کسی کو ہمیں رکھنے کی ضرورت ہو سکتی ہے یا شاید ہمیں چھوڑنے کی ضرورت ہے۔

# Inspect DataFrame
df.info() <class 'pandas.core.frame.DataFrame'>
RangeIndex: 215 entries, 0 to 214
Data columns (total 15 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 sl_no 215 non-null int64 1 gender 215 non-null object 2 ssc_p 215 non-null float64 3 ssc_b 215 non-null object 4 hsc_p 215 non-null float64 5 hsc_b 215 non-null object 6 hsc_s 215 non-null object 7 degree_p 215 non-null float64 8 degree_t 215 non-null object 9 workex 215 non-null object 10 etest_p 215 non-null float64 11 specialisation 215 non-null object 12 mba_p 215 non-null float64 13 status 215 non-null object 14 salary 148 non-null float64
dtypes: float64(6), int64(1), object(8)
memory usage: 25.3+ KB

اب جب ہم `df` معلومات کو دیکھتے ہیں، تو کچھ چیزیں ہیں جو ہم تلاش کر رہے ہیں، ہمارے ڈیٹا فریم میں 215 قطاریں ہیں، اور جو سوال ہم خود سے پوچھنا چاہتے ہیں وہ یہ ہے کہ کیا کوئی ڈیٹا غائب ہے؟ اور اگر ہم یہاں دیکھیں تو ایسا لگتا ہے کہ ہمارے پاس تنخواہ کے کالم کے علاوہ کوئی گمشدہ ڈیٹا نہیں ہے، جیسا کہ توقع کی گئی ہے، ان امیدواروں کی وجہ سے جنہیں ملازمت نہیں دی گئی ہے۔

یہاں ہمارے لیے ایک اور تشویش کی بات یہ ہے کہ، کیا کوئی ایسی خصوصیات ہیں جو ہمارے ماڈل کو ایسی معلومات فراہم کرتی ہیں جو حقیقی دنیا میں تعینات ہونے پر اس کے پاس نہیں ہوتی؟ یاد رکھیں کہ ہم چاہتے ہیں کہ ہمارا ماڈل یہ پیشین گوئی کرے کہ آیا کوئی امیدوار جگہ دے گا یا نہیں، اور ہم چاہتے ہیں کہ ہمارا ماڈل بھرتی ہونے سے پہلے وہ پیشین گوئیاں کرے۔ اس لیے ہم بھرتی کے بعد ان امیدواروں کے بارے میں کوئی معلومات نہیں دینا چاہتے۔

لہذا، یہ بالکل واضح ہے کہ یہ 'تنخواہ' خصوصیت کارپوریٹ کی طرف سے پیش کردہ تنخواہ کے بارے میں معلومات فراہم کرتی ہے۔ اور چونکہ یہ تنخواہ قبول کیے گئے لوگوں کے لیے ہے، اس لیے یہاں یہ خصوصیت لیکیج کی تشکیل کرتی ہے، اور ہمیں اسے چھوڑنا ہوگا۔

df.drop(columns="salary", inplace=True)

دوسری چیز جس پر میں دیکھنا چاہتا ہوں وہ ہے ان مختلف خصوصیات کے لیے ڈیٹا کی اقسام۔ لہذا، ان اعداد و شمار کی اقسام کو دیکھتے ہوئے، ہمارے پاس اپنے ہدف کے ساتھ آٹھ درجہ بندی اور سات عددی خصوصیات ہیں، اور سب کچھ درست ہے۔ لہذا، اب جب کہ ہمارے پاس یہ آئیڈیاز ہیں آئیے ان کو مزید گہرائی سے دریافت کرنے کے لیے کچھ وقت نکالیں۔

ہم جانتے ہیں کہ ہمارا ہدف دو طبقے ہیں۔ ہم نے امیدوار رکھے ہیں امیدوار نہیں رکھے۔ سوال یہ ہے کہ ان دونوں طبقوں کا نسبتی تناسب کیا ہے؟ کیا وہ ایک ہی توازن کے بارے میں ہیں؟ یا ایک دوسرے سے بہت زیادہ ہے؟ یہ وہ چیز ہے جس پر آپ کو ایک نظر ڈالنے کی ضرورت ہے جب آپ درجہ بندی کے مسائل کر رہے ہوں۔ تو یہ ہمارے EDA میں ایک اہم قدم ہے۔

# Plot class balance
df["status"].value_counts(normalize=True).plot( kind="bar", xlabel="Class", ylabel="Relative Frequency", title="Class Balance"
);
لاجسٹک ریگریشن کے لیے طبقاتی عدم توازن

ہماری مثبت کلاس 'Placeed' ہمارے مشاہدات کے 65% سے زیادہ کے لیے شمار ہوتی ہے، اور ہماری منفی کلاس 'Not Placeed' تقریباً 30% ہے۔ اب، اگر یہ انتہائی غیر متوازن تھے، جیسے، اگر یہ 80 کی طرح یا اس سے بھی زیادہ ہوتے، تو میں کہوں گا کہ یہ غیر متوازن کلاسز ہیں۔ اور ہمیں یہ یقینی بنانے کے لیے کچھ کام کرنا پڑے گا کہ ہمارا ماڈل صحیح طریقے سے کام کر رہا ہے۔ لیکن یہ ایک ٹھیک توازن ہے۔

آئیے اپنی خصوصیات اور ہدف کے درمیان تعلق کو محسوس کرنے کے لیے ایک اور تصور بناتے ہیں۔ آئیے عددی خصوصیات کے ساتھ شروع کرتے ہیں۔

سب سے پہلے، ہم تقسیمی پلاٹ کا استعمال کرتے ہوئے خصوصیات کی انفرادی تقسیم دیکھیں گے، اور ہم باکس پلاٹ کا استعمال کرتے ہوئے عددی خصوصیات اور اپنے ہدف کے درمیان تعلق کو بھی دیکھیں گے۔

fig,ax=plt.subplots(5,2,figsize=(15,35))
for index,i in enumerate(df.select_dtypes("number").drop(columns="sl_no")): plt.suptitle("Visualizing Distribution of Numerical Columns Indivualy and by Class",size=20) sns.histplot(data=df, x=i, kde=True, ax=ax[index,0]) sns.boxplot(data=df, x='status', y=i, ax=ax[index,1]);
"لاجسٹک ریگریشن

ہمارے پلاٹ کے پہلے کالم میں، ہم دیکھ سکتے ہیں کہ تمام تقسیمیں ایک عام تقسیم کے مطابق ہیں، اور زیادہ تر امیدواروں کی تعلیمی کارکردگی 60-80% کے درمیان ہے۔

دوسرے کالم میں، ہمارے پاس ایک ڈبل باکس پلاٹ ہے جس میں دائیں جانب 'Placed' کلاس ہے اور پھر بائیں جانب 'Not Placed' کلاس ہے۔ 'etest_p' اور 'mba_p' خصوصیات کے لیے، ماڈل بنانے کے نقطہ نظر سے ان دونوں تقسیموں میں بہت زیادہ فرق نہیں ہے۔ کلاسوں کی تقسیم میں ایک اہم اوورلیپ ہے، لہذا یہ خصوصیات ہمارے ہدف کی اچھی پیش گو نہیں ہوں گی۔ جہاں تک باقی خصوصیات کا تعلق ہے، ان کو ہمارے ہدف کے ممکنہ اچھے پیش گو کے طور پر لینے کے لیے کافی الگ ہیں۔ آئیے دوٹوک خصوصیات کی طرف چلتے ہیں۔ اور ان کو دریافت کرنے کے لیے، ہم گنتی کا پلاٹ استعمال کریں گے۔

fig,ax=plt.subplots(7,2,figsize=(15,35))
for index,i in enumerate(df.select_dtypes("object").drop(columns="status")): plt.suptitle("Visualizing Count of Categorical Columns",size=20) sns.countplot(data=df,x=i,ax=ax[index,0]) sns.countplot(data=df,x=i,ax=ax[index,1],hue="status")
"لاجسٹک ریگریشن

پلاٹ کو دیکھ کر ہم دیکھتے ہیں کہ ہمارے پاس خواتین کے مقابلے مرد امیدوار زیادہ ہیں۔ اور ہمارے زیادہ تر امیدواروں کے پاس کام کا کوئی تجربہ نہیں ہے، لیکن ان امیدواروں کو ان امیدواروں سے زیادہ بھرتی کیا گیا جن کے پاس تھا۔ ہمارے پاس ایسے امیدوار ہیں جنہوں نے اپنے 'ایچ ایس سی' کورس کے طور پر کامرس کیا ہے، اور ساتھ ہی انڈرگریڈ، سائنس کے پس منظر کے حامل امیدوار دونوں صورتوں میں دوسرے نمبر پر ہیں۔

لاجسٹک ریگریشن ماڈلز پر ایک چھوٹا سا نوٹ، اگرچہ وہ درجہ بندی کے لیے ہیں، لیکن وہ ایک ہی گروپ میں ہیں جیسے دوسرے لکیری ماڈلز جیسے لکیری رجعت، اور اس وجہ سے، چونکہ وہ دونوں لکیری ماڈل ہیں۔ ہمیں کثیر الجہتی مسئلہ کے بارے میں بھی فکر کرنے کی ضرورت ہے۔ لہذا ہمیں ایک ارتباط میٹرکس بنانے کی ضرورت ہے، اور پھر ہمیں اسے ہیٹ میپ میں تیار کرنے کی ضرورت ہے۔ ہم یہاں تمام خصوصیات کو نہیں دیکھنا چاہتے، ہم صرف عددی خصوصیات کو دیکھنا چاہتے ہیں، اور ہم اپنے ہدف کو شامل نہیں کرنا چاہتے۔ چونکہ اگر ہمارا ہدف ہماری کچھ خصوصیات سے مطابقت رکھتا ہے تو یہ بہت اچھی بات ہے۔

corr = df.select_dtypes("number").corr()
# Plot heatmap of `correlation`
plt.title('Correlation Matrix')
sns.heatmap(corr, vmax=1, square=True, annot=True, cmap='GnBu');
ارتباط میٹرکس

یہاں ہلکے نیلے رنگ ہیں، جس کا مطلب ہے کوئی تعلق نہیں، اور گہرا نیلا، جس کے ساتھ ہمارا تعلق زیادہ ہے۔ لہذا ہم ان گہرے نیلے رنگ کی تلاش میں رہنا چاہتے ہیں۔ ہم ایک گہرے نیلے رنگ کی لکیر دیکھ سکتے ہیں، ایک ترچھی لکیر اس پلاٹ کے وسط سے نیچے جاتی ہے۔ یہ وہ خصوصیات ہیں جو اپنے آپ سے وابستہ ہیں۔ اور پھر، ہم کچھ سیاہ چوکوں کو دیکھتے ہیں. اس کا مطلب ہے کہ ہمارے پاس خصوصیات کے درمیان ارتباط کا ایک گروپ ہے۔

ہمارے EDA کے آخری مرحلے پر، ہمیں واضح خصوصیات میں اعلی-کم کارڈنالٹی کی جانچ کرنے کی ضرورت ہے۔ کارڈنالٹی ایک زمرہ متغیر میں منفرد اقدار کی تعداد سے مراد ہے۔ ہائی کارڈنلٹی کا مطلب یہ ہے کہ مخصوص خصوصیات میں بڑی تعداد میں منفرد اقدار ہوتی ہیں۔ منفرد اقدار کی کوئی صحیح تعداد نہیں ہے جو ایک خصوصیت کو ہائی کارڈنلٹی بناتی ہے۔ لیکن اگر قطعی خصوصیت کی قدر تقریباً تمام مشاہدات کے لیے منفرد ہے، تو اسے عموماً گرایا جا سکتا ہے۔

# Check for high- and low-cardinality categorical features
df.select_dtypes("object").nunique() gender 2
ssc_b 2
hsc_b 2
hsc_s 3
degree_t 3
workex 2
specialisation 2
status 2
dtype: int64

مجھے کوئی کالم نظر نہیں آتا جہاں منفرد قدروں کی تعداد ایک یا کچھ بھی زیادہ ہو۔ لیکن مجھے لگتا ہے کہ ایک واضح قسم کا کالم ہے جو ہم یہاں غائب کر رہے ہیں۔ اور اس کی وجہ یہ ہے کہ اسے کسی شے کے طور پر نہیں بلکہ ایک عدد کے طور پر انکوڈ کیا گیا ہے۔ 'sl_no' کالم اس معنی میں ایک عدد عدد نہیں ہے جس کو ہم جانتے ہیں۔ ان امیدواروں کو کسی نہ کسی ترتیب میں درجہ دیا جاتا ہے۔ صرف ایک منفرد نام کا ٹیگ، اور نام ایک زمرے کی طرح ہے، ٹھیک ہے؟ تو یہ ایک واضح متغیر ہے۔ اور اس میں کوئی معلومات نہیں ہے، لہذا ہمیں اسے چھوڑنے کی ضرورت ہے۔

df.drop(columns="sl_no", inplace=True)

انکوڈنگ کی خصوصیات

ہم نے اپنا تجزیہ مکمل کر لیا، اور اگلی چیز جو ہمیں کرنے کی ضرورت ہے وہ ہے اپنی واضح خصوصیات کو انکوڈ کرنا، میں 'LabelEncoder' استعمال کروں گا۔ لیبل انکوڈنگ ایک مقبول انکوڈنگ تکنیک ہے جس میں متغیرات کو ہینڈل کیا جا سکتا ہے۔ اس تکنیک کا استعمال کرتے ہوئے، ہر لیبل کو حروف تہجی کی ترتیب کی بنیاد پر ایک منفرد عدد تفویض کیا جاتا ہے۔

lb = LabelEncoder () cat_data = ['gender', 'ssc_b', 'hsc_b', 'hsc_s', 'degree_t', 'workex', 'specialisation', 'status']
for i in cat_data: df[i] = lb.fit_transform(df[i]) df.head()
کوڈ آؤٹ پٹ

سپلٹ

ہم نے اپنا ڈیٹا درآمد اور صاف کیا۔ ہم نے تھوڑا سا تحقیقی ڈیٹا تجزیہ کیا ہے، اور اب ہمیں اپنے ڈیٹا کو تقسیم کرنے کی ضرورت ہے۔ ہمارے پاس دو قسم کی تقسیم ہے: عمودی تقسیم یا خصوصیات-ہدف اور افقی تقسیم یا ٹرین ٹیسٹ سیٹ۔ آئیے عمودی سے شروع کریں۔ ہم اپنا فیچر میٹرکس 'X' اور ہدف ویکٹر 'y' بنائیں گے۔ ہمارا ہدف "اسٹیٹس" ہے۔ ہماری خصوصیات وہ تمام کالم ہونے چاہئیں جو 'df' میں باقی ہیں۔

#vertical split
target = "status"
X = df.drop(columns = target)
y = df[target]

ماڈلز عام طور پر بہتر کارکردگی کا مظاہرہ کرتے ہیں جب ان کے پاس تربیت کے لیے ڈیٹا کو نارملائز کیا جاتا ہے، تو نارملائزیشن کیا ہے؟ عام کرنا متعدد متغیرات کی قدروں کو ایک جیسی رینج میں تبدیل کر رہا ہے۔ ہمارا ہدف اپنے متغیرات کو معمول پر لانا ہے۔ تو ان کی قدر کی حدیں 0 سے 1 تک ہوں گی۔ آئیے ایسا کرتے ہیں، اور میں `StandardScaler` استعمال کروں گا۔

scaler = StandardScaler()
X = scaler.fit_transform(X)

اب ہم افقی تقسیم یا ٹرین ٹیسٹ سیٹ کرتے ہیں۔ ہمیں بے ترتیب ٹرین ٹیسٹ اسپلٹ کا استعمال کرتے ہوئے اپنے ڈیٹا (X اور y) کو ٹریننگ اور ٹیسٹ سیٹ میں تقسیم کرنے کی ضرورت ہے۔ ہمارا ٹیسٹ سیٹ ہمارے کل ڈیٹا کا 20% ہونا چاہیے۔ اور ہم تولیدی صلاحیت کے لیے random_state قائم کرنا نہیں بھولتے۔

X_train, X_test, y_train, y_test = train_test_split( X, y, test_size = 0.2, random_state = 42 ) print("X_train shape:", X_train.shape)
print("y_train shape:", y_train.shape)
print("X_test shape:", X_test.shape)
print("y_test shape:", y_test.shape) X_train shape: (172, 12)
y_train shape: (172,)
X_test shape: (43, 12)
y_test shape: (43,)

ایک لاجسٹک ریگریشن ماڈل بنائیں

بیس لائن

لہذا اب ہمیں اپنے ماڈل کی تعمیر شروع کرنے کی ضرورت ہے، اور ہمیں اپنی بیس لائن سیٹ کرنے کے لیے آرڈر دینا شروع کرنے کی ضرورت ہوگی۔ یاد رکھیں کہ ہم جس قسم کے مسئلے سے نمٹ رہے ہیں وہ درجہ بندی کا مسئلہ ہے، اور درجہ بندی کے ماڈلز کا جائزہ لینے کے لیے مختلف میٹرکس موجود ہیں۔ جس پر میں توجہ مرکوز کرنا چاہتا ہوں وہ ہے درستگی کا سکور۔

اب، درستگی کا سکور کیا ہے؟ مشین لرننگ میں درستگی کا اسکور ایک تشخیصی میٹرک ہے جو کسی ماڈل کی طرف سے کی گئی درست پیشین گوئیوں کی تعداد اور پیشین گوئیوں کی کل تعداد کی پیمائش کرتا ہے۔ ہم صحیح پیشین گوئیوں کی تعداد کو پیشین گوئیوں کی کل تعداد سے تقسیم کرکے اس کا حساب لگاتے ہیں۔ تو اس کا مطلب یہ ہے کہ درستگی کا سکور 0 اور 1 کے درمیان جاتا ہے۔ صفر اچھا نہیں ہے۔ یہ وہ جگہ ہے جہاں آپ نہیں بننا چاہتے ہیں، اور ایک کامل ہے۔ تو آئیے اسے ذہن میں رکھیں اور یاد رکھیں کہ بیس لائن ایک ایسا نمونہ ہے جو بار بار ایک پیشین گوئی دیتا ہے، چاہے مشاہدہ کچھ بھی ہو، ہمارے لیے صرف ایک اندازہ ہے۔

ہمارے معاملے میں، ہمارے پاس دو طبقے ہیں، رکھے گئے یا نہیں۔ لہذا اگر ہم صرف ایک پیشین گوئی کر سکتے ہیں، تو ہمارا ایک اندازہ کیا ہوگا؟ اگر آپ نے کہا کہ اکثریتی طبقہ۔ مجھے لگتا ہے کہ یہ سمجھ میں آتا ہے، ٹھیک ہے؟ اگر ہم صرف ایک پیشین گوئی کر سکتے ہیں، تو ہمیں شاید اپنے ڈیٹا سیٹ میں سب سے زیادہ مشاہدات کے ساتھ ایک کا انتخاب کرنا چاہیے۔ لہذا، ہماری بیس لائن اس فیصد کا استعمال کرے گی جو کہ اکثریتی طبقے نے تربیتی ڈیٹا میں ظاہر کیا ہے۔ اگر ماڈل اس بیس لائن کو نہیں مار رہا ہے، تو خصوصیات ہمارے مشاہدات کی درجہ بندی کرنے کے لیے قیمتی معلومات کا اضافہ نہیں کر رہی ہیں۔

بیس لائن کی درستگی کا حساب لگانے کے لیے ہم 'value_counts' کا طریقہ استعمال کر سکتے ہیں `normalize = True` دلیل کے ساتھ:

acc_baseline = y_train.value_counts(normalize=True).max()
print("Baseline Accuracy:", round(acc_baseline, 2)) Baseline Accuracy: 0.68

ہم دیکھ سکتے ہیں کہ ہماری بنیادی درستگی 68% یا تناسب کے طور پر 0.68 ہے۔ لہذا استعمال میں آنے کے لیے ویلیو ایڈ کرنے کے لیے، ہم اس نمبر سے اوپر جانا چاہتے ہیں اور ایک کے قریب جانا چاہتے ہیں۔ یہ ہمارا مقصد ہے، اور اب آئیے اپنا ماڈل بنانا شروع کرتے ہیں۔

اعادہ کرنا

اب وقت آگیا ہے کہ لاجسٹک ریگریشن کا استعمال کرتے ہوئے اپنا ماڈل بنایا جائے۔ ہم لاجسٹک ریگریشن کا استعمال کریں گے، لیکن اس سے پہلے کہ ہم کریں، آئیے اس بارے میں تھوڑی بات کرتے ہیں کہ لاجسٹک ریگریشن کیا ہے اور یہ کیسے کام کرتا ہے، اور پھر ہم کوڈنگ کا سامان کر سکتے ہیں۔ اور اس کے لیے، یہاں ہمارے پاس تھوڑا سا گرڈ ہے۔

ایکس محور کے ساتھ، ہم کہتے ہیں کہ میرے پاس ہمارے ڈیٹا سیٹ میں امیدواروں کی p_degrees ہیں۔ اور جیسے جیسے میں دائیں سے بائیں منتقل ہوتا ہوں، ڈگریاں اونچی ہوتی جاتی ہیں، اور پھر Y محور کے ساتھ، میرے پاس تقرری کی ممکنہ کلاسیں ہوتی ہیں: صفر اور ایک۔

لاجسٹک ریگریشن کے لیے گراف

تو اگر ہم اپنے ڈیٹا پوائنٹس کی منصوبہ بندی کریں تو یہ کیسا نظر آئے گا؟ ہمارا تجزیہ ظاہر کرتا ہے کہ اعلی `p_degree` امیدوار کی خدمات حاصل کرنے کا زیادہ امکان ہے۔ تو، یہ شاید کچھ اس طرح نظر آئے گا، جہاں چھوٹے `p_degree` والا امیدوار صفر پر نیچے ہوگا۔ اور اعلیٰ `p_degree` والا امیدوار ایک پر اوپر ہو گا۔

لاجسٹک ریگریشن کے لیے پی ڈگری

اب ہم کہتے ہیں کہ ہم اس کے ساتھ لکیری رجعت کرنا چاہتے تھے۔ ہم کہتے ہیں کہ ہم ایک لائن پلاٹ کرنا چاہتے تھے۔
اب اگر ہم نے ایسا کیا تو کیا ہوگا اس لائن کو اس طرح سے پلاٹ کیا جائے گا کہ وہ ہر ممکن حد تک قریب ہونے کی کوشش کرے گی۔ اور اس طرح ہم شاید ایک لائن کے ساتھ ختم ہوں گے جو کچھ اس طرح نظر آتی تھی۔ کیا یہ ایک اچھا ماڈل ہوگا؟

تکرار کرنا

واقعی نہیں۔ کیا ہوگا امیدوار کی p_degree سے قطع نظر، ہمیں ہمیشہ ایک قسم کی قدر ملے گی۔ اور یہ ہماری مدد نہیں کرے گا کیونکہ نمبرز، اس تناظر میں، کچھ معنی نہیں رکھتے۔ اس درجہ بندی کا مسئلہ یا تو صفر یا ایک ہونا ضروری ہے۔ تو، یہ اس طرح کام نہیں کرے گا.

دوسری طرف، کیونکہ یہ ایک لائن ہے، اگر ہمارے پاس بہت کم پی_ڈگری والا امیدوار ہو تو کیا ہوگا؟ ٹھیک ہے، اچانک، ہمارا تخمینہ ایک منفی نمبر ہے۔ اور پھر، اس کا کوئی مطلب نہیں ہے۔ کوئی منفی نمبر نہیں ہے یا تو صفر یا ایک ہونا ضروری ہے۔ اور اسی طرح، اگر ہمارے پاس بہت زیادہ پی_ڈگری والا امیدوار ہے، تو میرے پاس مثبت ہو سکتا ہے، ایک سے اوپر کچھ۔ اور پھر، اس کا کوئی مطلب نہیں ہے۔ ہمیں یا تو صفر یا ایک کی ضرورت ہے۔

کی پیشن گوئی

لہذا جو کچھ ہم یہاں دیکھتے ہیں وہ درجہ بندی کے لئے لکیری رجعت کو استعمال کرنے کی کچھ سنگین حدود ہیں۔ تو ہمیں کیا کرنے کی ضرورت ہے؟ ہمیں ایک ایسا ماڈل بنانے کی ضرورت ہے جو نمبر ایک ہو: صفر سے نیچے یا ایک سے اوپر نہ جائے، اس لیے اسے صفر اور ایک کے درمیان باندھنے کی ضرورت ہے۔ اور نمبر دو، اس فنکشن سے جو کچھ بھی نکلتا ہے، وہ مساوات جو ہم بناتے ہیں، ہمیں شاید اسے پیشین گوئی کے طور پر نہیں بلکہ اپنی حتمی پیشین گوئی کرنے کی طرف ایک قدم کے طور پر سمجھنا چاہیے۔

اب، میں نے جو کچھ کہا ہے اسے کھولنے دو، اور ہم اپنے آپ کو یاد دلاتے ہیں کہ جب ہم اپنے لکیری ریگریشن ماڈلز کر رہے ہیں، تو ہم اس لکیری مساوات کے ساتھ ختم ہوتے ہیں، جو کہ سب سے آسان شکل ہے۔ اور یہ وہ مساوات یا فعل ہے جو ہمیں وہ سیدھی لکیر دیتا ہے۔

IMG

اس لائن کو 0 اور 1 کے درمیان باندھنے کا ایک طریقہ ہے۔ اور ہم کیا کر سکتے ہیں اس فنکشن کو لیں جو ہم نے ابھی بنایا ہے اور اسے ایک اور فنکشن میں بند کر دیں، جسے سگمائیڈ فنکشن کہتے ہیں۔

لاجسٹک ریگریشن کے لیے فنکشن

تو، میں اس لکیری مساوات کو لینے جا رہا ہوں جو ابھی ہمارے پاس تھا، اور میں اسے سگمائیڈ فنکشن میں سکڑ کر اسے ایکسپونیشنل کے طور پر رکھوں گا۔

لاجسٹک ریگریشن کے لیے فنکشن

کیا ہوتا ہے ایک سیدھی لائن حاصل کرنے کے بجائے، ہمیں ایک لائن ملتی ہے جو اس طرح کی نظر آتی ہے۔ یہ ایک پر پھنس گیا ہے۔ یہ اندر آتا ہے اور نیچے گر جاتا ہے۔ پھر یہ صفر پر پھنس جاتا ہے۔

لاجسٹک رجعت

ٹھیک ہے، لائن کی طرح نظر آتی ہے، اور ہم دیکھ سکتے ہیں کہ ہم نے اپنا پہلا مسئلہ حل کر لیا ہے۔ ہم اس فنکشن سے جو کچھ بھی حاصل کریں گے وہ 0 اور 1 کے درمیان ہوگا۔ دوسرے مرحلے میں، ہم اس مساوات سے جو بھی نکلے گا اسے حتمی پیشین گوئی نہیں مانیں گے۔ اس کے بجائے، ہم اسے ایک احتمال کے طور پر دیکھیں گے۔

لاجسٹک رجعت

میرا کیا مطلب ہے؟ اس کا مطلب ہے کہ جب میں پیشین گوئی کروں گا تو مجھے 0 اور 1 کے درمیان کچھ فلوٹنگ پوائنٹ ویلیو ملے گی۔ اور میں جو کروں گا اسے اس امکان کے طور پر سمجھوں گا کہ میری پیشین گوئی مثبت کلاس سے تعلق رکھتی ہے۔

تو مجھے 0.9999 پر قدر مل جاتی ہے۔ میں یہ کہوں گا کہ اس امیدوار کا تعلق ہماری مثبت، رکھی ہوئی کلاس سے ہے 99%۔ تو مجھے تقریباً یقین ہے کہ اس کا تعلق مثبت طبقے سے ہے۔ اس کے برعکس، اگر یہ پوائنٹ 0.001 یا کچھ بھی نیچے ہے تو میں کہوں گا کہ یہ نمبر کم ہے۔ امکان کہ یہ خاص مشاہدہ مثبت سے تعلق رکھتا ہے، رکھی ہوئی کلاس تقریباً صفر ہے۔ اور اس طرح، میں یہ کہنے جا رہا ہوں کہ اس کا تعلق کلاس صفر سے ہے۔

تو یہ ان اعداد کے لیے معنی رکھتا ہے جو ایک کے قریب یا صفر کے قریب ہوں۔ لیکن آپ اپنے آپ سے پوچھ سکتے ہیں، میں درمیان میں دیگر اقدار کے ساتھ کیا کروں؟ کام کرنے کا طریقہ یہ ہے کہ ہم ایک کٹ آف لائن کو دائیں 0.5 پر رکھتے ہیں، لہذا میں اس لائن سے نیچے جو بھی قدر حاصل کرتا ہوں، میں اسے صفر پر رکھوں گا، لہذا میری پیشین گوئی نہیں ہے، اور اگر یہ اس لائن سے اوپر ہے، اگر یہ پوائنٹ پانچ سے اوپر ہے میں اسے مثبت کلاس میں ڈالوں گا، میری پیشین گوئی ایک ہے۔

پی ڈگری

تو، اب میرے پاس ایک فنکشن ہے جو مجھے صفر اور ایک کے درمیان پیشین گوئی دیتا ہے، اور میں اسے ایک امکان کے طور پر دیکھتا ہوں۔ اور اگر وہ امکان 0.5 یا 50% سے زیادہ ہے، تو میں کہتا ہوں، ٹھیک ہے، مثبت کلاس ون۔ اور اگر یہ 50٪ سے کم ہے، میں کہتا ہوں، یہ منفی کلاس ہے، صفر۔ تو یہ وہ طریقہ ہے جو لاجسٹک ریگریشن کام کرتا ہے۔ اور اب ہم سمجھتے ہیں کہ آئیے اسے کوڈ بنائیں اور اسے فٹ کریں۔ میں ہائپر پیرامیٹر 'max_iter' کو 1000 پر سیٹ کروں گا۔ یہ پیرامیٹر حل کرنے والوں کے کنورج ہونے کے لیے زیادہ سے زیادہ تکرار کی تعداد کا حوالہ دیتا ہے۔

# Build model
model = LogisticRegression(max_iter=1000) # Fit model to training data
model.fit(X_train, y_train) LogisticRegression(max_iter=1000)

اندازہ

اب یہ دیکھنے کا وقت ہے کہ ہمارا ماڈل کیسا ہوتا ہے۔ یہ لاجسٹک ریگریشن ماڈل کا جائزہ لینے کا وقت ہے۔ تو، آئیے یاد رکھیں کہ اس بار، کارکردگی میٹرک جس میں ہمیں دلچسپی ہے وہ درستگی کا سکور ہے، اور ہم ایک درست چاہتے ہیں۔ اور ہم 0.68 کی بیس لائن کو ہرانا چاہتے ہیں۔ accuracy_score فنکشن کا استعمال کرتے ہوئے ماڈل کی درستگی کا حساب لگایا جا سکتا ہے۔ فنکشن کے لیے دو دلائل درکار ہیں، حقیقی لیبلز اور پیشین گوئی شدہ لیبل۔

acc_train = accuracy_score(y_train, model.predict(X_train))
acc_test = model.score(X_test, y_test) print("Training Accuracy:", round(acc_train, 2))
print("Test Accuracy:", round(acc_test, 2)) Training Accuracy: 0.9
Test Accuracy: 0.88

ہم اپنی تربیت کی درستگی کو 90% پر دیکھ سکتے ہیں۔ یہ بیس لائن کو مار رہا ہے۔ ہمارے ٹیسٹ کی درستگی 88% پر تھوڑی کم تھی۔ اس نے بیس لائن کو بھی شکست دی اور ہماری تربیت کی درستگی کے بہت قریب تھی۔ تو یہ اچھی خبر ہے کیونکہ اس کا مطلب ہے کہ ہمارا ماڈل اوور فٹنگ یا کچھ بھی نہیں ہے۔

لاجسٹک ریگریشن ماڈل کے نتائج

یاد رکھیں کہ لاجسٹک ریگریشن کے ساتھ، ہم صفر یا ایک کی ان حتمی پیشین گوئیوں کے ساتھ ختم ہوتے ہیں۔ لیکن اس پیشین گوئی کے نیچے، صفر یا ایک کے درمیان ایک فلوٹنگ پوائنٹ نمبر کا امکان ہے، اور بعض اوقات یہ دیکھنے میں مددگار ثابت ہو سکتا ہے کہ وہ امکانی تخمینہ کیا ہے۔ آئیے اپنی تربیتی پیشین گوئیوں کو دیکھتے ہیں، اور آئیے پہلے پانچ کو دیکھتے ہیں۔ 'پیش گوئی' کا طریقہ بغیر لیبل والے مشاہدے کے ہدف کی پیش گوئی کرتا ہے۔

model.predict(X_train)[:5] array([0, 1, 1, 1, 1])

تو وہ حتمی پیشین گوئیاں تھیں، لیکن ان کے پیچھے کیا امکانات ہیں؟ ان کو حاصل کرنے کے لیے، ہمیں تھوڑا سا مختلف کوڈ کرنے کی ضرورت ہے۔ اپنے ماڈل کے ساتھ 'پیش گوئی' طریقہ استعمال کرنے کے بجائے، میں اپنے تربیتی ڈیٹا کے ساتھ 'پیش گوئی_پروبا' استعمال کروں گا۔

y_train_pred_proba = model.predict_proba(X_train)
print(y_train_pred_proba[:5]) [[0.92003219 0.07996781] [0.03202019 0.96797981] [0.00678421 0.99321579] [0.03889446 0.96110554] [0.00245525 0.99754475]]

ہم ایک قسم کی نیسٹڈ لسٹ دیکھ سکتے ہیں جس میں دو مختلف کالم ہیں۔ بائیں طرف کا کالم اس امکان کی نمائندگی کرتا ہے کہ امیدوار نہیں رکھا گیا ہے یا ہماری منفی کلاس 'نوٹ پلیسڈ' ہے۔ دوسرا کالم مثبت کلاس `Placed` یا امیدوار کے رکھے جانے کے امکان کی نمائندگی کرتا ہے۔ ہم دوسرے کالم پر توجہ دیں گے۔ اگر ہم پہلے امکانی تخمینہ کو درست دیکھیں تو ہم دیکھ سکتے ہیں کہ یہ 0.07 ہے۔ تو چونکہ یہ 50% سے کم ہے، ہمارا ماڈل کہتا ہے، میری پیشین گوئی صفر ہے۔ اور مندرجہ ذیل پیشین گوئیوں کے لیے، ہم دیکھ سکتے ہیں کہ وہ سب 0.5 سے اوپر ہیں، اور اسی وجہ سے ہمارے ماڈل نے آخر میں ایک کی پیشین گوئی کی۔

اب ہم فیچر کے نام اور اہمیت کو نکال کر ایک سیریز میں رکھنا چاہتے ہیں۔ اور چونکہ ہمیں خصوصیت کی اہمیت کو مشکلات کے تناسب کے طور پر ظاہر کرنے کی ضرورت ہے، اس لیے ہمیں اپنی اہمیت کی کفایت شعاری لے کر صرف ایک چھوٹی سی ریاضیاتی تبدیلی کرنے کی ضرورت ہے۔

# Features names
features = ['gender', 'ssc_p', 'ssc_b', 'hsc_p', 'hsc_b', 'hsc_s', 'degree_p' ,'degree_t', 'workex', 'etest_p', 'specialisation', 'mba_p']
# Get importances
importances = model.coef_[0]
# Put importances into a Series
odds_ratios = pd.Series(np.exp(importances), index= features).sort_values()
# Review odds_ratios.head() mba_p 0.406590
degree_t 0.706021
specialisation 0.850301
hsc_b 0.876864
etest_p 0.877831
dtype: float64

مشکلات کے تناسب اور وہ کیا ہیں اس پر بحث کرنے سے پہلے، آئیے انہیں افقی بار چارٹ پر حاصل کریں۔ آئیے پلاٹ بنانے کے لیے پانڈوں کا استعمال کریں، اور یاد رکھیں کہ ہم پانچ سب سے بڑے گتانک تلاش کریں گے۔ اور ہم تمام مشکلات کے تناسب کو استعمال نہیں کرنا چاہتے۔ تو ہم دم کو استعمال کرنا چاہتے ہیں۔

# Horizontal bar chart, five largest coefficients
odds_ratios.tail().plot(kind="barh")
plt.xlabel("Odds Ratio")
plt.ylabel("Feature")
plt.title("High Importance Features");
# افقی بار چارٹ، پانچ سب سے بڑے گتانک odds_ratios.tail().plot(kind=

اب میں چاہتا ہوں کہ آپ 5 پر ایک عمودی لکیر کا تصور کریں، اور میں اسے دیکھ کر شروع کرنا چاہتا ہوں۔ آئیے ان میں سے ہر ایک کے بارے میں انفرادی طور پر یا صرف پہلے جوڑے کے بارے میں بات کرتے ہیں۔ تو آئیے یہاں 'ssc_p' سے شروع کرتے ہیں، جو 'ثانوی تعلیمی فیصد - 10ویں جماعت' سے مراد ہے۔ اور ہم دیکھ سکتے ہیں کہ مشکلات کا تناسب 30 پر ہے۔ اب، اس کا کیا مطلب ہے؟ اس کا مطلب ہے کہ اگر کسی امیدوار کا 'ssc_p' زیادہ ہے، تو ان کی تقرری کی مشکلات دوسرے امیدواروں سے چھ گنا زیادہ ہیں، تمام چیزیں برابر ہیں۔ تو اس کے بارے میں سوچنے کا دوسرا طریقہ یہ ہے کہ جب امیدوار کے پاس `ssc_p` ہو تو امیدوار کی بھرتی کا امکان چھ گنا بڑھ جاتا ہے۔

لہذا پانچ سے زیادہ مشکلات کا تناسب امیدواروں کے رکھے جانے والے امکانات کو بڑھاتا ہے۔ اور اسی لیے ہمارے پاس وہ عمودی لکیر پانچ ہے۔ اور یہ پانچ قسم کی خصوصیات وہ خصوصیات ہیں جو زیادہ تر بھرتی کے ساتھ وابستہ ہیں۔ تو، ہماری مشکلات کا تناسب یہی ہے۔ اب، ہم نے ان خصوصیات کو دیکھا ہے جو بھرتی میں اضافے سے سب سے زیادہ وابستہ ہیں۔ آئیے دیکھتے ہیں کہ اس سے منسلک خصوصیات، بھرتی میں کمی۔ تو اب وقت آگیا ہے کہ سب سے چھوٹی کو دیکھیں۔ تو ہم دم کو دیکھنے کے بجائے اس کی طرف دیکھیں گے۔

odds_ratios.head().plot(kind="barh")
plt.xlabel("Odds Ratio")
plt.xlabel("Odds Ratio")
plt.ylabel("Feature")
plt.title("Low Importance Features");
کم اہمیت کی خصوصیت

پہلی چیز جو ہمیں یہاں دیکھنے کی ضرورت ہے وہ یہ ہے کہ ایکس محور پر نوٹس ہر چیز ایک یا نیچے ہے۔ اب، اس کا کیا مطلب ہے؟ تو آئیے یہاں اپنی سب سے چھوٹی مشکلات کے تناسب پر ایک نظر ڈالتے ہیں۔ یہ mba_p ہے جس سے مراد MBA فیصد ہے۔ ہم دیکھ سکتے ہیں کہ یہ تقریباً 0.45 پر تیار ہے۔ اب، اس کا کیا مطلب ہے؟ ٹھیک ہے، 0.45 اور 1 کے درمیان فرق 0.55 ہے۔ بالکل ٹھیک؟ اور اس نمبر کا کیا مطلب ہے؟ ایم بی اے والے امیدواروں کے بھرتی ہونے کا امکان 55% کم ہے، باقی تمام چیزیں برابر ہیں۔ بالکل ٹھیک؟ لہذا اس نے بھرتی کی مشکلات کو 0.55 یا 55% کے عنصر سے کم کیا۔ اور یہ یہاں کی ہر چیز کے لیے سچ ہے۔

نتیجہ

تو ہم نے کیا سیکھا؟ سب سے پہلے، تیار کردہ ڈیٹا مرحلے میں، ہم نے سیکھا کہ ہم لاجسٹک ریگریشن کا استعمال کرتے ہوئے درجہ بندی، خاص طور پر بائنری درجہ بندی کے ساتھ کام کر رہے ہیں۔ ڈیٹا کو تلاش کرنے کے معاملے میں، ہم نے بہت ساری چیزیں کیں، لیکن جھلکیوں کے لحاظ سے، ہم نے طبقاتی توازن کو دیکھا، ٹھیک ہے؟ ہماری مثبت اور منفی کلاسوں کا تناسب۔ پھر ہم نے اپنا ڈیٹا تقسیم کیا۔

چونکہ لاجسٹک ریگریشن ایک درجہ بندی کا ماڈل ہے، اس لیے ہم نے کارکردگی کے ایک نئے میٹرک، درستگی کے اسکور کے بارے میں سیکھا۔ اب، درستگی کا سکور 0 اور 1 کے درمیان ہے۔ صفر برا ہے، اور ایک اچھا ہے۔ جب ہم تکرار کر رہے تھے، ہم نے لاجسٹک ریگریشن کے بارے میں سیکھا۔ یہ ایک جادوئی طریقہ ہے، جہاں آپ ایک لکیری مساوات، ایک سیدھی لکیر لے سکتے ہیں، اور اسے دوسرے فنکشن، ایک سگمائیڈ فنکشن، اور ایکٹیویشن فنکشن کے اندر رکھ سکتے ہیں، اور اس سے امکانی تخمینہ حاصل کر سکتے ہیں اور اس امکانی تخمینہ کو پیشین گوئی میں بدل سکتے ہیں۔

آخر میں، ہم نے مشکلات کے تناسب کے بارے میں سیکھا اور جس طرح سے ہم گتانک کی تشریح کر سکتے ہیں یہ دیکھنے کے لیے کہ آیا کوئی خصوصیت ان مشکلات کو بڑھا دے گی کہ ہم نے امیدوار کو بھرتی کیا ہے یا نہیں۔

پروجیکٹ سورس کوڈ: https://github.com/SawsanYusuf/Campus-Recruitment.git

اس مضمون میں دکھایا گیا میڈیا Analytics ودھیا کی ملکیت نہیں ہے اور مصنف کی صوابدید پر استعمال ہوتا ہے۔ 

ٹائم اسٹیمپ:

سے زیادہ تجزیات ودھیا