{"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 lightgbm as lgb\nimport sklearn.datasets\nimport sklearn.metrics\nfrom sklearn.model_selection import train_test_split\n\nimport lightgbm as lgb\nfrom lightgbm import LGBMClassifier, early_stopping, log_evaluation\nfrom sklearn.metrics import roc_auc_score, roc_curve, auc\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.shape,y.shape,test.shape","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":"%%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":"X.shape,y.shape,test.shape","metadata":{},"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":"param = {\n            'metric': \"binary_logloss\",\n            'boosting_type': \"dart\",\n            'n_estimators':1000,\n            'verbosity': -1,\n            'lambda_l1': 3.1412416493672213e-06,\n             'lambda_l2': 1.919550703890871,\n             'num_leaves': 53,\n             'feature_fraction': 0.8361911823947347,\n             'bagging_fraction': 0.5246353885003125,\n             'bagging_freq': 7,\n             'min_child_samples': 91}","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lgbm =LGBMClassifier(**param).fit(X_train, y_train, \n                                       eval_set=[(X_train, y_train), (X_valid, y_valid)],\n                                       \n                                       eval_metric=['auc','binary_logloss'])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prdeict_val = lgbm.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 = lgbm.predict_proba(test)\n\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.prediction.value_counts()","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":[]}]}