{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import shap\n\nimport numpy as np\nimport pandas as pd\n\nimport matplotlib\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nimport sklearn\nimport catboost as ctb\n\nfrom catboost import Pool\nfrom catboost.utils import get_roc_curve\nfrom catboost.utils import get_fpr_curve\nfrom catboost.utils import get_fnr_curve\nfrom catboost.utils import select_threshold","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def get_cat_features(df):\n    \n    cat_features_list = []\n    object_cols = df.select_dtypes(include=['object', 'category']).columns.tolist()\n       \n    for cf in object_cols:\n        cat_features_list.append(df.columns.get_loc(cf))\n    \n    return cat_features_list","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def show_feature_importances(feature_names, feature_importances, get_top=None):\n    feature_importances = pd.DataFrame({'feature': feature_names, 'importance': feature_importances})\n    feature_importances = feature_importances.sort_values('importance', ascending=False)\n       \n    plt.figure(figsize = (10, len(feature_importances) * 0.5))\n    \n    sns.barplot(feature_importances['importance'], feature_importances['feature'])\n    \n    plt.xlabel('Importance')\n    plt.title('Importance of features')\n    plt.show()\n    \n    if get_top is not None:\n        return feature_importances['feature'][:get_top].tolist()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"path = '/kaggle/input/geekbrains-competitive-data-analysis/'\n\ntrain = pd.read_csv(path + \"train.csv\")\ntest = pd.read_csv(path + \"test.csv\")\ncp = pd.read_csv(path + \"client_profile.csv\")\n\nID_COLUMN = 'APPLICATION_NUMBER'\nTARGET = 'TARGET'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df = train.merge(cp, on=ID_COLUMN, how='left')\ntest_df = test.merge(cp, on=ID_COLUMN, how='left')\n\ntrain_df.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X = train_df.drop(TARGET, axis=1).fillna(-1)\ny = train_df[TARGET]\n\ncat_features = get_cat_features(X)\ncat_features","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"params = {'silent': True,\n          'random_state': 42,\n          'learning_rate': 0.1,\n          'depth': 3,\n         }\n\nmodel = ctb.CatBoostClassifier(**params)\nmodel.fit(X, y, cat_features, plot=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"probabilities = model.predict_proba(test_df.fillna(-1))\nsubmission = pd.DataFrame({\n    ID_COLUMN: test[ID_COLUMN],\n    TARGET:     [ row[1] for row in probabilities]\n})\nsubmission.to_csv(\"submission.csv\", index=False)\nsubmission.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"important_features_top = show_feature_importances(X.columns, model.feature_importances_, get_top=15)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"eval_pool = Pool(X, y, cat_features=cat_features)\ncurve = get_roc_curve(model, eval_pool)\n(fpr, tpr, thresholds) = curve\nroc_auc = sklearn.metrics.auc(fpr, tpr)\n\nplt.figure(figsize=(16, 8))\nlw = 2\n\nplt.plot(fpr, tpr, color='darkorange',\n         lw=lw, label='ROC curve (area = %0.2f)' % roc_auc, alpha=0.5)\n\nplt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--', alpha=0.5)\n\nplt.xlim([0.0, 1.0])\nplt.ylim([0.0, 1.05])\nplt.xticks(fontsize=16)\nplt.yticks(fontsize=16)\nplt.grid(True)\nplt.xlabel('False Positive Rate', fontsize=16)\nplt.ylabel('True Positive Rate', fontsize=16)\nplt.title('Receiver operating characteristic', fontsize=20)\nplt.legend(loc=\"lower right\", fontsize=16)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"(thresholds, fpr) = get_fpr_curve(curve=curve)\n(thresholds, fnr) = get_fnr_curve(curve=curve)\n\nplt.figure(figsize=(16, 8))\nlw = 2\n\nplt.plot(thresholds, fpr, color='blue', lw=lw, label='FPR', alpha=0.5)\nplt.plot(thresholds, fnr, color='green', lw=lw, label='FNR', alpha=0.5)\n\nplt.xlim([0.0, 1.0])\nplt.ylim([0.0, 1.05])\nplt.xticks(fontsize=16)\nplt.yticks(fontsize=16)\nplt.grid(True)\nplt.xlabel('Threshold', fontsize=16)\nplt.ylabel('Error Rate', fontsize=16)\nplt.title('FPR-FNR curves', fontsize=20)\nplt.legend(loc=\"lower left\", fontsize=16)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"shap_values = model.get_feature_importance(eval_pool, type='ShapValues')\n\nexpected_value = shap_values[0,-1]\nshap_values = shap_values[:,:-1]\n\nprint(shap_values.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"shap.initjs()\nshap.force_plot(expected_value, shap_values[0,:], X.iloc[0,:])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"shap.summary_plot(shap_values, X)","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}