{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "rotary-animation",
"metadata": {},
"outputs": [],
"source": [
"from itertools import combinations\n",
"\n",
"import mysql.connector as sql\n",
"import numpy as np\n",
"import pandas as pd\n",
"import scikit_posthocs as sp\n",
"import seaborn as sns\n",
"from bootstrap import bootstrap_error_estimate\n",
"from scipy.stats import gmean\n",
"# Model comparison imports\n",
"from delong_ci import calc_auc_ci\n",
"from mlxtend.evaluate import cochrans_q, mcnemar, mcnemar_table\n",
"from mlxtend.evaluate import paired_ttest_5x2cv\n",
"#RDKit imports\n",
"from rdkit import Chem\n",
"from rdkit import Chem\n",
"from rdkit.Chem import AllChem\n",
"# ML imports\n",
"from lightgbm import LGBMClassifier\n",
"from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.metrics import roc_auc_score, roc_curve\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.neighbors import KNeighborsClassifier\n",
"from tqdm.notebook import tqdm"
]
},
{
"cell_type": "markdown",
"id": "exterior-denmark",
"metadata": {},
"source": [
"Establish a connection to a local version of the ChEMBL database. "
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "female-principal",
"metadata": {},
"outputs": [],
"source": [
"con = sql.connect(host='localhost', database='chembl_26', user='pwalters', password='itsasecret')\n",
"cursor = con.cursor()"
]
},
{
"cell_type": "markdown",
"id": "appointed-basis",
"metadata": {},
"source": [
"Query the ChEMBL database for hERG data. "
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "referenced-momentum",
"metadata": {},
"outputs": [],
"source": [
"query = \"\"\"select canonical_smiles, cs.molregno, md.chembl_id as mol_chembl_id, standard_relation, standard_value,\n",
"standard_type, standard_units, description, td.organism, assay_type, confidence_score,\n",
"td.pref_name, td.chembl_id as tgt_chembl_id\n",
"from activities act\n",
"join assays ass on act.assay_id = ass.assay_id\n",
"join target_dictionary td on td.tid = ass.tid\n",
"join compound_structures cs on cs.molregno = act.molregno\n",
"join molecule_dictionary md on md.molregno = cs.molregno\n",
"where ass.tid = 165\n",
"and assay_type in ('B','F')\n",
"and standard_value is not null\n",
"and standard_units = 'nM'\n",
"and act.standard_relation is not null\n",
"and standard_type = 'IC50'\n",
"and standard_relation = '='\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "retired-accounting",
"metadata": {},
"outputs": [],
"source": [
"df_ok = pd.read_sql(query,con=con)"
]
},
{
"cell_type": "markdown",
"id": "finnish-paradise",
"metadata": {},
"source": [
"A quick sanity check to ensure that we extracted the data correctly. "
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "recent-bunny",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" canonical_smiles | \n",
" molregno | \n",
" mol_chembl_id | \n",
" standard_relation | \n",
" standard_value | \n",
" standard_type | \n",
" standard_units | \n",
" description | \n",
" organism | \n",
" assay_type | \n",
" confidence_score | \n",
" pref_name | \n",
" tgt_chembl_id | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" COCC(=O)O[C@]1(CCN(C)CCCc2nc3ccccc3[nH]2)CCc2c... | \n",
" 72035 | \n",
" CHEMBL45816 | \n",
" = | \n",
" 1430.0 | \n",
" IC50 | \n",
" nM | \n",
" K+ channel blocking activity in COS-7 African ... | \n",
" Homo sapiens | \n",
" F | \n",
" 8 | \n",
" HERG | \n",
" CHEMBL240 | \n",
"
\n",
" \n",
" | 1 | \n",
" CC(C)COCC(CN(Cc1ccccc1)c1ccccc1)N1CCCC1 | \n",
" 112651 | \n",
" CHEMBL1008 | \n",
" = | \n",
" 550.0 | \n",
" IC50 | \n",
" nM | \n",
" K+ channel blocking activity in COS-7 African ... | \n",
" Homo sapiens | \n",
" F | \n",
" 9 | \n",
" HERG | \n",
" CHEMBL240 | \n",
"
\n",
" \n",
" | 2 | \n",
" COc1c(N2C[C@@H]3CCCN[C@@H]3C2)c(F)cc2c(=O)c(C(... | \n",
" 1788 | \n",
" CHEMBL32 | \n",
" = | \n",
" 129000.0 | \n",
" IC50 | \n",
" nM | \n",
" K+ channel blocking activity in Chinese hamste... | \n",
" Homo sapiens | \n",
" F | \n",
" 8 | \n",
" HERG | \n",
" CHEMBL240 | \n",
"
\n",
" \n",
" | 3 | \n",
" COc1c(N2CCNC(C)C2)c(F)cc2c(=O)c(C(=O)O)cn(C3CC... | \n",
" 1712 | \n",
" CHEMBL31 | \n",
" = | \n",
" 130000.0 | \n",
" IC50 | \n",
" nM | \n",
" K+ channel blocking activity in Chinese hamste... | \n",
" Homo sapiens | \n",
" F | \n",
" 8 | \n",
" HERG | \n",
" CHEMBL240 | \n",
"
\n",
" \n",
" | 4 | \n",
" Cc1c(F)c(N2CCNC(C)C2)cc2c1c(=O)c(C(=O)O)cn2C1CC1 | \n",
" 17136 | \n",
" CHEMBL583 | \n",
" = | \n",
" 104000.0 | \n",
" IC50 | \n",
" nM | \n",
" K+ channel blocking activity in Chinese hamste... | \n",
" Homo sapiens | \n",
" F | \n",
" 8 | \n",
" HERG | \n",
" CHEMBL240 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" canonical_smiles molregno mol_chembl_id \\\n",
"0 COCC(=O)O[C@]1(CCN(C)CCCc2nc3ccccc3[nH]2)CCc2c... 72035 CHEMBL45816 \n",
"1 CC(C)COCC(CN(Cc1ccccc1)c1ccccc1)N1CCCC1 112651 CHEMBL1008 \n",
"2 COc1c(N2C[C@@H]3CCCN[C@@H]3C2)c(F)cc2c(=O)c(C(... 1788 CHEMBL32 \n",
"3 COc1c(N2CCNC(C)C2)c(F)cc2c(=O)c(C(=O)O)cn(C3CC... 1712 CHEMBL31 \n",
"4 Cc1c(F)c(N2CCNC(C)C2)cc2c1c(=O)c(C(=O)O)cn2C1CC1 17136 CHEMBL583 \n",
"\n",
" standard_relation standard_value standard_type standard_units \\\n",
"0 = 1430.0 IC50 nM \n",
"1 = 550.0 IC50 nM \n",
"2 = 129000.0 IC50 nM \n",
"3 = 130000.0 IC50 nM \n",
"4 = 104000.0 IC50 nM \n",
"\n",
" description organism assay_type \\\n",
"0 K+ channel blocking activity in COS-7 African ... Homo sapiens F \n",
"1 K+ channel blocking activity in COS-7 African ... Homo sapiens F \n",
"2 K+ channel blocking activity in Chinese hamste... Homo sapiens F \n",
"3 K+ channel blocking activity in Chinese hamste... Homo sapiens F \n",
"4 K+ channel blocking activity in Chinese hamste... Homo sapiens F \n",
"\n",
" confidence_score pref_name tgt_chembl_id \n",
"0 8 HERG CHEMBL240 \n",
"1 9 HERG CHEMBL240 \n",
"2 8 HERG CHEMBL240 \n",
"3 8 HERG CHEMBL240 \n",
"4 8 HERG CHEMBL240 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_ok.head()"
]
},
{
"cell_type": "markdown",
"id": "french-caution",
"metadata": {},
"source": [
"Aggregate the results by taking the geometric mean of replicates. "
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "eligible-pressing",
"metadata": {},
"outputs": [],
"source": [
"grouper = df_ok.groupby([\"canonical_smiles\",\"molregno\"])\n",
"data_df = grouper['standard_value'].apply(gmean).to_frame(name = 'IC50').reset_index()"
]
},
{
"cell_type": "markdown",
"id": "electoral-fossil",
"metadata": {},
"source": [
"Add a new column with the pIC50"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "satisfied-hamburg",
"metadata": {},
"outputs": [],
"source": [
"data_df['pIC50'] = -np.log10(data_df.IC50*1e-9)"
]
},
{
"cell_type": "markdown",
"id": "miniature-advocate",
"metadata": {},
"source": [
"Set the \"Active\" field to 1 if the pIC50 >= 5 (10uM), otherwise 0"
]
},
{
"cell_type": "markdown",
"id": "exciting-supervisor",
"metadata": {},
"source": [
"Look at counts of active and inactive molecules"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "abroad-measure",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1 4191\n",
"0 2048\n",
"Name: Active, dtype: int64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_df['Active'] = [1 if x >= 5 else 0 for x in data_df.pIC50]\n",
"data_df['Active'].value_counts()"
]
},
{
"cell_type": "markdown",
"id": "geographic-annex",
"metadata": {},
"source": [
"Visualize the activity distribution."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "completed-influence",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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qRBeAACAqRBeAACAqRBeAACAqRBeAACAqRBeAACAqRBeAACAqRBeAACAqRBeAACAqRBeAACAqRBeAACAqRBeAACAqZQpvIwfP17//Oc/i13/wQcfaPDgwRUuCgAAoDg1brXy+vXrunz5snP5X//6l0JCQhQYGFiob15enj7++GN9//337q8SAADgJyWGl2HDhik1NVWSZLFY9Pzzz+v5558vsr/D4VCPHj3cXyUAAMBPbhle/P39tWzZMh09elQOh0OrV69WSEiIWrduXaivl5eX/P39uWwEAAAq1S3DiyT17t1bvXv3liSdO3dOjz76qDp27FjphQEAABSlxPDyS1FRUZVVBwAAQKmUKbxI0scff6xdu3YpOTlZubm5hdZbLBb97W9/c0txAAAANytTeNm8ebMWL14sSapfv76sVmulFAUAAFCcMoWX119/XW3atNFf//pXNWjQoLJqAgAAKFaZHlJ3/vx5jRkzhuACAAAMU6bw0rx5cyUnJ1dWLQAAACUqU3iJjIzUpk2b9PXXX1dWPQAAALdUpjkvR44cka+vr4YOHaqWLVvK399fFovFpQ93GwEAgMpUpvDyySefSJIaNWqk69ev6+zZs5VSFAAAQHHKFF4++OCDyqoDAACgVMo05wUAAHiOf/7zn2rdurW6deumrKyscu8nJSVFGRkZzuWnn366yPcYeooyjbyMHz++VP1ef/31chUDAABKLzY2VrVr19aVK1f0wQcfaMCAAWXex0cffaS5c+dq+/btql27tiRpzJgx6t69u7vLdZsyhZfvv/++UFteXp4uX76szMxMNWnSRP/zP//jtuIAuEf88QtKScv/rSyooa/B1QBwh6ysLO3du1dDhw5VbGystm/fXq7w8p///EfXrl1zaevcubM6d+7srlLdzi1zXnJzc7V//34tXLhQv/71r91SGAD3SUnL0sVrNyRJ9X15rQdQHXz00Ue6du2aunXrpitXrmjv3r368ccf1bBhQ6NLq3RumfPi7e2t/v3765FHHtGLL77ojl0CAIBb2LVrlywWi+69916FhIQoNzdX7733XqF+X3zxhSZPnqx7771X3bp1U2RkpE6ePCkpf27LqlWrJEkPPfSQxo0b52wvmPOyZ88etW7dWnv37i2073Hjxqlfv37O5QsXLmjevHm677771L59ew0bNkw7d+50+7G7dcJuixYt9NVXX7lzlwAA4CZpaWn68MMP1alTJzVo0EC9e/eW1WrV9u3bXfodPnxYY8eO1bfffqtf//rXmjZtmr755huNHz9e33//vcaMGaOQkBBJ0oIFCzR16tRCn9W3b1/5+voqLi7Opf2HH37Q4cOHNWTIEEnSxYsX9cgjj+jTTz/VuHHjNH/+fNWrV0+/+93vtG7dOrcef5kuG91KVlaWdu7cqfr167trlwAAoAjx8fHKzMxU//79JUl+fn66//779eGHH+o///mPOnToIEl64YUXVLduXf39739XvXr1JEm9e/fWoEGD9Oabb2revHlq3bq1/vGPf6hfv35q2rRpoc+y2WwKCQnR3r17dePGDdlsNknS+++/r7y8PIWFhUmSVqxYoaysLO3atUt33nmnJOmJJ57QnDlz9Je//EXDhw93W0Zwy91GWVlZOn36tK5du6YZM2a4pTAAAFC0Xbt2SZJz1KTgzx9++KG2b9+uDh06KCUlRUePHlV4eLgzuEhSy5Yt9fe//1133XVXqT8vLCxMO3bs0EcffaTQ0FBJ+ZeTgoOD1apVK+Xl5Wnfvn3q1q2batSooUuXLjm37d+/v2JjY3Xo0CE9/PDDFT10SW6420jKn/MSFBSkIUOG6PHHH3dLYQAgSbLwOCrgl3744Qf961//UosWLWSxWJw/m9u0aSOLxaLdu3drwYIFOnv2rBwOhwIDAwvto23btmX6zO7du6tBgwZ6//33FRoaqnPnzunzzz/X/PnzJUmXL19Wamqq9u3bp3379hW5j/Pnz5fxSIvHE3YBeLba/tKJWCn9pzfa+zaQ7h5ibE2Agfbs2aPc3Fx99913euihhwqtv3r1qvbt26fGjRtLkry8Kv4LgLe3twYOHKi///3vunHjhuLi4mSxWDRo0CBJ+XcdS1JoaKgeffTRIvfRrFmzCtdRoFxzXnJzc3Xs2DGdPXtWVqtVd911l4KDg91WFAC4SE+WUt33WxtgZgV3GS1ZskR+fn4u67766itFR0dr+/btWrx4sSQpMTGx0D6WLVumOnXqKDIystSf+/DDD2vTpk06dOiQ4uLi1LVrVwUEBEiS/P39VatWLeXk5Oj+++932e7cuXP68ssvVatWrbIearHKHF4OHDigRYsW6eLFi3I4HJLy3yR955136tlnn1Xfvn3dVhwAAPjZd999p2PHjqlbt24aNmxYofW9e/fW22+/rUOHDknKv5S0e/duTZs2zRl0kpKS9Prrr+uxxx6T9PPITMHP9OJ06NBBLVq00JYtW3T06FE999xzznU1atRQr169tH//fn311Vdq06aNc92SJUsUHx+v2NhYNWjQoELHX6BMY0mHDx/WjBkz5HA4NGvWLK1evVqrVq3SrFmzZLFYNHPmTCUkJLilMAAA4Kpgou6oUaOKXF+zZk2NHDnS+cyXBQsWKDk5WSNHjtS6desUExOjCRMm6I477tDkyZMl5Y+aSNK6deu0f//+W37+kCFD9OGHH8pqtTon7haYO3eu/Pz8NHbsWC1fvlxvv/22pk6dqvj4eI0ZM8atT+AvU3iJjo5WkyZNFBsbq8jISD300EPq16+fIiMjFRsbqyZNmuiVV15xW3EAAOBnsbGxstvtzlukizJ69Gh5eXlp+/btuu+++/S3v/1NjRo10urVq7V27VoFBwfrrbfecj6Jd/Dgwbr//vu1bdu2Eh80W3BbdJ8+fWS3213WNW/eXFu2bFGfPn20ZcsWPf/880pKStKCBQv07LPPVvDIXZXpstF//vMfTZ8+vVDBUv495qNGjdJf//pXtxUHAAB+Fh8fX2KfJk2a6MSJE87le+65R3/729+K7X/HHXdow4YNLm1LlizRkiVLCvVt0aKF8+m8RQkMDNRLL71UYo0V5dZ7EC0Wi7Kzs925SwAAABdlCi8dO3bUu+++q4yMjELr0tLStHXrVrVv395txQEAANysTJeNnnzySY0fP15DhgzRE088oRYtWkiSTp06pTfffFMXL17UokWLKqNOAAAASWUML126dFF0dLT+9Kc/aenSpbJYLM5bqxo2bKgVK1bovvvuq5RCAQAApHI85+Whhx5Snz59dPz4cecjiQMCAtSxY0fVqOG29zwCAAAUqVRzXt544w2FhYUpJydHUv5jgjt06KBBgwZp//79mjFjht54441KLRQAAEAqIbw4HA7NmzdPixcv1g8//KBz584V6tO0aVN5eXnphRde0OzZsyutUAAAAKmE8LJ161bt3LlTjz/+uD7++GM1b968UJ9Zs2Zp//79Gjp0qOLi4rRjx47KqhUAAKDk8HLvvffqD3/4g3x8fIrt5+Pjo+eff15t2rTR22+/7fYiAQAACtwyvHzzzTdFvm67yB15eSk0NPSWT94DAACoqFuGF29v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nirtovT5m8Z9fqfHpXqBFd7NqVOnNGXKFOXk5LihKC4bAQCASpKTk6PNmzdr1KhRyszMdNt+CS8AAKBSHDlyRC+++KIiIiI0d+5ct+2Xy0YAAKBStGrVSvv27VP9+vW1bds2t+2X8AIAACpFgwYNKmW/XDYCAACmQngBAACmQngBAACmQngBAACmwoRdAAA8lV9A/oPijPx8D0R4AQDAU9W0ueUJt9UNl40AAEClGzFihE6ePFnh9xpJhBcAAGAyhBcAAGAqhBcAAGAqhBcAAGAqhBcAAGAqhBcAAGAqhBcAAGAqhBcAAGAqhBcAAGAqhBcAAGAqhBcAAGAqhBcAAGAqhBcAAGAqhBcAAGAqhBcAAGAqNYwuAID7xR+/oJS0LElSUENfg6sBAPcivADVUEpali5euyFJqu9rNbgaAHAvLhsBAABTIbwAAABTIbwAAABTIbwAAABTIbwAAABTIbwAAABTIbwAAABTIbwAAABTIbwAAABTIbwAqF4sfK0B1R2vBwBQvdT2l07ESunJ+cu+DaS7hxhbEwC3IrwAqH7Sk6XU80ZXAaCSML4KAABMhfACAABMhfACAABMhfACAABMhfACAABMhfACAABMhfACAABMhfACAABMhfACAABMhfACAABMhfACAABMhfACAABMhfACAABMhfACAABMhfACAABMhfACAABMhfACAABMhfACAABMhfACAABMhfACAABMhfACAABMpYbRBQCouPjjF5SSliVJCmroa3A1AFC5CC9ANZCSlqWL125Ikur7Wg2uBgAqF5eNAACAqRBeAACAqRBeAACAqRBeAACAqRBeAACAqRBeAFRvFr7mgOqGW6UBVG+1/aUTsVJ6slT/V9KNK/l/lgov+zaQ7h5iVKUASsljfiU5ceKEgoODdeHCBZf2gwcPauTIkerYsaP69u2rmJiYQtsePXpU48aNU+fOndWzZ08tX75c2dnZVVU6AE+Xniylnv85qKSeL3q5IMQA8GgeEV5OnTqlKVOmKCcnx6U9ISFBU6dOVVBQkKKjoxUWFqalS5dq/fr1zj6JiYmaOHGifHx89PLLLysiIkIbNmxQVFRUVR8GAACoAoZeNsrJydE777yjl156STVr1iy0fuXKlWrbtq2WLVsmSerVq5dycnL06quvaty4cbJarVq7dq3sdrvWrFkjq9Wq3r17y2az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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.set_style('whitegrid')\n",
"sns.set_context('talk')\n",
"sns.displot(data=data_df,x='pIC50',hue='Active',height=7);"
]
},
{
"cell_type": "markdown",
"id": "geological-agent",
"metadata": {},
"source": [
"Define a function to get a Morgan fingerprint from a SMILES string"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "lucky-former",
"metadata": {},
"outputs": [],
"source": [
"def gen_fp(smi):\n",
" mol = Chem.MolFromSmiles(smi)\n",
" fp = None\n",
" if mol:\n",
" fp = AllChem.GetMorganFingerprintAsBitVect(mol,2)\n",
" return fp"
]
},
{
"cell_type": "markdown",
"id": "fuzzy-study",
"metadata": {},
"source": [
"Enable the \"progress_apply\" function that lets us use a progress bar."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "further-drama",
"metadata": {},
"outputs": [],
"source": [
"tqdm.pandas()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "automotive-simulation",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "8265a6c8dcc043b38124f08e230170a9",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/6239 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"data_df['fp'] = data_df.canonical_smiles.progress_apply(gen_fp)"
]
},
{
"cell_type": "markdown",
"id": "variable-cherry",
"metadata": {},
"source": [
"Remove rows where we didn't successfully generate a fingerprint."
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "indian-intranet",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(6239, 6239)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"num_orig_rows = len(data_df)\n",
"data_df.dropna(inplace=True)\n",
"num_filtered_rows = len(data_df)\n",
"num_orig_rows, num_filtered_rows"
]
},
{
"cell_type": "markdown",
"id": "sonic-elder",
"metadata": {},
"source": [
"Build a quick ML model as a test. "
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "becoming-eight",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.6942914297901759"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train, test = train_test_split(data_df)\n",
"train_X = np.stack(train.fp)\n",
"train_y = train.Active.values\n",
"test_X = np.stack(test.fp)\n",
"test_Y = test.Active.values\n",
"lgbm = LGBMClassifier()\n",
"lgbm.fit(train_X,train_y)\n",
"pred = lgbm.predict(test_X)\n",
"auc = roc_auc_score(test_Y,pred)\n",
"auc"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "turkish-charge",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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b05gYCDLly9/4gJHRZG7CNKjJeUfPHjAp59+qj9Xv379+M9//pPvk/gvv/xCUFAQrVq1omPHjowbN47Lly/rtx85coRGjRqxfv16IOeq6datWxw9ejRf++TJkwEYNWoUHTt2zFfi/ubNmzRq1IjvvvtO37Z7926GDRtGq1ataN++PW+//bZBltG2srIC8i4elZKSwuzZs+nfvz8tWrSgTZs2vPDCC+zcuVO/T8+ePTl69Ci3bt2iUaNGzJ8/v8xjFWVDEouoFDQaDR9//DGvvvoqI0eOLFa59rS0NF5++WU2btzIc889x9SpU3nmmWf48ssv+fzzz0sV16FDhwD0a7EkJiYybNgwfv31V/r168eUKVPw8vJi9uzZvP/++/rjNm3axKeffkrTpk355z//yeuvv87Jkyd55ZVX9MvpPm7mzJnUrFmThg0bMnPmTNq3b59vn6CgIBISEvKUPwf069MHBQUBsH79et58802srKz44IMPeO211/jzzz954YUXSv2GvW/fPgCaNm0K5CSYsWPH8vPPP9OnTx8++eQT3njjDW7dusXbb79NTEwMAFOnTqVhw4bUrFmTmTNn6p9plWWsooyUpmqmEIaSW231t99+y7dt3rx5io+PjzJv3rwC22NiYp7YPm/ePKVZs2bKxYsX8+w3e/ZsxcfHR7lw4UKhcR0+fFjx8fFRZsyYocTFxen/XL58Wfnpp5+U1q1bK926dVNSUlIURVGUWbNmKT4+Psr27dvzvM6nn36q+Pj4KBEREYqiKMqoUaOUgQMH5tknIiJCGTBggHL8+PE85370Z9KjRw/l5ZdfznOcj4+P8tFHHymKoigpKSlKq1atlClTpuTZZ/DgwcqQIUMURVGU5ORkpW3btsqECRPy7HPv3j2lffv2yltvvVXoz0NRFOXll19WfHx88vw84uLilCtXrijff/+90qRJE+XVV1/V73/q1CnFx8dH+eWXX/K8zt69exUfHx9l6dKleV67R48e+u9LG6swDnl4LyqNLl26lOi48PBwfHx8qFWrFvHx8fr23r178+OPP7J7924aN278xNdYsmQJS5Ysydfepk0b/v3vf2NtbQ3Arl278PLyonfv3nn2e+utt1i9ejU7d+6kW7duuLq6cuDAAb777jsGDx6Mu7s73bp1o1u3biXqYy5ra2t69erFzp07yc7OxtzcnGvXrnH+/Hk+/vhjAA4cOEBKSgq9e/fO8/MwNTWlU6dO7NmzB41G89RRbo+O6stlZ2fHCy+8wEcffaRva9WqFceOHUOtVuvbtFotOp0OoMAlcXMZKlZRvuS3ISoNJyenEh0XHR1NRkZGgW+EkLPk8NM8++yz+ofSKpUKtVpNvXr1cHZ2zrPfzZs3CQgIyHd8rVq1sLOz49atW0DO4lOnTp1i/vz5zJ8/H29vb3r27MmQIUNKPXR40KBBhIaGcujQIbp27cqWLVswNTXVDzTIXaZ3woQJhb5GfHw8Li4uTzzPsmXLAMjIyGDLli2EhoYyfPhw3nvvPf2zp1xmZmb6heFu3Lih/50AT3zOZahYRfmSxCIqjcffrArz+ENyrVaLr68v48ePL3D/orwp1atXr0hLtD7pTVKn02Fubg6Aq6srGzdu5MiRI+zcuZN9+/bxn//8h2XLlrF06VI6dOjw1HMVpkuXLtSsWZOwsDC6du1KWFgYnTt31ifm3CuFL774And39wJfoygTPh/9efTs2RNnZ2d+/PFH0tLS9FdHAElJSQwbNoyYmBj8/f3p2bMnjRs3xs3NjSFDhjzxHIaKVZQvSSyi0spNNFlZWXna//777zzfu7m5kZqami8xJCYmcujQITw8PAwWk5ubG1FRUfna79+/T0pKCnXq1AEgMjISyLmdlHsldeLECV599VVWrlxZqsRibm5O//792bp1K5cuXeLy5cuMGjUqT4wAjo6O+X4mR44cQafTYWFhUezzTpo0iWPHjrFy5Uo6duyof/i+YsUKrl69yk8//ZTnqvHkyZNPfc2yilWULRkVJiqtWrVqAXDx4kV9W0pKCnv27MmzX8+ePbl48SIRERF52n/44QfefffdPEN8S6tHjx5ERUWxY8eOPO3/+c9/AOjevTsA7777Lh9++GGeq6umTZtibm7+xCszExMT/af4JwkKCuLBgwfMmTMHtVqdp2qAn58flpaWLF68mOzsbH373bt3eeutt/j6669RqVRF6u+jzMzMmD59Oubm5nz22WckJSUBOTPyAby9vfX7KorCzz//DOQdqv14/8oqVlG25IpFVFq9e/dm2rRpfP7559y6dQsLCwvWrl1LjRo18uw3duxYwsPDGT9+PMOGDeOZZ57hxIkTbNy4ka5du9K1a1eDxZR7rvfee4/hw4fj6enJ4cOHCQ8Pp2/fvvqH8yNHjuTjjz/mtddeo3///iiKwsaNG8nMzOTFF18s9PUdHR25ePEiq1evpkOHDnnerB/Vtm1b3Nzc2L17NwMHDtQPLsh9jYkTJzJ9+nSGDh1KcHAwGo2G1atXk5mZmefBe3H5+PgwcuRIFi5cyKxZs/jiiy/o2rUrK1euZOzYsTz//PNkZ2cTFhbGuXPnMDExyfPw3tHRkWPHjrFs2TLatm1Lq1atyixWUXbkikVUWo6OjixatIj69eszb948lixZQmBgIO+++26e/RwcHFizZg0hISFs3bqVadOmcfr0ad566y3mzZtX5Gc3RZF7rsGDB7Nlyxa++uorrl69yocffsi3336r32/IkCHMmDGD1NRU5syZw+zZs1Gr1SxatIiOHTsW+vpvv/029vb2fPnll0+sp6VSqfRzVgYNGpRv+2uvvca3336LmZkZ33zzDYsWLcLT05Ply5eX6jYc5IyA8/DwYN26dRw9epSuXbsybdo00tPT+eqrr1i8eLH+59SkSROOHDmiP3bUqFF4enoye/ZsfvvttzKPVZQNlfKkp41CCCFEMckVixBCCIOSxCKEEMKgJLEIIYQwKEksQgghDEoSixBCCIOSxCKEEMKgJLEIIYQwKEksQgghDEoSixBCCIOSxCKEEMKg/j+M3PjXmCSxOgAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"prob = lgbm.predict_proba(test_X)[:,1]\n",
"false_pos_rate, true_pos_rate, thresholds = roc_curve(test_Y,prob)\n",
"ax = sns.lineplot(x=false_pos_rate,y=true_pos_rate)\n",
"ax.set_xlabel(\"True Positive Rate\")\n",
"ax.set_ylabel(\"False Positive Rate\")\n",
"# add the unity line\n",
"linemin = 0\n",
"linemax = 1\n",
"ax.plot([linemin,linemax],[linemin,linemax],color=\"grey\",linewidth=2,linestyle=\"--\");"
]
},
{
"cell_type": "markdown",
"id": "chronic-filename",
"metadata": {},
"source": [
"For 10 folds of cross-validation loop over the different model types, train and test models. "
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "finnish-venice",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "34c5b0f64db740f2bf95c930590d8dee",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/10 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"method_list = [KNeighborsClassifier, RandomForestClassifier, LGBMClassifier]\n",
"method_name_list = [x().__class__.__name__ for x in method_list]\n",
"method_name_list = [x.replace(\"Classifier\",\"\") for x in method_name_list]\n",
"truth_list = []\n",
"pred_list = []\n",
"prob_list = []\n",
"cv_cycles = 10\n",
"for i in tqdm(range(0,cv_cycles)):\n",
" train, test = train_test_split(data_df)\n",
" train_X = np.stack(train.fp)\n",
" train_y = train.Active.values\n",
" test_X = np.stack(test.fp)\n",
" test_y = test.Active.values\n",
" cycle_pred = []\n",
" cycle_prob = []\n",
" for method, method_name in zip(method_list, method_name_list):\n",
" if method_name == \"XGB\":\n",
" cls = method(use_label_encoder=False, eval_metric='logloss', n_jobs=-1)\n",
" else:\n",
" cls = method(n_jobs=-1)\n",
" cls.fit(train_X, train_y)\n",
" cycle_pred.append(cls.predict(test_X))\n",
" cycle_prob.append(cls.predict_proba(test_X))\n",
"\n",
" truth_list.append(test.Active.values) \n",
" pred_list.append(cycle_pred)\n",
" prob_list.append(cycle_prob)"
]
},
{
"cell_type": "markdown",
"id": "broadband-waste",
"metadata": {},
"source": [
"Build a dataframe with the AUC values collected above. "
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "instant-people",
"metadata": {},
"outputs": [],
"source": [
"auc_result = []\n",
"for truth, prob in zip(truth_list,prob_list):\n",
" for name, p in zip(method_name_list, prob):\n",
" auc_result.append([name,roc_auc_score(truth,p[:,1])])\n",
"auc_df = pd.DataFrame(auc_result,columns=[\"Method\",\"AUC\"])"
]
},
{
"cell_type": "markdown",
"id": "concrete-oklahoma",
"metadata": {},
"source": [
"Here's what people typically do in the literature. Construct a bar char with the mean AUC for each of the methods, add a \"whisker\" to show the standard deviation. **In my mind this is not a good way to present data**. It doesn't adequately reflect the performance across cross validation folds and doesn't show whether the differences between methods are statistically significant. "
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "popular-radical",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.set(rc={'figure.figsize': (6, 6)})\n",
"sns.set_style('whitegrid')\n",
"sns.set_context('talk')\n",
"ax = sns.barplot(x=\"Method\",y=\"AUC\",data=auc_df)\n",
"labels = [x.get_text() for x in ax.get_xticklabels()]\n",
"ax.set(xticklabels=labels)\n",
"ax.set(ylim=[0,1])\n",
"_ = ax.set(xlabel=\"\")"
]
},
{
"cell_type": "markdown",
"id": "alone-shadow",
"metadata": {},
"source": [
"Here's a somewhat better approach where we represent the distribution of AUC values as box plots. This is somewhat better, but we're still not making an adequate comparison between methods. "
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "charming-transformation",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZ8AAAGGCAYAAACkO4zHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA/GUlEQVR4nO3de1xM6eMH8M9UEkVF1qbaIhS5ZKMoUckll0Xru7l83e+1rttXF/dlKZdsVuErRWvX+lq59VVukbXsWmuxV7tKilqklYrFTPP7o2/n1zFTxMwZ5fN+vbxeec5zzjxnpuYzz3OeOY9MqVQqQUREJCE9XTeAiIhePwwfIiKSHMOHiIgkx/AhIiLJMXyIiEhyBrpuQE3w/fffAwD09fV13BIioppBoVAAAFxcXNRuZ8+HiIgkx57Pcyjv8Tg7O+u2IURENcTFixer3M6eDxERSY7hQ0REkmP4EBGR5Bg+REQkOYYPERFJjuFDRESSY/gQEZHkGD5ERCQ5hg8REUmO4UNERJJj+BARkeR4bzciCcjlcty9e1fjxy2/c7A27rjeuHFjGBjwLYK0g79ZRFoml8sRGBiIvLw8XTelWiwtLREbG8sAIq3gsBsREUmOH2mItMzAwACxsbEaH3bLz89HaGgoACAiIgIWFhYaPT6H3Uib+JtFJAEDAwM0bdpUa8e3sLDQ6vGJNI3DbkREJDmGDxERSY7hQ0REkmP4EBGR5Bg+REQkOYYPERFJjuFDRESSY/gQEZHkGD5ERCQ5hg8REUmO4UNERJJj+BARkeQYPkREJDne1ZoIZSuC5ufn67oZ1VKxvTWt7UDZnbi1sQIr1QwMHyKUvXlPmjRJ1814YeXr+tQkcXFxXAbiNcZhNyIikhx7PkRPGd/BHA3r1ozhIEWpEgCgryfTcUuez/1HCiRc/kvXzaBXAMOH6CkN6+rD3KhmhA9RTcVhNyIikhzDh4iIJMfwISIiyTF8iIhIcgwfIiKSHMOHiIgkx/AhIiLJ6Tx8kpOTMWDAAHTo0AF+fn7Yt29flfULCgoQFhaG7t27w9XVFVOnTkVWVlal9YuLi+Ht7Y358+drtuFERPTCdBo+KSkpCA4OhoeHB2JiYuDq6oqQkBCkpqaqra9UKhEUFIRTp04hODgYq1atwp07dzBmzBgUFhaq3WflypXIzc3V5mkQEVE16fQOB1FRUfDz80N4eDgAwNPTE4WFhYiOjka/fv1U6mdlZeHChQuIjIzEkCFDAAD29vbw9fVFWloahg4dKqqfnp6OlJQUNGjQQOvnQkS1k1wux927d7VybIVCAQBaubt348aNYWDw6t7ERmcty8nJQXZ2NubOnSsq79u3L1JSUpCTkwMbGxvRtkePHgEAjI2NhTJTU1MAwL1790R1CwsLsWDBAvzrX//Cli1btHAGRFTbyeVyBAYGIi8vT9dNqTZLS0vExsa+sgGks2G3zMxMAEDz5s1F5ba2tgCAa9euqezj6OgINzc3xMTEICMjAwUFBVi+fDnq168PX19fUd1ly5bB3t4ew4cP19IZEBHRi9JZJBYVFQEATExMROXlvZri4mK1+y1ZsgSTJk1C//79AQCGhoaIiYkR9ZKOHj2K48eP4+DBg5DJNHO3X4VCgStXrmjkWPTqKSgo0HUTXjuZmZkqIxavotmzZ1d6Tfll3Lt3D7GxsQCAwMBAmJmZafT4pqamyMjI0Ogxq0OhUFQ5nKiz8FEqy24F/3Q4lJfr6al2yjIyMjB8+HC89dZbCA8Ph5GREf7zn/9g5syZiIuLQ+fOnVFQUIDFixdj3rx5sLa21v6JUK1z/5FC102otWric6uvr49GjRpp9THMzMy0/hivGp2FT/kkgKd7OCUlJaLtFW3btg0AEB8fL1zr8fDwwMiRI7FixQokJSVhyZIlsLe3x7BhwyCXy4V9lUol5HL5C49/6uvrw8HB4YX2pVffzZs3hZ+53ow03nrrLVhZWem6GTpz69Yt4ecWLVrUulVdL168WOV2nV3zKb/Wk52dLSq/fv26aHtFubm5sLe3F4IHKOs5ubi44OrVqwCAw4cP49y5c2jXrh2cnJzg5OSEmzdvYs+ePXBycsKNGze0dUpERPScdNbzsbW1hbW1NVJTU9G7d2+h/MiRI7Czs0OzZs1U9mnevDn27t2LwsJCUQBdunRJ+AT15Zdfquw3ffp0dOjQAdOnT8cbb7yhhbOhmq5ij7gmrWRa01RcyVSTs7AUCgXy8/M1djwpVGxvTWu7hYXFS08P1+kcvKCgIISFhcHU1BReXl5IS0tDSkoK1q1bB6DsInB2djZatmwJExMTjBs3DgcOHMDEiRMxZcoUGBkZYf/+/Th37pywT/v27VUex9DQEObm5mq3ET2NK5nWPPn5+Zg0aZKum/HCQkNDdd2EaomLi3vpYUKdho+/vz8eP36M+Ph47N69GzY2NoiMjBRmsp08eRJhYWFITEyEm5sbrK2tsXPnTqxevRqhoaHQ09ND69atkZCQAHd3d12eChERVYPOv300fPjwSr+L4+/vD39/f1GZvb09Nm3aVK3HSEtLe+H2EVHN0rBHM+jVqxk9V2Xp/2b96mnmKyHaVPpQgfunNHerMp2HDxGRJunV04e+cR1dN4OeQed3tSYiotcPw4eIiCTH8CEiIskxfIiISHIMHyIikhzDh4iIJMfwISIiyTF8iIhIcgwfIiKSHMOHiIgkx/AhIiLJMXyIiEhyDB8iIpIcw4eIiCTH8CEiIskxfIiISHIMHyIikhzDh4iIJMfwISIiyTF8iIhIcgwfIiKSHMOHiIgkx/AhIiLJMXyIiEhyDB8iIpIcw4eIiCTH8CEiIskxfIiISHIMHyIikhzDh4iIJMfwISIiyTF8iIhIcgwfIiKSHMOHiIgkx/AhIiLJMXyIiEhyDB8iIpIcw4eIiCTH8CEiIskxfIiISHI6D5/k5GQMGDAAHTp0gJ+fH/bt21dl/YKCAoSFhaF79+5wdXXF1KlTkZWVJapTVFSEDz/8EJ6enujUqRPGjh2Ln376SXsnQURE1aLT8ElJSUFwcDA8PDwQExMDV1dXhISEIDU1VW19pVKJoKAgnDp1CsHBwVi1ahXu3LmDMWPGoLCwUKg3e/ZsHD58GHPmzMEnn3yCOnXqYPTo0cjJyZHq1IiIqAoGunzwqKgo+Pn5ITw8HADg6emJwsJCREdHo1+/fir1s7KycOHCBURGRmLIkCEAAHt7e/j6+iItLQ1Dhw7Fjz/+iNOnT2P9+vXo27cvAMDFxQVdu3bFnj17MHv2bKlOj4iIKqGznk9OTg6ys7PRp08fUXnfvn2RmZmptpfy6NEjAICxsbFQZmpqCgC4d+8eAKBVq1bYtWsXvLy8hDp16tSBTCYT9iciIt3SWfhkZmYCAJo3by4qt7W1BQBcu3ZNZR9HR0e4ubkhJiYGGRkZKCgowPLly1G/fn34+voCAIyMjODs7Iy6detCoVAgKysLISEhKC0txeDBg7V8VkRE9Dx0NuxWVFQEADAxMRGVl/dqiouL1e63ZMkSTJo0Cf379wcAGBoaIiYmBjY2Nip1V6xYgR07dgAAZs6cCUdHxxdur0KhwJUrV154f3q1FRQU6LoJr53MzExhxOJl8fWT1vO8dgqFAvr6+pVu11nPR6lUAgBkMpnacj091aZlZGQgICAA5ubmiImJwdatW+Ht7Y2ZM2fi/PnzKvWHDh2KxMRETJw4EZ988gk2bNighTMhIqLq0lnPp0GDBgBUezglJSWi7RVt27YNABAfHy9c6/Hw8MDIkSOxYsUKJCUlieq3a9cOAODm5oa//voLW7ZswfTp06tM48ro6+vDwcGh2vtRzXDr1i3h5/uPFDpsSfUoSss+rOnryZ5R89VQ8blt0aIFmjZtqpHjVnz9SPue57W7ePFildt1Fj7l13qys7NFb+rXr18Xba8oNzcX9vb2QvAAZT0nFxcXJCYmAii7VvT999/j3XffFfWqnJyckJSUhMLCQjRq1Egr50S1Q8Llv3TdBKJaT2fDbra2trC2tlb5Ts+RI0dgZ2eHZs2aqezTvHlz/PHHH6Lv9ADApUuXYGVlBQD4/fffMX/+fHz77beiOqdPn8Ybb7wBc3NzDZ8JERFVl06/5xMUFISwsDCYmprCy8sLaWlpSElJwbp16wCUXUTMzs5Gy5YtYWJignHjxuHAgQOYOHEipkyZAiMjI+zfvx/nzp0T9vH29oaTkxNCQkIwZ84cNG7cGAcPHsSJEyewevVqlWtMRABgYWGBuLg4XTejWvLz8xEaGgoAiIiIgIWFhY5bVD01rb2kWToNH39/fzx+/Bjx8fHYvXs3bGxsEBkZKcxkO3nyJMLCwpCYmAg3NzdYW1tj586dWL16NUJDQ6Gnp4fWrVsjISEB7u7uAMpmv8XFxeHjjz9GVFQU/vrrLzg4OCA2Nha9evXS5enSK0xfX19j1x90wcLCoka3X5MUD+W6bkKtpOnnVafhAwDDhw/H8OHD1W7z9/eHv7+/qMze3h6bNm2q8piNGjXChx9+qLE2EtGrTS7//zfGolN5OmzJ66Hi8/2idH5jUSIiev3ovOdDRPSyDAz+/62sQQ9L6NfjW5umKR7KhV5lxef7RfEVIqJaRb+eAfSN6+i6GfQMHHYjIiLJMXyIiEhyHHarIeRyOe7evavx4yoUZbc7eZFbDj2Pxo0ba2R8mIhqF74r1AByuRyBgYHIy6t5U0gtLS0RGxvLACIiEQ67ERGR5PhxtAYwMDBAbGysxofdpLg9C4fdiEgdvivUEAYGBlq9fQpvz0JEUuKwGxERSY7hQ0REkmP4EBGR5HjNh4hqldKHNWcZdOX/lkGX1YBl0DX9vDJ8iKhWuX8qV9dNoOfAYTciIpIcez5EVONxGXRpaaKtDB8iqvG4DHrNw2E3IiKSHMOHiIgkx/AhIiLJMXyIiEhyDB8iIpIcw4eIiCTH8CEiIsnxez5EEpDL5VpZDFDdz5rChQBJm/ibRaRlcrkcgYGByMvL09pjlH9TXpMsLS0RGxvLACKt4LAbERFJjh9piLTMwMAAsbGxGh92AwCFouw29/r6+ho/NofdSJv4m0UkAQMDg9fu3l1EVeGwGxERSY7hQ0REkmP4EBGR5Bg+REQkOYYPERFJ7qXC5+7du8JUTyIiouf1zPDZsWMHBg0aBLlcrrJtxYoV8PT0xLZt27TRNiIiqqUqDR+lUol58+Zh+fLluH37NnJzc1XqWFtbQ09PD5GRkZg7d65WG0pERLVHpeGze/duHDhwACNHjsSpU6fw1ltvqdSZM2cOjh8/jsGDByMlJQX79u3TZluJiKiWqDJ8unTpgkWLFqFu3bqVHqBu3bpYsWIFHB0d8cUXX2ilkUREVLtUGj5Xr15Fr169nu8genro27cvrly5orGGERFR7VVp+Ojr68PQ0PC5D2Rubg49Pc7cJiKiZ6s0LWxtbfHTTz8994F+/PFHNGvWrNoNSE5OxoABA9ChQwf4+fk987pRQUEBwsLC0L17d7i6umLq1KnIysoS1SkuLkZkZCR8fX3h7OyMQYMG4fPPP4dSqax2+4iISPMqDZ8BAwbg4MGD+OOPP555kD/++AMHDx5Ejx49qvXgKSkpCA4OhoeHB2JiYuDq6oqQkBCkpqaqra9UKhEUFIRTp04hODgYq1atwp07dzBmzBgUFhYK9ebMmYOkpCSMHz8eGzduhJeXF5YtW4Z///vf1WofERFpR6VLKgQEBGDXrl0YPXo0wsPDMWDAAJU1Q0pLS3Ho0CFERETA2NgYY8eOrdaDR0VFwc/PD+Hh4QAAT09PFBYWIjo6Gv369VOpn5WVhQsXLiAyMhJDhgwBANjb28PX1xdpaWkYOnQofv31V5w6dQoff/wx/Pz8AADdunXD/fv3sWXLFkydOrVabSQiIs2rNHyMjY2xceNGBAYGIiQkBEuXLoWTkxOaNGmC0tJS3L17Fz///DMePHgAS0tLxMTE4I033njuB87JyUF2drbK94P69u2LlJQU5OTkwMbGRrTt0aNHQtvKmZqaAgDu3bsHoKx3FBAQgG7duon2bdGiBYqKivDXX3/B3Nz8udtJRESaV+Vici1atMCBAwfw2Wef4b///S8uXLgg3OmgTp06cHZ2Rp8+fRAQEFCtyQkAkJmZCQBo3ry5qNzW1hYAcO3aNZXwcXR0hJubG2JiYtCiRQuYm5sjIiIC9evXh6+vLwCgbdu2+PDDD1Ue79ixY2jSpAnMzMyq1U4iItK8Z65kamhoiPHjx2P8+PEAyi746+vrCz2OF1VUVAQAMDExEZWX92qKi4vV7rdkyRJMmjQJ/fv3F9oXExOjElQVbd++HefOnUN4eDhkMtkLtVehUNS6qeQFBQXCz5mZmULvkYi0r7b//SkUiiqXd6/23OhGjRq9dPAAEGaePR0G5eXqpm1nZGQgICAA5ubmiImJwdatW+Ht7Y2ZM2fi/Pnzah9nx44dWLlyJfz8/DBmzJiXbjcREb28Sns+GzZsqHQnmUyGunXromHDhmjVqhXat28PA4NndqJEGjRoAEC1h1NSUiLaXlH5DUzj4+OFAPTw8MDIkSOxYsUKJCUlCXVLS0uxevVqxMfHY+DAgYiMjHzhXg9Q9r0nBweHF97/VXTr1i3h5xYtWqBp06Y6bA3R66W2//1dvHixyu0vFD4VyWQyWFpaYtmyZfDw8HjuhpVf68nOzha9qV+/fl20vaLc3FzY29uLel4ymQwuLi5ITEwUyp48eYIPPvgAhw8fxoQJEzBv3ryXCh4iItKsSsOn4pu5OgqFAoWFhbhy5Qr27t2LoKAgfPHFF3B0dHyuB7a1tYW1tTVSU1PRu3dvofzIkSOws7NT+4XV5s2bY+/evSgsLBQF0KVLl2BlZSX8Pzw8HEeOHEFYWBjGjRv3XO0hIiLpVBo+rq6uz3WAfv36Yfz48Rg6dCji4uKwZs2a537woKAghIWFwdTUFF5eXkhLS0NKSgrWrVsHoOyCXHZ2Nlq2bAkTExOMGzcOBw4cwMSJEzFlyhQYGRlh//79OHfunLDPyZMnceDAAfj4+MDZ2Vml69e2bdtqz8wjIiLNqt6Fmko0bNgQQ4cOFV1zeR7+/v54/Pgx4uPjsXv3btjY2CAyMlKYyXby5EmEhYUhMTERbm5usLa2xs6dO7F69WqEhoZCT08PrVu3RkJCAtzd3QEAhw8fBgCkpaUhLS1N5THT09Px5ptvvuQZExHRy9BI+ABAs2bNkJ+fX+39hg8fjuHDh6vd5u/vD39/f1GZvb09Nm3aVOnxVq5ciZUrV1a7HUREJB2N3YY6Pz9fI1OwiYio9tNI+Dx69Aj79++Hk5OTJg5HRES1XKXDbrm5uVXuqFAoUFJSgj/++AOJiYm4du0a5s+fr/EGEhFR7VNp+Pj4+DzXd2OUSiWMjIwwf/584aI/ERFRVSoNnyFDhlQZPoaGhjA1NYW9vT08PDxgYWGhlQYSEVHtU2n4REREPPdB7ty5g7i4OOzbtw/JyckaaRgREdVeLzzV+smTJzh+/Dj27t2Lr7/+GnK5vMo7mBIREZWrdvj89NNP2Lt3L5KTk3H//n0olUpYWFjg3XffRUBAgDbaSEREtcxzhc/du3exf/9+7N27F1evXoVSqRSuB82YMQNTp06t9l2tiYjo9VVpYsjlcqSlpSEpKQmnT5+GXC6HoaEhevbsid69e8PBwQHDhg2Do6Mjg4eIiKql0tTw9PTEvXv3YGJigt69e6N3797o2bOnsNLozZs3JWskERHVLpWGz19//YX69etj0KBBcHNzQ5cuXYTgIfUUCsUL3d9OVyq2tSa1u5yFhQUnuRDVUJWGz7Zt25CcnIzk5GTs3LkTMpkMzs7O6NOnj2j9Hfp/+fn5mDRpkq6b8UJCQ0N13YRqi4uLq3WrPxK9LioNn65du6Jr165YtGgR0tPTcfDgQaSnp+PChQuIjIyEnZ0dZDIZHjx4IGV7iYioFnjmTAFDQ0Phmk9xcTEOHz6MgwcP4rvvvoNSqURISAiSkpIwbNgw9O7dmwu1/U89217QM6in62Y8k1JZCgCQyTR2g3OtKpU/xMPrx3XdDCJ6SdWapmZiYoJ3330X7777Lu7cuYP//ve/OHjwIM6ePYtvvvkGDRs2xLfffqutttYoegb1oGdooutmEBG9kl74426TJk0wbtw47NmzB4cPH0ZgYCDMzMw02DQiIqqtNDLWYmtrixkzZghLWBMREVWlZgz0ExFRrcLwISIiyTF8iIhIcgwfIiKSHMOHiIgkx/AhIiLJMXyIiEhyDB8iIpIcw4eIiCTH8CEiIskxfIiISHIMHyIikhzDh4iIJMfwISIiyTF8iIhIcgwfIiKSHMOHiIgkx/AhIiLJMXyIiEhyDB8iIpIcw4eIiCTH8CEiIskxfIiISHIMHyIikpyBrhuQnJyMjRs3IicnB1ZWVpg6dSqGDBlSaf2CggKsXr0aX331FR4/foxOnTohLCwMdnZ2auvv2LED27dvx9GjR7VzAkRUq8nlcty9e1fjx83Pz1f7s6Y0btwYBgY6f4uvlE5blpKSguDgYIwZMwaenp44duwYQkJCYGRkhH79+qnUVyqVCAoKQnZ2Nv71r3/BzMwM69evx5gxY3Dw4EGYmpqK6h89ehQRERGwtLSU6pSIqBaRy+UIDAxEXl6eVh8nNDRU48e0tLREbGzsKxtAOm1VVFQU/Pz8EB4eDgDw9PREYWEhoqOj1YZPVlYWLly4gMjISKF3ZG9vD19fX6SlpWHo0KEAgMLCQmzYsAGffvopGjZsKNn5EBHR89FZ+OTk5CA7Oxtz584Vlfft2xcpKSnIycmBjY2NaNujR48AAMbGxkJZeW/n3r17QlliYiKOHDmCdevWIT09Hd9//72WzoKIajMDAwPExsZqZdgNABQKBQBAX19f48fmsFslMjMzAQDNmzcXldva2gIArl27phI+jo6OcHNzQ0xMDFq0aAFzc3NERESgfv368PX1FeoNHDgQU6dOhaGhIdLT07V8JkRUmxkYGKBp06a6bkato7PwKSoqAgCYmJiIyst7NcXFxWr3W7JkCSZNmoT+/fsDAAwNDRETEyMKqqcDTRMUCgWuXLlSZZ2CggKNPy5VLjMzU9TjJaJXh0KhqLJHp7Op1kqlEgAgk8nUluvpqTYtIyMDAQEBMDc3R0xMDLZu3Qpvb2/MnDkT58+f136jiYhII3TW82nQoAEA1R5OSUmJaHtF27ZtAwDEx8cL13o8PDwwcuRIrFixAklJSVprr76+PhwcHKqsc+vWLa09Pqlq0aIFh0OIXlEXL16scrvOej7lQ2PZ2dmi8uvXr4u2V5Sbmwt7e3vRlGqZTAYXFxdcvXpVi60lIiJN0ln42NrawtraGqmpqaLyI0eOwM7ODs2aNVPZp3nz5vjjjz9QWFgoKr906RKsrKy02l4iItIcnc7DCwoKQlhYGExNTeHl5YW0tDSkpKRg3bp1AMou4GdnZ6Nly5YwMTHBuHHjcODAAUycOBFTpkyBkZER9u/fj3Pnzgn7EBHRq0+n4ePv74/Hjx8jPj4eu3fvho2NDSIjI4WZbCdPnkRYWBgSExPh5uYGa2tr7Ny5E6tXr0ZoaCj09PTQunVrJCQkwN3dXZenQkRE1SBTlk8vo0qVXzhzdnaust6tW7cwadIkAICx/UDoGZpUWZ+qr/RxMUoykgEAcXFxnHBA9Ip61vsm72pNRESSY/gQEZHkGD5ERCS5V/euczVc6ZMHum5CrcTnlah2YPhokFwuF35+mJ2mw5a8Hio+30RUs3DYjYiIJMeejwZVXDuj3ls+0KtTX4etqZ1KnzwQepWv8lolRFQ1/vVqiV6d+vyeDxFRJTjsRkREkmP4EBGR5Bg+REQkOYYPERFJjuFDRESSY/gQEZHkGD5ERCQ5hg8REUmO4UNERJJj+BARkeQYPkREJDmGDxERSY7hQ0REkmP4EBGR5Bg+REQkOYYPERFJjuFDRESS40qmWlIqf6jrJjwXpbIUACCT1YzPITXleSWiqjF8tOTh9eO6bgIR0SurZnzcJSKiWoU9Hw2ysLBAXFycrpvx3PLz8xEaGgoAiIiIgIWFhY5bVD01rb1E9P8YPhqkr6+Ppk2b6roZL8TCwqLGtp2Iah4OuxERkeQYPkREJDmGDxERSY7hQ0REkmP4EBGR5Bg+REQkOYYPERFJjuFDRESSY/gQEZHkGD5ERCQ5hg8REUlO5+GTnJyMAQMGoEOHDvDz88O+ffuqrF9QUICwsDB0794drq6umDp1KrKyskR15HI5Pv74Y/Ts2RMdO3bEyJEjcfnyZe2dBBERVYtOwyclJQXBwcHw8PBATEwMXF1dERISgtTUVLX1lUolgoKCcOrUKQQHB2PVqlW4c+cOxowZg8LCQqHeRx99hG3btmHy5MlYt24d9PX1MW7cOOTk5Eh1akREVAWd3tU6KioKfn5+CA8PBwB4enqisLAQ0dHR6Nevn0r9rKwsXLhwAZGRkRgyZAgAwN7eHr6+vkhLS8PQoUNx48YN7Nq1CwsXLsSIESMAAN27d0ffvn0RFxeHpUuXSnZ+RESkns56Pjk5OcjOzkafPn1E5X379kVmZqbaXsqjR48AAMbGxkKZqakpAODevXsAgG+++QYKhQJ9+/YV6hgaGsLLywunTp3S9GkQEdEL0Fn4ZGZmAgCaN28uKre1tQUAXLt2TWUfR0dHuLm5ISYmBhkZGSgoKMDy5ctRv359+Pr6Csc1NTVFo0aNVI6bm5uLv//+WxunQ0RE1aCzYbeioiIAgImJiai8vFdTXFysdr8lS5Zg0qRJ6N+/P4CyXk1MTAxsbGyE/Z4+ZsXjlpSUwMjIqNrtVSgUuHLlSrX3e5UVFBQIP2dmZgq9RyKil6VQKKCvr1/pdp31fJRKJQBAJpOpLdfTU21aRkYGAgICYG5ujpiYGGzduhXe3t6YOXMmzp8/L9r/eR+PiIikp7OeT4MGDQCo9nBKSkpE2yvatm0bACA+Pl641uPh4YGRI0dixYoVSEpKgomJiXAMdcdV1yt6Hvr6+nBwcHihfV9Vt27dEn5u0aIFl9EmIo25ePFildt11vMpv9aTnZ0tKr9+/bpoe0W5ubmwt7cXggco68m4uLjg6tWrAMreRO/duyeael1+XGtraxgaGmr0PIiIqPp0Fj62trawtrZW+U7PkSNHYGdnh2bNmqns07x5c/zxxx8qwXLp0iVYWVkBANzd3QEAhw8fFrY/fvwY6enpwjYiItItnX7PJygoCGFhYTA1NYWXlxfS0tKQkpKCdevWASi7IJ6dnY2WLVvCxMQE48aNw4EDBzBx4kRMmTIFRkZG2L9/P86dOyfsY2VlhaFDh2L58uV48OABbG1tkZCQgMLCQkyaNEmXp0tERP+j0/Dx9/fH48ePER8fj927d8PGxgaRkZHCTLaTJ08iLCwMiYmJcHNzg7W1NXbu3InVq1cjNDQUenp6aN26NRISEkS9mg8//BANGzbEv//9bzx48ABOTk5ISEgQpnETEZFuyZSVTQ8jQfmFM2dnZ522Q9Nu3bol9Abj4uI44YCINOZZ75s6v7EoERG9fhg+REQkOYYPERFJjuFDRESSY/gQEZHkGD5ERCQ5hg8REUmO4UNERJJj+BARkeQYPkREJDmGDxERSY7hQ0REkmP4EBGR5Bg+REQkOYYPERFJjuFDRESSY/gQEZHkGD5ERCQ5hg8REUmO4UNERJJj+BARkeQYPkREJDmGDxERSY7hQ0REkmP4EBGR5Bg+REQkOYYPERFJjuFDRESSY/gQEZHkGD5ERCQ5hg8REUmO4UNERJJj+BARkeQYPkREJDmGDxERSc5A1w2g5yOXy3H37l2NHjM/P1/tz5rUuHFjGBjw14yIxPiuUAPI5XIEBgYiLy9Pa48RGhqqleNaWloiNjaWAUREIhx2IyIiyfHjaA1gYGCA2NhYjQ+7AYBCoQAA6Ovra/zYAIfdiEg9vivUEAYGBmjatKmum0FEpBEcdiMiIskxfIiISHI6H3ZLTk7Gxo0bkZOTAysrK0ydOhVDhgxRWzc0NBR79+6t9FhXrlwBANy8eRORkZE4c+YMAMDV1RUffPAB7O3tNd5+IiKqPp2GT0pKCoKDgzFmzBh4enri2LFjCAkJgZGREfr166dSPzAwEMOHDxeVXb9+HaGhoXjvvfcAAIWFhRg5ciQUCgXmzZsHS0tL7Nu3DyNGjMCePXtgY2MjybkREVHlZEqlUqmrB+/duzfatWuHdevWCWWzZ8/GlStXkJKS8sz9FQoF3nvvPZSWlmLXrl0wNDREQkICIiIisHv3bnTo0AEAoFQqERAQABsbG6xdu7ba7bx48SIAwNnZudr7EhG9jp71vqmzaz45OTnIzs5Gnz59ROV9+/ZFZmYmcnJynnmML774Ar/88guWLl0KQ0NDAMC1a9fQuHFjIXgAQCaTwcXFBenp6Zo9CSIieiE6C5/MzEwAQPPmzUXltra2AMpCpColJSVYv349Bg8eLAoaS0tL3L9/H8XFxaL6N27cQFFREe7du6eB1hMR0cvQ2TWfoqIiAICJiYmo3NjYGABUwuNpe/bswf379zF16lRRuZ+fHzZt2oTZs2cjPDwcjRo1QnJyMk6dOgUAePjwIczMzKrdXoVCIUxoICKiqikUiiq/vK6znk/5pSaZTKa2XE+v6qZ99tln6NWrl0rPyc7ODuvXr8fvv/8OPz8/uLm54fDhw0JIGRkZaeoUiIjoBems59OgQQMAqj2ckpIS0XZ1fvvtN2RlZSE4OFjt9p49eyI9PR03btyAgYEBLC0tsWHDBujp6aFhw4Yv1F59fX04ODi80L5ERK+b8gkHldFZz6e8x5KdnS0qv379umi7OidPnkT9+vXRs2dPlW25ubnYvXs3FAoFbGxsYGlpCQD45Zdf4ODgoLV7mBER0fPTWc/H1tYW1tbWSE1NRe/evYXyI0eOwM7ODs2aNat034sXL6Jdu3bCDLeK8vPzsWDBAtjY2KBr164AyiY3nDp1CtOmTXuhtpbffPNZSU5ERGXK3zcro9MvmQYFBSEsLAympqbw8vJCWloaUlJShO/9FBQUIDs7Gy1bthRNTPj999/V9noAoF27dnB2dsbixYvxr3/9C3K5HKtWrYKlpSXGjh0ryXkREVHVdPolU6Dsuzrx8fHIy8uDjY0NpkyZItxeJykpCWFhYUhMTISbm5uwT8eOHTFu3DjMmTNH7TFv376Njz76CGfPnoWenh48PT0RHBzMu0ITEb0idB4+RET0+uFdrYmISHIMHyIikhzDh4iIJMfwISIiyTF8iIhIcgwfIiKSHMOHiIgkx/AhIiLJMXyIiEhyDB8ieqXwpiuvB4aPFo0ePRrjxo1TKb937x6GDBmCTp064dtvv8Xo0aPh5OSEX3/9Ve1x2rZti08++UQjj10VHx8fzJ8/v8o6oaGhoruQ1zSjR4+Gg4OD6J+joyPefvtt+Pv7Y//+/ZK1xcHBAbGxsVp/nBs3bqicc8V/I0aM0HobntfmzZuxdetWXTdDref9m7p58yYiIyPh5+eHTp064e2338Y//vEPfPrpp3jy5Imoro+Pj8rvopubG6ZNm4bffvtNbd2QkBC1j6tUKuHl5QUHBwckJSW98HlKRad3tX4dFRYWYsKECbh+/Tq2bNmCzp07Y8OGDZDL5QgPD8fu3bthYPDyL8vixYtVVomlMu3bt8eCBQuE/5eWluLPP//E9u3bMW/ePJiZmVV61/SabMaMGejevbtK+dNL2etSdHQ0pk+frutmvLCzZ89i5syZaNy4MUaNGoVWrVrhyZMnOH36NFatWoWvvvoKmzdvFv1t+vj4CCsty+Vy3LlzBwkJCRg7diwOHTqExo0bC3VlMhmOHz+Ox48fqywp88MPPyAvL0+aE9UAho+EioqKhODZunUr3n77bWFbgwYN8Msvv2DLli0a+eNr2bLlSx+jtjIxMYGzs7NKeY8ePdCtWzckJSXVyvCxsbFRe96kGQUFBZg7dy7s7e2xbds2GBkZCds8PT3RtWtXTJs2DcnJyRg0aJCwrVGjRiqvi7OzM7y8vJCamopRo0YJ5S4uLjh//jzOnj2r8jt66NAhtGnTptIRlFcNh90kUlxcjAkTJiA7OxsJCQmi4AHK1iEaMGAAYmNjkZGRUeWxSktLsWnTJvj6+qJdu3bo168fdu/eLarz9BBBUVERwsLC4ObmBhcXFyxcuBBRUVHw8fER7ffkyRNERETA3d0dzs7OmDhxInJyclTa8Nlnn8HT0xPOzs6YOnUqsrKyRNsvXryI8ePHo0uXLujSpQtmzZqFGzduCNuTkpLQvn17fPHFF3B3d4eXlxdycnKQnZ2NadOmwc3NDR07dkRAQADS09OrfD40xdDQEHXq1BE+lRYUFGDx4sXw9vZGu3bt4OrqihkzZuDmzZvCPqNHj8aiRYuwefNm9OzZE+3bt8fw4cPx448/io597tw5BAQEoGPHjujbty/OnDmj8vh//vkn5s2bB09PT3Ts2BGjRo3CuXPnhO3lw2dHjhzBlClT0LFjR/To0QO7du3C7du38f7778PZ2Rk9e/bEtm3bXug5yMjIQGBgILp164ZOnTph0qRJouGfb7/9Fg4ODti1axe8vLzQvXt3nD9/HgDw3XffYdSoUejYsSPc3NywYMEC3L9/X9i3tLQU69atg4+PD9q1awcfHx9ERUUJQ1EODg5QKBTYsGFDjVyy/vPPP0dBQQGWL18uCp5y3t7e8Pf3h57es992GzZsqLbczs4ODg4OSE1NFZWXlpbi8OHD6N+//4s1XgcYPhIoLi7GxIkTkZGRgYSEBHTo0EFtvQULFsDY2Bjh4eEoLS2t9HhLlizBhg0bMHToUGzatAne3t5YuHAhPv3000r3CQwMRFpaGoKDg7F69WpcvXoVCQkJKvUOHjyIzMxMREZGYvHixfjxxx/xwQcfiOrcvHkTW7Zswbx58xAREYFr165h7NixePToEQDgzJkzGDlyJAwMDBAZGYlFixbh119/xfDhw5Gfny8c58mTJ4iLi8PKlSsxe/ZsWFlZYerUqXj48CFWrVqF2NhYmJmZYfr06SrLrb8MpVIJuVwu/Hv06BEyMjIQFhaGkpISDB48GEqlEpMmTcI333yD4OBgbN26Fe+//z6+/vprLFmyRHS8Q4cO4cSJE0Kg5+fnY9asWcJr+PPPP2PChAlo0KAB1q9fjzFjxmDu3LmiY9y+fRvDhg3DpUuXMG/ePKxbtw5GRkYYP348zp49K6q7YMECdOzYEZs2bYKjoyOWLl2KMWPGoFWrVvjkk0/g5OSElStXqgTg0+ctl8tFq01euXIFw4YNw507d7B06VJERkbir7/+wogRI3D16lXRsdatW4fw8HB88MEH6NChA7777juMHz8exsbGiI6Oxrx583Dy5ElMnDgRcrkcALBlyxbs3LkT77//PuLj4zFixAjExcVh8+bNAIBdu3ZBX18fw4YNw65du178BdaR48ePw8HBocpRh5UrV2LAgAGisoqvy+PHj5GXl4fly5fDwsICfn5+Ksfw8/PD8ePHRdePzp8/j8LCQvTq1UtzJ6RlHHbTsgcPHmDy5Mm4dOkS9PT08Pfff1dat1GjRli4cCHmzp2L7du3Y/z48Sp1rl27hv/85z+YN28eJkyYAADo3r07FAoFoqOjMWzYMNSrV0+0z9mzZ3Hu3Dls3rwZXl5eAICuXbuq/UW1tLRETEwM6tSpAwC4fv06Nm7ciAcPHqB+/foAypbHjYmJgZOTE4CyIb6BAwdiz549GDlyJNauXQt7e3ts3rxZ+JTn4uKCvn37YuvWrcIFU6VSicDAQGH44M6dO8jMzBSVdejQARs2bBCCTRO++eYboe3lZDIZHBwcEB0dDW9vb/z5558wNjbGggULhF6qm5sbsrOz8eWXX4r2VSgUiIuLE66dlJSUICQkBL///jscHR2xefNmNGnSBBs3bhSeV3Nzc9FiiAkJCbh//z52794NS0tLAICXlxcGDx6MNWvWYM+ePUJdHx8fBAUFASgbrk1PT0eHDh0wa9YsAGW96OPHj+PSpUto3769sF9ISIjKxWoLCwt8/fXXAICYmBjUq1cP27dvF15rDw8P9O7dG+vXr8f69euF/UaNGoU+ffoI/y9/zTdt2iS85m3btsXQoUNx6NAhvPPOOzh37hzatWsHf39/AICrqyvq1auHBg0aAIAw9PTmm2/WyOHB7OxseHh4qJSXh285mUwGfX194f979uwRvb7ldaKiotCoUSOV4/n5+eHjjz/GN998A09PTwBASkoKevbsCWNjY02ciiQYPlp26dIlNGrUCJ9//jmCg4MRHByM/fv3w9TUVG39AQMGIDk5GdHR0ejVqxfeeust0fZvvvkGSqUS3t7eol9qHx8fbN++HZcvXxat+lq+T926dUVjxPXr14eXlxe+/fZbUV1nZ2fhDRIArK2tAZQN25W/Ib311luiN++WLVvC1tYWP/74Ix48eICff/4Zs2bNEg0vNGvWDJ07dxYNIwFA69athZ8tLCzQsmVLLFy4EKdPn0b37t3Ro0cPhIWFqX2uXlSHDh2waNEiAMCtW7cQHR0NuVyOdevWoUWLFgDK3gA//fRTKJVK3LhxA9evX0dmZiYuXLigMmPJwcFBdNG+fMXcBw8eAAC+//579OrVS/S89unTR/QGdP78ebi4uAjBAwB6enro378/oqOjUVxcLGp/OQsLCwBlq/uWMzc3BwDRkBcAzJw5Ez169BCVVWzT+fPn4ePjI7zOAGBsbAwfHx8cO3ZMtF/F1+3hw4e4dOkSpkyZgtLSUqHH16pVKzRr1gxnzpzBO++8Azc3N6xduxYjR46Ej48PvLy88M9//hO1hbrRioKCAnTr1k1UZmVlhbS0NOH/vXr1Eq7zlpaW4s6dO9izZw8++OAD1KlTR2V2qZ2dHRwdHZGamgpPT08oFAocOXJENImmJmD4aJmZmRkSExPRqlUrREREYOzYsVi4cKHoU+TTlixZgoEDB2L+/PlITEwUbbt37x4AoF+/fmr3vX37tkrZX3/9BXNzc5XZb+VvXBU93WsqD5CK372oOPumYtnt27dRVFQEpVKp9tiNGzdGbm5upW2QyWSIj4/Hxo0bcfToUezbtw916tSBr68vli5dWmlgV5exsbHQI2jfvj2cnZ3xzjvvYOLEidizZ4/wafPAgQOIiopCXl4ezMzM0KZNGxgZGal8D+Xp8f3y56z8zaiwsFDlE6yBgYEQEuV17OzsVNpqYWEBpVKJkpISUfuf9vTrpo61tbWoJ/S0wsLCSl+3iuFXXlbu/v37wnXITZs2qexf/js5adIkGBsbY8+ePVizZg1Wr16NVq1aYcGCBejatesz2/+qs7KyUvn9btiwoainvHHjRpUp1Obm5iqvi7e3NwYMGIDo6Gi1X23w8/NDQkICli5diu+++w4PHjyAt7e38P5QEzB8tKxNmzZo1aoVgLJhhnHjxiE+Ph67du1CQECA2n2aNm2KkJAQzJ8/Hzt37hRtKx+i2LFjh9qLmuU9lYreeOMNFBQUQKlUigLo7t27L3ROT3+iBoD8/Hy0b98eJiYmkMlkoms75e7cuSN6w1WnadOmWLJkCRYvXozffvsNqamp2LJlCxo3boyFCxe+UHufxcLCAosWLcKsWbPw0UcfYe3atTh//jxCQkIwduxYjB8/XujNrFq1ChcvXqzW8c3MzFSea6VSicLCQuH/DRs2VPuclb9xm5ubq/1goUmVteHOnTswMzOrdD9jY2PIZDJMmDBB7TWK8rDU09PDqFGjMGrUKNy9exfp6enYtGkTZs6cia+//lrUC6uJfHx88O9//xu5ublo1qwZgLIPGRWD5Vm//+X09fXh4OAg6iFV5Ofnh3Xr1uHcuXNITU2Fj4+P2veDVxknHEhszpw5aN26NVauXFnlrLZhw4bBw8MDa9asEXXnO3fuDKDsU2r79u2Ff3l5eVi/fj0ePnyocqwuXbrg8ePH+Oqrr4Syp/9fHZmZmaKZa7/++iuuX78ONzc3GBsbw8nJCYcOHRK1Oy8vDxcuXFCZ5VfR5cuX4e7ujsuXL0Mmk6FNmzbC86Xt7y/069cPnp6eSE5Oxrlz5/DDDz+gtLQUM2bMEIJHoVDgzJkzVU4GUadbt244ceKE6HrfV199JRq+69KlC77//nv8+eefQllpaSlSU1PRvn17le90aEOXLl1w4sQJYbgQKBs6PHHiBFxcXCrdz8TEBG3btkVWVpbod7J58+b4+OOPcenSJQDAyJEjsXz5cgBlPSd/f3+MGjUKhYWFwu/t88wEe1WNGjUKZmZmCA0NFT2H5R49evTcE2fkcjl++eUXtb1hALC1tUWbNm2QkpKCY8eO1ahZbuXY85GYoaEhVq1ahX/84x+YM2eOysXripYtW4aBAweKhnkcHR0xcOBAhIeHIycnB23atMHVq1cRFRUFJycn4RNXRW5ubnBzc0NoaCjmzJmDJk2aYPv27cjPz1db/1nq1q2L6dOnY86cOXjw4AHWrl2Lli1b4p133gFQFrCTJ0/GtGnTMGLECJSUlOCTTz6BiYlJld8Qd3R0RP369TFv3jzMmDEDFhYWOHPmDH799Ve1ky80LTw8HO+88w6WL18uXGdatmwZhgwZgsLCQnz22Wf47bffoFQq8ffffz/3J82goCAcO3YMkydPxoQJE5Cfn4/o6GjRJ/3x48dj//79GDt2LGbMmAFjY2N8/vnnyMjIwJYtW7Ryvura+d5772HcuHGYPHkylEol4uLi8ODBA2GCQ2VmzZqFadOmITQ0FP3798fjx4+xZcsW/P7778IkB1dXV2zZsgUWFhbo1KkTbt26hYSEBHTr1k2YWtywYUP88MMP+O6779C5c+dX7ovSeXl5aqext23bFq6urli/fj1mzZqFQYMGYfjw4XByckJpaSkuXryIL7/8Erdv38bEiRNF+xYUFIh608XFxfj888+RnZ2N1atXV9oWPz8/fPLJJzAyMhImHtQkDB8daNOmDWbMmIGoqChERkZWWs/KygoffPABli1bJiqPiIjApk2bsGPHDty6dQsWFhYYNmwYZs6cWemxoqOjsWLFCkREREAmk2HQoEFo0KABrl27Vu32t23bFr6+vliwYAEePnyIHj16YMGCBcKbcffu3bF161bhD7FevXpwd3dHcHAw3njjjUqPa2hoiK1bt2Lt2rX46KOPcP/+fdjZ2WHZsmUYPHhwtdtZXS1atMDo0aMRHx+PjIwMLFq0CAkJCfjvf/8LCwsLuLm5YcOGDQgKCsL58+fV3i1AHTs7O+zYsQMRERGYPXs2GjdujJCQEERERAh13njjDezcuRNr1qzB4sWLUVpainbt2iEhIUFlAom2ODg44LPPPkNUVBTmzZsHPT09dO7cGbt27RJNMFCnZ8+eiIuLw4YNGzBjxgzUrVsX7du3R2JiorDvjBkzYGBggD179iAmJgYNGjRAr169RFP5y/8uJk+ejNTUVLz55ptaPefqysrKwsqVK1XKx4wZA1dXV7i6uuLgwYP4/PPPcfDgQWzcuBGlpaWwtrZGnz59MHz4cGFSS7m0tDTR8Fr9+vXh4OCAtWvXYuDAgZW2xc/PD1FRURg0aJAkPWNNkyl5F79a7+bNm7h06RJ8fX1Fv6TDhg3Dm2++iQ0bNuiwdUT0OmLP5zUREhICPz8/DBkyBEqlEikpKfjpp59UvkBKRCQF9nxeE19//TViYmJw5coVlJaWwtHREYGBgTVyrJiIaj6GDxERSa7mzmskIqIai+FDRESSY/gQEZHkGD5EGhQaGgoHBwe0adMGBQUFldZ755134ODggNDQ0Go/xt27d0XfoB89erTKukzaINXj0OuB4UOkBaWlpThx4oTabTk5Obhy5coLHTc9PR39+vWrMtiIagKGD5EWWFtb4/jx42q3HTt2TO06Lc/j8uXLam/sSlTTMHyItKBXr144c+aM2sUDjx49yuEreu0xfIi0wNfXFw8fPsSZM2dE5Xfv3sUPP/wgWgW03A8//IDx48ejU6dO6NSpEyZMmIDLly8L20NDQ4VbIfXq1QujR48W7X/69Gn4+/ujffv28PLyQmxsrModuK9cuYLAwEB07twZHTp0wHvvvaeyUBxQthT68OHD4ezsDF9fXxw6dOiFnwsidRg+RFrg4uICc3NzlaG348ePo169eiqrW3799dcYPXo0ioqKMGvWLEyfPh25ubkYNWoUzp8/DwAICAgQFhYLCwvDtGnThP3v3LmDGTNmoGvXrggPD0ezZs0QHR0tWozw8uXLCAgIwOXLlzF+/HjMnTsXT548QVBQED777DOh3pkzZzB58mQUFRVh9uzZ6N+/P+bPn4+ff/5Z488Tvb54bzciLdDX14e3tzdOnDiB0tJSYZ2ao0ePwsvLS3SD19LSUixevBjt27fHjh07hOW1//nPf2LIkCFYvnw59u3bh06dOsHBwQFHjx6Fr6+vaOHAx48fIyoqSginQYMGoWfPnjh69KiwjMXy5cshk8nw5ZdfCneLHjFiBEaMGIFVq1bBz88PjRo1wpo1a9CkSRPs2rVLWB7c3d0dY8eOrXJROaLqYM+HSEt69eqFu3fvCmu1FBcX4+zZs/D19RXV++WXX5CTkwNfX18UFhaioKAABQUF+Pvvv+Ht7Y1ff/1VtMicOvXq1RNdRzIxMUGLFi2ElUnz8/Nx6dIlDB48WLRMQd26dTFx4kT8/fffOHPmDO7evYuff/4ZAwYMEIIHALp27QoHB4eXfUqIBOz5EGlJ9+7dUa9ePaSlpeHtt99Geno69PT00LNnT1G98tUtV61ahVWrVqk9Vl5eXpVr25iZmQk9pnJGRkbC8t03b94EADRv3lxlX3t7ewBAbm6uUO+tt95SqdeiRQvRNSiil8HwIdISIyMjuLu74/jx4wgODsbRo0fh7u4OY2NjUb3ySQGzZs2Cs7Oz2mM9vQDZ0561/HRV9w8uf/w6deoIK4c+evSo0npEmsBhNyIt8vX1RWZmJn7//XecOnVKuCZTkZWVFYCyFSzd3d1F/0xMTKBQKJ57ye7KlD9GZmamyrby1WzffPNNWFlZQSaTISsrS6XejRs3XqoNRBUxfIi0yNvbG/r6+oiMjMTff/+t9vs97dq1Q5MmTfDpp5+ipKREKC8uLsbs2bMRFhYmDKmV93CquxJKkyZN0K5dOxw4cEB0/ejx48dISEiAoaEhPDw80KhRI3Tp0gUHDhwQrhcBZdPAOduNNInDbkRaZG5uDhcXF5w+fRpubm4wNzdXqVOnTh0sXLgQs2fPhr+/P4YNG4a6deti9+7dyM3NxZo1a2BgUPanWn5nhLi4OPTo0QO9evV67rYsWLAAY8eOxbBhwzBixAgYGxvjwIED+Pnnn7FgwQI0bNgQQNmqt6NGjcJ7772HUaNG4eHDh9i2bZvathO9KPZ8iLSsPCDUfbG0XN++fREfH4+mTZsiNjYW0dHRMDY2xsaNGzFw4ECh3oABA+Du7o6kpCSsWbOmWu3o1KkTdu7cCScnJ8THxyM6Ohp169ZFTEyM6Aur7dq1w6effgobGxts2LABu3fvxvvvv4/u3btX88yJKseVTImISHLs+RARkeQYPkREJDmGDxERSY7hQ0REkmP4EBGR5Bg+REQkOYYPERFJjuFDRESSY/gQEZHkGD5ERCS5/wM8QSnHxqHAGwAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.boxplot(x=\"Method\",y=\"AUC\",data=auc_df)"
]
},
{
"cell_type": "markdown",
"id": "opposite-double",
"metadata": {},
"source": [
"We can calculate a 95% confidence interval around each AUC using [DeLong's method](https://github.com/yandexdataschool/roc_comparison/blob/master/compare_auc_delong_xu.py). "
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "macro-november",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Cycle | \n",
" Method | \n",
" AUC | \n",
" LB | \n",
" UB | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 0 | \n",
" KNeighbors | \n",
" 0.804346 | \n",
" 0.782493 | \n",
" 0.826199 | \n",
"
\n",
" \n",
" | 1 | \n",
" 0 | \n",
" RandomForest | \n",
" 0.840062 | \n",
" 0.819991 | \n",
" 0.860134 | \n",
"
\n",
" \n",
" | 2 | \n",
" 0 | \n",
" LGBM | \n",
" 0.838470 | \n",
" 0.818640 | \n",
" 0.858301 | \n",
"
\n",
" \n",
" | 3 | \n",
" 1 | \n",
" KNeighbors | \n",
" 0.817292 | \n",
" 0.795493 | \n",
" 0.839091 | \n",
"
\n",
" \n",
" | 4 | \n",
" 1 | \n",
" RandomForest | \n",
" 0.846191 | \n",
" 0.826062 | \n",
" 0.866320 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Cycle Method AUC LB UB\n",
"0 0 KNeighbors 0.804346 0.782493 0.826199\n",
"1 0 RandomForest 0.840062 0.819991 0.860134\n",
"2 0 LGBM 0.838470 0.818640 0.858301\n",
"3 1 KNeighbors 0.817292 0.795493 0.839091\n",
"4 1 RandomForest 0.846191 0.826062 0.866320"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"auc_result = []\n",
"for cycle, [truth, prob] in enumerate(zip(truth_list,prob_list)):\n",
" for name, p in zip(method_name_list, prob):\n",
" truth = np.array([int(x) for x in truth])\n",
" auc, (lb, ub) = calc_auc_ci(truth,p[:,1])\n",
" auc_result.append([cycle,name, auc, lb, ub])\n",
"auc_ci_df = pd.DataFrame(auc_result,columns=[\"Cycle\",\"Method\",\"AUC\",\"LB\",\"UB\"])\n",
"auc_ci_df.head()"
]
},
{
"cell_type": "markdown",
"id": "south-element",
"metadata": {},
"source": [
"Define a routine for displaying the AUC values and the associated 95% confidence intervals."
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "tired-wheat",
"metadata": {},
"outputs": [],
"source": [
"def ci_pointplot(input_df, x_col=\"Cycle\", y_col=\"AUC\", hue_col=\"Method\", lb_col=\"LB\", ub_col=\"UB\"):\n",
" dodge_val = 0.25\n",
" palette_name = \"deep\"\n",
" cv_cycles = len(input_df[x_col].unique())\n",
" ax = sns.pointplot(x=x_col, y=y_col, hue=hue_col, data=input_df, dodge=dodge_val, join=False, palettte=palette_name)\n",
" colors = sns.color_palette(palette_name, len(input_df.Method.unique())) * cv_cycles\n",
" ax.axvline(0.5, ls=\"--\", c=\"gray\")\n",
" for x in np.arange(0.5, cv_cycles, 1):\n",
" ax.axvline(x, ls=\"--\", c=\"gray\")\n",
" y_val = input_df[y_col]\n",
" lb = y_val - input_df[lb_col]\n",
" ub = input_df[ub_col] - y_val\n",
" x_pos = []\n",
" for i in range(0, cv_cycles):\n",
" x_pos += [i - dodge_val / 2, i, i + dodge_val / 2]\n",
" _ = ax.errorbar(x_pos, y_val, yerr=[lb, ub], fmt=\"none\", capsize=0, color=colors)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "pharmaceutical-commerce",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1oAAAG5CAYAAACX7UWbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAB/FElEQVR4nO3deVhUZf8G8BsQBARXzAUERRMLUEwF11TEBdNKstTMJTXN3cxCzMxWJbcXl9Qy9yV3UxNXXEpNRXPNKEUE3BJQFFGBmfn9wY/JieU85sw85+D9uS6vN885c8537ncivnOe8zw2BoPBACIiIiIiIjIbW9kFEBERERERFTdstIiIiIiIiMyMjRYREREREZGZsdEiIiIiIiIyMzZaREREREREZlZCdgFq9eDBA5w9exYVK1aEnZ2d7HKIiIiIiEhldDodbt68CT8/Pzg6OprsY6NViLNnz6Jnz56yyyAiIiIiIpVbsWIFGjZsaLKNjVYhKlasCCA3tMqVK0uuRpvmzp0LABg8eLDkStRt3bp1AICuXbtKrkTdmJMY5qSMGYlhTmKYkxjmpIwZiVFbTtevX0fPnj2NvcOj2GgVIm+4YOXKleHh4SG5Gm1ydXUFAOanoGzZsgCYkxLmJIY5KWNGYpiTGOYkhjkpY0Zi1JpTQY8acTIMIiIiIiIiM2OjRUREREREZGZstIiIiIiIiMyMz2iRxbRo0UJ2CZrw4osvyi5BE5iTGOakjBmJYU5imJMY5qSMGYnRUk5stMhimjVrJrsETfD29pZdgiYwJzHMSRkzEsOcxDAnMcxJGTMSo6Wc2GiRxZw9exYA4OfnJ7kSdbt+/ToAcBkBBcxJDHNSxozEMCcxzEmMUk537tzB33//jezsbGuWpSo6nQ5AwbPX0T+slVOJEiXg6OiIihUr5luIWPgcZq6JyGjr1q0A2Ggp2b59OwCgb9++cgtROeYkhjkpY0ZimJMY5iSmqJzu3LmDGzduwN3dHU5OTrCxsbFydeqQkpICAHBzc5NcibpZIyeDwYCcnBxkZGQgMTERlSpVQpkyZR77PGy0iIiIiEiav//+G+7u7nB2dpZdChEAwMbGBvb29ihXrhxKliyJ69ev/6dGi7MOEhEREZE02dnZcHJykl0GUYGcnJzw8OHD//RaNlpEREREJNXTOlyQ1O9JPptstIiIiIiIiMyMz2iRxYSEhMguQRPatGkjuwRNYE5imJMyZiSGOYlhTmKYk7LSpUvLLkETtJQTGy2ymIYNG8ouQROqVasmuwRNYE5imJMyZiSGOYlhTmKe1pzGjh2LjRs3wtbWFgcPHkT58uULPO7ll19GXFwcunTpgsmTJz/WNVJTU+Hk5GScTKRXr164cuUKYmJinrj+oljrOv/m4OBg1es9CQ4dJIuJjY1FbGys7DJULykpCUlJSbLLUD3mJIY5KWNGYpiTGOYk5mnPSa/XY+/evQXuS0pKQlxcHIB/1ogStX//fnTo0AFpaWlPXKNWZGVlISsrS3YZQthokcXs3r0bu3fvll2GiavLJuDqsgmyyzCxZ88e7NmzR3YZqsecxDAnZcxIDHMSw5zEPO05eXh4FPr+d+/ebbzT9bgLNp8+fRp37tx54vq05M6dO5p5z2y0iIiIiIgsqE2bNjh06BAePHiQb9+uXbsQHBwsoSqyNDZaREREREQWFBISgvv37+PQoUMm21NTU/Hbb7+hXbt2+V7z22+/4e2330b9+vVRv3599OvXD6dPnzbuHzt2LGbPng0gt5Hr1auXyet/+eUXhIWFwd/fH61atcI333wDvV5vckxcXByGDBmChg0bom7dunjjjTcKHI106NAhdO/eHQEBAQgJCcG2bdv+cxZPEzZaREREREQW1KBBA5QrVy7f8ME9e/bAyckJTZo0Mdl+8OBB9OrVC3fv3sXIkSMxePBgXL16FT179jQ+/96tWze0bdsWABAREYF3333X+PqbN29i+PDhaNy4McaNG4eqVasiKioKS5cuNR5z+vRpdOvWDadPn8bbb7+N0aNHIzs7G0OHDsWKFSuMxx06dAjvvPMO7t69i1GjRqFjx4746KOPcO7cObPnVNxw1kEiIiIiIguys7ND69atsXfvXuj1etja5t7r2LVrF1q1amUyk55er8cnn3wCf39/LF++HHZ2dgCAt956C6+++iq++OILbNq0CfXr14ePjw927dqFkJAQeHh4GM+RlZWF6dOnGxuxzp07o2XLlti1axf69u0LAPjiiy9gY2ODdevWoXLlygCAHj16oEePHvj6668RGhqK8uXLY+rUqahYsSJWr14NFxcXAEDTpk3Rp08flC1b1tLRaRobLbKYTp06yS5BEzp06CC7BE1gTmKYkzJmJIY5iWFOYphT7vC+DRs24OTJ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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.set(rc={'figure.figsize': (14, 7)})\n",
"sns.set(font_scale=1.5)\n",
"sns.set_style('white')\n",
"ci_pointplot(auc_ci_df)"
]
},
{
"cell_type": "markdown",
"id": "conceptual-thinking",
"metadata": {},
"source": [
"In addition to using an analytic method for calculating confidence intervals, we can also bootstrap an estimate. "
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "identical-musician",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "52c09cb47e0d4717a8b50c8dcf2a9c55",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/10 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"bootstrap_result = []\n",
"with tqdm(total=len(truth_list)) as pbar:\n",
" for cycle,[truth,probs] in enumerate(zip(truth_list,prob_list)):\n",
" for name,p in zip(method_name_list,probs):\n",
" auc = roc_auc_score(truth,p[:,1])\n",
" lb,ub = bootstrap_error_estimate(truth,p[:,1],roc_auc_score)\n",
" bootstrap_result.append([cycle,name,auc,lb,ub])\n",
" pbar.update(1)\n",
"bootstrap_df = pd.DataFrame(bootstrap_result,columns=[\"Cycle\",\"Method\",\"AUC\",\"LB\",\"UB\"])"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "loving-operations",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1oAAAG8CAYAAADHINQoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAACGhklEQVR4nO3deVhUZf8G8BsQRARBxVxAQDCxRMVUEJUUxAXLUl7LLbc0Sc01ErEyK0vR1HBJTXM3yz0lccWl1FQ01wxTRMAtAUUWFRjm9wc/JieW85gzc87B+3NdXq+ec+ac79zvhH7nOed5zLRarRZERERERERkMOZyF0BERERERFTesNEiIiIiIiIyMDZaREREREREBsZGi4iIiIiIyMDYaBERERERERkYGy0iIiIiIiIDk73Rio6OxiuvvIImTZogODgYW7duLfP49PR0REREoG3btvDx8UFoaCgSExP1jsnOzsaXX36JgIAAvPTSS+jfvz/Onj1rvDdBRERERET0GFkbrZiYGISFhaFNmzZYsGABfHx8EB4ejp07d5Z4vFarxciRI3Ho0CGEhYVhxowZuHPnDgYMGICMjAzdcZMnT8aGDRswdOhQzJ07F1ZWVhg4cCCSk5NN9daIiIiIiOgZZibngsUdO3aEl5cX5syZo9s2duxYxMfHIyYmptjxV69eRZcuXRAZGYnu3bsDAJKTkxEUFITp06ejR48eePjwIV566SWMGDEC7733HoDCEa7WrVvjnXfe0W2T8vDhQ5w/fx41atSAhYXF079ZIiIiIiIqVzQaDe7cuQMvLy9YW1vr7asgU01ITk5GUlISxo8fr7e9c+fOiImJQXJyMurWrau379GjRwCAypUr67bZ29sDAO7duwcAyMvLQ0FBAWxtbXXH2NjYoGLFirpjRJw/fx79+vV7krdERERERETPoLVr16JFixZ622RrtBISEgAA9erV09vu6uoKoHD06t+NVsOGDeHr64sFCxbA3d0dVatWxfTp02FjY4OgoCAAgJ2dHXr06IGVK1fipZdegqurK5YsWYLs7Gx07dpVuL4aNWoAKAytVq1a//l9PssWLlwIABg+fLjMlSjbxo0bAQA9e/aUuRJlY05imJM0ZiSGOYlhTmKYkzRmJEZpOd26dQv9+vXT9Q6Pk63RyszMBAC9kSfgn9GqrKysEl83ZcoUDB06VNc0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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ci_pointplot(bootstrap_df)"
]
},
{
"cell_type": "markdown",
"id": "mechanical-hartford",
"metadata": {},
"source": [
"[5x2 cross validation](https://sci2s.ugr.es/keel/pdf/algorithm/articulo/dietterich1998.pdf)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "apart-principle",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Method_1 Method_2 p-value\n"
]
}
],
"source": [
"X = np.stack(data_df.fp)\n",
"y = data_df.Active.values\n",
"classifier_list = []\n",
"for method, name in zip(method_list, method_name_list):\n",
" if name == \"XGB\":\n",
" classifier_list.append(method(use_label_encoder=False, eval_metric='logloss', n_jobs=-1))\n",
" else:\n",
" classifier_list.append(method(n_jobs=-1))\n",
"print(f\"{'Method_1':12s} {'Method_2':12s} {'p-value'}\")\n",
"for a,b in combinations(zip(classifier_list,method_name_list),2):\n",
" clf1,name1 = a\n",
" clf2,name2 = b\n",
" t, p = paired_ttest_5x2cv(estimator1=clf1,estimator2=clf2,X=X, y=y, scoring=\"roc_auc\")\n",
" print(f\"{name1:12s} {name2:12s} {p:.3f}\")"
]
},
{
"cell_type": "markdown",
"id": "imperial-travel",
"metadata": {},
"source": [
"McNemar's test"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "integral-album",
"metadata": {},
"outputs": [],
"source": [
"mc_result = []\n",
"for truth, pred in zip(truth_list,pred_list): \n",
" for i,j in combinations(range(len(method_list)),2):\n",
" mc, mc_pvalue = mcnemar(mcnemar_table(truth, pred[i], pred[j]))\n",
" mc_result.append([method_name_list[i],method_name_list[j], mc_pvalue])\n",
"mc_df = pd.DataFrame(mc_result,columns=[\"Method_1\",\"Method_2\",\"p_value\"])\n",
"mc_df['Combo'] = mc_df.Method_1 + \"_\" + mc_df.Method_2\n",
"for k,v in mc_df.groupby(\"Combo\"):\n",
" print(k,v.p_value.mean())"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "stuffed-marina",
"metadata": {},
"outputs": [],
"source": [
"len(mc_result)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "preceding-europe",
"metadata": {},
"outputs": [],
"source": [
"alpha = 0.05/len(pred_list[0])\n",
"alpha"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "parliamentary-edinburgh",
"metadata": {},
"outputs": [],
"source": [
"ax = sns.boxplot(x=\"p_value\",y=\"Combo\",data=mc_df)\n",
"ax.set(ylabel=\"\",xlabel=\"p value\")\n",
"_ = ax.axvline(alpha,c=\"red\",ls=\"--\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "patient-mobile",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.1"
},
"pycharm": {
"stem_cell": {
"cell_type": "raw",
"metadata": {
"collapsed": false
},
"source": []
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}