Created
December 4, 2024 14:33
-
-
Save alonsosilvaallende/b915993dcaf121e6da30765bea5bc1f8 to your computer and use it in GitHub Desktop.
Copy of Cox_PH_and_RSF-colab.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"provenance": [], | |
"include_colab_link": true | |
}, | |
"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.8.2" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/alonsosilvaallende/b915993dcaf121e6da30765bea5bc1f8/copy-of-cox_ph_and_rsf-colab.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "UN3PoUTSb2nT" | |
}, | |
"source": [ | |
"The objective of this notebook is to compare different models to estimate the survival probability given a set of features/covariables.\n", | |
"\n", | |
">[\"Experimental Comparison of Semi-parametric, Parametric, and Machine Learning Models for Time-to-Event Analysis Through the Concordance Index,\"](https://arxiv.org/abs/2003.08820)\n", | |
"Camila Fernandez, Chung Shue Chen, Pierre Gaillard, Alonso Silva\n", | |
"\n", | |
"To perform this analysis we will use [scikit-learn](https://scikit-learn.org/) and [scikit-survival](https://pypi.org/project/scikit-survival/). Finally, we will use [eli5](https://eli5.readthedocs.io/en/latest/index.html) to study feature importances (computed with permutation importance)." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"%pip install --quiet scikit-learn\n", | |
"%pip install --quiet scikit-survival" | |
], | |
"metadata": { | |
"id": "xMhD09DUq_E4" | |
}, | |
"execution_count": 2, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "VoQVEI5p_rga" | |
}, | |
"source": [ | |
"import numpy as np\n", | |
"import pandas as pd\n", | |
"import matplotlib.pyplot as plt" | |
], | |
"execution_count": 3, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "SnT6e_JPb2ns" | |
}, | |
"source": [ | |
"We first download a dataset from scikit-survival." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "D0xxNWzI-N3j" | |
}, | |
"source": [ | |
"from sksurv.datasets import load_gbsg2\n", | |
"\n", | |
"X, y = load_gbsg2()" | |
], | |
"execution_count": 4, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "IBTo4q_Hb2n0" | |
}, | |
"source": [ | |
"## An example: German Breast Cancer Study Group 2 (gbcsg)\n", | |
"\n", | |
"This dataset contains the following 8 features/covariables:\n", | |
"\n", | |
"- age: age (in years),\n", | |
"- estrec: estrogen receptor (in fmol),\n", | |
"- horTh: hormonal therapy (yes or no),\n", | |
"- menostat: menopausal status (premenopausal or postmenopausal),\n", | |
"- pnodes: number of positive nodes,\n", | |
"- progrec: progesterone receptor (in fmol),\n", | |
"- tgrade: tumor grade (I < II < III),\n", | |
"- tsize: tumor size (in mm).\n", | |
"\n", | |
"and the two outputs:\n", | |
"\n", | |
"- recurrence free time (in days),\n", | |
"- censoring indicator (0 - censored, 1 - event).\n", | |
"\n", | |
"The dataset has 686 samples and 8 features/covariables.\n", | |
"\n", | |
"\n", | |
"**References**\n", | |
"\n", | |
"M. Schumacher, G. Basert, H. Bojar, K. Huebner, M. Olschewski, W. Sauerbrei, C. Schmoor, C. Beyerle, R.L.A. Neumann and H.F. Rauschecker for the German Breast Cancer Study Group (1994), [Randomized 2 x 2 trial evaluating hormonal treatment and the duration of chemotherapy in node-positive breast cancer patients](https://www.ncbi.nlm.nih.gov/pubmed/7931478). Journal of Clinical Oncology, 12, 2086–2093." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "kAsZ72YYb2n3" | |
}, | |
"source": [ | |
"Let's take a look at the features/covariates." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "_OlmlI6g-X43", | |
"outputId": "f32049af-d308-4de6-aeb0-590baacd8574", | |
"scrolled": true, | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 362 | |
} | |
}, | |
"source": [ | |
"cols = [\"age\", \"estrec\", \"pnodes\", \"progrec\", \"tsize\"]\n", | |
"formatdict = {}\n", | |
"for col in cols: formatdict[col] = \"{:,.0f}\"\n", | |
"X.head(10).style.hide(axis=\"index\").format(formatdict)" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"<pandas.io.formats.style.Styler at 0x795180d03fa0>" | |
], | |
"text/html": [ | |
"<style type=\"text/css\">\n", | |
"</style>\n", | |
"<table id=\"T_6e9dd\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr>\n", | |
" <th id=\"T_6e9dd_level0_col0\" class=\"col_heading level0 col0\" >age</th>\n", | |
" <th id=\"T_6e9dd_level0_col1\" class=\"col_heading level0 col1\" >estrec</th>\n", | |
" <th id=\"T_6e9dd_level0_col2\" class=\"col_heading level0 col2\" >horTh</th>\n", | |
" <th id=\"T_6e9dd_level0_col3\" class=\"col_heading level0 col3\" >menostat</th>\n", | |
" <th id=\"T_6e9dd_level0_col4\" class=\"col_heading level0 col4\" >pnodes</th>\n", | |
" <th id=\"T_6e9dd_level0_col5\" class=\"col_heading level0 col5\" >progrec</th>\n", | |
" <th id=\"T_6e9dd_level0_col6\" class=\"col_heading level0 col6\" >tgrade</th>\n", | |
" <th id=\"T_6e9dd_level0_col7\" class=\"col_heading level0 col7\" >tsize</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <td id=\"T_6e9dd_row0_col0\" class=\"data row0 col0\" >70</td>\n", | |
" <td id=\"T_6e9dd_row0_col1\" class=\"data row0 col1\" >66</td>\n", | |
" <td id=\"T_6e9dd_row0_col2\" class=\"data row0 col2\" >no</td>\n", | |
" <td id=\"T_6e9dd_row0_col3\" class=\"data row0 col3\" >Post</td>\n", | |
" <td id=\"T_6e9dd_row0_col4\" class=\"data row0 col4\" >3</td>\n", | |
" <td id=\"T_6e9dd_row0_col5\" class=\"data row0 col5\" >48</td>\n", | |
" <td id=\"T_6e9dd_row0_col6\" class=\"data row0 col6\" >II</td>\n", | |
" <td id=\"T_6e9dd_row0_col7\" class=\"data row0 col7\" >21</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_6e9dd_row1_col0\" class=\"data row1 col0\" >56</td>\n", | |
" <td id=\"T_6e9dd_row1_col1\" class=\"data row1 col1\" >77</td>\n", | |
" <td id=\"T_6e9dd_row1_col2\" class=\"data row1 col2\" >yes</td>\n", | |
" <td id=\"T_6e9dd_row1_col3\" class=\"data row1 col3\" >Post</td>\n", | |
" <td id=\"T_6e9dd_row1_col4\" class=\"data row1 col4\" >7</td>\n", | |
" <td id=\"T_6e9dd_row1_col5\" class=\"data row1 col5\" >61</td>\n", | |
" <td id=\"T_6e9dd_row1_col6\" class=\"data row1 col6\" >II</td>\n", | |
" <td id=\"T_6e9dd_row1_col7\" class=\"data row1 col7\" >12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_6e9dd_row2_col0\" class=\"data row2 col0\" >58</td>\n", | |
" <td id=\"T_6e9dd_row2_col1\" class=\"data row2 col1\" >271</td>\n", | |
" <td id=\"T_6e9dd_row2_col2\" class=\"data row2 col2\" >yes</td>\n", | |
" <td id=\"T_6e9dd_row2_col3\" class=\"data row2 col3\" >Post</td>\n", | |
" <td id=\"T_6e9dd_row2_col4\" class=\"data row2 col4\" >9</td>\n", | |
" <td id=\"T_6e9dd_row2_col5\" class=\"data row2 col5\" >52</td>\n", | |
" <td id=\"T_6e9dd_row2_col6\" class=\"data row2 col6\" >II</td>\n", | |
" <td id=\"T_6e9dd_row2_col7\" class=\"data row2 col7\" >35</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_6e9dd_row3_col0\" class=\"data row3 col0\" >59</td>\n", | |
" <td id=\"T_6e9dd_row3_col1\" class=\"data row3 col1\" >29</td>\n", | |
" <td id=\"T_6e9dd_row3_col2\" class=\"data row3 col2\" >yes</td>\n", | |
" <td id=\"T_6e9dd_row3_col3\" class=\"data row3 col3\" >Post</td>\n", | |
" <td id=\"T_6e9dd_row3_col4\" class=\"data row3 col4\" >4</td>\n", | |
" <td id=\"T_6e9dd_row3_col5\" class=\"data row3 col5\" >60</td>\n", | |
" <td id=\"T_6e9dd_row3_col6\" class=\"data row3 col6\" >II</td>\n", | |
" <td id=\"T_6e9dd_row3_col7\" class=\"data row3 col7\" >17</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_6e9dd_row4_col0\" class=\"data row4 col0\" >73</td>\n", | |
" <td id=\"T_6e9dd_row4_col1\" class=\"data row4 col1\" >65</td>\n", | |
" <td id=\"T_6e9dd_row4_col2\" class=\"data row4 col2\" >no</td>\n", | |
" <td id=\"T_6e9dd_row4_col3\" class=\"data row4 col3\" >Post</td>\n", | |
" <td id=\"T_6e9dd_row4_col4\" class=\"data row4 col4\" >1</td>\n", | |
" <td id=\"T_6e9dd_row4_col5\" class=\"data row4 col5\" >26</td>\n", | |
" <td id=\"T_6e9dd_row4_col6\" class=\"data row4 col6\" >II</td>\n", | |
" <td id=\"T_6e9dd_row4_col7\" class=\"data row4 col7\" >35</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_6e9dd_row5_col0\" class=\"data row5 col0\" >32</td>\n", | |
" <td id=\"T_6e9dd_row5_col1\" class=\"data row5 col1\" >13</td>\n", | |
" <td id=\"T_6e9dd_row5_col2\" class=\"data row5 col2\" >no</td>\n", | |
" <td id=\"T_6e9dd_row5_col3\" class=\"data row5 col3\" >Pre</td>\n", | |
" <td id=\"T_6e9dd_row5_col4\" class=\"data row5 col4\" >24</td>\n", | |
" <td id=\"T_6e9dd_row5_col5\" class=\"data row5 col5\" >0</td>\n", | |
" <td id=\"T_6e9dd_row5_col6\" class=\"data row5 col6\" >III</td>\n", | |
" <td id=\"T_6e9dd_row5_col7\" class=\"data row5 col7\" >57</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_6e9dd_row6_col0\" class=\"data row6 col0\" >59</td>\n", | |
" <td id=\"T_6e9dd_row6_col1\" class=\"data row6 col1\" >0</td>\n", | |
" <td id=\"T_6e9dd_row6_col2\" class=\"data row6 col2\" >yes</td>\n", | |
" <td id=\"T_6e9dd_row6_col3\" class=\"data row6 col3\" >Post</td>\n", | |
" <td id=\"T_6e9dd_row6_col4\" class=\"data row6 col4\" >2</td>\n", | |
" <td id=\"T_6e9dd_row6_col5\" class=\"data row6 col5\" >181</td>\n", | |
" <td id=\"T_6e9dd_row6_col6\" class=\"data row6 col6\" >II</td>\n", | |
" <td id=\"T_6e9dd_row6_col7\" class=\"data row6 col7\" >8</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_6e9dd_row7_col0\" class=\"data row7 col0\" >65</td>\n", | |
" <td id=\"T_6e9dd_row7_col1\" class=\"data row7 col1\" >25</td>\n", | |
" <td id=\"T_6e9dd_row7_col2\" class=\"data row7 col2\" >no</td>\n", | |
" <td id=\"T_6e9dd_row7_col3\" class=\"data row7 col3\" >Post</td>\n", | |
" <td id=\"T_6e9dd_row7_col4\" class=\"data row7 col4\" >1</td>\n", | |
" <td id=\"T_6e9dd_row7_col5\" class=\"data row7 col5\" >192</td>\n", | |
" <td id=\"T_6e9dd_row7_col6\" class=\"data row7 col6\" >II</td>\n", | |
" <td id=\"T_6e9dd_row7_col7\" class=\"data row7 col7\" >16</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_6e9dd_row8_col0\" class=\"data row8 col0\" >80</td>\n", | |
" <td id=\"T_6e9dd_row8_col1\" class=\"data row8 col1\" >59</td>\n", | |
" <td id=\"T_6e9dd_row8_col2\" class=\"data row8 col2\" >no</td>\n", | |
" <td id=\"T_6e9dd_row8_col3\" class=\"data row8 col3\" >Post</td>\n", | |
" <td id=\"T_6e9dd_row8_col4\" class=\"data row8 col4\" >30</td>\n", | |
" <td id=\"T_6e9dd_row8_col5\" class=\"data row8 col5\" >0</td>\n", | |
" <td id=\"T_6e9dd_row8_col6\" class=\"data row8 col6\" >II</td>\n", | |
" <td id=\"T_6e9dd_row8_col7\" class=\"data row8 col7\" >39</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_6e9dd_row9_col0\" class=\"data row9 col0\" >66</td>\n", | |
" <td id=\"T_6e9dd_row9_col1\" class=\"data row9 col1\" >3</td>\n", | |
" <td id=\"T_6e9dd_row9_col2\" class=\"data row9 col2\" >no</td>\n", | |
" <td id=\"T_6e9dd_row9_col3\" class=\"data row9 col3\" >Post</td>\n", | |
" <td id=\"T_6e9dd_row9_col4\" class=\"data row9 col4\" >7</td>\n", | |
" <td id=\"T_6e9dd_row9_col5\" class=\"data row9 col5\" >0</td>\n", | |
" <td id=\"T_6e9dd_row9_col6\" class=\"data row9 col6\" >II</td>\n", | |
" <td id=\"T_6e9dd_row9_col7\" class=\"data row9 col7\" >18</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 4 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "zcMjHeAEb2n_" | |
}, | |
"source": [ | |
"Let's take a look at the output." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "h8ltRTa4_WOn", | |
"outputId": "a868c271-fd2f-4dd4-beba-efd9f894120a", | |
"scrolled": true, | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
} | |
}, | |
"source": [ | |
"y[:10]" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"array([( True, 1814.), ( True, 2018.), ( True, 712.), ( True, 1807.),\n", | |
" ( True, 772.), ( True, 448.), (False, 2172.), (False, 2161.),\n", | |
" ( True, 471.), (False, 2014.)],\n", | |
" dtype=[('cens', '?'), ('time', '<f8')])" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 5 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "A5NXlNYob2oH" | |
}, | |
"source": [ | |
"For the output, scikit-survival uses a numpy nd array, so to show it we do a dataframe." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"df_y = pd.DataFrame(data={'time': y['time'].astype(int), 'event': y['cens']})\n", | |
"df_y[:10].style.hide(axis=\"index\").highlight_min('event', color='lightgreen')" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 362 | |
}, | |
"id": "AfPvZcjJ-GwQ", | |
"outputId": "2972c5fd-3d45-4cea-809a-c7515a77e236" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"<pandas.io.formats.style.Styler at 0x7951809f9d80>" | |
], | |
"text/html": [ | |
"<style type=\"text/css\">\n", | |
"#T_4d3fd_row6_col1, #T_4d3fd_row7_col1, #T_4d3fd_row9_col1 {\n", | |
" background-color: lightgreen;\n", | |
"}\n", | |
"</style>\n", | |
"<table id=\"T_4d3fd\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr>\n", | |
" <th id=\"T_4d3fd_level0_col0\" class=\"col_heading level0 col0\" >time</th>\n", | |
" <th id=\"T_4d3fd_level0_col1\" class=\"col_heading level0 col1\" >event</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <td id=\"T_4d3fd_row0_col0\" class=\"data row0 col0\" >1814</td>\n", | |
" <td id=\"T_4d3fd_row0_col1\" class=\"data row0 col1\" >True</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_4d3fd_row1_col0\" class=\"data row1 col0\" >2018</td>\n", | |
" <td id=\"T_4d3fd_row1_col1\" class=\"data row1 col1\" >True</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_4d3fd_row2_col0\" class=\"data row2 col0\" >712</td>\n", | |
" <td id=\"T_4d3fd_row2_col1\" class=\"data row2 col1\" >True</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_4d3fd_row3_col0\" class=\"data row3 col0\" >1807</td>\n", | |
" <td id=\"T_4d3fd_row3_col1\" class=\"data row3 col1\" >True</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_4d3fd_row4_col0\" class=\"data row4 col0\" >772</td>\n", | |
" <td id=\"T_4d3fd_row4_col1\" class=\"data row4 col1\" >True</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_4d3fd_row5_col0\" class=\"data row5 col0\" >448</td>\n", | |
" <td id=\"T_4d3fd_row5_col1\" class=\"data row5 col1\" >True</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_4d3fd_row6_col0\" class=\"data row6 col0\" >2172</td>\n", | |
" <td id=\"T_4d3fd_row6_col1\" class=\"data row6 col1\" >False</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_4d3fd_row7_col0\" class=\"data row7 col0\" >2161</td>\n", | |
" <td id=\"T_4d3fd_row7_col1\" class=\"data row7 col1\" >False</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_4d3fd_row8_col0\" class=\"data row8 col0\" >471</td>\n", | |
" <td id=\"T_4d3fd_row8_col1\" class=\"data row8 col1\" >True</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td id=\"T_4d3fd_row9_col0\" class=\"data row9 col0\" >2014</td>\n", | |
" <td id=\"T_4d3fd_row9_col1\" class=\"data row9 col1\" >False</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 6 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "xzW5x7ljb2oP" | |
}, | |
"source": [ | |
"One of the main challenges of survival analysis is **right censoring**, i.e., by the end of the study, the event of interest (for example, in medicine 'death of a patient' or in this dataset 'recurrence of cancer') has only occurred for a subset of the observations.\n", | |
"\n", | |
"The **right censoring** in this dataset is given by the column named 'event' and it's a variable which can take value 'True' if the patient had a recurrence of cancer or 'False' if the patient is recurrence free at the indicated time (right-censored samples)." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "VmfAR7igb2oW" | |
}, | |
"source": [ | |
"Let's see how many right-censored samples do we have." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "rzS8h1GG_o_A", | |
"outputId": "43d560de-975f-4ebf-a959-88cd581e3796", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
} | |
}, | |
"source": [ | |
"print(f'Number of samples: {len(df_y)}')\n", | |
"print(f'Number of right censored samples: {len(df_y.query(\"event == False\"))}')\n", | |
"print(f'Percentage of right censored samples: {100*len(df_y.query(\"event == False\"))/len(df_y):.1f}%')" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Number of samples: 686\n", | |
"Number of right censored samples: 387\n", | |
"Percentage of right censored samples: 56.4%\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "VtsENFsnQhZx" | |
}, | |
"source": [ | |
"There are 387 patients (56.4%) who were right censored (recurrence free) at the end of the study.\n", | |
"\n", | |
"Let's divide our dataset in training and test sets." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from sklearn.preprocessing import OneHotEncoder\n", | |
"from sklearn.preprocessing import OrdinalEncoder" | |
], | |
"metadata": { | |
"id": "PV9SQ8LZ20BL" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"X[\"horTh\"] = [1 if X[\"horTh\"].iloc[i] == 'yes' else 0 for i in range(X.shape[0])]" | |
], | |
"metadata": { | |
"id": "MxHGiw0E4-hP" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"X[\"menostat\"] = [1 if X[\"menostat\"].iloc[i] == 'Post' else 0 for i in range(X.shape[0])]" | |
], | |
"metadata": { | |
"id": "P_R8Fr4a5JUt" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"X[\"tgrade\"] = OrdinalEncoder(categories=[['I', 'II', 'III']]).fit_transform(X[[\"tgrade\"]])" | |
], | |
"metadata": { | |
"id": "b6ABtXNK3Dd9" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "duYhddUr_1nH", | |
"outputId": "133cb099-fdd6-42a0-bb33-08d2e0f58f06", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
} | |
}, | |
"source": [ | |
"from sklearn.model_selection import train_test_split\n", | |
"\n", | |
"X_trn, X_test, y_trn, y_test = train_test_split(X, y, random_state=20)\n", | |
"\n", | |
"print(f'Number of training samples: {len(y_trn)}')\n", | |
"print(f'Number of test samples: {len(y_test)}')" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Number of training samples: 514\n", | |
"Number of test samples: 172\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "3VEOV-vWb2ow" | |
}, | |
"source": [ | |
"We divide the features/covariates into continuous and categorical." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"X.dtypes" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "4OqMuC40mXDb", | |
"outputId": "037167a2-2a6b-4b07-e4c3-8d2fa592bc69" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"age float64\n", | |
"estrec float64\n", | |
"horTh int64\n", | |
"menostat int64\n", | |
"pnodes float64\n", | |
"progrec float64\n", | |
"tgrade float64\n", | |
"tsize float64\n", | |
"dtype: object" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 13 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "jDjgk9PWb2o3" | |
}, | |
"source": [ | |
"We use ordinal encoding for categorical features/covariates and standard scaling for continuous features/covariates." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "N_nodxlEb2o-" | |
}, | |
"source": [ | |
"# Baseline: Cox Proportional Hazards model" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "KqdChwYJb2o_" | |
}, | |
"source": [ | |
"Cox Proportional Hazards model assumes that the log-hazard of a subject is a linear function of their $m$ static covariates/features $h_i, i\\in\\{1,\\ldots,m\\}$, and a population-level baseline hazard function $h_0(t)$ that changes over time:\n", | |
"\\begin{equation}\n", | |
"h(t|x)=h_0(t)\\exp\\left(\\sum_{i=1}^mh_i(x_i-\\bar{x_i})\\right).\n", | |
"\\end{equation}\n", | |
"\n", | |
"The term *proportional hazards* refers to the assumption of a constant relationship between the dependent variable and the regression coefficients." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "77YbwMKvAFHQ", | |
"outputId": "6b0f78a9-35d9-4929-8b8c-d6036e956308", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 74 | |
} | |
}, | |
"source": [ | |
"from sklearn.pipeline import make_pipeline\n", | |
"from sksurv.linear_model import CoxPHSurvivalAnalysis\n", | |
"from sksurv.metrics import concordance_index_censored\n", | |
"\n", | |
"cox = CoxPHSurvivalAnalysis()\n", | |
"cox.fit(X_trn, y_trn)" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"CoxPHSurvivalAnalysis()" | |
], | |
"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>CoxPHSurvivalAnalysis()</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-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">CoxPHSurvivalAnalysis</label><div class=\"sk-toggleable__content\"><pre>CoxPHSurvivalAnalysis()</pre></div></div></div></div></div>" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 14 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"Let's now attempt to quantify how a survival curve estimated on a training set performs on a test set.\n", | |
"\n", | |
"## Survival model evaluation using the Integrated Brier Score (IBS) and the Concordance Index (C-index)" | |
], | |
"metadata": { | |
"id": "I2wAzNXar551" | |
} | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"The Brier score and the C-index are measures that **assess the quality of a predicted survival curve** on a finite data sample.\n", | |
"\n", | |
"- **The Brier score is a proper scoring rule**, meaning that an estimate of the survival curve has minimal Brier score if and only if it matches the true survival probabilities induced by the underlying data generating process. In that respect the **Brier score** assesses both the **calibration** and the **ranking power** of a survival probability estimator.\n", | |
"\n", | |
"- On the other hand, the **C-index** only assesses the **ranking power**: it is invariant to a monotonic transform of the survival probabilities. It only focus on the ability of a predictive survival model to identify which individual is likely to fail first out of any pair of two individuals.\n", | |
"\n", | |
"\n", | |
"\n", | |
"It is comprised between 0 and 1 (lower is better).\n", | |
"It answers the question \"how close to the real probabilities are our estimates?\"." | |
], | |
"metadata": { | |
"id": "Gap1YWH5sAA1" | |
} | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"<summary>Mathematical formulation</summary>\n", | |
" \n", | |
"$$\\mathrm{BS}^c(t) = \\frac{1}{n} \\sum_{i=1}^n I(d_i \\leq t \\land \\delta_i = 1)\n", | |
" \\frac{(0 - \\hat{S}(t | \\mathbf{x}_i))^2}{\\hat{G}(d_i)} + I(d_i > t)\n", | |
" \\frac{(1 - \\hat{S}(t | \\mathbf{x}_i))^2}{\\hat{G}(t)}$$\n", | |
" \n", | |
"In the survival analysis context, the Brier Score can be seen as the Mean Squared Error (MSE) between our probability $\\hat{S}(t)$ and our target label $\\delta_i \\in {0, 1}$, weighted by the inverse probability of censoring $\\frac{1}{\\hat{G}(t)}$. In practice we estimate $\\hat{G}(t)$ using a variant of the Kaplan-Estimator with swapped event indicator.\n", | |
"\n", | |
"- When no event or censoring has happened at $t$ yet, i.e. $I(d_i > t)$, we penalize a low probability of survival with $(1 - \\hat{S}(t|\\mathbf{x}_i))^2$.\n", | |
"- Conversely, when an individual has experienced an event before $t$, i.e. $I(d_i \\leq t \\land \\delta_i = 1)$, we penalize a high probability of survival with $(0 - \\hat{S}(t|\\mathbf{x}_i))^2$." | |
], | |
"metadata": { | |
"id": "3bmwqNQisHup" | |
} | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"" | |
], | |
"metadata": { | |
"id": "CmP1ahaXsy_c" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"ci_cox = concordance_index_censored(y_test[\"cens\"], y_test[\"time\"], cox.predict(X_test))\n", | |
"print(f'The c-index of Cox is given by {ci_cox[0]:.3f}')" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "oVdrGM0NtWdR", | |
"outputId": "bb161915-8272-4016-a1d5-5fc5c515360f" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"The c-index of Cox is given by 0.665\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"times = np.arange(365, 1826)" | |
], | |
"metadata": { | |
"id": "zoUFRn2yqLPF" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"survs = cox.predict_survival_function(X_test)" | |
], | |
"metadata": { | |
"id": "06i_zOUBqMUt" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"preds = np.asarray([[fn(t) for t in times] for fn in survs])" | |
], | |
"metadata": { | |
"id": "prIyWOtMqe7s" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from sksurv.metrics import integrated_brier_score\n", | |
"\n", | |
"integrated_brier_score(y_trn, y_test, preds, times)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "Qyvn1TexqkoO", | |
"outputId": "fa6f1b5b-5bd9-49c2-a9b4-ebd4bd8d09d9" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"0.17509710701666106" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 19 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"!pip install -q eli5" | |
], | |
"metadata": { | |
"id": "yU-3yjgDr3N7" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from eli5.sklearn import PermutationImportance" | |
], | |
"metadata": { | |
"id": "k6mzeqdNr7ZB" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"perm = PermutationImportance(\n", | |
" cox, n_iter=100, random_state=42).fit(X_trn,y_trn)" | |
], | |
"metadata": { | |
"id": "WYW6dDDvsBNe" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"data = perm.results_\n", | |
"data = pd.DataFrame(data, columns=X_trn.columns)\n", | |
"meds = data.median()\n", | |
"meds = meds.sort_values(ascending=False)\n", | |
"data = data[meds.index]" | |
], | |
"metadata": { | |
"id": "n5aKc--PsMHm" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"fig, ax = plt.subplots(figsize=(10,7))\n", | |
"data.boxplot(ax=ax)\n", | |
"ax.set_title('Feature Importances')\n", | |
"plt.show()" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 622 | |
}, | |
"id": "oBbnA1ZMsQeY", | |
"outputId": "40006cd2-965b-4c1b-8f84-1f1f9b88ce90" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 1000x700 with 1 Axes>" | |
], | |
"image/png": "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73f6fvHixSorK9OIESOcxhsZGanWrVs7jddV9957r+P/devWVdu2bRUSEqIRI0Y4lrdt21Z169bVd999V+Hx9913n9OZnQceeEC+vr765JNPJEn//e9/debMGY0fP17e3v/78ThmzBiFh4dr6dKlTv0FBAQoOTm5yuMPCAhw9FtaWqrjx48rNDRUbdu2rbQ+ycnJ8vf3d3zfs2dPSXLs25YtW5Sdna3x48dXONtWfqbrhx9+0GeffaYRI0bop59+ctTj+PHjGjBggHbt2qWDBw9KOntMt2/frl27dlV5nwDA0/ExOQC4DHTp0qXSCRTKfzH99a9/XenjwsPDHf//4YcfNG3aNL3//vs6cuSIU7uTJ0/W4Gj/59yPou3atUvGGLVu3brS9j8PI64IDAxUo0aNnJbVqVNHV1xxheMX/58vr+xaoHPHFBoaqiZNmmjv3r2SpH379kk6G6h+zt/fXy1btnSsL9esWTOnsHIxZWVlmjNnjubOnavs7GyVlpY61jVo0KBC+yuvvNLp+3r16kmSY9/27Nkj6cKzDu7evVvGGD3xxBN64oknKm1z5MgRNWvWTE8//bSGDBmiNm3aqEOHDrrhhht055136pprrqnyPgKApyEMAcBlrKysTNLZ64YiIyMrrPf1/d/b+IgRI7Ru3TpNmjRJcXFxCg0NVVlZmW644QZHPxdybqgo9/Nf2s/187NR5eP18vLSp59+Kh8fnwrtQ0NDLzqOylTW14WWm/9//ZI7nbvvF/Pcc8/piSee0N13363p06erfv368vb21vjx4yutT03sW3m/EydO1IABAypt06pVK0lSr169tGfPHv3rX//S8uXL9X//93/605/+pPnz5zudlQOA2oQwBACXsauuukqS1LhxY/Xt2/e87X788Uelp6dr2rRpevLJJx3LK/vI0/lCT/mZh3NnTjv3jMjFxmuMUXR0tNq0aVPlx10Ku3btUp8+fRzf5+fnKycnRzfeeKMkqUWLFpKkrKwstWzZ0tHuzJkzys7OvuDx/7nzHd9FixapT58++utf/+q0/MSJE46JLFxR/tzYtm3becdWvh9+fn5VGn/9+vWVnJys5ORk5efnq1evXnrqqacIQwBqLa4ZAoDL2IABAxQeHq7nnntOxcXFFdaXzwBXfhbh3LMGs2fPrvCY8nsBnRt6wsPD1bBhQ61evdpp+dy5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ANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANgSYQgAAACALRGGAAAAANiSr9UD8CTZxwpUUFTilr73HC1wfPX1dU9ZQgJ8Fd0wxC19AwAAAJ6mWr91v/baa3rppZeUm5urjh076pVXXlGXLl3O2/7DDz/UE088ob1796p169Z64YUXdOONNzrW5+fn69FHH1VqaqqOHz+u6Oho/eEPf9D9999fneG5RfaxAvV5eaXbtzNh0Va39r9iYm8CEQAAAKBqhKEPPvhAKSkpmj9/vrp27arZs2drwIABysrKUuPGjSu0X7dunUaOHKkZM2Zo8ODBWrhwoZKSkrR582Z16NBBkpSSkqLPPvtMf//73xUVFaXly5fr97//vZo2baqbb775l+9lDSg/IzT71ji1ahxa8/2fKtKSles1uHeCQoICarz/3UfyNf6Dr9x2ZgsAAADwNC6HoVmzZmnMmDFKTk6WJM2fP19Lly7VG2+8oUcffbRC+zlz5uiGG27QpEmTJEnTp09XWlqaXn31Vc2fP1/S2cA0evRo9e7dW5J033336S9/+Ys2btx42YShcq0ah6pDszo13m9xcbFyG0mdWtSTn59fjfcPAAAAwJlLEyicOXNGGRkZ6tu37/868PZW3759tX79+kofs379eqf2kjRgwACn9t27d9fHH3+sgwcPyhijFStWaOfOnerfv78rwwMAAACAKnPpzNCxY8dUWlqqiIgIp+URERHKzMys9DG5ubmVts/N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hBrUu3dvPfTQQxo/frzq1auniIgIvf766yooKFBycrLCwsLUqlUrffrpp47HbNu2TQMHDlRoaKgiIiJ055136tixY059/uEPfzjva0S6+Ovk66+/Vp8+fRQWFqbw8HDFx8dr06ZNWrlypZKTk3Xy5MkKZ07feecdde7cWWFhYYqMjNTtt9+uI0eOSDr7M6hPnz6SpHr16snLy0t33XWXew7qZWDZsmXq0aOH43ecwYMHa8+ePY7169atU1xcnAIDA9W5c2elpqZWOHN6sTp7HIOLSkxMNKGhoWbcuHEmMzPT/P3vfzfBwcFmwYIFxhhjWrRoYcLDw83LL79sdu/ebXbv3m02bdpkvL29zdNPP22ysrLMm2++aYKCgsybb77p6Ldv374mLi7ObNiwwWRkZJjExEQTFBRk/vSnPznaSDKNGzc2b7zxhtmzZ4/Zt2+fWb16tQkPDzdvvfWW2bNnj1m+fLmJiooyTz31lDHGmNLSUtOtWzdz9dVXm+XLl5s9e/aYf//73+aTTz65lIfNLapSi/r165vXXnvN7Nq1y8yYMcN4e3ubzMxMY4wx+fn5pkmTJmbo0KFm69atJj093URHR5vRo0c7tvHCCy+YevXqmY8++sh8++235p577jFhYWFmyJAhjjbPPPOMiYmJMcuWLTN79uwxb775pgkICDArV640xhjz4IMPmri4OPPll1+a7Oxsk5aWZj7++ONLdpysdOLECZOQkGDGjBljcnJyTE5Ojrn//vvPezyys7ONJLNlyxbH48sfl5OTY8aNG2caN25scnJyjDHG3HvvvaZ79+5m9erVZvfu3eall14yAQEBZufOnVbtsiUqO867d+82fn5+ZuLEiSYzM9O89957plmzZkaS+fHHH40xxrz55pvGz8/PdO/e3axdu9ZkZmaagoICk56ebt555x2zY8cOx/M+IiLC5OXlGWPOvq906NDBXH/99earr74yq1atMr/61a+MJPPPf/7TGGPMmTNnTLt27czdd99tvvnmG/Ptt9+a22+/3bRt29YUFRVZdKQuncTERBMeHm6eeuops3PnTvP2228bLy8vs3z5clNaWmri4uJMjx49zKZNm8yGDRtMfHy8SUxMdDx+6tSpJiQkxNxwww1m8+bN5uuvv3bq/8033zR16tSpsN0VK1YYSaZr165m5cqVZvv27aZnz56me/fubt7jy8uF3pcv9J68ceNGI8n897//NTk5Oeb48ePGGGNGjx5tQkNDzZ133mm2bdtmtm3bVqXn+Ny5c01gYKCZPXu2ycrKMhs3bnT6ue4pEhMTTVhYmJk+fbrZuXOnmT59uvHx8TEDBw40CxYsMDt37jQPPPCAadCggSkoKDA//vijadSokZk8ebLZsWOH2bx5s+nXr5/p06ePU5/ne40YY6r0Orn66qvNb3/7W7Njxw6zc+dO849//MN89dVXpqioyMyePduEh4c73hN/+uknY4wxf/3rX80nn3xi9uzZY9avX28SEhLMwIEDjTHGlJSUmI8++shIMllZWSYnJ8ecOHHi0h3oS2zRokXmo48+Mrt27TJbtmwxN910k4mNjTWlpaXm5MmTpn79+ua3v/2t2b59u/nkk09MmzZtnH5GV6XOnoYwVAWJiYmmXbt2pqyszLHskUceMe3atTPGnP0FPCkpyekxt99+u+nXr5/TskmTJpn27dsbY4zZsWOHkWS+/PJLx/pdu3YZSRXC0Pjx4536uf76681zzz3ntOydd94xTZo0McYY85///Md4e3ubrKysau7x5asqtfjtb3/rWFdWVmYaN25s5s2bZ4wxZsGCBaZevXomPz/f0Wbp0qXG29vb5ObmGmOMadKkiXnxxRcd64uLi80VV1zhCEOnT582wcHBZt26dU5ju+eee8zIkSONMcbcdNNNJjk5uQb33LMkJiaacePGOb6/0PE4Nwz93EcffWQCAwPN559/bowxZt++fcbHx8ccPHjQqd31119vJk+eXGPj9xTnHudHHnnEdOjQwanNY489ViEMSTJfffXVBfsuLS01YWFh5t///rcx5uz7iq+vr9Ox//TTT53C0DvvvGPatm3r9PosKioyQUFB5j//+c8v2FPPkJiYaHr06OG07NprrzWPPPKIWb58ufHx8TH79+93rNu+fbuRZDZu3GiMORuG/Pz8zJEjRyrt/2Jh6L///a9j2dKlS40kc+rUqRrYs8vfxd6Xq/MeNHr0aBMREeEU5KvyHG/atKl57LHHamjPrHPu87mkpMSEhISYO++807EsJyfHSDLr168306dPN/3793fq48CBA46QUVmfxvzvNWKMqdLrJCwszLz11luVjvl8r5Fzffnll0aSIyyVv4bK3yft5OjRo0aS2bp1q5k3b55p0KCB0/vG66+/7vT6qEqdPQ0fk6uibt26ycvLy/F9QkKCdu3apdLSUklS586dndrv2LFD1113ndOy6667zvGYrKws+fr6qlOnTo71rVq1Ur169Sps+9y+v/76az399NMKDQ11/BszZoxycnJUWFior776SldccYXatGnzi/f7cnSxWlxzzTWOdeUfKSk/Hb5jxw517NhRISEhjjbXXXedysrKlJWVpZMnTyonJ0ddu3Z1rPf19XWqwe7du1VYWKh+/fo51eBvf/ub41TzAw88oPfff19xcXF6+OGHtW7dOvccDA9RneOxZcsW3XnnnXr11Vcdr6WtW7eqtLRUbdq0cTr2q1atcjrNb1dZWVm69tprnZZ16dKlQjt/f3+n14kkHT58WGPGjFHr1q1Vp04dhYeHKz8/X/v375d09rXTvHlzNW3a1PGYhIQEpz6+/vpr7d69W2FhYY7a1K9fX6dPn7ZNfc49rk2aNNGRI0ccx6958+aOde3bt1fdunW1Y8cOx7IWLVqoUaNGv3jbTZo0kSTHe19td7H35eq+J8fGxjpdJ3Sx5/iRI0d06NAhXX/99e7a1Uvq588pHx8fNWjQQLGxsY5lERERks4+z77++mutWLHC6fjHxMRIktPr/3yvEUlVep2kpKTo3nvvVd++ffX8889X6b0lIyNDN910k6688kqFhYUpMTFRkhzvb3aya9cujRw5Ui1btlR4eLiioqIknT0WWVlZuuaaaxQYGOhof+7PkKrW2ZMwgUIN+fkv1+7uOz8/X9OmTdPQoUMrtA0MDFRQUJDbxuIJzp1gwsvLS2VlZTXWf/n1RUuXLlWzZs2c1gUEBEiSBg4cqH379umTTz5RWlqarr/+ej344IN6+eWXa2wcnsTV45Gbm6ubb75Z9957r+655x7H8vz8fPn4+CgjI0M+Pj5Oj/n5tRO4sKCgIKc/KEjS6NGjdfz4cc2ZM0ctWrRQQECAEhISdObMmSr3m5+fr/j4eL377rsV1lX3F3xP80vff37Jz5Kfb7u8vjX53nc5u9j7cvPmzav1nlzZz98LPcdr20QklT2fz/c8y8/P10033aQXXnihQj/l4fx8fbryPH3qqad0++23a+nSpfr00081depUvf/++7rlllsqbV9QUKABAwZowIABevfdd9WoUSPt379fAwYMcOn9rba46aab1KJFC73++utq2rSpysrK1KFDhyofi6rW2ZMQhqroiy++cPp+w4YNat26dYVfyMq1a9dOa9eudVq2du1atWnTRj4+Pmrbtq1KSkq0ZcsWxcfHSzr7l60ff/zxomPp1KmTsrKy1KpVq0rXX3PNNfr++++1c+fOWnl2yNVa/Fy7du301ltvqaCgwPFDbu3atfL29lbbtm1Vp04dNWnSRF988YV69eolSSopKVFGRobjLN7PLzov/+tSZRo1aqTRo0dr9OjR6tmzpyZNmmSbMOTv7+84U1euqsfj9OnTGjJkiGJiYjRr1iyndb/61a9UWlqqI0eOqGfPnm7dB09w7nFu27atPvnkE6c2X375ZZX6Wrt2rebOnasbb7xR0tmLxH9+QWy7du104MAB5eTkOH7gbdiwwamPTp066YMPPlDjxo0VHh5erX2qrcqP34EDBxx/9f7222914sQJtW/f3uLReb6qvC+f7z2o/MzPue9ZlanKczwqKkrp6emOi/LtolOnTvroo48UFRUlX9/q/XpZ1ddJmzZt1KZNG/3xj3/UyJEj9eabb+qWW26p9GdPZmamjh8/rueff97R57kzMLryHPBkx48fV1ZWll5//XXHz9DPP//csb5t27b6+9//rqKiIscfd8/9GVITdb7c1K4/YbjR/v37lZKSoqysLL333nt65ZVXNG7cuPO2nzBhgtLT0zV9+nTt3LlTb7/9tl599VVNnDhRkhQTE6O+ffvqvvvu08aNG7Vlyxbdd999lf7F9lxPPvmk/va3v2natGnavn27duzYoffff1+PP/64JCkxMVG9evXSb37zG6WlpSk7O1uffvqpli1bVnMHxEKu1uLn7rjjDgUGBmr06NHatm2bVqxYoYceekh33nmn43T/uHHj9Pzzzys1NVWZmZn6/e9/73TvgbCwME2cOFF//OMf9fbbb2vPnj3avHmzXnnlFb399tuSztboX//6l3bv3q3t27dryZIlateuXY0fi8tVVFSUvvjiC+3du1fHjh1z6Xj87ne/04EDB/TnP/9ZR48eVW5urnJzc3XmzBm1adNGd9xxh0aNGqXFixcrOztbGzdu1IwZM7R06dJLvJfWO/c4jxkzRpmZmXrkkUe0c+dO/eMf/9Bbb70lSRd9X2ndurXeeecd7dixQ1988YXuuOMOp7PMffv2VZs2bTR69Gh9/fXXWrNmjR577DGnPu644w41bNhQQ4YM0Zo1a5Sdna2VK1fqD3/4g77//vsa339P0rdvX8XGxuqOO+7Q5s2btXHjRo0aNUqJiYkVPgoN113sfflC70GNGzdWUFCQli1bpsOHD+vkyZPn3U5VnuNPPfWUZs6cqT//+c/atWuXYxy13YMPPqgffvhBI0eO1Jdffqk9e/boP//5j5KTk6scMi72Ojl16pTGjh2rlStXat++fVq7dq2+/PJLRy2joqKUn5+v9PR0HTt2TIWFhbryyivl7++vV155Rd99950+/vhjTZ8+3Wm7LVq0kJeXl5YsWaKjR486zTBbm9SrV08NGjTQggULtHv3bn322WdKSUlxrL/99ttVVlam++67Tzt27NB//vMfxx8ty3+G1ESdLztWX7TkCRITE83vf/97c//995vw8HBTr149M2XKFMcFlC1atKh0pphFixaZ9u3bGz8/P3PllVeal156yWn9oUOHzMCBA01AQIBp0aKFWbhwoWncuLGZP3++o41+dnHyzy1btsx0797dBAUFmfDwcNOlSxfHjGrGGHP8+HGTnJxsGjRoYAIDA02HDh3MkiVLauaAWKg6tejYsaOZOnWq4/tvvvnG9OnTxwQGBpr69eubMWPGOC6iNObshAnjxo0z4eHhpm7duiYlJcWMGjXKaTa5srIyM3v2bNO2bVvj5+dnGjVqZAYMGGBWrVpljDl7gWG7du1MUFCQqV+/vhkyZIj57rvv3HZcLjdZWVmmW7duJigoyEi64PE49+LlFi1aGEkV/q1YscIYc3bGsieffNJERUUZPz8/06RJE3PLLbeYb775xqK9tc65xzk7O9v861//Mq1atTIBAQGmd+/eZt68eU4X0p/vAuPNmzebzp07m8DAQNO6dWvz4YcfVng9ZWVlmR49ehh/f3/Tpk0bs2zZsgrvUTk5OWbUqFGmYcOGJiAgwLRs2dKMGTPGnDx50s1Hw3rnTmhhjDFDhgxxzFa5b98+c/PNN5uQkBATFhZmhg8f7pi4xZizEyh07NjxvP1fbAKFn1/8vWXLFsdzwi4u9L58sffk119/3TRv3tx4e3s7Zi4bPXq00/t+uao8x+fPn+8YR5MmTcxDDz3k7t2vcZU9nyv7Gfvz94CdO3eaW265xdStW9cEBQWZmJgYM378eMfP6Iu9Roy58OukqKjI3HbbbaZ58+bG39/fNG3a1IwdO9bpgv/777/fNGjQwEhy/OxfuHChiYqKMgEBASYhIcF8/PHHFSbNePrpp01kZKTx8vJyGk9tk5aWZtq1a2cCAgLMNddcY1auXOlUw7Vr15prrrnG+Pv7m/j4eLNw4UIjyTErrzEXr7On8TLmnBuooILevXsrLi7O6f4/7vD999+refPm+u9//1trLr6saZeqFkBt8eyzz2r+/Pk6cOCA1UMBAHiYd99913H/ptp6TXrt+LCfh/rss8+Un5+v2NhY5eTk6OGHH1ZUVJTjWhUAcNXcuXN17bXXqkGDBlq7dq1eeuklj7zhIwDg0vvb3/6mli1bqlmzZvr666/1yCOPaMSIEbU2CEmEIUsVFxdrypQp+u677xQWFqbu3bvr3XffrTDTCgBU1a5du/TMM8/ohx9+0JVXXqkJEyZo8uTJVg8LAOABcnNz9eSTTyo3N1dNmjTR8OHD9eyzz1o9LLfiY3IAAAAAbInZ5AAAAADYEmEIAAAAgC0RhgAAAADYEmEIAAAAgC0RhgAAAADYEmEIAAAAgC0RhgAAAADYEmEIAAAAgC0RhgAAAADY0v8Dk569txFQdSYAAAAASUVORK5CYII=\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"!pip install -q shap\n", | |
"import shap\n", | |
"explainer = shap.Explainer(cox.predict, X_trn)\n", | |
"shap_values = explainer(X_test[:100])\n", | |
"shap.plots.waterfall(shap_values[0])" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 540 | |
}, | |
"id": "J03T1z80N8fg", | |
"outputId": "13ecf67e-2c00-47e6-9c9e-223786f49790" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 800x550 with 3 Axes>" | |
], | |
"image/png": "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iKg5Y7JA1MDOnDkDQD9Z6NOnDwDg1KlTBsnCb7/9hldeeQXvvPMO5s+fj8TERHz++ed47bXXjE6Ijo6OxsyZM2uMoT7mLAQEBCAuLg4XL15EeHg4AO0n/vHx8fDy8tLNv1CpVCgqKoKNjU2d95Bwc3PDgw8+aFB+8uRJVFZWom/fvnBycqrxGsnJycjMzETv3r1rHJpFREREtWOyQNTA4uLi4OfnpzeUKCAgAGFhYdizZ4/efgqnT5/GzJkzMXPmTLz22msAgJdeeglffvml0d6F06dPIycnR7cRWXXqY86Cl5cXAgICcOLECZSWlsLZ2RkJCQkoLCzEoEGDdPUyMjLw+++/o2vXrujevbveNc6dO4eKigrdEKNr167phjaFhYXBxsYGbdu2NWj77NmzAGBwLC0tDdHR0bq9FjIyMhAfH49WrVohLCzsvp4vERERMVkganBxcXFGhxrNmTMHb7zxBkpLS2Fra4uUlBSMHTsWXbp0werVq3X1fH19MWfOHHz99dcGvQsbN25E69atMXTo0EZ5LoMHD4aDgwMSExNRUVEBNzc3jBgxAj4+PiadHxcXp7d529WrV3H16lUAQFBQkMEeDrWxt7eHIAiIi4tDZWUlHB0d0aNHD3Tq1MnovAsiIiKqG0GsbgcmImpQ+fn5CAgIwIcffojHH3+8zueXl5ejbdu2eOWVV/Dcc881QIRERETU3PGjNyKJODs746WXXsLy5cuh0WjqfP53330HS0tL3W7QRERERPWNPQtERERERGQUexaIiIiIiMgoJgtERERERGQUkwUiIiIiIjKKyQIRERERERnFZIGIiIiIiIxiskAkIwUFBRg8eDAKCgqkDoWIiIiIyQKRnBQUFODAgQNMFoiIiEgWmCwQEREREZFRTBaIiIiIiMgoJgtERERERGQUkwUiGXFyckKfPn3g5OQkdShEREREEERRFKUOgohuKyoqgoODg9RhEBEREbFngUhusrKypA6BiIiICACTBSLZycvLkzoEIiIiIgBMFohkx8LCQuoQiIiIiABwzgIREREREVWDPQtEMnPmzBmpQyAiIiICwGSBSHbY2UdERERywWSBSGbc3d2lDoGIiIgIAJMFItnhhmxEREQkF0wWiGTmypUrUodAREREBIDJAhERERERVYNLpxLJTEFBAYciERERkSywZ4FIZriDMxEREckF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\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"X.describe().transpose().round(2).drop(columns=\"count\")" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 300 | |
}, | |
"id": "-s0v-Yx5N_3o", | |
"outputId": "c8a734c0-6b6a-472e-a7d1-c38e84cbe06c" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
" mean std min 25% 50% 75% max\n", | |
"age 53.05 10.12 21.0 46.0 53.0 61.00 80.0\n", | |
"estrec 96.25 153.08 0.0 8.0 36.0 114.00 1144.0\n", | |
"horTh 0.36 0.48 0.0 0.0 0.0 1.00 1.0\n", | |
"menostat 0.58 0.49 0.0 0.0 1.0 1.00 1.0\n", | |
"pnodes 5.01 5.48 1.0 1.0 3.0 7.00 51.0\n", | |
"progrec 110.00 202.33 0.0 7.0 32.5 131.75 2380.0\n", | |
"tgrade 1.12 0.58 0.0 1.0 1.0 1.00 2.0\n", | |
"tsize 29.33 14.30 3.0 20.0 25.0 35.00 120.0" | |
], | |
"text/html": [ | |
"\n", | |
" <div id=\"df-7378cec5-644d-4560-a5ae-03cbfae13f92\" class=\"colab-df-container\">\n", | |
" <div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>mean</th>\n", | |
" <th>std</th>\n", | |
" <th>min</th>\n", | |
" <th>25%</th>\n", | |
" <th>50%</th>\n", | |
" <th>75%</th>\n", | |
" <th>max</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>age</th>\n", | |
" <td>53.05</td>\n", | |
" <td>10.12</td>\n", | |
" <td>21.0</td>\n", | |
" <td>46.0</td>\n", | |
" <td>53.0</td>\n", | |
" <td>61.00</td>\n", | |
" <td>80.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>estrec</th>\n", | |
" <td>96.25</td>\n", | |
" <td>153.08</td>\n", | |
" <td>0.0</td>\n", | |
" <td>8.0</td>\n", | |
" <td>36.0</td>\n", | |
" <td>114.00</td>\n", | |
" <td>1144.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>horTh</th>\n", | |
" <td>0.36</td>\n", | |
" <td>0.48</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.00</td>\n", | |
" <td>1.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>menostat</th>\n", | |
" <td>0.58</td>\n", | |
" <td>0.49</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>1.00</td>\n", | |
" <td>1.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>pnodes</th>\n", | |
" <td>5.01</td>\n", | |
" <td>5.48</td>\n", | |
" <td>1.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>3.0</td>\n", | |
" <td>7.00</td>\n", | |
" <td>51.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>progrec</th>\n", | |
" <td>110.00</td>\n", | |
" <td>202.33</td>\n", | |
" <td>0.0</td>\n", | |
" <td>7.0</td>\n", | |
" <td>32.5</td>\n", | |
" <td>131.75</td>\n", | |
" <td>2380.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tgrade</th>\n", | |
" <td>1.12</td>\n", | |
" <td>0.58</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>1.00</td>\n", | |
" <td>2.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tsize</th>\n", | |
" <td>29.33</td>\n", | |
" <td>14.30</td>\n", | |
" <td>3.0</td>\n", | |
" <td>20.0</td>\n", | |
" <td>25.0</td>\n", | |
" <td>35.00</td>\n", | |
" <td>120.0</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <div class=\"colab-df-buttons\">\n", | |
"\n", | |
" <div class=\"colab-df-container\">\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-7378cec5-644d-4560-a5ae-03cbfae13f92')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n", | |
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
"\n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" .colab-df-buttons div {\n", | |
" margin-bottom: 4px;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-7378cec5-644d-4560-a5ae-03cbfae13f92 button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-7378cec5-644d-4560-a5ae-03cbfae13f92');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
"\n", | |
"\n", | |
"<div id=\"df-9bc6fdae-b63e-4b3e-8a71-b5762d0a65e4\">\n", | |
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-9bc6fdae-b63e-4b3e-8a71-b5762d0a65e4')\"\n", | |
" title=\"Suggest charts.\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <g>\n", | |
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n", | |
" </g>\n", | |
"</svg>\n", | |
" </button>\n", | |
"\n", | |
"<style>\n", | |
" .colab-df-quickchart {\n", | |
" --bg-color: #E8F0FE;\n", | |
" --fill-color: #1967D2;\n", | |
" --hover-bg-color: #E2EBFA;\n", | |
" --hover-fill-color: #174EA6;\n", | |
" --disabled-fill-color: #AAA;\n", | |
" --disabled-bg-color: #DDD;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-quickchart {\n", | |
" --bg-color: #3B4455;\n", | |
" --fill-color: #D2E3FC;\n", | |
" --hover-bg-color: #434B5C;\n", | |
" --hover-fill-color: #FFFFFF;\n", | |
" --disabled-bg-color: #3B4455;\n", | |
" --disabled-fill-color: #666;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart {\n", | |
" background-color: var(--bg-color);\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: var(--fill-color);\n", | |
" height: 32px;\n", | |
" padding: 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart:hover {\n", | |
" background-color: var(--hover-bg-color);\n", | |
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: var(--button-hover-fill-color);\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart-complete:disabled,\n", | |
" .colab-df-quickchart-complete:disabled:hover {\n", | |
" background-color: var(--disabled-bg-color);\n", | |
" fill: var(--disabled-fill-color);\n", | |
" box-shadow: none;\n", | |
" }\n", | |
"\n", | |
" .colab-df-spinner {\n", | |
" border: 2px solid var(--fill-color);\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" animation:\n", | |
" spin 1s steps(1) infinite;\n", | |
" }\n", | |
"\n", | |
" @keyframes spin {\n", | |
" 0% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" border-left-color: var(--fill-color);\n", | |
" }\n", | |
" 20% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 30% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 40% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 60% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 80% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" 90% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" }\n", | |
"</style>\n", | |
"\n", | |
" <script>\n", | |
" async function quickchart(key) {\n", | |
" const quickchartButtonEl =\n", | |
" document.querySelector('#' + key + ' button');\n", | |
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n", | |
" quickchartButtonEl.classList.add('colab-df-spinner');\n", | |
" try {\n", | |
" const charts = await google.colab.kernel.invokeFunction(\n", | |
" 'suggestCharts', [key], {});\n", | |
" } catch (error) {\n", | |
" console.error('Error during call to suggestCharts:', error);\n", | |
" }\n", | |
" quickchartButtonEl.classList.remove('colab-df-spinner');\n", | |
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n", | |
" }\n", | |
" (() => {\n", | |
" let quickchartButtonEl =\n", | |
" document.querySelector('#df-9bc6fdae-b63e-4b3e-8a71-b5762d0a65e4 button');\n", | |
" quickchartButtonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
" })();\n", | |
" </script>\n", | |
"</div>\n", | |
" </div>\n", | |
" </div>\n" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 26 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"shap.plots.beeswarm(shap_values)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 453 | |
}, | |
"id": "0kbYd1wAODT9", | |
"outputId": "212ab8e2-adc6-45bf-e75e-c78d3c2eec7a" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 800x470 with 2 Axes>" | |
], | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtcAAAG0CAYAAAD5Bgs0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACIV0lEQVR4nOzdd3gU1dvG8e/spvfQQ+8dpAlYiA0QaVLtgOhLE8Xe/SnYsYGiFAvVDoIUQUFFioAoRVEUEKSFmoSQXnZ33j9CNmx2E0JI5/5c11wwZ2bOObObZJ8988wZwzRNExERERERuWCWku6AiIiIiEh5oeBaRERERKSQKLgWERERESkkCq5FRERERAqJgmsRERERkUKi4FpEREREpJAouBYRERERKSQKrkVEREREComCaxERERGRQqLgWkRERESKxPjx4wkKCjrntv3792MYBgsWLDiv+gt6XFHyKukOiIiIiMjFLSIigo0bN9K4ceOS7soFU3AtIiIiIiXK19eXzp07l3Q3CoXSQkRERESkRHlK70hPT2fcuHFUqFCBsLAwRo0axaeffophGOzfv9/l+NTUVO69917Cw8OJiIjgkUcewWazFfNZZFJwLSIiIiJFymazuS0OhyPPY5544glmzJjB448/zhdffIHD4eCJJ57wuO/TTz+NxWLhyy+/ZPTo0bz55pt8+OGHRXEq56S0EBEREREpMklJSXh7e3vcFhgY6LE8NjaWadOm8cwzz/D4448DcP3119O1a1cOHTrktn+nTp145513AOjWrRurV69mwYIFjB49upDOIv8UXIuIiBSyjIwMZs2aBcDw4cNzDSxEyiRjgHuZuTDX3f39/Vm7dq1b+fvvv8+nn37q8ZgdO3aQmppK3759XcpvvPFGfvjhB7f9u3fv7rLevHlzfvzxx1z7VJQUXIuIiIjIeTDOa2+LxUKHDh3cypctW5brMUePHgWgcuXKLuVVqlTxuH9YWJjLuo+PD6mpqefVz8KinGsRERERKVUiIiIAOHnypEv5iRMnSqI750XBtYiIiIicB8PDUrhatmyJn58fixcvdin/+uuvC72twqa0EBERERE5D4UfTOdUsWJFxowZw0svvYSfnx9t2rRh/vz57N69G8hMNSmtSm/PRERERKQUKvqRa4BXX32VkSNH8sorrzB48GAyMjKcU/GFhoYWSZuFwTBN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X375hVdffZWoqCjuv//+Qn7VREQkv8r8BWyjzJ+BlHFKA8lbqUsLadSoEa1btwagU6dO9OzZk549e9K6dWvmzJnD8ePHee6553j00UcZNGgQL730El27diUuLs5jffv27eP111/noYceon///vTv3x/IHHlevHgxDz30EDfddBO33XYbU6ZM4YYbbmDx4sVER0c765g7dy5Hjhzh6aef5vHHH2fw4MG88sorXHvttW7tRkdH88Ybb9C9e3dmzpzJ0KFDGTx4MG+88Qa33HILn3zyCYcPHy6S164gYmNjXb4gJCYmkpCQ4FxPT08nJsb1GurRo0fzXD927BimmT20ojbUhtpQGyXVhsdh3rPigsJpI+8mT5w4UchtmGX2/VAbhddGyTI8LJLFMM9+90uJpUuXMmHCBKZPn06HDh2c5YMGDSIxMZHly5djsWR/L4iNjaV79+60a9fOLS2kcePGfPrpp3m2l5GRQXJyMqZpsmHDBp599lneeustIiMjARg8eDDx8fEsX77cJV0kOjqaHj16uLT7+eef88YbbzB16lQaN27s0s6uXbsYO3YsTz31FAMGDCj4CyQiIvlivGFzK/O2QPpDhXPh9qOGCz00CkN39mHWrFkADB8+HG9v74I1YHj4rDAAh4d2RYrJFmOaW1l7c0wJ9KR0KnVpIXk5cuQILVq0cAmsASpUqEBwcLDHY2rXru2x3GazMXv2bJYvX86hQ4fI+R0jPj7e+f+oqCiaN2/uloddqVIlt3b3798PwD333JPrecTGxua6TUREilhRTxainGuRi1qZCq4Lws/Pz2P5pEmT+OKLL+jWrRt33XUX4eHheHl58c8//zBlyhS3YDu/so6bMGEClSpV8rhPjRo1ClS3iIhcuDD/oq2/yFOiLboELyVL3+/yViqDayOXv0wREREcOnQIh8PhlhZydu5Sfixfvpx27drxyiuvuJQfOnTIbd8aNWpw6NAh7Ha7W1pIznZr1aoFQFhYGJ06dTqvPomISOEK8obEDNey4S2LNjgt8mRLa6m7XUouMrqhMW+l8jfU3z9zWOHs1AyAyMhIoqOj+e6771zK582bd95tWCwWt9HplJQUj/nZV111FTExMXzzzTcu5XPmzHHbt1u3bvj4+DBjxgxSU1PdticmJpKenn7e/RURkfP3RW8L1rPigMbhMOGKUvnR55mnQLqZ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DG1K5QcuKaZei1yYsviExssuu4zLLrsMgKSkJAYOHFhkWQQKrkVERArI28vAaoWc9yxara7Bh0+oD+1eau+6U7Mwwvorp1rKnrKYc3225557rkjrV3AtIiJSQBkZpltgDZBhU8alSGmX9byT06dP43C4XoIyDMPlIYHnQ8G1iIhIAfn4eB659vEu2yN7Inkp6yPXsbGx9OrVi82bN2OaJoZhOKfny/r/hQTX5XqeaxERkaKUluZ55Nrm/jwYkXKjrM9z/eijj/LHH3/w6aefsm/fPkzT5LvvvmP37t2MHj2aNm3acOTIkQLXr+BaRESkgPz9LTRr4utSZhhwSUvfXI4QkZK2fPlyRo0axc0330xwcDCQ+RDAhg0b8t5771G3bl0eeOCBAtev4FpEROQCjB1RieZnAuywUCtj7q5IzRre5zhKpOwq6yPXcXFxtGjRAoCgoCAAEhMTndu7d+/Od999V+D6lXMtIiJyASpX8uK5J6uRlubA29vAYjHIOOvpiyLlTVkLpnOqXr06x44dA8DX15cqVarw+++/c+ONNwIQFRWFcQHnqOBaRESkEPj66mKwSFkQGRnJqlWrePrppwG4+eabee2117BarTgcDiZPnsz1119f4PoVXIuIiIhIvpX1keuHHnqIVatWkZaWhq+vL+PHj+evv/5yzg4SGRnJlClTCly/gmsRERERyTezbMfWtGrVilatWjnXw8PD+f7774mLi8NqtTpvciwoBdciIiIikm9lfeQ6N2FhYYVSjxLEREREROSicvDgQUaPHk2TJk2oUKECa9euBSA6Oppx48axbdu2AtetkWsRERERybeyPnK9c+dOunTpgsPhoFOnTvz777/Yzjz5qVKlSqxfv56kpCQ++uijAtWv4FpERERE8s1RxoPrxx57jLCwMDZt2oRhGFSpUsVle69evfjiiy8KXL/SQkRERIqA4TBpvOEw1junwOSlkJxW0l0SEWDt2rWMGTOGypUre5zPunbt2kRFRRW4fo1ci4iIFCLTNAHo/t4W6vwZnVn46Xp4fyX89U7m89FFyjCTsv0z7HA4CAgIyHX7yZMn8fX1LXD9GrkWEREpBNO326kwxYbXW3Z6fpZB0N4U1x3+joKlv5VM50QKUVl//Hm7du345ptvPG6z2Wx8/vnndO7cucD1K7gWERG5QD8ecDDme5NTaeAw4fsTPvS+6wn3HT9ZU/ydEylkZT24fvLJJ/n2228ZM2YMf/75JwDHjx/n+++/p3v37vz999888YSH3998UlqIiIjIBXpqncOtbFOdxu47xiYVQ29EJC833HADs2fP5v777+f9998H4I477sA0TUJCQpg7dy6RkZEFrl/BtYiIyAX6Jza/e7oH4SJlTVkbqfZkyJAhDBgwgJUrV/Lvv//icDho0KAB119/vZ7QKCIiUtLs+Y2ZLcrGlLKvLD7+/KmnnuKWW26hdevWzrLAwED69+9f6G3pt1xERORCeQg2uu/a7l5oFnlPRMSDV1991ZlfDRATE4PVauXHH38s9LY0ci0iInKBzBxBs48tg48/f7dkOiNSxMr6Q2SymDl/cQuJgmsREZFC1vREFJWTEkq6GyJFojzkXBclpYWIiIgUsv8qVCHRp+APoRApzcr6VHxFTSPX5zBjxgyaNGnC1VdffUH1fPrppwQHB9OnT5/C6ZiIiJRaCX4BvHZVX55fNd91g6Gka5GSsn//frZu3QrA6dOnAdizZw9hYWEe92/Xrl2B2jHMoko4KSc6dOhA7969GT9+/AXV06dPHyIiIpzzKYqISPkRNNlGks21zNtmI/3J21wLu10CK58rvo6JFIFH+u9wK3tjUasS6En+WSwWjBwj7KZpupWdXW632wvUlkauRURELpCnq+IZVquHPTXPtZR9ZXEqvlmzZhVbW+cdXC9dupQJEyYwdepUfv/9dxYvXsypU6do2LAhjzzyCK1atWLLli1MnTqVXbt2ERgYyODBg/m///s/l3p27tzJzJkz2bZtG8nJyURERNCrVy+GDRuGl1d2t0aOHMnRo0eZOXMmkyZNYuPGjaSnp9O2bVseffRR6tSp41JvXFwcM2bMYO3atcTExFCxYkUiIyMZNWqUy7B/Wloas2fP5rvvvuP48eN4e3tTtWpVLr/8cu6//36OHDlC3759AVi2bBnLli1zHvvbb78BsHLlSlasWMHu3buJjY0lICCANm3aMHr0aBo1auTcv0OHDgAcPXrU+X+AJUuWUL169fN9C0REpLTxcA24SmKce6GhW51ESsKwYcOKra0Cj1y/++672O12brnlFmw2Gx9//DH33nsvEyZM4IUXXqB///7ccMMNrFq1iunTp1O9enV69uwJwPr163n00UepVasWd9xxByEhIezYsYMZM2awe/duJk6c6NJWSkoKI0aMoFWrVowdO5aoqCg+//xzHn74Yb744gusZ0YHEhMTueuuuzh06BB9+/aladOm7Nq1iwULFvDrr78yZ84cAgMDAZg4cSJLliyhV69e3H777djtdg4dOsSvv/4KQHh4OM8//zzPPvssbdu29TjJ+JdffkloaCj9+/enUqVKHD58mEWLFnH33Xfz8ccfU7t2bQCef/553nrrLcLCwrjrrrucx4eHhxf05RcRkVLE00hehtXb055F3heRomZ6mthdnAocXNvtdmbPno23d+Yfj3r16vHwww/z+OOPM2vWLJo3bw7AjTfeSO/evZk/fz49e/YkLS2NF154gZYtWzJt2jTnKPXAgQNp1KgRkyZN4rfffnMZ4Y2Li2PIkCEu3zrCw8N555132Lx5M5dddhkAc+bM4eDBgzz++OMMHjzYuW/jxo157bXXmDt3LmPGjAHgp59+4vLLL2fChAkez8/f35+ePXvy7LPPUqNGDecXg7NNmTIFf39/l7JevXpx22238emnn/LEE08A0LNnT6ZNm0aFChU81iMiImWbp1DDYxit2FrKgfIyz3VRKfD1qUGDBjkDa4C2bdsC0LJlS2dgDeDt7U2LFi04ePAgAL/88gsxMTH06dOHxMRE4uLinMsVV1zh3MelkxYLt9xyi0vZpZdeCuCsFzID5vDwcLdR5gEDBhAeHs7q1audZUFBQezbt49///23oC+BM7A2TdN5LuHh4dSpU8flKUClWWxsLGlpac71xMREEhKy52ZNT08nJibG5ZijR4/muX7s2DGXidnVhtpQG2qj3LfhIWgeuel798LSfh5qo8y0IaXXec8WcnbOdceOHV22dejQgRtuuIEXXnjBpXz8+PEsW7aM3377jTlz5jBlypQ82+jbty/PPvsskJlzHRUVxTfffOOyT1ZO9MiRIxk5ciQAV1xxBc2aNePDDz90q/Puu+/mn3/+4eeffwYyA/HnnnuOpKQkatSoQYcOHejSpQuRkZFYLNnfOfKaLeSff/5h+vTpbNmyhZSUFJdtNWrUYPHixc51zRYiIlJ+BU+2kXjWbCFVEuI4+sIoLDk/Yru1hpXji7VvIoXt/kE73creXtDcw54XpwKnhZwdgJ7N6vHu6GxZsfz9999P48aNPe5TuXLlfLV1dn3n6+qrr2bJkiX8/PPPbN26lc2bN7N4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adOmOeseOHAgjRo1YtKkSfz222906NCh+E5URESKTFK6yckzs+zVPJ1Exbh4l8A6iwOfzP9s3qPgWso2ZYXk6aK+odHb29sZ/NpsNuLj44mLi6Njx44A/PnnnwCsW7cOq9XKrbfe6nJ8v379CApyzZ/75ZdfiImJoU+fPiQmJhIXF+dcrrjiCuc+pUVsbCxpaWnO9cTERBISEpzr6enpxMS43pxz9OjRPNePHTuGaWbP96o21IbaUBvluY34mGNU8s/8f1RoALGhwSThxyGq8R81iCcQAAvpmfs3rloqz0NtlK02SpYmus6LYZ797l+E5s+fz1dffcW+fftwOBwu20aNGsWIESMYOHAgqampfPON+9O1brvtNhISEpw513PmzGHKlCl5ttm3b1+effbZwjsJEREpUT8ecHDdfDsWB/xvxa90WbML46xP1zocpg5/4DWsC8weV3IdFSkExjPJbmXmi5piMstFnRby8ccfM3nyZDp37swtt9xCpUqV8Pb25uTJk4wfP94t2M6PrO8q999/P40bN/a4T+XKlS+o3yIiUrpcW8fCxpscPDvhMPX3R7sE1gBHqYS/TyuqK7CW8kAD1Xm6qIPr5cuXU716dd555x0sluwMmQ0bNrjsV716dTZv3kxycjIBAdnfzGw2G0eOHCE4ONhZVrt2bQD8/f3p1KlTEZ+BiIiUFuk2qHU6GavNfWDGjjem/aK+UCzliYLrPF3UOddWqxXDMFzyomw2G7Nnz3bZr0uXLtjtdj777DOX8kWLFpGYmOhSdtlll1GhQgVmz57N6dOn3dpMTU0lKSmp8E5CRERKhcvrWPm3QjAnqoWQM4wOI4HgnrVLpF8ihU8513m5qEeur7vuOt59913GjRvHNddcQ1JSEt99953bPNT9+vVj4cKFTJs2jcOHDzun4vv++++pVasWdrvdua+/vz8TJkzgkUceYeDAgfTt25datWqRkJDA/v37Wb16Na+//rpmCxERKWe8rAZdWvuzPrUedodB4z1H8U3LIMRMwt/LJPiroSXdRREpBhd1cD1kyBBM02Tx4sW8+eabVKxYkW7dutG3b18GDx7s3M/Hx4dp06bx9ttvs2bNGlatWkXLli2ZOnUqL774IqmpqS71XnbZZcyZM4c5c+awYsUKTp06RUhICDVr1uT222+nUaNGxX2qIiJSDHbuTCPZ14fv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5ZVXEhgYSEREBC+88ILHur7++muuuOIKAgMDCQoK4oorrmDx4sUe9/3ggw9o2rQpvr6+NGzYkMmTJ+easnD69Gkef/xxGjZsiK+vL5UrV+bWW291ew/PV35f57zuWzAMgzvvvBPI/LmtV68ekDkIkPWeZ/2unf379dlnn9G6dWv8/PyoXbs248ePx2azudSd39/T/PysGYbB9ddfz7fffktiYuJ5vlIiZYNGrkUKqEGDBuzatYuFCxcyYMCAfB1jt9tzzalOS0vL9biPPvqIevXq0aVLFwzDoG3btsycOZP/+7//y3d/9+zZA0ClSpVy3eeWW27hwQcfZO7cufTt29dl2w8//EBUVJQz3QQyP0xjY2MZOnQoNWvWJCoqig8//JDrrruO1atX55m6UhBDhgzhs88+Y9CgQQwfPpy0tDQ++eQTunXrxsKFC936nNOWLVtITEykY8eO59Xue++9x6lTp/i///s//Pz8eOedd+jfvz/z589nxIgR3HrrrfTr14+VK1cyZcoUqlSpwjPPPONSR1JSEldffTWdOnXilVdeYc+ePUydOpVNmzaxbds255ex9PR0Xn/9dQYOHMiNN95IYGAgv/76Kx999BHr1693S+t5+umnefnll2nevDkPPvggERER7N27l6+++ornn3+eyMhInnrqKV5++WVGjhzpfE+qVq2a5zkfOHCAjh07cvr0ae655x4aNWrETz/9xCuvvMLPP//MDz/8gJeX60fIsGHD8Pb25pFHHiE9PZ3JkyfTr18/du/e7TE48+SJJ57Abrdz//33k56ezptvvkn37t2ZO3cud999NyNHjuT222/nyy+/5Nlnn6VevXouV2mmTp3K2LFjadq0Kc8++yyQ+XPar18/ZsyYwciRI537Tp48mQcffJBLLrmEl19+meTkZN544w2qVKni1q/Tp09z+eWXc/DgQe666y5atGjB0aNHmTp1Kp06deK3336jTp06+TrHC32dz6VZs2ZMmjSJBx98kP79+zv/PgUFBbnst2TJEvbt28fYsWOpVq0aS5YsYcKECRw4cIBZs2ad97nk92ftsssuY8aMGaxfv54ePXqcdzsipZ4pIgWyYcMG09vb2wTMRo0amcOHDzenTp1q7ty50+P+derUMYFzLidPnnQ5LioqyrRareZzzz3nLJs8ebIJeGwLMLt3726ePHnSPHny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\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "ZNHQ-bkWALNy", | |
"outputId": "16d9b6fb-f5dd-4c20-8896-6171641412b0", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
} | |
}, | |
"source": [ | |
"from scipy.stats import reciprocal\n", | |
"from sklearn.model_selection import RandomizedSearchCV\n", | |
"\n", | |
"param_distributions = {\n", | |
" 'alpha': reciprocal(0.1, 100),\n", | |
"}\n", | |
"\n", | |
"model_random_search = RandomizedSearchCV(\n", | |
" cox, param_distributions=param_distributions, n_iter=50, n_jobs=-1, cv=3, random_state=42)\n", | |
"model_random_search.fit(X_trn, y_trn)\n", | |
"\n", | |
"print(\n", | |
" f\"The c-index of Cox using a {model_random_search.__class__.__name__} is \"\n", | |
" f\"{model_random_search.score(X_test, y_test):.3f}\")\n", | |
"print(\n", | |
" f\"The best set of parameters is: {model_random_search.best_params_}\"\n", | |
")" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"The c-index of Cox using a RandomizedSearchCV is 0.660\n", | |
"The best set of parameters is: {'alpha': 39.67605077052987}\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "MrhAveCQAdxF", | |
"outputId": "7d7474e5-2f54-425a-84ec-5b7f2b701f0e", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
} | |
}, | |
"source": [ | |
"alpha = model_random_search.best_params_['alpha']\n", | |
"cox_best = make_pipeline(CoxPHSurvivalAnalysis(alpha=alpha))\n", | |
"cox_best.fit(X_trn, y_trn)\n", | |
"\n", | |
"ci_cox = concordance_index_censored(y_test[\"cens\"], y_test[\"time\"], cox_best.predict(X_test))\n", | |
"print(f'The c-index of Cox is given by {ci_cox[0]:.3f}')" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"The c-index of Cox is given by 0.660\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from sksurv.ensemble import RandomSurvivalForest" | |
], | |
"metadata": { | |
"id": "s34_kkDKKzw5" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"rsf = RandomSurvivalForest(\n", | |
" n_estimators=100, min_samples_leaf=15, n_jobs=-1, random_state=20\n", | |
")\n", | |
"rsf.fit(X_trn, y_trn)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 74 | |
}, | |
"id": "vU06jwE7Kuec", | |
"outputId": "80ec8c68-9337-4802-b4d7-5fb5035f63e2" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"RandomSurvivalForest(min_samples_leaf=15, n_jobs=-1, random_state=20)" | |
], | |
"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>RandomSurvivalForest(min_samples_leaf=15, n_jobs=-1, random_state=20)</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-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomSurvivalForest</label><div class=\"sk-toggleable__content\"><pre>RandomSurvivalForest(min_samples_leaf=15, n_jobs=-1, random_state=20)</pre></div></div></div></div></div>" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 31 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"rsf.score(X_test, y_test)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "LJ0Tp63pKvMJ", | |
"outputId": "3d12d82f-e9ef-4984-c081-01283b506f8c" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"0.6716457023060797" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 32 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"ci_cox = concordance_index_censored(y_test[\"cens\"], y_test[\"time\"], rsf.predict(X_test))\n", | |
"print(f'The c-index of Cox is given by {ci_cox[0]:.3f}')" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "Y1hNGO_QO2pW", | |
"outputId": "66676ff4-1c00-4c83-8f01-31643d15b089" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"The c-index of Cox is given by 0.672\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"times = np.arange(365, 1826)" | |
], | |
"metadata": { | |
"id": "XHsIhuW7PHik" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"survs = rsf.predict_survival_function(X_test)" | |
], | |
"metadata": { | |
"id": "iSZ0pa17PSJS" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"preds = np.asarray([[fn(t) for t in times] for fn in survs])" | |
], | |
"metadata": { | |
"id": "np-god8mPW5W" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"integrated_brier_score(y_trn, y_test, preds, times)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "U1avp5nfPaOS", | |
"outputId": "8d09cbda-ee61-4aa1-b0c1-64a1a9603143" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"0.17751179194838104" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 37 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"param_distributions = {\n", | |
" 'min_samples_leaf': [3, 7, 15],\n", | |
" 'max_depth': [3, 7, None]\n", | |
"}\n", | |
"\n", | |
"model_random_search = RandomizedSearchCV(\n", | |
" rsf, param_distributions=param_distributions, n_iter=50, n_jobs=-1, cv=3, random_state=42)\n", | |
"model_random_search.fit(X_trn, y_trn)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 134 | |
}, | |
"id": "QjiQ8TfBPfZg", | |
"outputId": "b9697241-63cd-448a-f779-024bea222c72" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stderr", | |
"text": [ | |
"The total space of parameters 9 is smaller than n_iter=50. Running 9 iterations. For exhaustive searches, use GridSearchCV.\n" | |
] | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"RandomizedSearchCV(cv=3,\n", | |
" estimator=RandomSurvivalForest(min_samples_leaf=15,\n", | |
" n_jobs=-1, random_state=20),\n", | |
" n_iter=50, n_jobs=-1,\n", | |
" param_distributions={'max_depth': [3, 7, None],\n", | |
" 'min_samples_leaf': [3, 7, 15]},\n", | |
" random_state=42)" | |
], | |
"text/html": [ | |
"<style>#sk-container-id-3 {color: black;background-color: white;}#sk-container-id-3 pre{padding: 0;}#sk-container-id-3 div.sk-toggleable {background-color: white;}#sk-container-id-3 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-3 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-3 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-3 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-3 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-3 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-3 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-3 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-3 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-3 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-3 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-3 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-3 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-3 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-3 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-3 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-3 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-3 div.sk-item {position: relative;z-index: 1;}#sk-container-id-3 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-3 div.sk-item::before, #sk-container-id-3 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-3 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-3 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-3 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-3 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-3 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-3 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-3 div.sk-label-container {text-align: center;}#sk-container-id-3 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-3 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-3\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomizedSearchCV(cv=3,\n", | |
" estimator=RandomSurvivalForest(min_samples_leaf=15,\n", | |
" n_jobs=-1, random_state=20),\n", | |
" n_iter=50, n_jobs=-1,\n", | |
" param_distributions={'max_depth': [3, 7, None],\n", | |
" 'min_samples_leaf': [3, 7, 15]},\n", | |
" 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 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-3\" type=\"checkbox\" ><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomizedSearchCV</label><div class=\"sk-toggleable__content\"><pre>RandomizedSearchCV(cv=3,\n", | |
" estimator=RandomSurvivalForest(min_samples_leaf=15,\n", | |
" n_jobs=-1, random_state=20),\n", | |
" n_iter=50, n_jobs=-1,\n", | |
" param_distributions={'max_depth': [3, 7, None],\n", | |
" 'min_samples_leaf': [3, 7, 15]},\n", | |
" random_state=42)</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-4\" type=\"checkbox\" ><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">estimator: RandomSurvivalForest</label><div class=\"sk-toggleable__content\"><pre>RandomSurvivalForest(min_samples_leaf=15, n_jobs=-1, random_state=20)</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-5\" type=\"checkbox\" ><label for=\"sk-estimator-id-5\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomSurvivalForest</label><div class=\"sk-toggleable__content\"><pre>RandomSurvivalForest(min_samples_leaf=15, n_jobs=-1, random_state=20)</pre></div></div></div></div></div></div></div></div></div></div>" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 38 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"model_random_search.score(X_test, y_test)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "_X2klnTmQVXX", | |
"outputId": "48b05237-4a2f-4757-bdc2-b0c975417845" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"0.6805555555555556" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 39 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"print(\n", | |
" f\"The best set of parameters is: {model_random_search.best_params_}\"\n", | |
")" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "6Mam6JN2Qqh3", | |
"outputId": "30e8221a-6cef-46cd-8b0e-ef3faf08e9c1" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"The best set of parameters is: {'min_samples_leaf': 15, 'max_depth': 3}\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"rsf_best = RandomSurvivalForest(\n", | |
" n_estimators=100, min_samples_leaf=15, max_depth=3, n_jobs=-1, random_state=20\n", | |
")\n", | |
"rsf_best.fit(X_trn, y_trn)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 91 | |
}, | |
"id": "PbSNPjgQQruO", | |
"outputId": "41a76e72-7928-4a0a-8186-3966912f9582" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"RandomSurvivalForest(max_depth=3, min_samples_leaf=15, n_jobs=-1,\n", | |
" random_state=20)" | |
], | |
"text/html": [ | |
"<style>#sk-container-id-4 {color: black;background-color: white;}#sk-container-id-4 pre{padding: 0;}#sk-container-id-4 div.sk-toggleable {background-color: white;}#sk-container-id-4 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-4 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-4 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-4 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-4 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-4 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-4 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-4 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-4 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-4 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-4 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-4 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-4 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-4 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-4 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-4 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-4 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-4 div.sk-item {position: relative;z-index: 1;}#sk-container-id-4 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-4 div.sk-item::before, #sk-container-id-4 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-4 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-4 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-4 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-4 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-4 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-4 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-4 div.sk-label-container {text-align: center;}#sk-container-id-4 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-4 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-4\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomSurvivalForest(max_depth=3, min_samples_leaf=15, n_jobs=-1,\n", | |
" random_state=20)</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-6\" type=\"checkbox\" checked><label for=\"sk-estimator-id-6\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomSurvivalForest</label><div class=\"sk-toggleable__content\"><pre>RandomSurvivalForest(max_depth=3, min_samples_leaf=15, n_jobs=-1,\n", | |
" random_state=20)</pre></div></div></div></div></div>" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 41 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"times = np.arange(365, 1826)\n", | |
"survs = rsf_best.predict_survival_function(X_test)" | |
], | |
"metadata": { | |
"id": "iO5hU-exQZup" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"preds = np.asarray([[fn(t) for t in times] for fn in survs])" | |
], | |
"metadata": { | |
"id": "nVQsQOocQhOI" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"integrated_brier_score(y_trn, y_test, preds, times)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "rYRRmruYRCgq", | |
"outputId": "789050d7-318f-4157-ba2c-6e911751659d" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"0.17850725604478493" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 44 | |
} | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment