Credit Score Classification

مشین لرننگ کے ذریعے کریڈ ٹ کارڈ یوزرز کو کلاسیفایؑ کرنا ،امبیلینس ڈیٹا لیبلز کو بیلنس کرنا اور ماڈل کو save کرنا

Using machine learning to classify credit card users, balance imbalanced data and save model

مصنف: ڈاکٹر نعمان اسلام

تاریخ: 23 جون 2018

قاریؑین- آج کے آرٹیکل میں ہم کلاسیفیکیشن کی ایک اور مثال دیکھیں گے- ہم یہ بھی دیکھیں گے کہ اگر ڈیٹا امبیلینس ہو تو اس کو کس طرح بیلینس کیا جا سکتا ہے- اس مقصد کے لیے ہم Give me credit کا ڈیٹا سیٹ استعمال کریں گے جو کہ https://www.kaggle.com/c/GiveMeSomeCredit/data سے ڈاوؑن لوڈ کیا جاسکتاہے- ڈیٹا سیٹ کا پہلا کالم SeriousDlqin2yrs یہ بتاتا ہے کہ یوزر کریڈٹ پے کرتے ہوۓ ڈیفالٹ تو نہیں کرے گا- لہٰذا یہ binary classification کی پرابلم ہے اور اس کے لیے آخری layer پر sigmoid کا ایکٹیویشن فنکشن استعمال ہو گا- مگر ایک پرابلم یہ ہے کہ اس کالم کی زیادہ تر ویلیوز 0 ہیں جبکہ کچھ ویلیوز 1 ہیں- اس مسؑلے کے حل کے لۓ ہمیں imbalanced-learn کی API استعمال کریں گے جو کہ ڈیٹا سیٹ کو بیلنس کرے گا- اس کو انسٹال کرنے کے لۓ کمانڈ لایؑن پر لکھیں:

pip install -U imbalanced-learn

اب ہم پروگرامنگ کی طرف چلتے ہیں- پہلے ضروری لایؑبریریز کو امپورٹ کریں گے-

from keras.models import *

from keras.layers import *

from imblearn.over_sampling import RandomOverSampler

import numpy as np

اگلے مرحلے میں random number generator کو seed دیں گے کیونکہ نیورل نیٹ ورک stochastic model ہوتے ہیں-

seed = 10

np.random.seed(seed)

ڈیٹا کو لوڈ کریں گے اور اس میں سے کچھ ڈیٹا ٹریننگ اور کچھ ٹیسٹ کے لۓ رکھیں گے-

data = np.genfromtxt('cs-training.csv',delimiter=",",skip_header=1)

data = np.nan_to_num(data)

test_data = data[120000:,:]

data=data[:120000,:]

ڈیٹا کا پہلا کالم لیبل ہے جبکہ باقی کالم فیچرز ہیں-

X=data[:,2:]

Y=data[:,1]

X_test=test_data[:,2:]

Y_test=test_data[:,1]

اب ہم ڈیٹا کا امبیلینس ختم کریں گے- جس کے لۓ RandomOverSampler کی کلاس استعمال کریں گے-

ros = RandomOverSampler()

X,Y=ros.fit_sample(X,Y)

X_test, Y_test = ros.fit_sample(X_test,Y_test)

اس کے بعد ہم ماڈل بنایؑیں گے جس کے لۓ Sequential کی کلاس استعمال کریں گے-

features = len(X[0])

m = Sequential()

m.add(Dense(15,input_dim=features,init='uniform',activation='relu'))

m.add(Dense(15,init='uniform',activation='tanh'))

m.add(Dense(1,init='uniform',activation='sigmoid'))

ماڈل کو compile کریں گے-

m.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])

اب ہم ٹریننگ اسٹارٹ کریں گے-

m.fit(X,Y,nb_epoch=5,batch_size=100)

اس کے بعد ماڈل کو ٹیسٹ ڈیٹا پر evaluate کریں گے- ہمیں %77 فیصد accuracy حاصل ہویؑ-

score = m.evaluate(X_test,Y_test)

print(score)

اگر ہم چاہیں تو ہم کسی نیؑ ویلیو پر prediction بھی کر سکتے ہیں- جس کا آوؑٹ پٹ 0.81- اس ویلیو کو round off کرنے پر ہم کو 1 کلاس ملے گی- گویا یوزر ڈیفالٹ کرے گا-

print("\n\n",m.predict(np.array([[0.766126609,45,2,0.802982129,9120,13,0,6,0,2]])))

بعض اوقات ہم ٹریننگ کے بعد ماڈل کو بعد میں استعمال کرنے کے لۓ Save کرنا چاہتے ہیں- اس کے لۓ درج ذیل code استعمال کر سکتے ہیں:

model_json = m.to_json()

with open("model.json", "w") as json_file:

json_file.write(model_json)

# serialize weights to HDF5

m.save_weights("model.h5")

print("Saved model to disk")

بعد میں ماڈل کو لوڈ کرنے کے لۓ مندرجہ ذیل کوڈ استعمال کر سکتے ہیں:

json_file = open(file_path, 'r')

loaded_model_json = json_file.read()

json_file.close()

loaded_model = model_from_json(loaded_model_json)

# load weights into new model

loaded_model.load_weights(os.path.join(module_dir, "model.h5"))

print("Loaded model from disk")

قاریؑن- آج کے آرٹیکل میں ہم نے Imbalanced data کو balance کرنا سیکھا- اس کے علاوہ ہم نے ماڈل کو save کرنا بھی سیکھا- اگلے آرٹیکل میں ہم اپنے سلسلے کو آگے بڑھایؑیں گے اور machine learning کی دیگر پرابلمز کو دیکھیں گے-