{"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\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom imblearn.over_sampling import SMOTE\nfrom sklearn.preprocessing import LabelEncoder,MinMaxScaler,OrdinalEncoder\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import classification_report,confusion_matrix\n\n\nfrom lightgbm import LGBMClassifier, early_stopping, log_evaluation\nfrom sklearn.model_selection import StratifiedKFold\nfrom sklearn.metrics import roc_auc_score, roc_curve, auc\n\nimport xgboost as xgb\nfrom  xgboost import XGBRFClassifier","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_parquet(\"../input/amex-data-integer-dtypes-parquet-format/train.parquet\")\ntan_lab =pd.read_csv(\"../input/amex-default-prediction/train_labels.csv\")\ntrain = train.merge(tan_lab, how = 'inner', on = 'customer_ID')\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lab = LabelEncoder()\ntrain['customer_ID']= lab.fit_transform(train['customer_ID'])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = train.groupby('customer_ID').tail(1).set_index('customer_ID')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\ntest = pd.read_parquet(\"../input/amex-data-integer-dtypes-parquet-format/test.parquet\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test['customer_ID']= lab.fit_transform(test['customer_ID'])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test = test.groupby('customer_ID').tail(1).set_index('customer_ID')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y = train.target\nX = train.drop([\"target\",\"S_2\"],axis=1)\n\n\ntest = test.drop([\"S_2\"],axis=1)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = X.fillna(-123)\ntest = test.fillna(-123)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cat_cols =['B_30', 'B_38', 'D_63', 'D_64', 'D_66', 'D_68', 'D_114', 'D_116', 'D_117', 'D_120', 'D_126']\nnum_cols = [col for col in X.columns if col not in cat_cols ]","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"D_n_cols = [col for col in num_cols if col.startswith(\"D\")]\nS_n_cols = [col for col in num_cols if col.startswith(\"S\")]\nP_n_cols = [col for col in num_cols if col.startswith(\"P\")]\nB_n_cols = [col for col in num_cols if col.startswith(\"B\")]\nR_n_cols = [col for col in num_cols if col.startswith(\"R\")]\nD_c_cols = [col for col in cat_cols if col.startswith(\"D\")]\nB_c_cols = [col for col in cat_cols if col.startswith(\"B\")] ","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\nX[\"D_mean\"]=X[D_n_cols].mean(axis=1)\nX[\"S_mean\"]=X[S_n_cols].mean(axis=1)\nX[\"P_mean\"]=X[P_n_cols].mean(axis=1)\nX[\"B_mean\"]=X[B_n_cols].mean(axis=1)\nX[\"R_mean\"]=X[R_n_cols].mean(axis=1)\n\nX[\"D_max\"]=X[D_n_cols].max(axis=1)\nX[\"S_max\"]=X[S_n_cols].max(axis=1)\nX[\"P_max\"]=X[P_n_cols].max(axis=1)\nX[\"B_max\"]=X[B_n_cols].max(axis=1)\nX[\"R_max\"]=X[R_n_cols].max(axis=1)\n\nX[\"D_min\"]=X[D_n_cols].min(axis=1)\nX[\"S_min\"]=X[S_n_cols].min(axis=1)\nX[\"P_min\"]=X[P_n_cols].min(axis=1)\nX[\"B_min\"]=X[B_n_cols].min(axis=1)\nX[\"R_min\"]=X[R_n_cols].min(axis=1)\n\nX[\"D_c_unique\"]=X[D_c_cols].nunique(axis=1)\nX[\"B_c_unique\"]=X[B_c_cols].nunique(axis=1)\n\nX['mat_num'] =X[\"B_mean\"]+ X[\"D_mean\"] +X[\"S_mean\"] +X[\"P_mean\"] + X[\"R_mean\"]\n\ntest[\"D_mean\"]=test[D_n_cols].mean(axis=1)\ntest[\"S_mean\"]=test[S_n_cols].mean(axis=1)\ntest[\"P_mean\"]=test[P_n_cols].mean(axis=1)\ntest[\"B_mean\"]=test[B_n_cols].mean(axis=1)\ntest[\"R_mean\"]=test[R_n_cols].mean(axis=1)\n\ntest[\"D_max\"]=test[D_n_cols].max(axis=1)\ntest[\"S_max\"]=test[S_n_cols].max(axis=1)\ntest[\"P_max\"]=test[P_n_cols].max(axis=1)\ntest[\"B_max\"]=test[B_n_cols].max(axis=1)\ntest[\"R_max\"]=test[R_n_cols].max(axis=1)\n\ntest[\"D_min\"]=test[D_n_cols].min(axis=1)\ntest[\"S_min\"]=test[S_n_cols].min(axis=1)\ntest[\"P_min\"]=test[P_n_cols].min(axis=1)\ntest[\"B_min\"]=test[B_n_cols].min(axis=1)\ntest[\"R_min\"]=test[R_n_cols].min(axis=1)\n\ntest[\"D_c_unique\"]=test[D_c_cols].nunique(axis=1)\ntest[\"B_c_unique\"]=test[B_c_cols].nunique(axis=1)\n\ntest['mat_num'] =test[\"B_mean\"]+ test[\"D_mean\"] +test[\"S_mean\"] +test[\"P_mean\"] + test[\"R_mean\"]\n\n\nprint(X.shape,test.shape)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\nfrom sklearn.preprocessing import OrdinalEncoder\nordinal_encoder = OrdinalEncoder()\n\nX[cat_cols]= ordinal_encoder.fit_transform(X[cat_cols])\ntest[cat_cols] = ordinal_encoder.transform(test[cat_cols])\n\nX.shape,test.shape","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"scaler = MinMaxScaler()\n\nX[num_cols] = scaler.fit_transform(X[num_cols])\ntest[num_cols] = scaler.transform(test[num_cols])\n\nX[cat_cols] = scaler.fit_transform(X[cat_cols])\ntest[cat_cols] = scaler.transform(test[cat_cols])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y.value_counts()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X.shape,y.shape","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\nsmote = SMOTE(sampling_strategy='minority')\nX_sm,y_sm = smote.fit_resample(X,y)\ny_sm.value_counts()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_sm.shape,y_sm.shape","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_f = np.array(X_sm)\ny_f = np.array(y_sm)\n\ntest = np.array(test)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_f.shape,test.shape,y_f.shape","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train, X_val, Y_train, Y_val = train_test_split(X_f, y_f, test_size = 0.20, random_state=2021,stratify=y_f)\nprint(\"x_train shape\",X_train.shape)\nprint(\"x_test shape\",X_val.shape)\nprint(\"y_train shape\",Y_train.shape)\nprint(\"y_test shape\",Y_val.shape)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"param={'booster': 'dart',\n 'lambda': 0.000156469894565185,\n 'alpha': 0.10410870792558755,\n 'subsample': 0.6674526274907548,\n 'colsample_bytree': 0.5480184568542634,\n 'max_depth': 9,\n 'min_child_weight': 8,\n 'eta': 0.16148473311025344,\n 'gamma': 3.3872652561508726e-05,\n 'grow_policy': 'lossguide',\n 'sample_type': 'weighted',\n 'normalize_type': 'forest',\n 'rate_drop': 2.519962453550491e-07,\n 'skip_drop': 0.0037991281511123055}","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"gbm =LGBMClassifier(**param).fit(X_train, Y_train, \n                                       eval_set=[(X_train, Y_train), (X_val, Y_val)],\n                                       callbacks=[early_stopping(200), log_evaluation(500)],\n                                       eval_metric=['auc','binary_logloss'])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions = gbm.predict(X_val)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cf = classification_report(Y_val,predictions)\nprint(cf)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cm = confusion_matrix(Y_val,predictions)\n\nplt.figure(figsize=(10,7))\n\nsns.heatmap(cm,annot=True,fmt='d')\n\nplt.xlabel('Predicted')\nplt.ylabel('Truth')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prd_test = gbm.predict_proba(test)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds = pd.DataFrame(prd_test)\npred_final = np.array(preds[1])\npred_final","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission = pd.read_csv(\"../input/amex-default-prediction/sample_submission.csv\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission['prediction']=pred_final","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.to_csv(\"submission.csv\",index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}