{"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\nimport numpy as np\n\n\nimport catboost as cb\nfrom catboost import CatBoostClassifier\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import accuracy_score\nimport warnings, gc\nwarnings.filterwarnings(\"ignore\")","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","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":"from sklearn.preprocessing import LabelEncoder\nlab = 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)\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_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)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"wd = 0.189734\nws = -0.161529\nWp = -0.035248\nwb = 0.482908\nwr = 0.048839","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Df_n_cols_X = [col for col in X.columns if  col.endswith(\"mean\")]\nmean_df =X[Df_n_cols_X]\nmean_df","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for col in mean_df.columns:\n    \n    if col.startswith('D'):\n        \n        mean_df['weight_D']= mean_df[col].cumsum()* (0.189734)\n    if col.startswith('S'):\n        \n        mean_df['weight_S']= mean_df[col].cumsum() *(-0.161529)\n    if col.startswith('P'):\n        \n        mean_df['weight_P']= mean_df[col].cumsum() * (-0.035248)\n    if col.startswith('B'):\n        \n        mean_df['weight_B']= mean_df[col].cumsum() * (0.482908)\n    if col.startswith('R'):\n        \n        mean_df['weight_R']= mean_df[col].cumsum() * (0.048839)\n   \n\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mean_df.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for col in mean_df.columns:\n    \n    if col.startswith('D'):\n        \n        mean_df['weight_D_sq']= mean_df[col].cumsum()* (0.189734)**2\n    if col.startswith('S'):\n        \n        mean_df['weight_S_sq']= mean_df[col].cumsum() *(-0.161529)**2\n    if col.startswith('P'):\n        \n        mean_df['weight_P_sq']= mean_df[col].cumsum() * (-0.035248)**2\n    if col.startswith('B'):\n        \n        mean_df['weight_B_sq']= mean_df[col].cumsum() * (0.482908)**2\n    if col.startswith('R'):\n        \n        mean_df['weight_R_sq']= mean_df[col].cumsum() * (0.048839)**2","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X['weight_D']=mean_df['weight_D']\nX['weight_S']=mean_df['weight_S']\nX['weight_P']=mean_df['weight_P']\nX['weight_B']=mean_df['weight_B']\nX['weight_R']=mean_df['weight_R']\n\nX['weight_D_sq']=mean_df['weight_D_sq']\nX['weight_S_sq']=mean_df['weight_S_sq']\nX['weight_P_sq']=mean_df['weight_P_sq']\nX['weight_B_sq']=mean_df['weight_B_sq']\nX['weight_R_sq']=mean_df['weight_R_sq']\n\n\n\nX.columns","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"w_cols_X = [col for col in X.columns if col.startswith(\"w\")]\nw_cols_X","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)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Df_n_cols_test = [col for col in test.columns if  col.endswith(\"mean\")]\nmean_df_test =test[Df_n_cols_test]\nmean_df_test.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for col in mean_df_test.columns:\n    \n    if col.startswith('D'):\n        \n        mean_df_test['weight_D']= mean_df_test[col].cumsum()* (0.189734)\n    if col.startswith('S'):\n        \n        mean_df_test['weight_S']= mean_df_test[col].cumsum() *(-0.161529)\n    if col.startswith('P'):\n        \n        mean_df_test['weight_P']= mean_df_test[col].cumsum() * (-0.035248)\n    if col.startswith('B'):\n        \n        mean_df_test['weight_B']= mean_df_test[col].cumsum() * (0.482908)\n    if col.startswith('R'):\n        \n        mean_df_test['weight_R']= mean_df_test[col].cumsum() * (0.048839)\n   ","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for col in mean_df_test.columns:\n    \n    if col.startswith('D'):\n        \n        mean_df_test['weight_D_sq']= mean_df_test[col].cumsum()* (0.189734)**2\n    if col.startswith('S'):\n        \n        mean_df_test['weight_S_sq']= mean_df_test[col].cumsum() *(-0.161529)**2\n    if col.startswith('P'):\n        \n        mean_df_test['weight_P_sq']= mean_df_test[col].cumsum() * (-0.035248)**2\n    if col.startswith('B'):\n        \n        mean_df_test['weight_B_sq']= mean_df_test[col].cumsum() * (0.482908)**2\n    if col.startswith('R'):\n        \n        mean_df_test['weight_R_sq']= mean_df_test[col].cumsum() * (0.048839)**2","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test['weight_D']=mean_df_test['weight_D']\ntest['weight_S']=mean_df_test['weight_S']\ntest['weight_P']=mean_df_test['weight_P']\ntest['weight_B']=mean_df_test['weight_B']\ntest['weight_R']=mean_df_test['weight_R']\n\ntest['weight_D_sq']=mean_df_test['weight_D_sq']\ntest['weight_S_sq']=mean_df_test['weight_S_sq']\ntest['weight_P_sq']=mean_df_test['weight_P_sq']\ntest['weight_B_sq']=mean_df_test['weight_B_sq']\ntest['weight_R_sq']=mean_df_test['weight_R_sq']\n\n\ntest.columns","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"w_cols_test = [col for col in test.columns if col.startswith(\"w\")]\nw_cols_test","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder,MinMaxScaler,OrdinalEncoder\nscaler = MinMaxScaler()\n\n\nX[w_cols_X] = scaler.fit_transform(X[w_cols_X])\n\ntest[w_cols_test] = scaler.transform(test[w_cols_test])\n\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X.shape,y.shape,test.shape","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train,X_valid,y_train,y_valid = train_test_split(X,y,random_state=2022,stratify=None)\n\nX_train.shape,X_valid.shape,y_train.shape,y_valid.shape","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Params={ \n    'objective': 'CrossEntropy',\n    'n_estimators':2000,\n    'colsample_bylevel': 0.07868805912943484,\n    'depth': 9,\n    'boosting_type': 'Plain',\n    'bootstrap_type': 'MVS',\n    }\n   ","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cbm =CatBoostClassifier(**Params).fit(X_train, y_train, \n                                       eval_set=[(X_train, y_train), (X_valid, y_valid)],\n                                      metric_period=50,\n                                       \n                                       )","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prdeict_val = cbm.predict(X_valid)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import classification_report,confusion_matrix\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\ncm = confusion_matrix(y_valid,prdeict_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":"cr = classification_report(y_valid,prdeict_val)\n\nprint(cr)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prdeictions = cbm.predict_proba(test)\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds = pd.DataFrame(prdeictions)\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.to_csv(\"submission.csv\",index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}