{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1f4f9ab3",
   "metadata": {},
   "outputs": [],
   "source": [
    "## TRAINING SET : MERGED DATA , TESTING DATA: TCGA mRNA data, MODEL: XGBoost"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "f097ad55",
   "metadata": {},
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "import pandas as pd\n",
    "from sklearn.model_selection import train_test_split\n",
    "#from sklearn.model_selection import cross_val_score\n",
    "#from sklearn.metrics import accuracy_score\n",
    "#import sklearn.metrics as metrics\n",
    "#from sklearn.metrics import auc\n",
    "from sklearn.metrics import RocCurveDisplay\n",
    "#from sklearn.model_selection import KFold\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from imblearn.over_sampling import SMOTE\n",
    "from sklearn.linear_model import Lasso\n",
    "import xgboost as xgb\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "np.random.seed(7)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73b6611a",
   "metadata": {},
   "source": [
    "# Data Preprocessing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "0eeb7a35",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = pd.read_csv(\"DS/mRNA_DS_preprocessed_training_data.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "c04fc6bc",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_test = pd.read_csv(\"DS/mRNA_TCGA_DS_test_data.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "683b63ce",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = df_train.T\n",
    "df_test = df_test.T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "6ecc5606",
   "metadata": {},
   "outputs": [],
   "source": [
    "#df_test = df_test[:-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "d9b0088e",
   "metadata": {},
   "outputs": [],
   "source": [
    "#Transform the input data\n",
    "df_train.rename(columns=df_train.iloc[0], inplace = True)\n",
    "df_train.drop(df_train.index[0], inplace = True)\n",
    "df_train=df_train.reset_index()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "50511de4",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train=df_train.drop(['ACPP'], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "2e78017d",
   "metadata": {},
   "outputs": [],
   "source": [
    "#Transform the input data\n",
    "df_test.rename(columns=df_test.iloc[0], inplace = True)\n",
    "df_test.drop(df_test.index[0], inplace = True)\n",
    "df_test=df_test.reset_index()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "7168825e",
   "metadata": {},
   "outputs": [],
   "source": [
    "#read metadata\n",
    "metadata_test = pd.read_csv(\"DS/mRNA_TCGA_DS_col_data.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "26c98c3e",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_test= df_test.merge(metadata_test, left_on=\"index\", right_on= \"Unnamed: 0\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "0d82a6ce",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_test= df_test.rename(columns={\"group_assignments\": \"title0\"})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "b42beaa4",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_test['title0'] = df_test['title0'].replace('(?i)control|mucosa|normal|healthy', 0, regex=True)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "515cd9fc",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_test['title0'] = df_test['title0'].replace('(?i)Tumor|Cancer|carcinoma', 1, regex=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "dcdefec2",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_test = df_test[pd.to_numeric(df_test['title0'], errors='coerce').notnull()]#remove all non-numeric data from the column."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "ca48568a",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_test= df_test.drop(['index', 'Unnamed: 0'], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "d4b7e8b7",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_test= df_test.rename(columns={\"title0\": \"index\"})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "5fc874c4",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Select 13 rows of class 0\n",
    "class_0 = df_test[df_test['index'] == 0].head(13)\n",
    "\n",
    "# Select 13 rows of class 1\n",
    "class_1 = df_test[df_test['index'] == 1].head(27)\n",
    "\n",
    "# Concatenate the selected rows\n",
    "df_test = pd.concat([class_0, class_1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "299ca65d",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_test=df_test.drop(\"index\",axis=1)\n",
    "y_test=df_test['index']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "4c50c510",
   "metadata": {},
   "outputs": [],
   "source": [
    "metadata_train = pd.read_csv(\"DS/mRNA_DS_metadata_col_info.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "6730cf89",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train= df_train.merge(metadata_train, left_on=\"index\", right_on= \"Unnamed: 0\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "7a8ad8ad",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train['title0'] = df_train['title0'].replace('(?i)mucosa|normal|healthy', 0, regex=True)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "a8cf8643",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train['title0'] = df_train['title0'].replace('(?i)Tumor|Cancer|carcinoma', 1, regex=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "f5d203aa",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = df_train[pd.to_numeric(df_train['title0'], errors='coerce').notnull()]#remove all non-numeric data from the column."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "523bdaa6",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train= df_train.drop(['index', 'Unnamed: 0'], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "46a6fb36",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train= df_train.rename(columns={\"title0\": \"index\"})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "fbaf2507",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train= df_train.apply(pd.to_numeric)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "776cfbee",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "index\n",
       "0    111\n",
       "1    108\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train['index'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "8c0011ea",
   "metadata": {},
   "outputs": [],
   "source": [
    "X=df_train.drop(\"index\",axis=1)\n",
    "y=df_train['index']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "a10804ed",
   "metadata": {},
   "outputs": [],
   "source": [
    "X=X.astype('int')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "93e28118",
   "metadata": {},
   "outputs": [],
   "source": [
    "y=y.astype('int')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e9830b6c",
   "metadata": {},
   "source": [
    "# Feature Selection"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "1cc528fb",
   "metadata": {},
   "outputs": [],
   "source": [
    "# LASSO model:\n",
    "lasso = Lasso(alpha=1)\n",
    "# fitting the model:\n",
    "lasso.fit(X, y)\n",
    "# select all coefficients and the feature names\n",
    "lasso_coefs = lasso.coef_\n",
    "feature_names = X.columns\n",
    "\n",
    "# collect the selected features:\n",
    "selected_feature_indices = np.nonzero(lasso_coefs)[0]\n",
    "selected_features = [feature_names[i] for i in selected_feature_indices]\n",
    "X_selected = X.iloc[:, selected_feature_indices]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "8afa29ae",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "98"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(selected_features)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6cee6462",
   "metadata": {},
   "source": [
    "# Test train split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "cff9bd67",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train = X_selected\n",
    "y_train = y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "129430e6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(index\n",
       " 1    27\n",
       " 0    13\n",
       " Name: count, dtype: int64,\n",
       " index\n",
       " 0    111\n",
       " 1    108\n",
       " Name: count, dtype: int64)"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_test.value_counts(),y_train.value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1cfe2a06",
   "metadata": {},
   "source": [
    "# Cross validation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "059bf577",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 5 folds for each of 72 candidates, totalling 360 fits\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=0.8;, score=0.886 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=0.8;, score=0.955 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=0.8;, score=0.930 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=1;, score=0.886 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=1;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=1;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=1;, score=0.953 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=0.8;, score=0.864 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=0.8;, score=0.932 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=0.8;, score=0.953 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=1;, score=0.886 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=1;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=1;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=1;, score=0.953 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=0.8;, score=0.886 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=0.8;, score=0.953 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=1;, score=0.909 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=1;, score=0.977 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=1;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=1;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=1;, score=0.953 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=0.8;, score=0.818 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=0.8;, score=0.953 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=1;, score=0.886 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=1;, score=0.977 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=1;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=1;, score=0.932 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=1;, score=0.953 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=0.8;, score=0.795 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=0.8;, score=0.977 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=0.8;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=0.8;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=1;, score=0.773 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=1;, score=0.932 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=1;, score=0.886 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=1;, score=0.907 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=0.8;, score=0.886 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=0.8;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=0.8;, score=0.884 total time=   0.3s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=1;, score=0.886 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=1;, score=0.955 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=1;, score=0.955 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=1;, score=0.932 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=1;, score=0.907 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=0.8;, score=0.773 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=0.8;, score=0.955 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=0.8;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=0.8;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=1;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=1;, score=0.795 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=1;, score=0.955 total time=   0.1s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[CV 4/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=1;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=1;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=0.8;, score=0.841 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=0.8;, score=0.884 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=1;, score=0.841 total time=   0.3s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=1;, score=0.955 total time=   0.3s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=1;, score=0.955 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=1;, score=0.932 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=1;, score=0.884 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=0.8;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=0.8;, score=0.818 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=0.8;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=0.8;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=1;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=1;, score=0.773 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=1;, score=0.864 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=1;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=0.8;, score=0.682 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=0.8;, score=0.841 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=0.8;, score=0.932 total time=   0.3s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=0.8;, score=0.909 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=0.8;, score=0.884 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=1;, score=0.659 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=1;, score=0.773 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=1;, score=0.955 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=1;, score=0.909 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=1;, score=0.884 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=0.8;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=0.8;, score=0.818 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=0.8;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=0.8;, score=0.884 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=1;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=1;, score=0.773 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=1;, score=0.864 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=1;, score=0.930 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=0.8;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=0.8;, score=0.841 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=0.8;, score=0.932 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=0.8;, score=0.909 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=0.8;, score=0.884 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=1;, score=0.659 total time=   0.3s\n",
      "[CV 2/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=1;, score=0.773 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=1;, score=0.955 total time=   0.3s\n",
      "[CV 4/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=1;, score=0.864 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.1, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=1;, score=0.930 total time=   0.4s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=0.8;, score=0.886 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=0.8;, score=0.955 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=0.8;, score=0.930 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=1;, score=0.886 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=1;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=1;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=1;, score=0.953 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=0.8;, score=0.841 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=0.8;, score=0.953 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=1;, score=0.886 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=1;, score=0.955 total time=   0.1s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[CV 3/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=1;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=1;, score=0.953 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=0.8;, score=0.909 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=0.8;, score=0.953 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=1;, score=0.909 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=1;, score=0.977 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=1;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=1;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=1;, score=0.953 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=0.8;, score=0.953 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=1;, score=0.864 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=1;, score=0.977 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=1;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=1;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=1;, score=0.953 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=0.8;, score=0.795 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=0.8;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=0.8;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=1;, score=0.773 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=1;, score=0.932 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=1;, score=0.886 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=1;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=0.8;, score=0.886 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=0.8;, score=0.909 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=0.8;, score=0.884 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=1;, score=0.886 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=1;, score=0.955 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=1;, score=0.955 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=1;, score=0.909 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=1;, score=0.907 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=0.8;, score=0.773 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=0.8;, score=0.955 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=0.8;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=0.8;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=1;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=1;, score=0.795 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=1;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=1;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=0.8;, score=0.841 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=0.8;, score=0.955 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=0.8;, score=0.932 total time=   0.3s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=0.8;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=1;, score=0.841 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=1;, score=0.932 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=1;, score=0.955 total time=   0.3s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=1;, score=0.932 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=1;, score=0.884 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=0.8;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=0.8;, score=0.818 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=0.8;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=0.8;, score=0.884 total time=   0.1s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[CV 1/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=1;, score=0.659 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=1;, score=0.773 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=1;, score=0.864 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=1;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=0.8;, score=0.682 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=0.8;, score=0.841 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=0.8;, score=0.932 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=0.8;, score=0.909 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=0.8;, score=0.884 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=1;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=1;, score=0.773 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=1;, score=0.909 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=1;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=0.8;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=0.8;, score=0.818 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=0.8;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=0.8;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=1;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=1;, score=0.773 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=1;, score=0.955 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=1;, score=0.864 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=1;, score=0.930 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=0.8;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=0.8;, score=0.841 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=0.8;, score=0.932 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=0.8;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=0.8;, score=0.884 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=1;, score=0.659 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=1;, score=0.773 total time=   0.3s\n",
      "[CV 3/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=1;, score=0.955 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=1;, score=0.864 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.01, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=1;, score=0.930 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=0.8;, score=0.886 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=0.8;, score=0.955 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=0.8;, score=0.930 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=1;, score=0.886 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=1;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=1;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=100, subsample=1;, score=0.953 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=0.8;, score=0.818 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=0.8;, score=0.953 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=1;, score=0.886 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=1;, score=0.977 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=1;, score=0.955 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.1, max_depth=3, n_estimators=200, subsample=1;, score=0.953 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=0.8;, score=0.953 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=1;, score=0.909 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=1;, score=0.977 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=1;, score=0.977 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=1;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=100, subsample=1;, score=0.953 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=0.8;, score=0.864 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.1s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[CV 3/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=0.8;, score=0.953 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=1;, score=0.864 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=1;, score=0.977 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=1;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=1;, score=0.932 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.1, max_depth=5, n_estimators=200, subsample=1;, score=0.953 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=0.8;, score=0.795 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=0.8;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=0.8;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=1;, score=0.773 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=1;, score=0.932 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=1;, score=0.886 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=100, subsample=1;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=0.8;, score=0.886 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=0.8;, score=0.909 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=0.8;, score=0.884 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=1;, score=0.886 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=1;, score=0.955 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=1;, score=0.955 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=1;, score=0.909 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.01, max_depth=3, n_estimators=200, subsample=1;, score=0.907 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=0.8;, score=0.773 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=0.8;, score=0.955 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=0.8;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=0.8;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=1;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=1;, score=0.795 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=1;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=100, subsample=1;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=0.8;, score=0.841 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=0.8;, score=0.955 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=0.8;, score=0.977 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=0.8;, score=0.932 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=0.8;, score=0.884 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=1;, score=0.841 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=1;, score=0.909 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=1;, score=0.955 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=1;, score=0.932 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.01, max_depth=5, n_estimators=200, subsample=1;, score=0.884 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=0.8;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=0.8;, score=0.818 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=0.8;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=0.8;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=1;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=1;, score=0.773 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=1;, score=0.864 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=100, subsample=1;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=0.8;, score=0.682 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=0.8;, score=0.841 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=0.8;, score=0.932 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=0.8;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=0.8;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=1;, score=0.659 total time=   0.2s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=1;, score=0.773 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=1;, score=0.955 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=1;, score=0.909 total time=   0.2s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[CV 5/5] END gamma=0.001, learning_rate=0.001, max_depth=3, n_estimators=200, subsample=1;, score=0.884 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=0.8;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=0.8;, score=0.818 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=0.8;, score=0.932 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=0.8;, score=0.909 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=0.8;, score=0.884 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=1;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=1;, score=0.773 total time=   0.1s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=1;, score=0.955 total time=   0.1s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=1;, score=0.864 total time=   0.1s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=100, subsample=1;, score=0.930 total time=   0.1s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=0.8;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=0.8;, score=0.841 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=0.8;, score=0.932 total time=   0.3s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=0.8;, score=0.909 total time=   0.2s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=0.8;, score=0.884 total time=   0.2s\n",
      "[CV 1/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=1;, score=0.659 total time=   0.1s\n",
      "[CV 2/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=1;, score=0.773 total time=   0.2s\n",
      "[CV 3/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=1;, score=0.955 total time=   0.2s\n",
      "[CV 4/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=1;, score=0.864 total time=   0.5s\n",
      "[CV 5/5] END gamma=0.001, learning_rate=0.001, max_depth=5, n_estimators=200, subsample=1;, score=0.930 total time=   0.2s\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {color: black;background-color: white;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(estimator=XGBClassifier(base_score=None, booster=None,\n",
       "                                     callbacks=None, colsample_bylevel=None,\n",
       "                                     colsample_bynode=None,\n",
       "                                     colsample_bytree=None,\n",
       "                                     early_stopping_rounds=None,\n",
       "                                     enable_categorical=False, eval_metric=None,\n",
       "                                     feature_types=None, gamma=None,\n",
       "                                     gpu_id=None, grow_policy=None,\n",
       "                                     importance_type=None,\n",
       "                                     interaction_constraints=None,\n",
       "                                     learning_rate=None, max_b...\n",
       "                                     max_cat_to_onehot=None,\n",
       "                                     max_delta_step=None, max_depth=None,\n",
       "                                     max_leaves=None, min_child_weight=None,\n",
       "                                     missing=nan, monotone_constraints=None,\n",
       "                                     n_estimators=100, n_jobs=None,\n",
       "                                     num_parallel_tree=None, predictor=None,\n",
       "                                     random_state=42, ...),\n",
       "             param_grid={&#x27;gamma&#x27;: [0.1, 0.01, 0.001],\n",
       "                         &#x27;learning_rate&#x27;: [0.1, 0.01, 0.001],\n",
       "                         &#x27;max_depth&#x27;: [3, 5], &#x27;n_estimators&#x27;: [100, 200],\n",
       "                         &#x27;subsample&#x27;: [0.8, 1]},\n",
       "             verbose=3)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" ><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">GridSearchCV</label><div class=\"sk-toggleable__content\"><pre>GridSearchCV(estimator=XGBClassifier(base_score=None, booster=None,\n",
       "                                     callbacks=None, colsample_bylevel=None,\n",
       "                                     colsample_bynode=None,\n",
       "                                     colsample_bytree=None,\n",
       "                                     early_stopping_rounds=None,\n",
       "                                     enable_categorical=False, eval_metric=None,\n",
       "                                     feature_types=None, gamma=None,\n",
       "                                     gpu_id=None, grow_policy=None,\n",
       "                                     importance_type=None,\n",
       "                                     interaction_constraints=None,\n",
       "                                     learning_rate=None, max_b...\n",
       "                                     max_cat_to_onehot=None,\n",
       "                                     max_delta_step=None, max_depth=None,\n",
       "                                     max_leaves=None, min_child_weight=None,\n",
       "                                     missing=nan, monotone_constraints=None,\n",
       "                                     n_estimators=100, n_jobs=None,\n",
       "                                     num_parallel_tree=None, predictor=None,\n",
       "                                     random_state=42, ...),\n",
       "             param_grid={&#x27;gamma&#x27;: [0.1, 0.01, 0.001],\n",
       "                         &#x27;learning_rate&#x27;: [0.1, 0.01, 0.001],\n",
       "                         &#x27;max_depth&#x27;: [3, 5], &#x27;n_estimators&#x27;: [100, 200],\n",
       "                         &#x27;subsample&#x27;: [0.8, 1]},\n",
       "             verbose=3)</pre></div></div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" ><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">estimator: XGBClassifier</label><div class=\"sk-toggleable__content\"><pre>XGBClassifier(base_score=None, booster=None, callbacks=None,\n",
       "              colsample_bylevel=None, colsample_bynode=None,\n",
       "              colsample_bytree=None, early_stopping_rounds=None,\n",
       "              enable_categorical=False, eval_metric=None, feature_types=None,\n",
       "              gamma=None, gpu_id=None, grow_policy=None, importance_type=None,\n",
       "              interaction_constraints=None, learning_rate=None, max_bin=None,\n",
       "              max_cat_threshold=None, max_cat_to_onehot=None,\n",
       "              max_delta_step=None, max_depth=None, max_leaves=None,\n",
       "              min_child_weight=None, missing=nan, monotone_constraints=None,\n",
       "              n_estimators=100, n_jobs=None, num_parallel_tree=None,\n",
       "              predictor=None, random_state=42, ...)</pre></div></div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" ><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">XGBClassifier</label><div class=\"sk-toggleable__content\"><pre>XGBClassifier(base_score=None, booster=None, callbacks=None,\n",
       "              colsample_bylevel=None, colsample_bynode=None,\n",
       "              colsample_bytree=None, early_stopping_rounds=None,\n",
       "              enable_categorical=False, eval_metric=None, feature_types=None,\n",
       "              gamma=None, gpu_id=None, grow_policy=None, importance_type=None,\n",
       "              interaction_constraints=None, learning_rate=None, max_bin=None,\n",
       "              max_cat_threshold=None, max_cat_to_onehot=None,\n",
       "              max_delta_step=None, max_depth=None, max_leaves=None,\n",
       "              min_child_weight=None, missing=nan, monotone_constraints=None,\n",
       "              n_estimators=100, n_jobs=None, num_parallel_tree=None,\n",
       "              predictor=None, random_state=42, ...)</pre></div></div></div></div></div></div></div></div></div></div>"
      ],
      "text/plain": [
       "GridSearchCV(estimator=XGBClassifier(base_score=None, booster=None,\n",
       "                                     callbacks=None, colsample_bylevel=None,\n",
       "                                     colsample_bynode=None,\n",
       "                                     colsample_bytree=None,\n",
       "                                     early_stopping_rounds=None,\n",
       "                                     enable_categorical=False, eval_metric=None,\n",
       "                                     feature_types=None, gamma=None,\n",
       "                                     gpu_id=None, grow_policy=None,\n",
       "                                     importance_type=None,\n",
       "                                     interaction_constraints=None,\n",
       "                                     learning_rate=None, max_b...\n",
       "                                     max_cat_to_onehot=None,\n",
       "                                     max_delta_step=None, max_depth=None,\n",
       "                                     max_leaves=None, min_child_weight=None,\n",
       "                                     missing=nan, monotone_constraints=None,\n",
       "                                     n_estimators=100, n_jobs=None,\n",
       "                                     num_parallel_tree=None, predictor=None,\n",
       "                                     random_state=42, ...),\n",
       "             param_grid={'gamma': [0.1, 0.01, 0.001],\n",
       "                         'learning_rate': [0.1, 0.01, 0.001],\n",
       "                         'max_depth': [3, 5], 'n_estimators': [100, 200],\n",
       "                         'subsample': [0.8, 1]},\n",
       "             verbose=3)"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = xgb.XGBClassifier(random_state=42)\n",
    "\n",
    "# Defining parameter range\n",
    "# Defining parameter range\n",
    "param_grid = {\n",
    "    'max_depth': [3,5],\n",
    "    'learning_rate': [0.1 ,0.01, 0.001],\n",
    "    'n_estimators': [100,200],\n",
    "    'gamma': [ 0.1,0.01,0.001],\n",
    "    'subsample': [0.8,1]\n",
    "}\n",
    "\n",
    "\n",
    "grid = GridSearchCV(model, param_grid, refit=True, verbose=3)\n",
    "\n",
    "# Fitting the model for grid search\n",
    "grid.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "5d327876",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'gamma': 0.01, 'learning_rate': 0.1, 'max_depth': 5, 'n_estimators': 200, 'subsample': 0.8}\n",
      "XGBClassifier(base_score=None, booster=None, callbacks=None,\n",
      "              colsample_bylevel=None, colsample_bynode=None,\n",
      "              colsample_bytree=None, early_stopping_rounds=None,\n",
      "              enable_categorical=False, eval_metric=None, feature_types=None,\n",
      "              gamma=0.01, gpu_id=None, grow_policy=None, importance_type=None,\n",
      "              interaction_constraints=None, learning_rate=0.1, max_bin=None,\n",
      "              max_cat_threshold=None, max_cat_to_onehot=None,\n",
      "              max_delta_step=None, max_depth=5, max_leaves=None,\n",
      "              min_child_weight=None, missing=nan, monotone_constraints=None,\n",
      "              n_estimators=200, n_jobs=None, num_parallel_tree=None,\n",
      "              predictor=None, random_state=42, ...)\n"
     ]
    }
   ],
   "source": [
    "# print best parameter after tuning\n",
    "print(grid.best_params_)\n",
    "  \n",
    "# print how our model looks after hyper-parameter tuning\n",
    "print(grid.best_estimator_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "29da15ed",
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# Select columns in df1 based on columns in df2\n",
    "X_test = X_test.loc[:, X_train.columns]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "d77bf449",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_test = X_test.astype('int')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "4c9779b1",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_test=X_test.dropna(axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ac792c5e",
   "metadata": {},
   "source": [
    "# Evaluation "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "c8c233d6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.62      0.38      0.48        13\n",
      "           1       0.75      0.89      0.81        27\n",
      "\n",
      "    accuracy                           0.73        40\n",
      "   macro avg       0.69      0.64      0.64        40\n",
      "weighted avg       0.71      0.72      0.70        40\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report, confusion_matrix\n",
    "grid_predictions = grid.predict(X_test)\n",
    "print(classification_report(y_test, grid_predictions))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "3b2776c0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-2 {color: black;background-color: white;}#sk-container-id-2 pre{padding: 0;}#sk-container-id-2 div.sk-toggleable {background-color: white;}#sk-container-id-2 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-2 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-2 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-2 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-2 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-2 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-2 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-2 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-2 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-2 div.sk-item {position: relative;z-index: 1;}#sk-container-id-2 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-2 div.sk-item::before, #sk-container-id-2 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-2 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-2 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-2 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-2 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-2 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-2 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-2 div.sk-label-container {text-align: center;}#sk-container-id-2 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-2 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>XGBClassifier(base_score=None, booster=None, callbacks=None,\n",
       "              colsample_bylevel=None, colsample_bynode=None,\n",
       "              colsample_bytree=None, early_stopping_rounds=None,\n",
       "              enable_categorical=False, eval_metric=None, feature_types=None,\n",
       "              gamma=0.01, gpu_id=None, grow_policy=None, importance_type=None,\n",
       "              interaction_constraints=None, learning_rate=0.1, max_bin=None,\n",
       "              max_cat_threshold=None, max_cat_to_onehot=None,\n",
       "              max_delta_step=None, max_depth=5, max_leaves=None,\n",
       "              min_child_weight=None, missing=nan, monotone_constraints=None,\n",
       "              n_estimators=200, n_jobs=None, num_parallel_tree=None,\n",
       "              predictor=None, random_state=42, ...)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-4\" type=\"checkbox\" checked><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">XGBClassifier</label><div class=\"sk-toggleable__content\"><pre>XGBClassifier(base_score=None, booster=None, callbacks=None,\n",
       "              colsample_bylevel=None, colsample_bynode=None,\n",
       "              colsample_bytree=None, early_stopping_rounds=None,\n",
       "              enable_categorical=False, eval_metric=None, feature_types=None,\n",
       "              gamma=0.01, gpu_id=None, grow_policy=None, importance_type=None,\n",
       "              interaction_constraints=None, learning_rate=0.1, max_bin=None,\n",
       "              max_cat_threshold=None, max_cat_to_onehot=None,\n",
       "              max_delta_step=None, max_depth=5, max_leaves=None,\n",
       "              min_child_weight=None, missing=nan, monotone_constraints=None,\n",
       "              n_estimators=200, n_jobs=None, num_parallel_tree=None,\n",
       "              predictor=None, random_state=42, ...)</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "XGBClassifier(base_score=None, booster=None, callbacks=None,\n",
       "              colsample_bylevel=None, colsample_bynode=None,\n",
       "              colsample_bytree=None, early_stopping_rounds=None,\n",
       "              enable_categorical=False, eval_metric=None, feature_types=None,\n",
       "              gamma=0.01, gpu_id=None, grow_policy=None, importance_type=None,\n",
       "              interaction_constraints=None, learning_rate=0.1, max_bin=None,\n",
       "              max_cat_threshold=None, max_cat_to_onehot=None,\n",
       "              max_delta_step=None, max_depth=5, max_leaves=None,\n",
       "              min_child_weight=None, missing=nan, monotone_constraints=None,\n",
       "              n_estimators=200, n_jobs=None, num_parallel_tree=None,\n",
       "              predictor=None, random_state=42, ...)"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_xgb = grid.best_estimator_\n",
    "model_xgb.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "94871ada",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_proba = model_xgb.fit(X_train, y_train).predict_proba(X_test)[:,1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "d8abbbff",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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nN6TkZqaqltvvfWS84GBgTp16pQZMQEAUH3xxE87p1cygoODlZaWdsn55ORktWzZ0pSgAACottiTYed0kvHQQw/piSee0LZt22SxWHT06FEtXLhQY8aM0aOPPuqOGAEAQDXkdLlkwoQJstls6t27t86ePatbb71VVqtVY8aM0eOPP+6OGAEAqDZ4GFcJp1cyLBaLnnrqKZ08eVJ79uzR1q1b9csvv2jatGnuiA8AgOqlgsslGzdu1B133KGQkBBZLBYtW7bMfq2oqEjjx49Xx44d5efnp5CQEA0ZMkRHjx697JwJCQmyWCwOrW3bts4FJhee+Ont7a327dvrxhtvVJ06da52GgAA4IK8vDxFRERo9uzZl1w7e/asdu7cqYkTJ2rnzp365JNPlJqaqjvvvPOK81533XXKysqyt6t5FpbT5ZJevXrJYil75+vatWudDgIAAI/h6m2oTo6NiYlRTExMqdcCAwO1atUqh3Ovv/66brzxRmVmZqpp06ZlzluzZk0FBwc7F8zFczg74Prrr3c4LioqUkpKivbs2aPY2FiXggEAoNoz6bHiOTk5DqetVqusVqsLE593+vRpWSwW1a1b97L9Dhw4oJCQEPn4+CgyMlKJiYmXTUpK43SSMXPmzFLPJyQkKDc319npAABAKUJDQx2OJ0+erISEBJfmzM/P1/jx4zVo0CAFBASU2a9bt25KSkpSmzZtlJWVpSlTpqh79+7as2eP/P39y/15pr0g7f7779eNN96oF1980awpAQCofkxayTh8+LBDIuDqKkZRUZHuueceGYahOXPmXLbvb8svnTp1Urdu3dSsWTMtWbJEw4YNK/dnmpZkbNmyRT4+PmZNBwBAtWTWLawBAQGXXW1wxoUE48cff9TatWudnrdu3boKDw8v9WGcl+N0knHXXXc5HBuGoaysLG3fvl0TJ050djoAAOBGFxKMAwcOaN26dbrmmmucniM3N1fp6en6+9//7tQ4p5OMwMBAh2MvLy+1adNGU6dOVd++fZ2dDgAAuCA3N9dhhSEjI0MpKSmqX7++GjVqpL/+9a/auXOnli9fruLiYmVnZ0uS6tevL29vb0lS7969NWDAAMXFxUmSxowZozvuuEPNmjXT0aNHNXnyZNWoUUODBg1yKjankozi4mI98MAD6tixo+rVq+fUBwEA8Ltg0p6M8tq+fbt69epl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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#######CONFUSION MATRIX ###########\n",
    "from sklearn import metrics\n",
    "y_test_pred_xgb = model_xgb.predict(X_test)\n",
    "confusion_matrix_test = metrics.confusion_matrix(y_test, y_test_pred_xgb)\n",
    "cm_display = metrics.ConfusionMatrixDisplay(confusion_matrix = confusion_matrix_test, display_labels = [False, True])\n",
    "cm_display.plot()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "213fa877",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy :  0.725\n",
      "Sensitivity :  0.38461538461538464\n",
      "Specificity :  0.8888888888888888\n"
     ]
    }
   ],
   "source": [
    "total1=sum(sum(confusion_matrix_test))\n",
    "#####from confusion matrix calculate accuracy\n",
    "accuracy1=(confusion_matrix_test[0,0]+confusion_matrix_test[1,1])/total1\n",
    "print ('Accuracy : ', accuracy1)\n",
    "\n",
    "sensitivity1 = confusion_matrix_test[0,0]/(confusion_matrix_test[0,0]+confusion_matrix_test[0,1])\n",
    "print('Sensitivity : ', sensitivity1 )\n",
    "\n",
    "specificity1 = confusion_matrix_test[1,1]/(confusion_matrix_test[1,0]+confusion_matrix_test[1,1])\n",
    "print('Specificity : ', specificity1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "fddf8856",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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mTBhAr/++iv169d3tmdkZNCgQQNiY2PZvXs3ISEhHD9+nJYtW7Jp0yZatWrlHN7w953bWrVqxaJFi4Csd247c+YMy5cv58svv+S2227jl19+cU5mu7Cc2T333MMDDzzAnj17mDRpEnXq1MlyObOGDRvSqVMn53JmJUuWdC5ntnnzZu666y46dOjALbfcQqFChfj6669ZunQp8+bNo3379gD06dOH999/n5EjR3LDDTdQsmRJmjdvnpsfgYjI1bN3UQkRkfxr/fr1xsfHx/Tt2zfL59etW2e8vb1N//79nW3nzp0z48aNM40aNTKhoaGmUKFCplSpUub+++83M2fONOnp6c5zs1rOrFChQqZixYrmhRdeMGfOnLnkNSdMmGBuvvlm4+vra8LDw02vXr0yLZF2wZw5c0zt2rWNv7+/KVasmOnSpYs5cuSI8/n4+HjTp08fc/PNN5vg4GATFhZmGjZsaL744otM94mNjTX33XefCQkJMYCWNhORPE09viIiIiLiETTGV0REREQ8goKviIiIiHgEBV8RERER8QgKviIiIiLiERR8RURERMQjKPiKiIiIiEcoZHcBuc3hcPDnn38SEhKirTZFRERE8iBjDGfOnKFMmTLOTXrcweOC759//klERITdZYiIiIjIvzh8+DDlypVz2/08LviGhIQA1h9kaGiozdWIiIiIyD8lJiYSERHhzG3u4nHB98LwhtDQUAVfERERkTzM3cNSNblNRERERDyCgq+IiIiIeAQFXxERERHxCAq+IiIiIuIRFHxFRERExCMo+IqIiIiIR1DwFRERERGPoOArIiIiIh5BwVdEREREPIKCr4iIiIh4BAVfEREREfEICr4iIiIi4hEUfEVERETEIyj4ioiIiIhHUPAVEREREY9ga/D9+eefad26NWXKlMHLy4tvvvnmX69ZsWIFderUwd/fnxtuuIFp06bleJ0iIiIikv/ZGnyTkpKoWbMmEydOvKrzY2JiuO+++7jzzjvZvHkzzz33HE8++SRLlizJ4UpFREREJL8rZOeLt2rVilatWl31+ZMnT6ZChQqMHTsWgCpVqrBq1SreeecdWrRokVNlioiIiOQ7xkByst1VZE9SUs7c19bg66q1a9cSFRWVqa1FixY899xzl70mJSWFlJQU53FiYmJOlSciIiKSJxgDTZrAmjV2V+K6QqSRnkP3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KFfO1rJEROxwVVsWFyTasliyQ1sWS760dCl07w7HjlkbUIwaBdHRcIWt50VE8oKcymsu//TbuHEj27Ztcx5/++23PPjggwwZMoTU1FS3FSYiItfg/Hl4/HEr9FapAr/9BgMHKvSKiEdz+Sfg008/zd69ewE4cOAAHTt2JCgoiLlz5/Liiy+6vUAREcmGgABrSEPv3rB+PdSubXdFIiK2czn47t27l1q1agEwd+5cmjVrxqxZs5g2bRpffvmlu+sTEZGrYQyMH29tQHFB8+YwcSIEBdlXl4hIHuLySuXGGBwOBwDLli3j/vvvByAiIoL4+Hj3ViciIv8uNhZ69IDFi63B6HfcoclrIiJZcLnHt169erz22mvMmDGDlStXct999wEQExNDeHi42wsUEZErWLAAqle3Qm9AAIweDWXL2l2ViEie5HLwHTduHBs3bqRv374MHTqUG264AYB58+Zx2223ub1AERHJQnKyNX73gQesJctq1LDG8vbta+3IJiIil3Dbcmbnz5/Hx8cHX19fd9wux2g5M8kOLWcmecq5c1CvHuzcaR0//zy8/jr4+9tbl4iIm+RUXnN5jO8FGzZsYNeuXQDccsst1KlTx21FiYjIFQQGwv33w6lT1soNd99td0UiIvmCyz2+x48fp2PHjqxcuZIiRYoAcPr0ae68805mz55NiRIlcqJOt1GPr2SHenzFdkeOQFoaVKhgHaemwpkzcN119tYlIpID8swGFv369ePs2bPs2LGDkydPcvLkSbZv305iYiL9+/d3W2EiIvL/5s61xvB26mSFXwA/P4VeEREXuTzUYfHixSxbtowqVao422655RYmTpzIPffc49biREQ82pkz8OyzMHWqdZyRASdPglbQERHJFpd7fB0OR5YT2Hx9fZ3r+4qIyDX69Vdrt7WpU61VGoYOhTVrFHpFRK6By8G3efPmPPvss/z555/OtqNHjzJgwADuuusutxYnIuJx0tPh1VehSRPYvx/Kl4cVK+C11yCPr5ojIpLXuRx8J0yYQGJiIpGRkVSqVIlKlSpRoUIFEhMTGT9+fE7UKCLiORwO+PZba1hDp06wZQvcfrvdVYmIFAguj/GNiIhg48aNLF++3LmcWZUqVYiKinJ7cSIiHsEY6+HtbU1amzkTfv8dHn3U7spERAoUl4LvnDlzmD9/Pqmpqdx1113069cv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bt0YMWJEjr2v7FDwzU2xsXDffdCvH3TuDBd+IGm5HBERuUYtW7bk2LFjHDhwgHfeeYcPPvjgktAxfvx42rRpQ+PGjfntt9/YunUrjzzyCM888wwDBw7MdO7QoUPp2LEj9evX5/vvv2f79u2MHTuWLVu2MGPGjFx7X6mpqTl270OHDvHdd9/x2GOPXdN9crLGazVnzhyio6MZMWIEGzdupGbNmrRo0YLjx49f9pqvvvqKY8eOOR/bt2/Hx8eHhx9+2HnOm2++yXvvvcfkyZP57bffCA4OpkWLFpn+sdWjRw9mzpyZt/6hZDxMQkKCAUxCQkLuvvCCBcaUKGEMGOPvb8z48cY4HC7d4uxZ63KwvhYREfc5d+6c2blzpzl37pyzzeGwft7a8XDlr4ju3bubNm3aZGpr166dqV27tvP40KFDxtfX10RHR19y/XvvvWcA8+uvvxpjjPntt98MYMaNG5fl6506deqytRw+fNg88sgjpmjRoiYoKMjUrVvXed+s6nz22WdNs2bNnMfNmjUzffr0Mc8++6y57rrrzB133GE6depkOnTokOm61NRUc91115np06cbY4zJyMgwo0aNMpGRkSYgIMDUqFHDzJ0797J1GmPMmDFjTL169TK1xcfHm0ceecSUKVPGBAYGmmrVqplZs2ZlOierGo0xZtu2baZly5YmODjYlCxZ0jz66KPmxIkTzuu+//5707hxYxMWFmaKFStm7rvvPrNv374r1nitGjRoYPr06eM8zsjIMGXKlDGjR4++6nu88847JiQkxJz9//DhcDhMqVKlzJgxY5znnD592vj7+5vPP/8807UVKlQwH330UZb3zep77oKcymvq8c1pycnW+N3WreHECWv1hg0boG9f9fSKiORxyclQuLA9j2vZPG779u2sWbMGPz8/Z9u8efNIS0u7pGcX4Omnn6Zw4cJ8/vnnAMycOZPChQvTu3fvLO9fpEiRLNvPnj1Ls2bNOHr0KPPnz2fLli28+OKLOBwOl+qfPn06fn5+rF69msmTJ9OlSxcWLFjA2bNnnecsWbKE5ORk2rZtC8Do0aP59NNPmTx5Mjt27GDAgAE8+uijrFy58rKv88svv1CvXr1MbefPn6du3bosXLiQ7du389RTT9G1a9dLhgf8s8bTp0/TvHlzateuzfr161m8eDFxcXF06NDBeU1SUhLR0dGs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8XG2ValShdjYWFJTU/Hz88vRmiX7svN5v/TSS3Tt2pUnn3wSgOrVq5OUlMRTTz3F0KFD8fZW315Bcrm8FhoaetW9vVDAenz9/PyoW7cuy5cvd7Y5HA6WL19Oo0aNsrymUaNGmc4HWLp06WXPl7wjO583wJtvvsmrr77K4sWLqVevXm6UKm7g6ud98803s23bNjZv3ux8PPDAA9x5551s3ryZiIiI3CxfXJSd7+/GjRuzb98+5z9wAPbu3Uvp0qUVevO47HzeycnJl4TbC//oseZLSUHitrzm2ry7vG/27NnG39/fTJs2zezcudM89dRTpkiRIiY2NtYYY0zXrl3NoEGDnOevXr3aFCpUyLz11ltm165dZsSIEVrOLB9x9fN+4403jJ+fn5k3b545duyY83HmzBm73oK4wNXP+5+0qkP+4urnfejQIRMSEmL69u1r9uzZY7777jtTsmRJ89prr9n1FsQFrn7eI0aMMCEhIebzzz83Bw4cMD/88IOpVKmS6dChg11vQVxw5swZs2nTJrNp0yYDmLffftts2rTJ/O9//zPGGDNo0CDTtWtX5/kXljN74YUXzK5du8zEiRO1nNkF48ePN+XLlzd+fn6mQYMG5tdff3U+16xZM9O9e/dM53/xxRemcuXKxs/Pz1StWtUsXLgwlyuWa+HK53399dcb4JLHiBEjcr9wyRZXv7//TsE3/3H1816zZo1p2LCh8ff3NxUrVjSvv/66SU9Pz+WqJbtc+bzT0tLMyy+/bCpVqmQCAgJMRESE6d27tzl16lTuFy4u++mnn7L8+/jCZ9y9e3fTrFmzS66pVauW8fPzMxUrVjRTp051+XW9jNHvA0RERESk4CtQY3xFRERERC5HwVdEREREPIKCr4iIiIh4BAVfEREREfEICr4iIiIi4hEUfEVERETEIyj4ioiIiIhHUPAVEREREY+g4CsiAkybNo0iRYrYXUa2eXl58c0331zxnMcee4wHH3wwV+oREcmLFHxFpMB47LHH8PLyuuSxb98+u0tj2rRpznq8vb0pV64cPXr04Pjx4265/7Fjx2jVqhUABw8exMvLi82bN2c6591332XatGlueb3Lefnll53v08fHh4iICJ566ilOnjzp0n0U0kUkJxSyuwAREXdq2bIlU6dOzdRWokQJm6rJLDQ0lD179uBwONiyZQs9evTgzz//ZMmSJdd871KlSv3rOWFhYdf8OlejatWqLFu2jIyMDHbt2sXjjz9OQkICc+bMyZXXFxG5HPX4ikiB4u/vT6lSpTI9fHx8ePvtt6levTrBwcFERETQu3dvzp49e9n7bNmyhTvvvJOQkBBCQ0OpW7cu69evdz6/atUqmjZtSmBgIBEREfTv35+kpKQr1ubl5UWpUqUoU6YMrVq1on///ixbtoxz587hcDgYOXIk5cqVw9/fn1q1arF48WLntampqfTt25fSpUsTEBDA9ddfz+jRozPd+8JQhwoVKgBQu3ZtvLy8uOOOO4DMvagffvghZcqUweFwZKqxTZs2PP74487jb7/9ljp16hAQEEDFihV55ZVXSE9Pv+L7LFSoEKVKlaJs2bJERUXx8MMPs3TpUufzGRkZPPHEE1SoUIHAwEBuuukm3n33XefzL7/8MtOnT+fbb7919h6vWLECgMOHD9OhQweKFClCsWLFaNOmDQcPHrxiPSIiFyj4iohH8Pb25r333mPHjh1Mnz6dH3/8kRdffPGy53fp0oVy5crx+++/s2HDBgYNGoSvry8A+/fvp2XLlrRv356tW7cyZ84cVq1aRd++fV2qKTAwEIfDQXp6Ou+++y5jx47lrbfeYuvWrbRo0YIHHniAP/74A4D33nuP+fPn88UXX7Bnzx5mzpxJZGRklvddt24dAMuWLePYsWN89dVXl5zz8MMP89dff/HTTz85206ePMnixYvp0qULAL/88gvdunXj2WefZefOnXzwwQdMmzaN119//arf48GDB1myZAl+fn7ONofDQbly5Zg7dy47d+5k+PDhDBkyhC+++AKAgQMH0qFDB1q2bMmxY8c4duwYt912G2lpabRo0YKQkBB++eUXVq9eTeHChWnZsiWpqalXXZOIeDAjIlJAdO/e3fj4+Jjg4GDn46GHHsry3Llz55rrrrvOeTx16lQTFhbmPA4JCTHTpk3L8tonnnjCPPXUU5nafvnlF+Pt7W3OnTuX5TX/vP/evXtN5cqVTb169YwxxpQpU8a8/vrrma6pX7++6d27tzHGmH79+pnmzZsbh8OR5f0B8/XXXxtjjImJiTGA2bRpU6Zzunfvbtq0aeM8btOmjXn88cedxx988IEpU6aMycjIMMYYc9ddd5lRo0ZluseMGTNM6dKls6zBGGNGjBhhvL29TXBwsAkICDCAAczbb7992WuMMaZPnz6mffv2l631wmvfdNNNmf4MUlJSTGBgoFmyZMkV7y8iYowxGuMrIgXKnXfeyfvvv+88Dg4OBqzez9GjR7N7924SExNJT0/n/PnzJCcnExQUdMl9oqOjefLJJ5kxY4bz1/WVKlUCrGEQW7duZebMmc7zjTE4HA5iYmKoUqVKlrUlJCRQuHBhHA4H58+fp0mTJnz00UckJiby559/0rhx40znN27cmC1btgDWMIW7776bm266iZYtW3L//fdzzz33XNOfVZcuXejZsyeTJk3C39+fmTNn8sgjj+Dt7e18n6tXr87Uw5uRkXHFPzeAm266ifnz53P+/Hk+++wzNm/eTL9+/TKdM3HiRD755BMOHTrEuXPnSE1NpVatWlesd8uWLezbt4+QkJBM7efPn2f//v3Z+BMQEU+j4CsiBUpwcDA33HBDpraDBw9y//3306tXL15//XWKFSvGqlWreOKJJ0hNTc0ywL388st07tyZhQsX8v333zNixAhmz55N27ZtOXv2LE8//TT9+/e/5Lry5ctftraQkBA2btyIt7c3pUuXJjAwEIDExMR/fV916tQhJiaG77//nmXLltGhQweioqKYN2/ev157Oa1bt8YYw8KFC6lfvz6//PIL77zzjvP5s2fP8sorr9CuXbtLrg0ICLjsff38/JyfwRtvvMF9993HK6+8wquvvgrA7NmzGThwIGPHjqVRo0aEhIQwZswYfvvttyvWe/bsWerWrZvpHxwX5JUJjCKStyn4ikiBt2HDBhwOB2PHjnX2Zl4YT3ollStXpnLlygwYMIBOnToxdepU2rZtS506ddi5c+clAfvfeHt7Z3lNaGgoZcqUYfXq1TRr1szZvnr1aho0aJDpvI4dO9KxY0ceeughWrZsycmTJylWrFim+10YT5uRkXHFegICAmjXrh0zZ85k37593HTTTdSpU8f5fJ06ddizZ4/L7/Ofhg0bRvPmzenVq5fzfd5222307t3bec4/e2z9/Pwuqb9OnTrMmTOHkiVLEhoaek01iYhn0uQ2ESnwbrjhBtLS0hg/fjwHDhxgxowZTJ48+bLnnzt3jr59+7JixQr+97//sXr1an7//XfnEIb//Oc/rFmzhr59+7J582b++OMPvv32W5cnt/3dCy+8wH//+1/mzJnDnj17GDRoEJs3b+bZZ58F4O233+bzzz9n9+7d7N27l7lz51KqVKksN90oWbIkgYGBLF68mLi4OBISEi77ul26dGHhwoV88sknzkltFwwfPpxPP/2UV155hR07drBr1y5mz57NsGHDXHpvjRo1okaNGowaNQqAG2+8kfXr17NkyRL27t3LSy+9xO+//57pmsjISLZu3cqePXuIj48nLS2NLl26ULx4cdq0acMvv/xCTEwMK1asoH///hw5csSlmkTEMyn4ikiBV7NmTd5++23++9//Uq1aNWbOnJlpKbB/8vHx4a+//qJbt25UrlyZDh060KpVK1555RUAatSowcqVK9m7dy9Nmzaldu3aDB8+nDJlymS7xv79+xMdHc3zzz9P9erVWbx4MfPnz+fGG28ErGESb775JvXq1aN+/focPHiQRYsWOXuw/65QoUK89957fPDBB5QpU4Y2bdpc9nWbN29OsWLF2LNnD507d870XIsWLfjuu+/44YcfqF+/PrfeeivvvPMO119/vcvvb8CAAXz00UccPnyYp59+mnbt2tGxY0caNmzIX3/9lan3F6Bnz57cdNNN1KtXjxIlSrB69WqCgoL4+eefKV++PO3ataNKlSo88cQTnD9/Xj3AInJVvIwxxu4iRERERERymnp8RURERMQjKPiKiIiIiEdQ8BURERERj6DgKyIiIiIeQcFXRERERDyCgq+IiIiIeAQFXxERERHxCAq+IiIiIuIRFHxFRERExCMo+IqIiIiIR1DwFRERERGP8H9Um65ieSJdPAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 800x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import roc_curve, auc\n",
    "# Calculate the false positive rate (FPR), true positive rate (TPR), and thresholds\n",
    "fpr, tpr, thresholds = roc_curve(y_test, y_proba)\n",
    "\n",
    "# Calculate the area under the ROC curve (AUC)\n",
    "roc_auc = auc(fpr, tpr)\n",
    "\n",
    "# Plot the ROC curve\n",
    "plt.figure(figsize=(8, 6))\n",
    "plt.plot(fpr, tpr, color='blue', label='ROC curve (area = %0.2f)' % roc_auc)\n",
    "plt.plot([0, 1], [0, 1], color='red', linestyle='--')\n",
    "plt.xlim([0.0, 1.0])\n",
    "plt.ylim([0.0, 1.05])\n",
    "plt.xlabel('False Positive Rate')\n",
    "plt.ylabel('True Positive Rate')\n",
    "plt.title('XGBoost')\n",
    "plt.legend(loc='lower right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "id": "9f10a7ae",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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19eEhISY119/PdVrOnz4sGnTpo3x8/MzgYGB5plnnjHLly9PV8C/VvA1xpgxY8YYwEybNs3Zlp73JK3P+d/vz4wZM8zdd99tAgMDjZeXl6lcubKZMmXKNWsVyYkKZHWPskh+4ubmxvvvv0+tWrXo3bs3P/30E3Xr1qVv374p9luyZAlgjQvOqNjYWM6cOQNATEwM33zzDcuXL2fw4MEp9nv55Zd55ZVXCA8Pp3fv3uzdu5f33nuPjRs3sm7dOjw9PYF/vjqtV68eY8eO5eTJk7zzzjusW7eOrVu3UqRIEQAeeOABdu3aRf/+/QkLC+PUqVOsXLmSI0eOEBYWxoQJE+jfvz+FChVi6NChAAQFBWX49WVEYmIix44do2jRoinalyxZgo+PDx07dkzzuLJly9KkSRNWr17N5cuX8fX1ZfHixfj6+vK///0vU7XExsayatUq7rzzTsqUKZOpc1xLYmIiERERNGnShDfffBM/Pz/CwsKYPHkyS5cu5cEHH0xRy5IlS3jkkUfw8PAAYM6cOfTo0YOIiAhef/11YmNjee+992jSpAlbt2696lfbHTp0oEiRIgwcONA5zKZQoUIA7Nq1izvuuAN/f3+ef/55PD09ef/997nrrrv44YcfaNCgQYpz9enTh8DAQIYPH86lS5du+D158MEHqVChAmPGjMH8/6i9lStXcvDgQXr27EnJkiXZtWsX06ZNY9euXfz888/XHdawf/9+/ve///HYY4/Ro0cPZsyYwSOPPEKdOnWoUqXKNY89d+4cLVq0oEOHDnTs2JHPPvuMF154gWrVqtGyZUsALl26RLNmzThx4gQDBgygZMmSzJs3j++///6G3w+Abt26MWTIEFasWOEc/pOe96RDhw7s27ePTz75hLfffpvixYsDEBgYCMB7771HlSpVuP/++ylQoABLliyhT58+OByOVH+/ieRodidvkbxo8ODBBjAeHh5m8+bNqZ5v3769Acz58+dTtF++fNmcPn3a+fh372xyT2Baj969exuHw+Hc99SpU8bLy8s0b97cJCUlOdsnTZpkADNjxgxjjDHx8fGmRIkSpmrVquby5cvO/b7++msDmOHDhxtjrGEApOOr7qwe6tC8eXPne7Njxw7TrVs3A5i+ffum2LdIkSKmRo0a1zzf008/bQDz22+/GWOMKVq06HWPuZbt27cbwAwYMCBd+2e0xxcwL774Yop9HQ6HKVWqlHnggQdStH/66acGMD/++KMxxpgLFy6YIkWKmF69eqXYLyoqygQEBKRq/6+rfdvQrl074+XlZQ4cOOBsO378uClcuLC58847nW3JvZRNmjRJ0QOdHtfq8e3cuXOq/dP6ij/5m5fk9+PfNf23x/e/+506dcp4e3ubZ5991tl2tR5f/vMtQ1xcnClZsmSKz2f8+PEGMIsWLXK2Xb582VSqVMklPb7GGBMQEGBq1arl3E7ve3KtoQ5pnSMiIsKUK1fumvWK5DSa1UEkCyT3loSEhFC1atVUz8fExAA4e86STZ06lcDAQOejSZMmqY594oknWLlyJStXruTzzz+nb9++vP/++0RGRjr3+e6774iPj+eZZ55JcfNNr1698Pf3Z+nSpYB109apU6fo06cPPj4+zv1at25NpUqVnPv5+vri5eXFmjVrOHfuXGbflhu2YsUK53tTrVo15syZQ8+ePVPd1HfhwgUKFy58zXMlP5/8WcTExFz3mGtJPs+NnON6evfunWLbzc2NBx98kGXLlnHx4kVn+4IFCyhVqpTz52flypWcP3+ezp07c+bMGefDw8ODBg0aZKq3MSkpiRUrVtCuXTvKlSvnbA8ODqZLly6sXbvW+Z4k69Wrl7MH2hWeeuqpVG2+vr7O31+5coUzZ85w++23A7Bly5brnvO2227jjjvucG4HBgZy6623cvDgweseW6hQoRTf4nh5eVG/fv0Uxy5fvpxSpUpx//33O9t8fHxS3Zx5IwoVKpRidocbfU/+e47o6GjOnDlD06ZNOXjwINHR0S6qXCTrKfiKuNjRo0cZMWIEVatW5ejRo7zxxhup9kkOR/8OK2ANJ0gOtVe7K7tChQqEh4cTHh5Ohw4dmDRpEn369GHChAns2LEDgD///BOAW2+9NcWxXl5elCtXzvn81fYDqFSpkvN5b29vXn/9db755huCgoK48847eeONN4iKikr3+/Jfp0+fJioqyvn473uRlgYNGrBy5UqWL1/Om2++SZEiRTh37hxeXl4p9itcuPB1p3VKfj75s/D397+hqaD8/f1TnNfVChQoQOnSpVO1d+rUicuXL7N48WLA+platmwZDz74oPNr/T/++AOAZs2apfiPVWBgICtWrODUqVMZruf06dPExsam+bNTuXJlHA4HR48eTdFetmzZDF/n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REREJJu4GZN8W7s9GjRoQL169Zg0aRIADoeD0NBQ+vfvz4svvnjd45OSkihatCiTJk2ie/fu190/JiaGgIAAjh+PJjjY/4brl1xk1CjYsAFmzoSgILurERERkatIzmvR0dH4+7sur9k6nVl8fDybN29m8ODBzjZ3d3fCw8PZsGFDus4RGxtLQkICxYoVS/P5uLg44uLinNsxWnY2/1iyBMqWhapVre0hQ8Dd3Zq6TERERPIdW4c6nDlzhqSkJIL+0/sWFBREVFRUus7xwgsvEBISQnh4eJrPjx07loCAAOcjNDT0huuWHC42Fnr3hvvvh65drRvawFp+WKFXREQk37J9jO+NeO2115g/fz5ffvklPj4+ae4zePBgoqOjnY+jR49mc5WSrbZsgdq1YepUazs8XGFXREREAJuHOhQvXhwPDw9OnjyZov3kyZOULFnymse++eabvPbaa3z33XdUr179qvt5e3vj7e3tknolB3M44M03YdgwSEiA4GD46CMr+IqIiIhgc4+vl5cXderUYdWqVc42h8PBqlWraNiw4VWPe+ONNxg1ahTLly+nbt262VGq5GTnzlkB94UXrNDbvr01e4NCr4iIiPyLrT2+AJGRkfTo0YO6detSv359JkyYwKVLl+jZsycA3bt3p1SpUowdOxaA119/neHDhzNv3jzCwsKcY4ELFSpEoUKFbHsdYiN/fyvw+vnBu+/Co49qeIOIiIikYnvw7dSpE6dPn2b48OFERUVRs2ZNli9f7rzh7ciRI7i7/9Mx/d577xEfH8///ve/FOcZMWIEL7/8cnaWLna6cAE8PcHHx7ppbe5ciIuDChXsrkxERERyKNvn8c1umsc3D/j5Z2u2hjZt/lmFTURERPKMrJrHN1fP6iD5TGIijBwJTZrAwYOwaBFoXmYRERFJJwVfyR0OHYKmTWHECEhKgi5dYNs2a3yviIiISDoo+ErOZgzMmQM1asD69VbQ/fhja0xvkSJ2VyciIiK5iO03t4lc099/Q//+1s1sjRtboTcszO6qREREJBdS8JWcrXhxeP99+OMPePFFKKAfWREREckcpQjJWeLj4eWXrRvYWrWy2jp1srUkERERyRsUfCXn2LvXmqZs82YoUQL274fChe2uSkRERPII3dwm9jMGpk+H2rWt0Fu0KEyZotArIiIiLqUeX7HXmTPQq5c1Jy9A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mxIlSpjRo0fb9RIkAzL6eY8YMcIULlzYfPLJJ+bgwYNmxYoVpnz58qZjx452vQTJgAsXLpitW7earVu3GsC89dZbZuvWrebPP/80xhjz4osvmm7dujn3T57O7LnnnjO7d+82kydP1nRmySZOnGjKlCljvLy8TP369c3PP//sfK5p06amR48eKfb/9NNPTcWKFY2Xl5epUqWKWbp0aTZXLDciI5/3zTffbIBUjxEjRmR/4ZIpGf3z/W8KvrlPRj/v9evXmwYNGhhvb29Trlw58+qrr5rExMRsrloyKyOfd0JCgnn55ZdN+fLljY+PjwkNDTV9+vQx586dy/7CJcO+//77NP89Tv6Me/ToYZo2bZrqmJo1axovLy9Trlw5M3PmzAxf180YfR8gIiIiInlfnhrjKyIiIiJyNQq+IiIiIpIvKPiKiIiISL6g4CsiIiIi+YKCr4iIiIjkCwq+IiIiIpIvKPiKiIiISL6g4CsiIiIi+YKCr4gIMGvWLIoUKWJ3GZnm5ubGokWLrrnPI488Qrt27bKlHhGRnEjBV0TyjEceeQQ3N7dUj/3799tdGrNmzXLW4+7uTunSpenZsyenTp1yyflPnDhBy5YtATh8+DBubm5s27YtxT7vvPMOs2bNcsn1rubll192vk4PDw9CQ0N54oknOHv2bIbOo5AuIlmhgN0FiIi4UosWLZg5c2aKtsDAQJuqScnf35+9e/ficDjYvn07PXv25Pjx43z77bc3fO6SJUted5+AgIAbvk56VKlShe+++46kpCR2797No48+SnR0NAsWLMiW64uIXI16fEUkT/H29qZkyZIpHh4eHrz11ltUq1aNggULEhoaSp8+fbh48eJVz7N9+3buvvtuChcujL+/P3Xq1GHTpk3O59euXcsdd9yBr68voaGhPP3001y6dOmatbm5uVGyZElCQkJo2bIlTz/9NN999x2XL1/G4XAwcuRISpcujbe3NzVr1mT58uXOY+Pj4+nXrx/BwcH4+Phw8803M3bs2BTnTh7qULZsWQBq1aqFm5sbd911F5CyF3XatGmEhITgcDhS1Ni2bVseffRR5/ZXX31F7dq18fHxoVy5crzyyiskJiZe83UWKFCAkiVLUqpUKcLDw3nwwQdZuXKl8/mkpCQee+wxypYti6+vL7feeivvvPOO8/mXX36Z2bNn89VXXzl7j9esWQPA0aNH6dixI0WKFKFYsWK0bduWw4cPX7MeEZFkCr4iki+4u7vz7rvvsmvXLmbPns3q1at5/vnnr7p/165dKV26NBs3bmTz5s28+OKLeHp6AnDgwAFatGjBAw88wG+//caCBQtYu3Yt/fr1y1BNvr6+OBwOEhMTeeeddxg/fjxvvvkmv/32GxEREdx///388ccfALz77rssXryYTz/9lL179zJ37lzCwsLSPO+vv/4KwHfffceJEyf44osvUu3z4IMP8vfff/P99987286ePcvy5cvp2rUrAD/99BPdu3dnwIAB/P7777z//vvMmjWLV199Nd2v8fDhw3z77bd4eXk52xwOB6VLl2bhwoX8/vvvDB8+nCFDhvDpp58CMGjQIDp27EiLFi04ceIEJ06coFGjRiQkJBAREUHhwoX56aefWLduHYUKFaJFixbEx8enuyYRyceMiEge0aNHD+Ph4WEKFizofPzvf/9Lc9+FCxeam266ybk9c+ZMExAQ4NwuXLiwmTVrVprHPvbYY+aJJ55I0fbTTz8Zd3d3c/ny5TSP+e/59+3bZypWrGjq1q1rjDEmJCTEvPrqqymOqVevnunTp48xxpj+/fubZs2aGYfDkeb5AfPll18aY4w5dOiQAczWrVtT7NOjRw/Ttm1b53bbtm3No48+6tx+//33TUhIiElKSjLGGHPPPfeYMWPGpDjHnDlzTHBwcJo1GGPMiBEjjLu7uylYsKDx8fExgAHMW2+9ddVjjDGmb9++5oEHHrhqrcnXvvXWW1O8B3FxccbX19d8++231zy/iIgxxmiMr4jkKXfffTfvvfeec7tgwYKA1fs5duxY9uzZQ0xMDImJiVy5coXY2Fj8/PxSnScyMpLHH3+cOXPmOL+uL1++PGANg/jtt9+YO3euc39jDA6Hg0OHDlG5cuU0a4uOjqZQoUI4HA6uXLlCkyZN+OCDD4iJieH48eM0btw4xf6NGzdm+/btgDVM4d577+XWW2+lRYsW3HfffTRv3vyG3quuXbvSq1cvpkyZgre3N3PnzuWhhx7C3d3d+TrXrVuXooc3KSnpmu8bwK233srixYu5cuUKH3/8Mdu2baN///4p9pk8eTIzZszgyJEjXL58mfj4eGrWrHnNerdv387+/fspXLhwivYrV65w4MCBTLwDIpLfKPiKSJ5SsGBBbrnllhRthw8f5r777qN37968+uqrFCtWjLVr1/LYY48RHx+fZoB7+eWX6dKlC0uXLuWbb75hxIgRzJ8/n/bt23Px4kWefPJJnn766VTHlSlT5qq1FS5cmC1btuDu7k5wcDC+vr4AxMTEXPd11a5dm0OHDvHNN9/w3Xff0bFjR8LDw/nss8+ue+zVtGnTBmMMS5cupV69evz000+8/fbbzucvXrzIK6+8QocOHVId6+Pjc9Xzenl5OT+D1157jdatW/PKK68watQoAObPn8+gQYMYP348DRs2pHDhwowbN45ffvnlmvVevHiROnXqpPgPR7KccgOjiORsCr4ikudt3rwZh8PB+PHjnb2ZyeNJr6VixYpUrFiRgQMH0rlzZ2bOnEn79u2pXbs2v//+e6qAfT3u7u5pHuPv709ISAjr1q2jadOmzvZ169ZRv379FPt16tSJTp068b///Y8WLVpw9uxZihUrluJ8yeNpk5KSrlmPj48PHTp0YO7cuezfv59bb72V2rVrO5+vXbs2e/fuzfDr/K9hw4bRrFkzevfu7XydjRo1ok+fPs59/ttj6+Xllar+2rVrs2DBAkqUKIG/v/8N1SQi+ZNubhORPO+WW24hISGBiRMncvDgQebMmcPUqVOvuv/ly5fp168fa9as4c8//2TdunVs3LjROYThhRdeYP369fTr149t27bxxx9/8NVXX2X45rZ/e+6553j99ddZsGABe/fu5cUXX2Tbtm0MGDAAgLfeeotPPvmEPXv2sG/fPhYuXEjJkiXTXHSjRIkS+Pr6snz5ck6ePEl0dPRVr9u1a1eWLl3KjBkznDe1JRs+fDgfffQRr7zyCrt27WL37t3Mnz+fYcOGZei1NWzYkOrVqzNmzBgAKlSowKZNm/j222/Zt28fL730Ehs3bkxxTFhYGL/99ht79+7lzJkzJCQk0LVrV4oXL07btm356aefOHToEGvWrOHpp5/m2LFjGapJRPInBV8RyfNq1KjBW2+9xeuvv07VqlWZO3duiqnA/svDw4O///6b7t27U7FiRTp27EjLli155ZVXAKhevTo//PAD+/bt44477qBWrVoMHz6ckJCQTNf49NNPExkZybPPPku1atVYvnw5ixcvpkKFCoA1TOKNN96gbt261KtXj8OHD7Ns2TJnD/a/FShQgHfffZf333+fkJAQ2rZte9XrNmvWjGLFirF37166dOmS4rmIiAi+/vprVqxYQb169bj99tt5++23ufnmmzP8+gYOHMgHH3zA0aNHefLJJ+nQoQOdOnWiQYMG/P333yl6fwF69erFrbfeSt26dQkMDGTdunX4+fnx448/UqZMGTp06EDlypV57LHHuHLlinqARSRd3Iwxxu4iRERERESymnp8RURERCRfUPAVERERkXxBwVdERERE8gUFXxERERHJFxR8RURERCRfUPAVERERkXxBwVdERERE8gUFXxERERHJFxR8RURERCRfUPAVERERkXxBwVdERERE8oX/A8lTrErJuNg/AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 800x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Predict probabilities for the training data\n",
    "y_train_proba = model_xgb.predict_proba(X_train)[:, 1]\n",
    "\n",
    "# Calculate the false positive rate (FPR), true positive rate (TPR), and thresholds\n",
    "fpr_train, tpr_train, thresholds_train = roc_curve(y_train, y_train_proba)\n",
    "\n",
    "# Calculate the area under the ROC curve (AUC) for training data\n",
    "roc_auc_train = auc(fpr_train, tpr_train)\n",
    "\n",
    "# Plot the ROC curve for training data\n",
    "plt.figure(figsize=(8, 6))\n",
    "plt.plot(fpr_train, tpr_train, color='blue', label='ROC curve (area = %0.2f)' % roc_auc_train)\n",
    "plt.plot([0, 1], [0, 1], color='red', linestyle='--')\n",
    "plt.xlim([0.0, 1.0])\n",
    "plt.ylim([0.0, 1.05])\n",
    "plt.xlabel('False Positive Rate')\n",
    "plt.ylabel('True Positive Rate')\n",
    "plt.title('XGBoost - ROC Curve for Training Data')\n",
    "plt.legend(loc='lower right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f4b97d8",
   "metadata": {},
   "source": [
    "# feature importance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "c1095af0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# for important features:\n",
    "important_feat = model_xgb.feature_importances_\n",
    "#get indices of those important features\n",
    "idx = important_feat.argsort(kind= \"quicksort\")\n",
    "idx= idx[::-1][:50]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "ae7e0162",
   "metadata": {},
   "outputs": [],
   "source": [
    "df1 = X_selected.T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "1d97f818",
   "metadata": {},
   "outputs": [],
   "source": [
    "top_met = df1.iloc[idx]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "4cd4227b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['CRISP3', 'AURKA', 'EMP1', 'CRNN', 'GPX3', 'NUSAP1', 'HSPB8', 'LAMB3',\n",
       "       'RPN1', 'EFNA1', 'ECT2', 'ALOX12', 'GALNT1', 'ID4', 'IGFBP3', 'SLK',\n",
       "       'RAB11FIP1', 'SIM2', 'CLIC3', 'MCM2', 'GALE', 'DHRS1', 'IGF2BP2',\n",
       "       'TJP1', 'KANK1', 'COL7A1', 'AGRN', 'TGIF1', 'AIM2', 'COL1A1', 'CFD',\n",
       "       'COL5A2', 'LAMC2', 'ZBTB16', 'RHCG', 'CRABP2', 'CH25H', 'DUOX1', 'PTN',\n",
       "       'HSPD1', 'ITPKC', 'HSPBAP1', 'LCN2', 'UCHL1', 'PHLDA1', 'PITX1',\n",
       "       'CCNG2', 'MAL', 'PPP1R3C', 'AQP3'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "top_met.index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "8f6d88bb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['ACLY', 'ACTG2', 'AGRN', 'AIM2', 'ALDH9A1', 'ALOX12', 'ANO1', 'AQP3',\n",
       "       'ATP6V1D', 'AURKA', 'CCNG2', 'CES2', 'CFD', 'CH25H', 'CLIC3', 'COL1A1',\n",
       "       'COL5A2', 'COL7A1', 'CRABP2', 'CRCT1', 'CRISP3', 'CRNN', 'CYP4B1',\n",
       "       'DHRS1', 'DHRS2', 'DUOX1', 'DUSP5', 'ECM1', 'ECT2', 'EFNA1', 'EMP1',\n",
       "       'ENTPD6', 'ERCC3', 'FLG', 'FSCN1', 'GALE', 'GALNT1', 'GPX3', 'HOPX',\n",
       "       'HSPB8', 'HSPBAP1', 'HSPD1', 'ID4', 'IFI35', 'IGF2BP2', 'IGFBP3',\n",
       "       'IL1RN', 'INPP1', 'ITPKC', 'KANK1', 'KLK13', 'KRT4', 'LAMB3', 'LAMC2',\n",
       "       'LCN2', 'LYPD3', 'MAL', 'MCM2', 'MUC1', 'MYH10', 'NDRG2', 'NT5C2',\n",
       "       'NUSAP1', 'PCSK5', 'PHLDA1', 'PITX1', 'PPP1R3C', 'PTN', 'RAB11FIP1',\n",
       "       'RANBP9', 'RHCG', 'RND3', 'RPN1', 'RUVBL1', 'SCNN1A', 'SERPINB13',\n",
       "       'SERPINB2', 'SIM2', 'SLC2A1', 'SLK', 'SPRR3', 'SSRP1', 'STK24',\n",
       "       'SYNPO2L', 'TAPBP', 'TFAP2B', 'TGIF1', 'TIAM1', 'TJP1', 'TMF1',\n",
       "       'TMPRSS11D', 'TMPRSS11E', 'TSPAN6', 'TST', 'TYMP', 'UCHL1', 'ZBTB16',\n",
       "       'ZNF185'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_selected.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "5d9ff727",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy :  0.725\n",
      "Sensitivity :  0.38461538461538464\n",
      "Specificity :  0.8888888888888888\n"
     ]
    }
   ],
   "source": [
    "total1=sum(sum(confusion_matrix_test))\n",
    "#####from confusion matrix calculate accuracy\n",
    "accuracy1=(confusion_matrix_test[0,0]+confusion_matrix_test[1,1])/total1\n",
    "print ('Accuracy : ', accuracy1)\n",
    "\n",
    "sensitivity1 = confusion_matrix_test[0,0]/(confusion_matrix_test[0,0]+confusion_matrix_test[0,1])\n",
    "print('Sensitivity : ', sensitivity1 )\n",
    "\n",
    "specificity1 = confusion_matrix_test[1,1]/(confusion_matrix_test[1,0]+confusion_matrix_test[1,1])\n",
    "print('Specificity : ', specificity1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "14be0163",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.62      0.38      0.48        13\n",
      "           1       0.75      0.89      0.81        27\n",
      "\n",
      "    accuracy                           0.73        40\n",
      "   macro avg       0.69      0.64      0.64        40\n",
      "weighted avg       0.71      0.72      0.70        40\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report, confusion_matrix\n",
    "grid_predictions = grid.predict(X_test)\n",
    "print(classification_report(y_test, grid_predictions))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5ec38b70",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}