{"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":81933,"databundleVersionId":9643020,"sourceType":"competition"}],"dockerImageVersionId":30761,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"***المكتبات***","metadata":{}},{"cell_type":"code","source":"import numpy as np \nimport pandas as pd \nimport matplotlib.pyplot as plt \nfrom sklearn.ensemble import RandomForestClassifier,GradientBoostingClassifier\nfrom sklearn.linear_model import LogisticRegression,SGDClassifier\nfrom sklearn.naive_bayes import GaussianNB,MultinomialNB,BernoulliNB\nfrom sklearn.discriminant_analysis import LinearDiscriminantAnalysis,QuadraticDiscriminantAnalysis\nfrom sklearn.svm import SVC\nfrom sklearn.tree import DecisionTreeClassifier\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.metrics import classification_report\nfrom sklearn.model_selection import train_test_split\n","metadata":{"execution":{"iopub.status.busy":"2025-06-25T13:18:14.216873Z","iopub.execute_input":"2025-06-25T13:18:14.217353Z","iopub.status.idle":"2025-06-25T13:18:16.706668Z","shell.execute_reply.started":"2025-06-25T13:18:14.217292Z","shell.execute_reply":"2025-06-25T13:18:16.705319Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"***الدوال للقيم الناقصة و الترميز***","metadata":{}},{"cell_type":"code","source":"def MyEncoderInplaceDataReturnEncodeLift(Dtrain,Dtest=None,maxnunique=30):\n    # الترميز يتم على اصل الداتا وثم يرجع قاموس الذي بدوره يفك التشفير لكل الاعمدة \n    # و اذا احتوي احد اعمدة بيانات الاختبار بعد عملية الترميز على قيم مفقودة  \n    # فذلك يعني ان  العمود به قيمة او صنف غير موجود في نفس العمود لبيانات التدريب\n    Encode = {}\n    TempeCollist = Dtrain.columns\n    for col in TempeCollist:\n        if (Dtrain[col].nunique()<=maxnunique)&((Dtrain[col].dtypes=='object')|(Dtrain[col].dtypes=='O')):\n            Encode[col] = {i:n for n,i in enumerate(Dtrain[col].unique())}\n            Dtrain[col] = Dtrain[col].map(Encode[col])\n            if np.all(Dtest!=None):\n                Dtest[col] = Dtest[col].map(Encode[col])\n    EncodeLift = {j:{ i[1]:i[0] for i in Encode[j].items()} for j in Encode}\n    return EncodeLift,Encode\n# ##################################################################################################\ndef DropColRowNullInplaceData(Dtrian,Dtest=None,y=None,pcol=0.25,prow=0.30):\n    # يحذف الصف او العمود اذا كانت نسب القيم الخالية فيه اكبر من النسب اعلاه\n    TempColTrain = Dtrian.isna().sum()[Dtrian.isna().sum()>(Dtrian.shape[0]*pcol)].index.to_list()\n    if np.all(Dtest!=None):\n        TempColTest = Dtest.isna().sum()[Dtest.isna().sum()>(Dtest.shape[0]*pcol)].index.to_list()\n    TempRowTrain = Dtrian.isna().sum(axis=1)[Dtrian.isna().sum(axis=1)>(Dtrian.shape[1]*prow)].index.to_list()\n    if np.all(Dtest!=None):\n        TempColTrain.extend(TempColTest)\n    TempCol = [i for i in list(set(TempColTrain)) if i!= y]\n    if np.all(Dtest!=None):\n        Dtest.drop(columns= TempCol,inplace=True)\n    Dtrian.drop(columns=TempCol,inplace=True)\n    Dtrian.drop(index=TempRowTrain,inplace=True)\n    Dtrian[y].dropna(inplace=True)\n    Dtrian = Dtrian[~Dtrian[y].isna()]\n    Dtrian.reset_index(inplace=True,drop=True)\n# ##################################################################################################\ndef FillNullInplaceData(Dtrain,Dtest=None,y=None):\n    # يملء الاعمدة العددية بالمتوسط اما الاعمدة النصية بالمنوال \n    TempColStr = Dtrain.dtypes[Dtrain.dtypes=='object'].index\n    for i in Dtrain.columns:\n        if i != y:\n            if i in TempColStr:\n                Dtrain[i].fillna(Dtrain[i].mode(),inplace=True)\n                if np.all(Dtest!=None):\n                    Dtest[i].fillna(Dtest[i].mode(),inplace=True)\n                Dtrain[i].fillna(Dtrain[i].value_counts().index[0],inplace=True)\n                if np.all(Dtest!=None):\n                    Dtest[i].fillna(Dtest[i].value_counts().index[0],inplace=True)\n            else :\n                Dtrain[i].fillna(Dtrain[i].mean(),inplace=True)\n                if np.all(Dtest!=None):    \n                    Dtest[i].fillna(Dtest[i].mean(),inplace=True)\n    if np.all(Dtest!=None):               \n        print(f'Null DataTrain = {Dtrain.isnull().sum().sum()} , Null DataTest = {Dtest.isnull().sum().sum()}')\n    else:\n        print(f'Null Data = {Dtrain.isnull().sum().sum()} ')\n# ##################################################################################################\n# ##################################################################################################","metadata":{"execution":{"iopub.status.busy":"2025-06-25T13:18:16.709237Z","iopub.execute_input":"2025-06-25T13:18:16.709885Z","iopub.status.idle":"2025-06-25T13:18:16.726661Z","shell.execute_reply.started":"2025-06-25T13:18:16.709832Z","shell.execute_reply":"2025-06-25T13:18:16.725048Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"***معالجة الداتا***","metadata":{}},{"cell_type":"code","source":"data  = pd.read_csv(r'path')  ","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:46.544522Z","iopub.execute_input":"2024-09-29T08:50:46.544927Z","iopub.status.idle":"2024-09-29T08:50:46.612458Z","shell.execute_reply.started":"2024-09-29T08:50:46.544863Z","shell.execute_reply":"2024-09-29T08:50:46.611338Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"data.head()","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:46.614272Z","iopub.execute_input":"2024-09-29T08:50:46.614623Z","iopub.status.idle":"2024-09-29T08:50:46.643038Z","shell.execute_reply.started":"2024-09-29T08:50:46.614586Z","shell.execute_reply":"2024-09-29T08:50:46.641041Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"data.dtypes.count() ","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:46.689806Z","iopub.execute_input":"2024-09-29T08:50:46.690331Z","iopub.status.idle":"2024-09-29T08:50:46.702065Z","shell.execute_reply.started":"2024-09-29T08:50:46.690283Z","shell.execute_reply":"2024-09-29T08:50:46.700805Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"data.dtypes[(data.dtypes=='O')].count(), data.dtypes[(data.dtypes!='O')].count()","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:46.705926Z","iopub.execute_input":"2024-09-29T08:50:46.706658Z","iopub.status.idle":"2024-09-29T08:50:46.720522Z","shell.execute_reply.started":"2024-09-29T08:50:46.706602Z","shell.execute_reply":"2024-09-29T08:50:46.71914Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"data['Y'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:46.722938Z","iopub.execute_input":"2024-09-29T08:50:46.72342Z","iopub.status.idle":"2024-09-29T08:50:46.737849Z","shell.execute_reply.started":"2024-09-29T08:50:46.723367Z","shell.execute_reply":"2024-09-29T08:50:46.736682Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"data.shape","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:46.739737Z","iopub.execute_input":"2024-09-29T08:50:46.740345Z","iopub.status.idle":"2024-09-29T08:50:46.750936Z","shell.execute_reply.started":"2024-09-29T08:50:46.740293Z","shell.execute_reply":"2024-09-29T08:50:46.74984Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"DropColRowNullInplaceData(data,y='sii',pcol = 0.5, prow= 0.5)\n\ndata.shape","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:46.829114Z","iopub.execute_input":"2024-09-29T08:50:46.829846Z","iopub.status.idle":"2024-09-29T08:50:46.860961Z","shell.execute_reply.started":"2024-09-29T08:50:46.829806Z","shell.execute_reply":"2024-09-29T08:50:46.859923Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"FillNullInplaceData(train,y='sii')\ndata = data[~ data['sii'].isna()]\n","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:46.862225Z","iopub.execute_input":"2024-09-29T08:50:46.862575Z","iopub.status.idle":"2024-09-29T08:50:46.939244Z","shell.execute_reply.started":"2024-09-29T08:50:46.862537Z","shell.execute_reply":"2024-09-29T08:50:46.938234Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"data.drop(columns=['id'],inplace=True)\n","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:46.940729Z","iopub.execute_input":"2024-09-29T08:50:46.941392Z","iopub.status.idle":"2024-09-29T08:50:46.948051Z","shell.execute_reply.started":"2024-09-29T08:50:46.941353Z","shell.execute_reply":"2024-09-29T08:50:46.946885Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"data.isna().sum().sum()","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:46.949441Z","iopub.execute_input":"2024-09-29T08:50:46.949797Z","iopub.status.idle":"2024-09-29T08:50:46.964831Z","shell.execute_reply.started":"2024-09-29T08:50:46.94976Z","shell.execute_reply":"2024-09-29T08:50:46.963441Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"col_str = data.dtypes[data.dtypes=='O'].index\ncol_int = data.dtypes[data.dtypes!='O'].index\nlen(col_str), len(col_int)\n","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:46.966417Z","iopub.execute_input":"2024-09-29T08:50:46.967415Z","iopub.status.idle":"2024-09-29T08:50:46.978504Z","shell.execute_reply.started":"2024-09-29T08:50:46.96736Z","shell.execute_reply":"2024-09-29T08:50:46.977167Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"EncodeLift,Encode = MyEncoderInplaceDataReturnEncodeLift(data,maxnunique=30)\ndata[col_str].head(3)","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:46.980113Z","iopub.execute_input":"2024-09-29T08:50:46.980578Z","iopub.status.idle":"2024-09-29T08:50:47.017965Z","shell.execute_reply.started":"2024-09-29T08:50:46.98053Z","shell.execute_reply":"2024-09-29T08:50:47.016499Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train['sii'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:47.036542Z","iopub.execute_input":"2024-09-29T08:50:47.037261Z","iopub.status.idle":"2024-09-29T08:50:47.048711Z","shell.execute_reply.started":"2024-09-29T08:50:47.037202Z","shell.execute_reply":"2024-09-29T08:50:47.047587Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"***موازنة الاصناف***","metadata":{}},{"cell_type":"code","source":"sample_class_0 = data[data['sii']==0].sample(567)\nsample_class_1 = data[data['sii']==1].sample(567)\nsample_class_2 = data[data['sii']==2].sample(296)\nsample_class_3 = data[data['sii']==3].sample(28)\n\ndata = pd.concat([sample_class_0,sample_class_1,sample_class_2,sample_class_3]).sample(frac=1)\n# data = pd.concat([sample_class_0,sample_class_1,sample_class_2,]).sample(frac=1)\ndata.shape, data['sii'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:47.050642Z","iopub.execute_input":"2024-09-29T08:50:47.051121Z","iopub.status.idle":"2024-09-29T08:50:47.072886Z","shell.execute_reply.started":"2024-09-29T08:50:47.051068Z","shell.execute_reply":"2024-09-29T08:50:47.071479Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"***تقسيم الداتا لمدخلات و مخرجات***","metadata":{}},{"cell_type":"code","source":"X,y = data.drop(columns=['sii']), data['sii']\nX.describe()","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:47.074858Z","iopub.execute_input":"2024-09-29T08:50:47.075377Z","iopub.status.idle":"2024-09-29T08:50:47.163132Z","shell.execute_reply.started":"2024-09-29T08:50:47.075324Z","shell.execute_reply":"2024-09-29T08:50:47.161786Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y.value_counts()","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:47.164949Z","iopub.execute_input":"2024-09-29T08:50:47.165434Z","iopub.status.idle":"2024-09-29T08:50:47.176482Z","shell.execute_reply.started":"2024-09-29T08:50:47.165371Z","shell.execute_reply":"2024-09-29T08:50:47.175053Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"***تقسيم المدخلات و المخرجات لتدريب و اختبار***","metadata":{}},{"cell_type":"code","source":"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,stratify=y, random_state=44, shuffle =True)\n\n#Splitted Data\nprint('X_train shape is ' , X_train.shape)\nprint('X_test shape is ' , X_test.shape)\nprint('y_train shape is ' , y_train.shape)\nprint('y_test shape is ' , y_test.shape)","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:47.178079Z","iopub.execute_input":"2024-09-29T08:50:47.178547Z","iopub.status.idle":"2024-09-29T08:50:47.19772Z","shell.execute_reply.started":"2024-09-29T08:50:47.178493Z","shell.execute_reply":"2024-09-29T08:50:47.196553Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_test.value_counts()","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:47.199289Z","iopub.execute_input":"2024-09-29T08:50:47.19966Z","iopub.status.idle":"2024-09-29T08:50:47.211705Z","shell.execute_reply.started":"2024-09-29T08:50:47.199623Z","shell.execute_reply":"2024-09-29T08:50:47.210597Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"***تجهيز العديد من النماذج***","metadata":{}},{"cell_type":"code","source":"###########################################\n\nGaussianNBModel = GaussianNB()\nMultinomialNBModel = MultinomialNB(alpha=1.0)\nBernoulliNBModel = BernoulliNB(alpha=1.0,binarize=1)\nLogisticRegressionModel = LogisticRegression(penalty='l2',solver='sag',C=1.0,random_state=33)\nSGDClassifierModel = SGDClassifier(penalty='l2',loss='squared_loss',learning_rate='optimal',random_state=33)\nRandomForestClassifierModel = RandomForestClassifier(criterion = 'gini',n_estimators=300,max_depth=7,random_state=33) \nGBCModel = GradientBoostingClassifier(n_estimators=100,max_depth=3,random_state=33) \nQDAModel = QuadraticDiscriminantAnalysis(tol=0.0001)\nSVCModel = SVC(kernel= 'rbf',max_iter=100,C=1.0,gamma='auto')\nDecisionTreeClassifierModel = DecisionTreeClassifier(criterion='gini',max_depth=3,random_state=33)\nKNNClassifierModel = KNeighborsClassifier(n_neighbors= 5,weights ='uniform',algorithm='auto') \n","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:47.213256Z","iopub.execute_input":"2024-09-29T08:50:47.213611Z","iopub.status.idle":"2024-09-29T08:50:47.227796Z","shell.execute_reply.started":"2024-09-29T08:50:47.213572Z","shell.execute_reply":"2024-09-29T08:50:47.226679Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\nModels = {'GaussianNBModel':GaussianNBModel,'KNNClassifierModel':KNNClassifierModel,\n          'MultinomialNBModel':MultinomialNBModel,'BernoulliNBModel':BernoulliNBModel,\n          'LogisticRegressionModel':LogisticRegressionModel,'RandomForestClassifierModel':RandomForestClassifierModel,\n          'GBCModel':GBCModel,'QDAModel':QDAModel,\n          'SVCModel':SVCModel,'DecisionTreeClassifierModel':DecisionTreeClassifierModel}\n","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:47.232483Z","iopub.execute_input":"2024-09-29T08:50:47.233638Z","iopub.status.idle":"2024-09-29T08:50:47.248106Z","shell.execute_reply.started":"2024-09-29T08:50:47.233575Z","shell.execute_reply":"2024-09-29T08:50:47.246962Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"***تدريب جميع النماذج و المقارنة للمقارنة بينها***","metadata":{}},{"cell_type":"code","source":"###########################################\n# التصنيف \nModelsScore = {}\nfor strModel in Models : \n    Model = Models[strModel]\n    print(f'for Model {str(Model).split(\"(\")[0]}')\n    Model.fit(X_train, y_train)\n    print(f'Train Score is : {Model.score(X_train, y_train)}')\n    print(f'Test Score is : {Model.score(X_test, y_test)}')\n    y_pred = Model.predict(X_test)\n    ClassificationReport = classification_report(y_test,y_pred)\n    print('Classification Report is : \\n', ClassificationReport )\n    # print(f'Precision value is  : {ClassificationReport.split()[19]}')\n    # print(f'Recall value is  : {ClassificationReport.split()[20]}')\n    # print(f'F1 Score value is  : {ClassificationReport.split()[21]}')\n    ModelsScore[strModel] = (ClassificationReport[ClassificationReport.index('macro avg       ') :\n                                                  ClassificationReport.index('\\nweighted avg')]\n                            ).split('      ')[-2]\n\n    print('=================================================') \n    # str(Model).split(\"(\")[0]\n       ","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:47.249954Z","iopub.execute_input":"2024-09-29T08:50:47.250508Z","iopub.status.idle":"2024-09-29T08:50:50.945291Z","shell.execute_reply.started":"2024-09-29T08:50:47.250452Z","shell.execute_reply":"2024-09-29T08:50:50.944186Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"ModelsScore = pd.Series(ModelsScore).sort_values(ascending=0)\nBest_model  = Models[ModelsScore.index[0]]\nModelsScore","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:50.947281Z","iopub.execute_input":"2024-09-29T08:50:50.947702Z","iopub.status.idle":"2024-09-29T08:50:50.958996Z","shell.execute_reply.started":"2024-09-29T08:50:50.947654Z","shell.execute_reply":"2024-09-29T08:50:50.957725Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_pred = Best_model.predict(X_test)\nClassificationReport = classification_report(y_test,y_pred)\nprint('Classification Report is : ')\nprint(ClassificationReport)","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:50.960724Z","iopub.execute_input":"2024-09-29T08:50:50.96116Z","iopub.status.idle":"2024-09-29T08:50:50.984576Z","shell.execute_reply.started":"2024-09-29T08:50:50.961114Z","shell.execute_reply":"2024-09-29T08:50:50.98353Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# submission = sample_submission.copy()\n# submission['sii'] = Best_model.predict(test)\n# submission.to_csv('submission.csv',index=False)\n# submission.head()","metadata":{"execution":{"iopub.status.busy":"2024-09-29T08:50:50.985839Z","iopub.execute_input":"2024-09-29T08:50:50.986226Z","iopub.status.idle":"2024-09-29T08:50:51.002893Z","shell.execute_reply.started":"2024-09-29T08:50:50.986188Z","shell.execute_reply":"2024-09-29T08:50:51.001539Z"},"trusted":true},"outputs":[],"execution_count":null}]}