{"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":"\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nfrom sklearn.preprocessing import LabelEncoder,MinMaxScaler\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import classification_report,confusion_matrix\n\nimport xgboost as xgb\nfrom xgboost import XGBClassifier\n\nimport warnings, gc\nwarnings.filterwarnings(\"ignore\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\ntrain = pd.read_parquet(\"../input/amex-data-integer-dtypes-parquet-format/train.parquet\")\nlabel = pd.read_csv(\"../input/amex-default-prediction/train_labels.csv\")\ntrain = train.merge(label,how='inner',on=\"customer_ID\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nlab = LabelEncoder()\ntrain['customer_ID']= lab.fit_transform(train['customer_ID'])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\ntrain = train.groupby(['customer_ID']).tail(1).set_index('customer_ID')\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.shape","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)\ntest = test.drop(['S_2'],axis=1)\n\nX = X.fillna(-123)\ntest = test.fillna(-123)","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":"cat_cols = ['B_30', 'B_38', 'D_63', 'D_64', 'D_66', 'D_68', 'D_114', 'D_116', 'D_117', 'D_120', 'D_126']\n\nnum_cols = [col for col in X.columns if col not in cat_cols]\n\nall_cols = [cat_cols,num_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":"len(D_n_cols),  len(S_n_cols), len(P_n_cols), len(B_n_cols),len(R_n_cols), len(D_c_cols),len(B_c_cols)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time \nX_num_agg_D = X.groupby(\"customer_ID\")[D_n_cols].agg(['mean','min', 'last'])\nX_num_agg_D.columns = ['_'.join(x) for x in X_num_agg_D.columns]\n\nX_num_agg_S = X.groupby(\"customer_ID\")[S_n_cols].agg(['mean','min', 'last'])\nX_num_agg_S.columns = ['_'.join(x) for x in X_num_agg_S.columns]\n\nX_num_agg_P = X.groupby(\"customer_ID\")[P_n_cols].agg(['mean','min','max' ,'last'])\nX_num_agg_P.columns = ['_'.join(x) for x in X_num_agg_P.columns]\n\nX_num_agg_B = X.groupby(\"customer_ID\")[B_n_cols].agg(['mean','min', 'last'])\nX_num_agg_B.columns = ['_'.join(x) for x in X_num_agg_B.columns]\n\nX_num_agg_R = X.groupby(\"customer_ID\")[R_n_cols].agg(['mean','min','last'])\nX_num_agg_R.columns = ['_'.join(x) for x in X_num_agg_R.columns]\n\nX_cat_agg_D = X.groupby(\"customer_ID\")[D_c_cols].agg([ 'count','last','first','nunique'])\nX_cat_agg_D.columns = ['_'.join(x) for x in X_cat_agg_D.columns]\n\nX_cat_agg_B = X.groupby(\"customer_ID\")[B_c_cols].agg([ 'count','last','nunique'])\nX_cat_agg_B.columns = ['_'.join(x) for x in X_cat_agg_B.columns]\n\nX = pd.concat([X_num_agg_D, X_num_agg_S,X_num_agg_P,X_num_agg_B,X_num_agg_R,X_cat_agg_D,X_cat_agg_B], axis=1)\ndel X_num_agg_D, X_num_agg_S,X_num_agg_P,X_num_agg_B,X_num_agg_R,X_cat_agg_D,X_cat_agg_B\n_ = gc.collect()\n\nprint('X shape after engineering', X.shape)\n\n\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time \ntest_num_agg_D = test.groupby(\"customer_ID\")[D_n_cols].agg(['mean','min', 'last'])\ntest_num_agg_D.columns = ['_'.join(x) for x in test_num_agg_D.columns]\n\ntest_num_agg_S = test.groupby(\"customer_ID\")[S_n_cols].agg(['mean','min', 'last'])\ntest_num_agg_S.columns = ['_'.join(x) for x in test_num_agg_S.columns]\n\ntest_num_agg_P = test.groupby(\"customer_ID\")[P_n_cols].agg(['mean','min','max', 'last'])\ntest_num_agg_P.columns = ['_'.join(x) for x in test_num_agg_P.columns]\n\ntest_num_agg_B = test.groupby(\"customer_ID\")[B_n_cols].agg(['mean','min', 'last'])\ntest_num_agg_B.columns = ['_'.join(x) for x in test_num_agg_B.columns]\n\ntest_num_agg_R = test.groupby(\"customer_ID\")[R_n_cols].agg(['mean','min', 'last'])\ntest_num_agg_R.columns = ['_'.join(x) for x in test_num_agg_R.columns]\n\ntest_cat_agg_D = test.groupby(\"customer_ID\")[D_c_cols].agg(['count','first', 'last','nunique'])\ntest_cat_agg_D.columns = ['_'.join(x) for x in test_cat_agg_D.columns]\n\ntest_cat_agg_B = test.groupby(\"customer_ID\")[B_c_cols].agg([ 'count','last','nunique'])\ntest_cat_agg_B.columns = ['_'.join(x) for x in test_cat_agg_B.columns]\n\ntest = pd.concat([test_num_agg_D, test_num_agg_S,test_num_agg_P,test_num_agg_B,test_num_agg_R,test_cat_agg_D,test_cat_agg_B], axis=1)\ndel test_num_agg_D, test_num_agg_S,test_num_agg_P,test_num_agg_B,test_num_agg_R,test_cat_agg_D,test_cat_agg_B\n_ = gc.collect()\n\nprint('Test shape after engineering', test.shape)\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"xgb_parms ={\n    'booster': 'dart',\n     'n_jobs':4,\n     'n_estimators':1000,\n    'lambda': 4.091409953463271e-08,\n    'alpha': 3.6353429991712695e-08,\n    'subsample': 0.6423675532438815,\n    'colsample_bytree': 0.7830450413657872,\n    'max_depth': 9,\n    'min_child_weight': 5,\n    'eta': 0.3749337530972536,\n    'gamma': 0.0745370910451703,\n    'grow_policy': 'depthwise',\n    'sample_type': 'uniform',\n    'normalize_type': 'tree',\n    'rate_drop': 0.0723975209176045,\n    'skip_drop': 0.9026367296518939}","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train,X_valid,y_train,y_valid = train_test_split(X, y, test_size=0.25,stratify=y)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"my_model = XGBClassifier(**xgb_parms)\nmy_model.fit(X_train, y_train, \n             early_stopping_rounds=10, \n             eval_set=[(X_valid, y_valid)],\n             verbose=1)  \n                                     ","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pred_val = my_model.predict(X_valid)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cf = classification_report(y_valid,pred_val)\nprint(cf)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cm = confusion_matrix(y_valid,pred_val)\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":"pred_test = my_model.predict_proba(test)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds = pd.DataFrame(pred_test)\npred_final = np.array(preds[1])\npred_final","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nsubmission = 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\nsubmission","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":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}