{"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 pandas as pd\nfrom sklearn.preprocessing import normalize\nimport numpy as np","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-08-16T14:14:59.837847Z","iopub.execute_input":"2022-08-16T14:14:59.838379Z","iopub.status.idle":"2022-08-16T14:15:00.794560Z","shell.execute_reply.started":"2022-08-16T14:14:59.838277Z","shell.execute_reply":"2022-08-16T14:15:00.793185Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def process_data(data):\n    # Data cleaning: remove >50% na\n    cols_with_50pc_missing = [col for col in data.columns if data[col].isna().sum() >  0.5*len(data.index)]\n    data = data.drop(columns=cols_with_50pc_missing)\n\n    # Feature engineering: number of transactions\n    numTx = data['customer_ID'].value_counts().tolist()\n    data = data.groupby('customer_ID').tail(1)\n    data = data.reset_index(drop=True)\n    cust_ids=data['customer_ID']\n    data = data.set_index(['customer_ID'])\n    data.insert(2,\"numTx\",numTx)\n    data = data.drop(columns=[\"S_2\"])\n\n    # Data imputation: Fill up na\n    for i in data.columns:\n        data[i] = data[i].fillna(data[i].mean())\n    \n    c=['P_2','D_39','B_1','B_2','R_1','S_3','D_41','B_3','D_43','D_44','B_4','D_45','B_5','R_2','D_46','D_47','D_48','D_49','B_6','B_7','B_8','D_51','B_9','R_3','D_52','P_3','B_10','S_5','B_11','S_6','D_54','R_4','S_7','B_12','S_8','D_55',\n 'B_13',\n 'R_5',\n 'D_58',\n 'B_14',\n 'D_59',\n 'D_60',\n 'D_61',\n 'B_15',\n 'S_11',\n 'D_62',\n 'D_63',\n 'D_64',\n 'D_65',\n 'B_16',\n 'B_18',\n 'B_19',\n 'D_66',\n 'B_20',\n 'D_68',\n 'S_12',\n 'R_6',\n 'S_13',\n 'B_21',\n 'D_69',\n 'B_22',\n 'D_70',\n 'D_71',\n 'D_72',\n 'S_15',\n 'B_23',\n 'P_4',\n 'D_74',\n 'D_75',\n 'B_24',\n 'R_7',\n 'D_77',\n 'B_25',\n 'B_26',\n 'D_78',\n 'D_79',\n 'R_8',\n 'R_9',\n 'S_16',\n 'D_80',\n 'R_10',\n 'R_11',\n 'B_27',\n 'D_81',\n 'D_82',\n 'S_17',\n 'R_12',\n 'B_28',\n 'R_13',\n 'D_83',\n 'R_14',\n 'R_15',\n 'D_84',\n 'R_16',\n 'B_30',\n 'S_18',\n 'D_86',\n 'D_87',\n 'R_17',\n 'R_18',\n 'B_31',\n 'S_19',\n 'R_19',\n 'B_32',\n 'S_20',\n 'R_20',\n 'R_21',\n 'B_33',\n 'D_89',\n 'R_22',\n 'R_23',\n 'D_91',\n 'D_92',\n 'D_93',\n 'D_94',\n 'R_24',\n 'R_25',\n 'D_96',\n 'S_22',\n 'S_23',\n 'S_24',\n 'S_25',\n 'S_26',\n 'D_102',\n 'D_103',\n 'D_104',\n 'D_106',\n 'D_107',\n 'B_36',\n 'B_37',\n 'R_26',\n 'R_27',\n 'B_38',\n 'D_108',\n 'D_109',\n 'D_111',\n 'D_112',\n 'B_40',\n 'S_27',\n 'D_113',\n 'D_114',\n 'D_115',\n 'D_116',\n 'D_117',\n 'D_118',\n 'D_119',\n 'D_120',\n 'D_121',\n 'D_122',\n 'D_123',\n 'D_124',\n 'D_125',\n 'D_126',\n 'D_127',\n 'D_128',\n 'D_129',\n 'B_41',\n 'D_130',\n 'D_131',\n 'D_133',\n 'R_28',\n 'D_135',\n 'D_136',\n 'D_137',\n 'D_138',\n 'D_139',\n 'D_140',\n 'D_141',\n 'D_143',\n 'D_144',\n 'D_145']\n    for col in data.columns:\n        if col not in ['target']:\n            data[col]=normalize([data[col]])[0]\n    \n    data['overall_Risk']=data[[col for col in data.columns if col.startswith('R')]].mean(axis=1)\n    data['overall_Balance']=data[[col for col in data.columns if col.startswith('B')]].mean(axis=1)\n    data['overall_Deliquency']=data[[col for col in data.columns if col.startswith('D')]].mean(axis=1)\n    data['overall_Spend']=data[[col for col in data.columns if col.startswith('S')]].mean(axis=1)\n    data['overall_Payment']=data[[col for col in data.columns if col.startswith('P')]].mean(axis=1)\n    \n    data['risk_by_balance']=data['overall_Risk']/data['overall_Balance']\n    data['risk_by_deliquency']=data['overall_Risk']/data['overall_Deliquency']\n    data['risk_by_spend']=data['overall_Risk']/data['overall_Spend']\n    data['risk_by_payment']=data['overall_Risk']/data['overall_Payment']\n    \n    \n    data['balance_by_deliquency']=data['overall_Balance']/data['overall_Deliquency']\n    data['balance_by_spend']=data['overall_Balance']/data['overall_Spend']\n    data['balance_by_payment']=data['overall_Balance']/data['overall_Payment']\n    \n    \n    data['delequincy_by_balance']=data['overall_Deliquency']/data['overall_Balance']\n    data['delequincy_by_spend']=data['overall_Deliquency']/data['overall_Spend']\n    data['delequincy_by_payment']=data['overall_Deliquency']/data['overall_Payment']\n    \n    \n    return data,cust_ids","metadata":{"execution":{"iopub.status.busy":"2022-08-16T14:15:00.797192Z","iopub.execute_input":"2022-08-16T14:15:00.797902Z","iopub.status.idle":"2022-08-16T14:15:00.824434Z","shell.execute_reply.started":"2022-08-16T14:15:00.797858Z","shell.execute_reply":"2022-08-16T14:15:00.823176Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"TrainData = pd.read_parquet('/kaggle/input/amex-data-integer-dtypes-parquet-format/train.parquet')\nTrainLabel  = pd.read_csv('/kaggle/input/amex-default-prediction/train_labels.csv', low_memory=True)\nTrainData = TrainData.merge(TrainLabel, how = 'inner', on = 'customer_ID')","metadata":{"execution":{"iopub.status.busy":"2022-08-16T14:33:20.975602Z","iopub.execute_input":"2022-08-16T14:33:20.976060Z","iopub.status.idle":"2022-08-16T14:36:10.871836Z","shell.execute_reply.started":"2022-08-16T14:33:20.976023Z","shell.execute_reply":"2022-08-16T14:36:10.870661Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"TrainData,_=process_data(TrainData)","metadata":{"execution":{"iopub.status.busy":"2022-08-16T14:36:10.873943Z","iopub.execute_input":"2022-08-16T14:36:10.874721Z","iopub.status.idle":"2022-08-16T14:36:25.451630Z","shell.execute_reply.started":"2022-08-16T14:36:10.874684Z","shell.execute_reply":"2022-08-16T14:36:25.450650Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"TrainData.head()","metadata":{"execution":{"iopub.status.busy":"2022-08-16T14:18:03.549028Z","iopub.execute_input":"2022-08-16T14:18:03.549374Z","iopub.status.idle":"2022-08-16T14:18:03.585436Z","shell.execute_reply.started":"2022-08-16T14:18:03.549343Z","shell.execute_reply":"2022-08-16T14:18:03.584372Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train=TrainData['target']\nx_train=TrainData.drop(['target'],axis=1)","metadata":{"execution":{"iopub.status.busy":"2022-08-16T14:18:03.586968Z","iopub.execute_input":"2022-08-16T14:18:03.587569Z","iopub.status.idle":"2022-08-16T14:18:04.257476Z","shell.execute_reply.started":"2022-08-16T14:18:03.587525Z","shell.execute_reply":"2022-08-16T14:18:04.256192Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nfrom sklearn.metrics import accuracy_score  \nfrom sklearn.metrics import precision_score                         \nfrom sklearn.metrics import recall_score\nx_train_split, x_test_split, y_train_split, y_test_split = train_test_split(x_train, y_train, test_size=0.25, random_state=26,stratify=y_train)","metadata":{"execution":{"iopub.status.busy":"2022-08-16T14:18:04.258903Z","iopub.execute_input":"2022-08-16T14:18:04.259960Z","iopub.status.idle":"2022-08-16T14:18:05.286348Z","shell.execute_reply.started":"2022-08-16T14:18:04.259922Z","shell.execute_reply":"2022-08-16T14:18:05.285211Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from catboost import CatBoostClassifier\nmodel_cat=CatBoostClassifier(bootstrap_type='MVS',boosting_type='Plain',num_boost_round=3000,task_type='CPU',bagging_temperature = 0.2)\nmodel_cat.fit(x_train_split,y_train_split)","metadata":{"execution":{"iopub.status.busy":"2022-08-16T14:29:02.238151Z","iopub.execute_input":"2022-08-16T14:29:02.238883Z","iopub.status.idle":"2022-08-16T14:29:23.760596Z","shell.execute_reply.started":"2022-08-16T14:29:02.238842Z","shell.execute_reply":"2022-08-16T14:29:23.759320Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_predict=model_cat.predict(x_test_split)\nprint('Cat Boost Classifier Accuracy: {:.3f}'.format(accuracy_score(y_test_split, y_predict)))\nprint('Cat Boost Classifier Recall: {:.3f}'.format(recall_score (y_test_split, y_predict)))\nprint('Cat Boost Classifier Precision: {:.3f}'.format(precision_score (y_test_split, y_predict)))","metadata":{"execution":{"iopub.status.busy":"2022-08-16T14:29:23.762474Z","iopub.execute_input":"2022-08-16T14:29:23.763100Z","iopub.status.idle":"2022-08-16T14:29:24.004861Z","shell.execute_reply.started":"2022-08-16T14:29:23.763066Z","shell.execute_reply":"2022-08-16T14:29:24.003773Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from xgboost import XGBClassifier\nmodel_XG=XGBClassifier()\nmodel_XG.fit(x_train_split,y_train_split)\ny_predict=model_XG.predict(x_test_split)\nprint('XG Boost Classifier Accuracy: {:.3f}'.format(accuracy_score(y_test_split, y_predict)))\nprint('XG Boost Classifier Recall: {:.3f}'.format(recall_score (y_test_split, y_predict)))\nprint('XG Boost Classifier Precision: {:.3f}'.format(precision_score (y_test_split, y_predict)))","metadata":{"execution":{"iopub.status.busy":"2022-08-16T14:20:29.755078Z","iopub.execute_input":"2022-08-16T14:20:29.755483Z","iopub.status.idle":"2022-08-16T14:26:48.242654Z","shell.execute_reply.started":"2022-08-16T14:20:29.755449Z","shell.execute_reply":"2022-08-16T14:26:48.240912Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from lightgbm import LGBMClassifier\nmodel_lgbm=LGBMClassifier()\nmodel_lgbm.fit(x_train_split,y_train_split)\ny_predict=model_lgbm.predict(x_test_split)\nprint('Light GBM Classifier Accuracy: {:.3f}'.format(accuracy_score(y_test_split, y_predict)))\nprint('Light GBM Classifier Recall: {:.3f}'.format(recall_score (y_test_split, y_predict)))\nprint('Light GBM Classifier Precision: {:.3f}'.format(precision_score (y_test_split, y_predict)))","metadata":{"execution":{"iopub.status.busy":"2022-08-16T14:27:36.050119Z","iopub.execute_input":"2022-08-16T14:27:36.050547Z","iopub.status.idle":"2022-08-16T14:27:59.282410Z","shell.execute_reply.started":"2022-08-16T14:27:36.050514Z","shell.execute_reply":"2022-08-16T14:27:59.281230Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import gc\ndel x_train_split, x_test_split, y_train_split, y_test_split, TrainData\ngc.collect()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"TestData  = pd.read_parquet('/kaggle/input/amex-data-integer-dtypes-parquet-format/test.parquet')","metadata":{"execution":{"iopub.status.busy":"2022-08-16T14:36:55.837302Z","iopub.execute_input":"2022-08-16T14:36:55.838042Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"TestData,cust_ids=process_data(TestData)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"TestData.head()","metadata":{"execution":{"iopub.status.busy":"2022-08-16T14:31:10.655641Z","iopub.execute_input":"2022-08-16T14:31:10.656115Z","iopub.status.idle":"2022-08-16T14:31:10.686060Z","shell.execute_reply.started":"2022-08-16T14:31:10.656068Z","shell.execute_reply":"2022-08-16T14:31:10.684970Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"del TestData['S_9']","metadata":{"execution":{"iopub.status.busy":"2022-08-16T14:36:37.493115Z","iopub.execute_input":"2022-08-16T14:36:37.494159Z","iopub.status.idle":"2022-08-16T14:36:37.501656Z","shell.execute_reply.started":"2022-08-16T14:36:37.494118Z","shell.execute_reply":"2022-08-16T14:36:37.500426Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_test_predict=model_cat.predict_proba(TestData)\npred_final_cbm=y_test_predict[:,1]\ny_test_predict=model_XG.predict_proba(TestData)\npred_final_xgbm=y_test_predict[:,1]\ny_test_predict=model_lgbm.predict_proba(TestData)\npred_final_lgbm=y_test_predict[:,1]","metadata":{"execution":{"iopub.status.busy":"2022-08-16T14:32:38.811914Z","iopub.execute_input":"2022-08-16T14:32:38.813266Z","iopub.status.idle":"2022-08-16T14:32:38.871938Z","shell.execute_reply.started":"2022-08-16T14:32:38.813208Z","shell.execute_reply":"2022-08-16T14:32:38.869938Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pred_df= pd.DataFrame({'lgbm':pred_final_lgbm,'xgbm':pred_final_xgbm,'catboost':pred_final_cbm})\npred_df['mean'] = (pred_df['lgbm'] + pred_df['xgbm'] + pred_df['catboost'])/3\npred_mean_values=pred_df['mean'].values","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Merge the prediction and customer_ID into submission dataframe\nsubmission = pd.DataFrame({\"customer_ID\":TestData.index,\"prediction\":pred_mean_values})\n\nsubmission.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-08-16T13:52:57.439847Z","iopub.execute_input":"2022-08-16T13:52:57.440291Z","iopub.status.idle":"2022-08-16T13:53:00.769487Z","shell.execute_reply.started":"2022-08-16T13:52:57.440253Z","shell.execute_reply":"2022-08-16T13:53:00.768493Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}