{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport seaborn as sns\nimport matplotlib.pyplot as plt\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.linear_model import LogisticRegression \nfrom sklearn.ensemble import AdaBoostClassifier ,RandomForestClassifier ,GradientBoostingClassifier ,ExtraTreesClassifier\nfrom sklearn.metrics import classification_report ,confusion_matrix , f1_score ,accuracy_score ,precision_score ,recall_score\nfrom sklearn.tree import DecisionTreeClassifier\nfrom sklearn.svm import SVC, LinearSVC\nfrom sklearn.naive_bayes import MultinomialNB , GaussianNB\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom xgboost import XGBClassifier\nfrom lightgbm import LGBMClassifier\nfrom catboost import CatBoostClassifier\nfrom sklearn.utils import resample\nimport os\n# pd.options.display.max_rows = None\n# pd.options.display.max_columns = None\nimport gc\nfrom tqdm import tqdm\nimport warnings \nwarnings.filterwarnings('ignore')","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-08-03T14:04:58.285497Z","iopub.execute_input":"2022-08-03T14:04:58.285889Z","iopub.status.idle":"2022-08-03T14:04:58.294787Z","shell.execute_reply.started":"2022-08-03T14:04:58.285857Z","shell.execute_reply":"2022-08-03T14:04:58.293311Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"gc.collect()\nfile_path = '../input/santander-customer-transaction-prediction-dataset/train.csv'\ntrain = pd.read_csv(file_path)\ntrain","metadata":{"execution":{"iopub.status.busy":"2022-08-03T14:04:59.219355Z","iopub.execute_input":"2022-08-03T14:04:59.219747Z","iopub.status.idle":"2022-08-03T14:05:08.673744Z","shell.execute_reply.started":"2022-08-03T14:04:59.219716Z","shell.execute_reply":"2022-08-03T14:05:08.672621Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# test = pd.read_csv('../input/santander-customer-transaction-prediction/test.csv')\n# test","metadata":{"execution":{"iopub.status.busy":"2022-08-03T14:05:19.872560Z","iopub.execute_input":"2022-08-03T14:05:19.873385Z","iopub.status.idle":"2022-08-03T14:05:19.878204Z","shell.execute_reply.started":"2022-08-03T14:05:19.873345Z","shell.execute_reply":"2022-08-03T14:05:19.876921Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Basic EDA","metadata":{}},{"cell_type":"code","source":"train.drop('ID_code',axis=1,inplace=True)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T14:05:21.097163Z","iopub.execute_input":"2022-08-03T14:05:21.097568Z","iopub.status.idle":"2022-08-03T14:05:21.240023Z","shell.execute_reply.started":"2022-08-03T14:05:21.097536Z","shell.execute_reply":"2022-08-03T14:05:21.238856Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(train.info())","metadata":{"execution":{"iopub.status.busy":"2022-08-03T14:05:21.503349Z","iopub.execute_input":"2022-08-03T14:05:21.504144Z","iopub.status.idle":"2022-08-03T14:05:21.531353Z","shell.execute_reply.started":"2022-08-03T14:05:21.504099Z","shell.execute_reply":"2022-08-03T14:05:21.530208Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cor = train.corr()\ncor = cor['target'].sort_values(ascending=False)\ncor = cor[1:]\ncor_df = pd.DataFrame(cor)\nplt.figure(figsize=(15,5))\nsns.barplot(y=cor_df.target,x=cor_df.index)\nplt.xticks(rotation=90)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-03T14:05:36.397591Z","iopub.execute_input":"2022-08-03T14:05:36.398419Z","iopub.status.idle":"2022-08-03T14:06:00.952247Z","shell.execute_reply.started":"2022-08-03T14:05:36.398373Z","shell.execute_reply":"2022-08-03T14:06:00.951044Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.describe().T","metadata":{"execution":{"iopub.status.busy":"2022-08-03T14:06:00.954587Z","iopub.execute_input":"2022-08-03T14:06:00.955056Z","iopub.status.idle":"2022-08-03T14:06:03.186465Z","shell.execute_reply.started":"2022-08-03T14:06:00.955011Z","shell.execute_reply":"2022-08-03T14:06:03.185377Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('# Columns : ',len(train.columns))\nprint('Columns Name : ')\nprint(train.columns)\nprint('-'*100)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T14:06:03.188676Z","iopub.execute_input":"2022-08-03T14:06:03.189202Z","iopub.status.idle":"2022-08-03T14:06:03.195347Z","shell.execute_reply.started":"2022-08-03T14:06:03.189170Z","shell.execute_reply":"2022-08-03T14:06:03.194249Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.countplot(train['target'])\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-03T14:06:04.708184Z","iopub.execute_input":"2022-08-03T14:06:04.708598Z","iopub.status.idle":"2022-08-03T14:06:04.895551Z","shell.execute_reply.started":"2022-08-03T14:06:04.708560Z","shell.execute_reply":"2022-08-03T14:06:04.894474Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train['target'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2022-08-03T14:06:08.801507Z","iopub.execute_input":"2022-08-03T14:06:08.802324Z","iopub.status.idle":"2022-08-03T14:06:08.812045Z","shell.execute_reply.started":"2022-08-03T14:06:08.802281Z","shell.execute_reply":"2022-08-03T14:06:08.810663Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def train_test_model(models,df):\n    # Split Data\n    y = df['target'].copy()\n    x = df.drop('target',axis=1).copy()\n    x_train,x_test ,y_train,y_test = train_test_split(x,y,\n                                                      test_size=.3,\n                                                      random_state=42)\n    \n    model_accuracy = []\n    \n    for model in tqdm(models):\n        try:\n            # Train & Predict Data\n            model.fit(x_train,y_train)\n            y_h = model.predict(x_test)\n\n            # EVALUATE MODEL\n            f_score = f1_score(y_test,y_h)\n            precision = precision_score(y_test,y_h)\n            recall = recall_score(y_test,y_h)\n            accuracy = accuracy_score(y_test,y_h) \n            \n            # Save Result\n            model_accuracy.append([\n                model.__class__.__name__,\n                f_score,\n                accuracy,\n                precision ,\n                recall\n                                  ])\n        except:\n            pass\n    \n    del x_train , x_test ,y_train,y_test ,x , y , y_h , model \n    del f_score, accuracy, precision , recall\n    \n    return pd.DataFrame(model_accuracy,columns=['name','f1_score',\n                                                'acc','precision',\n                                                'recall'])\\\n                    .sort_values(by='f1_score',ascending=False)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T14:06:09.504174Z","iopub.execute_input":"2022-08-03T14:06:09.504816Z","iopub.status.idle":"2022-08-03T14:06:09.515053Z","shell.execute_reply.started":"2022-08-03T14:06:09.504763Z","shell.execute_reply":"2022-08-03T14:06:09.513832Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# models = [\n#          RandomForestClassifier(random_state=42),\n#          LogisticRegression(random_state=42),\n#          SVC(),\n#          XGBClassifier(),\n#          AdaBoostClassifier(random_state=42),\n#          GradientBoostingClassifier(random_state=42),\n#          MultinomialNB(),\n#          KNeighborsClassifier(),\n#          CatBoostClassifier(verbose=False),\n#          LGBMClassifier(random_state=42),\n#          DecisionTreeClassifier(random_state=42),\n#          LinearSVC(random_state=42) ,\n#          ExtraTreesClassifier(random_state=42),\n#          GaussianNB()\n#          ] \n\n# train_test_model(models,train)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T12:47:25.558577Z","iopub.execute_input":"2022-08-03T12:47:25.559070Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# After Resample","metadata":{}},{"cell_type":"code","source":"train.target.value_counts()","metadata":{"execution":{"iopub.status.busy":"2022-08-03T14:06:19.078827Z","iopub.execute_input":"2022-08-03T14:06:19.079258Z","iopub.status.idle":"2022-08-03T14:06:19.090682Z","shell.execute_reply.started":"2022-08-03T14:06:19.079225Z","shell.execute_reply":"2022-08-03T14:06:19.089668Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_z = train[train.target == 0 ]\ndf_o = train[train.target == 1 ]\n \n# Downsample majority class\ndf_majority_downsampled = resample(df_z, \n                                 replace=False,    # sample without replacement\n                                 n_samples=df_o.shape[0],   # to match minority class\n                                 random_state=42) \n \n# Combine minority class with downsampled majority class\ndf_downsampled = pd.concat([df_majority_downsampled, df_o])\ndf_downsampled.reset_index(drop=True,inplace=True)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T14:06:19.988839Z","iopub.execute_input":"2022-08-03T14:06:19.989280Z","iopub.status.idle":"2022-08-03T14:06:20.273344Z","shell.execute_reply.started":"2022-08-03T14:06:19.989245Z","shell.execute_reply":"2022-08-03T14:06:20.272165Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"models = [\n         RandomForestClassifier(random_state=42),\n         LogisticRegression(random_state=42),\n         SVC(),\n         XGBClassifier(),\n         AdaBoostClassifier(random_state=42),\n         GradientBoostingClassifier(random_state=42),\n         MultinomialNB(),\n         GaussianNB(),\n         KNeighborsClassifier(),\n         CatBoostClassifier(verbose=False),\n         LGBMClassifier(random_state=42),\n         DecisionTreeClassifier(random_state=42),\n         LinearSVC(random_state=42) ,\n         ExtraTreesClassifier(random_state=42)\n    \n         ] \n\ntrain_test_model(models,df_downsampled)\n# catboost 80%  with f1_score","metadata":{"execution":{"iopub.status.busy":"2022-08-03T14:06:22.171761Z","iopub.execute_input":"2022-08-03T14:06:22.172216Z","iopub.status.idle":"2022-08-03T14:18:19.263049Z","shell.execute_reply.started":"2022-08-03T14:06:22.172180Z","shell.execute_reply":"2022-08-03T14:18:19.261281Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}