{"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, gc, os\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"/kaggle/input/amex-default-prediction/sample_submission.csv\n/kaggle/input/amex-default-prediction/train_data.csv\n/kaggle/input/amex-default-prediction/test_data.csv\n/kaggle/input/amex-default-prediction/train_labels.csv\n/kaggle/input/amex-data-integer-dtypes-parquet-format/train.parquet\n/kaggle/input/amex-data-integer-dtypes-parquet-format/test.parquet","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport numpy as np\nfrom xgboost import XGBClassifier\nfrom sklearn.model_selection import cross_val_score\nfrom sklearn.metrics import confusion_matrix, classification_report, roc_curve, auc, RocCurveDisplay, accuracy_score\nimport shap\nimport itertools\nfrom sklearn.ensemble import RandomForestClassifier","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_parquet(\"/kaggle/input/amex-data-integer-dtypes-parquet-format/train.parquet\").groupby('customer_ID').tail(4)\ntest = pd.read_parquet(\"/kaggle/input/amex-data-integer-dtypes-parquet-format/test.parquet\").groupby('customer_ID').tail(4)\ntrain_labels = pd.read_csv(\"../input/amex-default-prediction/train_labels.csv\")\ntrain.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#process missing data\nmiss_columns = []\nfor key in train.columns:\n    if train[key].isna().sum()/len(train) > 0.2:\n       miss_columns.append(key) ","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Drop the missing columns having more than 20%\ntrain = train.drop(miss_columns, axis=1)\ntest = test.drop(miss_columns, axis=1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#fill the missing values\ntrain = train.bfill(axis='rows').ffill(axis='rows')\ntest = test.bfill(axis='rows').ffill(axis='rows')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.reset_index(inplace=True)\ntest.reset_index(inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train =train.groupby('customer_ID').tail(1)\ntest = test.groupby('customer_ID').tail(1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.reset_index(drop=True, inplace=True)\ntest.reset_index(drop=True, inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#shape\ntrain.shape, train_labels.shape, test.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"((458913, 173), (458913, 2), (924621, 173))","metadata":{}},{"cell_type":"code","source":"#Type Conversion\nobj_col = ['B_30', 'B_38', 'D_114', 'D_116', 'D_117', 'D_120', 'D_126', 'D_63', 'D_64', 'D_66', 'D_68']\nfor col in obj_col:\n    train[col]=train[col].astype('int').astype('str')\n    test[col]=test[col].astype('int').astype('str')\n    print(train[col].unique())\n    print(test[col].unique())","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"['0' '1' '2' '-1']\n['0' '1' '2' '-1']\n['2' '1' '3' '7' '5' '6' '4' '-1']\n['2' '3' '6' '1' '7' '5' '4' '-1']\n['1' '0' '-1']\n['0' '1' '-1']\n['0' '-1' '1']\n['0' '-1' '1']\n['5' '0' '7' '2' '3' '6' '4' '-1']\n['0' '4' '5' '3' '7' '6' '-1' '2']\n['0' '1' '-1']\n['1' '0' '-1']\n['2' '1']\n['1' '2']\n['0' '3' '4' '5' '1' '2']\n['0' '3' '4' '2' '1' '5']\n['0' '2' '3' '-1']\n['3' '0' '2' '-1']\n['-1' '1']\n['-1' '1']\n['6' '3' '5' '4' '2' '1' '-1']\n['6' '4' '5' '2' '1' '3' '-1']","metadata":{}},{"cell_type":"code","source":"train = train.merge(train_labels, how='inner', on=\"customer_ID\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data = test.copy()\ntrain = train.drop(['index','customer_ID', 'S_2'], axis=1)\ntest = test.drop(['index','customer_ID', 'S_2'], axis=1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#one hot Encoding for categorical features\nobj_col = ['B_30', 'B_38', 'D_114', 'D_116', 'D_117', 'D_120', 'D_126', 'D_63', 'D_64', 'D_66', 'D_68']\ntrain = pd.get_dummies(train, columns=obj_col, drop_first=True)\ntest = pd.get_dummies(test, columns=obj_col, drop_first=True)\ntrain.shape, test.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"((458913, 199), (924621, 198))","metadata":{}},{"cell_type":"code","source":"Features=train.loc[:, test.columns]\ntarget = train['target']","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"XGB = XGBClassifier(n_estimators=300, max_depth=6, learning_rate=0.1).fit(Features, target)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#accuracy\nnp.mean(cross_val_score(XGB, Features, target, scoring='accuracy', cv=3))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"0.8997478824962465","metadata":{}},{"cell_type":"code","source":"#accuracy\ny_pred = XGB.predict(Features)\naccuracy_score(target, y_pred)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"0.9156920810698324","metadata":{}},{"cell_type":"code","source":"#Confusion matrix\ncm=confusion_matrix(target, y_pred)\nplt.figure(figsize=(13,5))\nplt.title(\"Confusion Matrix\")\nplt.imshow(cm, alpha=0.5, cmap='PuBu')\nfor i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n    plt.text(j, i, cm[i, j], horizontalalignment=\"center\")\nplt.show()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#AUC (ROC curve)\nfpr, tpr, thresholds = roc_curve(target, y_pred)\nroc_auc = auc(fpr, tpr)\ndisplay = RocCurveDisplay(fpr=fpr, tpr=tpr, roc_auc=roc_auc, estimator_name=XGB)\ndisplay.plot()\nplt.show()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(classification_report(target, y_pred))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"              precision    recall  f1-score   support\n\n           0       0.94      0.94      0.94    340085\n           1       0.84      0.83      0.84    118828\n\n    accuracy                           0.92    458913\n    macro avg       0.89      0.89      0.89    458913\n    weighted avg       0.92      0.92      0.92    458913\n\n","metadata":{}},{"cell_type":"code","source":"explainer = shap.TreeExplainer(XGB)\nshap_values = explainer.shap_values(Features)\nshap.summary_plot(shap_values, Features)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data['prediction']=XGB.predict_proba(test)[:,1]\ntest_data[['customer_ID','prediction']].to_csv(\"submission_xgb.csv\", index=False)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# random forest\nRFC = RandomForestClassifier(n_estimators=100, max_depth=6).fit(Features, target)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#accuracy\nnp.mean(cross_val_score(RFC, Features, target, scoring='accuracy', cv=3))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"0.8823785772030863","metadata":{}},{"cell_type":"code","source":"#accuracy\ny_pred = RFC.predict(Features)\naccuracy_score(target, y_pred)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"0.8832937833532718","metadata":{}},{"cell_type":"code","source":"#Confusion matrix\ncm=confusion_matrix(target, y_pred)\nplt.figure(figsize=(13,5))\nplt.title(\"Confusion Matrix\")\nplt.imshow(cm, alpha=0.5, cmap='PuBu')\nfor i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n    plt.text(j, i, cm[i, j], horizontalalignment=\"center\")\nplt.show()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#AUC (ROC curve)\nfpr, tpr, thresholds = roc_curve(target, y_pred)\nroc_auc = auc(fpr, tpr)\ndisplay = RocCurveDisplay(fpr=fpr, tpr=tpr, roc_auc=roc_auc, estimator_name=RFC)\ndisplay.plot()\nplt.show()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(classification_report(target, y_pred))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"              precision    recall  f1-score   support\n\n           0       0.91      0.93      0.92    340085\n           1       0.79      0.75      0.77    118828\n\n    accuracy                           0.88    458913\n    macro avg       0.85      0.84      0.85    458913\n    weighted avg       0.88      0.88      0.88    458913\n","metadata":{}},{"cell_type":"code","source":"explainer = shap.TreeExplainer(RFC)\nshap_values = explainer.shap_values(Features)\nshap.summary_plot(shap_values, Features)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data['prediction']=RFC.predict_proba(test)[:,1]\ntest_data[['customer_ID','prediction']].to_csv(\"submission_rfc.csv\", index=False)","metadata":{},"execution_count":null,"outputs":[]}]}