{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "353eba22",
   "metadata": {},
   "source": [
    "# 08 · Life Sciences: Biology and Medicine\n",
    "\n",
    "Python is the main language of computational biology and medical data science. This module uses three\n",
    "mature libraries on realistic problems: **Biopython** for sequences and evolution, **lifelines** for\n",
    "survival analysis of a real clinical trial, and **scikit-learn** for a diagnostic model.\n",
    "\n",
    "> These are teaching examples, not medical advice or validated clinical tools.\n",
    "\n",
    "**You will learn**\n",
    "1. DNA and protein sequences: transcription, translation, GC content, reading frames\n",
    "2. Simulating evolution and recovering it with sequence alignment\n",
    "3. Building a family tree (phylogeny) from sequence distances\n",
    "4. Survival analysis: Kaplan-Meier curves, the log-rank test and Cox regression on a breast-cancer trial\n",
    "5. A diagnostic classifier: cross-validation, ROC curves, and choosing a threshold for sensitivity"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8533e6d6",
   "metadata": {},
   "source": [
    "## 1. Sequences with Biopython\n",
    "A gene is a DNA sequence; the cell copies it to RNA (*transcription*) and reads RNA three letters at a time\n",
    "(*codons*) to build a protein (*translation*). We design a gene for a short protein and run it through."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "5e621bd3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-17T23:25:20.579053Z",
     "iopub.status.busy": "2026-10-17T23:25:20.578592Z",
     "iopub.status.idle": "2026-10-17T23:25:20.653108Z",
     "shell.execute_reply": "2026-10-17T23:25:20.651213Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DNA      : ATGGCCCTCTGGATGAGATTACTTCCTCTATTGGCTTTACTCGCGTTATGGGGTCCGGATCCTGCCGCTGCGTAA\n",
      "RNA      : AUGGCCCUCUGGAUGAGAUUACUUCCUCUAUUGGCUUUACUCGCGUUAUGGGGUCCGGAUCCUGCCGCUGCGUAA\n",
      "protein  : MALWMRLLPLLALLALWGPDPAAA | matches design: True\n",
      "GC content: 0.533 | reverse complement: TTACGCAGCGGCAGGATCCGGACC ...\n"
     ]
    }
   ],
   "source": [
    "from Bio.Seq import Seq\n",
    "from Bio.SeqUtils import gc_fraction\n",
    "from Bio.Data import CodonTable\n",
    "import random\n",
    "\n",
    "random.seed(7)\n",
    "protein = \"MALWMRLLPLLALLALWGPDPAAA\"      # a signal-peptide-like stretch, 24 amino acids\n",
    "table = CodonTable.unambiguous_dna_by_id[1]   # the standard genetic code\n",
    "codons_for = {}\n",
    "for codon, aa in table.forward_table.items():\n",
    "    codons_for.setdefault(aa, []).append(codon)\n",
    "\n",
    "gene = Seq(\"\".join(random.choice(codons_for[aa]) for aa in protein) + \"TAA\")   # back-translate + stop codon\n",
    "print(\"DNA      :\", gene)\n",
    "print(\"RNA      :\", gene.transcribe())\n",
    "print(\"protein  :\", gene.translate(to_stop=True), \"| matches design:\", str(gene.translate(to_stop=True)) == protein)\n",
    "print(\"GC content:\", round(gc_fraction(gene), 3), \"| reverse complement:\", gene.reverse_complement()[:24], \"...\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "784b9acb",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-17T23:25:20.658409Z",
     "iopub.status.busy": "2026-10-17T23:25:20.658065Z",
     "iopub.status.idle": "2026-10-17T23:25:20.673823Z",
     "shell.execute_reply": "2026-10-17T23:25:20.671902Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'A': 4, 'C': 2, 'D': 2, 'E': 2, 'F': 2, 'G': 4, 'H': 2, 'I': 3, 'K': 2, 'L': 6, 'M': 1, 'N': 2, 'P': 4, 'Q': 2, 'R': 6, 'S': 6, 'T': 4, 'V': 4, 'W': 1, 'Y': 2}\n",
      "ORFs of at least 20 aa: [(0, 120, 'MALWMRLLPLLALLALWGPDPAAA'), (2, 59, 'MHTPLLAVSTPSDWHFYYTQNGPLDEITSSIGFTRVMGSGSCRCVKQNSGNFDRSRRGAPS')]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/patito/Developments/academy/python/.venv/lib/python3.12/site-packages/Bio/Seq.py:2874: BiopythonWarning: Partial codon, len(sequence) not a multiple of three. Explicitly trim the sequence or add trailing N before translation. This may become an error in future.\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "# the same protein can be written by many DNA sequences: the genetic code is redundant\n",
    "print({aa: len(c) for aa, c in sorted(codons_for.items())})\n",
    "\n",
    "# finding open reading frames (ATG ... stop) in a stretch of DNA that hides our gene\n",
    "noise = lambda n: \"\".join(random.choice(\"ACGT\") for _ in range(n))\n",
    "genome = Seq(noise(120) + str(gene) + noise(150))\n",
    "orfs = []\n",
    "for frame in range(3):\n",
    "    prot = str(genome[frame:].translate())\n",
    "    pos = 0\n",
    "    for chunk in prot.split(\"*\"):\n",
    "        start = chunk.find(\"M\")\n",
    "        if start != -1 and len(chunk) - start >= 20:\n",
    "            orfs.append((frame, frame + 3 * (pos + start), chunk[start:]))\n",
    "        pos += len(chunk) + 1\n",
    "print(\"ORFs of at least 20 aa:\", [(f, s, p) for f, s, p in orfs])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7f282754",
   "metadata": {},
   "source": [
    "## 2. Simulating evolution, then recovering it by alignment\n",
    "Starting from an ancestral gene, we let five species diverge: each lineage accumulates point mutations\n",
    "and a few insertions or deletions. Then we ask Biopython's `PairwiseAligner` to line the sequences back up."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "0514c26a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-17T23:25:20.678799Z",
     "iopub.status.busy": "2026-10-17T23:25:20.678461Z",
     "iopub.status.idle": "2026-10-17T23:25:20.836056Z",
     "shell.execute_reply": "2026-10-17T23:25:20.835043Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "score 554\n",
      "target            0 TTTTGACTACGACTTACTCATTCCCTTGTCGGGGAGTTATGGAACAAGCACGGTGTCTGA\n",
      "                  0 ||||||||||||||.|||||||||||||||||||||-|||||||||.|||||||||||||\n",
      "query             0 TTTTGACTACGACTAACTCATTCCCTTGTCGGGGAG-TATGGAACATGCACGGTGTCTGA\n",
      "\n",
      "target           60 CACTAGAATACAGATAGTGCACACGACCGGCGTCGG\n"
     ]
    }
   ],
   "source": [
    "from Bio import Align\n",
    "\n",
    "def mutate(seq: str, n_subs: int, n_indels: int, rng: random.Random) -> str:\n",
    "    s = list(seq)\n",
    "    for _ in range(n_subs):\n",
    "        i = rng.randrange(len(s)); s[i] = rng.choice([b for b in \"ACGT\" if b != s[i]])\n",
    "    for _ in range(n_indels):\n",
    "        i = rng.randrange(len(s))\n",
    "        if rng.random() < 0.5: del s[i]\n",
    "        else: s.insert(i, rng.choice(\"ACGT\"))\n",
    "    return \"\".join(s)\n",
    "\n",
    "rng = random.Random(1)\n",
    "ancestor = noise(300)\n",
    "# a tree we choose: ((A,B),(C,(D,E))) with different branch lengths\n",
    "ab = mutate(ancestor, 18, 1, rng);  cde = mutate(ancestor, 24, 1, rng)\n",
    "de = mutate(cde, 12, 1, rng)\n",
    "species = {\"A\": mutate(ab, 6, 0, rng), \"B\": mutate(ab, 8, 1, rng), \"C\": mutate(cde, 10, 1, rng),\n",
    "           \"D\": mutate(de, 5, 0, rng), \"E\": mutate(de, 7, 1, rng)}\n",
    "\n",
    "aligner = Align.PairwiseAligner(mode=\"global\", match_score=2, mismatch_score=-1,\n",
    "                                open_gap_score=-4, extend_gap_score=-1)\n",
    "best = aligner.align(species[\"A\"], species[\"B\"])[0]\n",
    "print(f\"score {best.score:.0f}\")\n",
    "print(str(best)[:300])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "671b304c",
   "metadata": {},
   "source": [
    "## 3. A family tree from distances\n",
    "The fraction of differing positions in each aligned pair gives a distance matrix; neighbour joining turns\n",
    "it into a tree. If the method works, it recovers the grouping we used in the simulation: (A, B) together\n",
    "and (D, E) together, with C nearer D and E."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "4523c068",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-17T23:25:20.842731Z",
     "iopub.status.busy": "2026-10-17T23:25:20.840980Z",
     "iopub.status.idle": "2026-10-17T23:25:22.148754Z",
     "shell.execute_reply": "2026-10-17T23:25:22.147064Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A   0.000000\n",
      "B   0.046667    0.000000\n",
      "C   0.167785    0.164983    0.000000\n",
      "D   0.196667    0.193980    0.090000    0.000000\n",
      "E   0.200669    0.194631    0.096990    0.039867    0.000000\n",
      "    A   B   C   D   E\n"
     ]
    },
    {
     "data": {
      "image/png": "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4PTo0SPcv38faWlpePToEa5fv673ulqtxqFDh9CzZ0+jF0lERERkCiQHp3Xr1mHy5Mm65fXr1xdo4+Pjg8GDBxunMiIiIiITIzk4jRw5Ev369cPatWuRmpqKadOm6b2uUqlQo0YNoxdIREREZCokByeVSgWVSoWZM2dCCIGqVauWZV1EREREJsfgyeFVqlQpizqIiIiITJ7BTw4nIiIielUxOBERERFJxOBEREREJBGDExEREZFEDE5EREREEjE4EREREUnE4EREREQkEYMTERERkUQMTkREREQSMTgRERERScTgRERERCQRgxMRERGRRAxORERERBIxOBERERFJxOBEREREJBGDExEREZFEFnIXQEREVNFdvXoVd+/eBQAoFArY2dmhYcOGsLOzk7kyMjYGJyIiolJauXIl1q9fj4CAAADA/fv3ce3aNcyYMQOff/65zNWRMZlMcJo1axbu3buH+fPnw97eXu5yiIiIDOLp6YkjR47oltetW4cRI0Zg4MCBqFu3royVkTGZxBynZcuWYdWqVVi9ejWysrLkLoeIiKjUfH19AQBpaWnyFkJGJfsVp+joaCxatAiLFi3C+++/L3c5REREJZKVlaW74pSWloYlS5agQ4cOaNasmcyVkTHJGpzUajUGDhyIb7/9FkqlUs5SiIgqDa1WC41GA4VCIXcplZKNjU2hxzY5ORnz588HAKSnpyMuLg5z586FmZlJ3NwhI5E1OI0ePRpt2rRBr1699O4LFyU3Nxe5ubm65YyMjLIsj4iowtFqtbC3t0dmZqbcpVRagYGBOH78eIHw9OIcp3PnzqFFixawt7dHcHBweZdJZUS2GLxlyxZERETgP//5j+Q+8+bNg52dne7Lzc2tDCskIqp4NBoNQ5OJeP311+Hl5YW9e/fKXQoZkWxXnGbMmAFXV1dMnDgRAJCQkAAAmDp1Knr27In+/fsX6DN16lRde+DpFSeGJyKi/+/5qyDJycmcBlEGirpV96InT54gJSUFNWrUKIeqqLzIFpxmzZql91eRlZUVAKBJkyZwcXEptI+lpSUsLS3LpT4ioopOqVQyOJWj5yeHp6enY9OmTcjOzsbHH38sc2VkTAohhJC7CAA4cuQIOnbsiLi4OLi6ukrqk5GRATs7O6Snp0OlUpW6BrVajWrVqgF4+g3AHzhEVNHw55g8vvvuO/z000+6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",
      "text/plain": [
       "<Figure size 600x320 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from Bio.Phylo.TreeConstruction import DistanceMatrix, DistanceTreeConstructor\n",
    "from Bio import Phylo\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "names = list(species)\n",
    "def p_distance(a, b):\n",
    "    aln = aligner.align(a, b)[0]\n",
    "    s1, s2 = aln[0], aln[1]\n",
    "    pairs = [(x, y) for x, y in zip(s1, s2) if x != \"-\" and y != \"-\"]\n",
    "    return sum(x != y for x, y in pairs) / len(pairs)\n",
    "\n",
    "matrix = [[p_distance(species[names[i]], species[names[j]]) for j in range(i)] + [0.0] for i in range(len(names))]\n",
    "dm = DistanceMatrix(names, matrix)\n",
    "print(dm)\n",
    "tree = DistanceTreeConstructor().nj(dm)\n",
    "tree.root_at_midpoint()\n",
    "fig, ax = plt.subplots(figsize=(6, 3.2))\n",
    "Phylo.draw(tree, axes=ax, do_show=False); ax.set_title(\"Neighbour-joining tree\"); plt.tight_layout(); plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "166a40d4",
   "metadata": {},
   "source": [
    "## 4. Survival analysis on a real breast-cancer trial\n",
    "**GBSG2** (German Breast Cancer Study Group, 686 patients) followed women after surgery and recorded\n",
    "the time until the cancer came back (`time`, days) or until follow-up ended without recurrence\n",
    "(`cens = 0`, a *censored* observation). Ignoring censoring biases every average, which is why survival\n",
    "analysis has its own methods.\n",
    "\n",
    "The question the trial asked: **does hormonal therapy (`horTh`) lengthen recurrence-free survival?**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "7f8e62b7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-17T23:25:22.154252Z",
     "iopub.status.busy": "2026-10-17T23:25:22.153713Z",
     "iopub.status.idle": "2026-10-17T23:25:24.293249Z",
     "shell.execute_reply": "2026-10-17T23:25:24.291180Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(686, 10)\n",
      "{'no': 440, 'yes': 246} | events (recurrence): 299\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<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>horTh</th>\n",
       "      <th>age</th>\n",
       "      <th>menostat</th>\n",
       "      <th>tsize</th>\n",
       "      <th>tgrade</th>\n",
       "      <th>pnodes</th>\n",
       "      <th>progrec</th>\n",
       "      <th>estrec</th>\n",
       "      <th>time</th>\n",
       "      <th>cens</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>no</td>\n",
       "      <td>70</td>\n",
       "      <td>Post</td>\n",
       "      <td>21</td>\n",
       "      <td>II</td>\n",
       "      <td>3</td>\n",
       "      <td>48</td>\n",
       "      <td>66</td>\n",
       "      <td>1814</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>yes</td>\n",
       "      <td>56</td>\n",
       "      <td>Post</td>\n",
       "      <td>12</td>\n",
       "      <td>II</td>\n",
       "      <td>7</td>\n",
       "      <td>61</td>\n",
       "      <td>77</td>\n",
       "      <td>2018</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>yes</td>\n",
       "      <td>58</td>\n",
       "      <td>Post</td>\n",
       "      <td>35</td>\n",
       "      <td>II</td>\n",
       "      <td>9</td>\n",
       "      <td>52</td>\n",
       "      <td>271</td>\n",
       "      <td>712</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>yes</td>\n",
       "      <td>59</td>\n",
       "      <td>Post</td>\n",
       "      <td>17</td>\n",
       "      <td>II</td>\n",
       "      <td>4</td>\n",
       "      <td>60</td>\n",
       "      <td>29</td>\n",
       "      <td>1807</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>no</td>\n",
       "      <td>73</td>\n",
       "      <td>Post</td>\n",
       "      <td>35</td>\n",
       "      <td>II</td>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>65</td>\n",
       "      <td>772</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  horTh  age menostat  tsize tgrade  pnodes  progrec  estrec  time  cens\n",
       "0    no   70     Post     21     II       3       48      66  1814     1\n",
       "1   yes   56     Post     12     II       7       61      77  2018     1\n",
       "2   yes   58     Post     35     II       9       52     271   712     1\n",
       "3   yes   59     Post     17     II       4       60      29  1807     1\n",
       "4    no   73     Post     35     II       1       26      65   772     1"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from lifelines.datasets import load_gbsg2\n",
    "from lifelines import KaplanMeierFitter, CoxPHFitter\n",
    "from lifelines.statistics import logrank_test\n",
    "\n",
    "gb = load_gbsg2()\n",
    "print(gb.shape); print(gb[\"horTh\"].value_counts().to_dict(), \"| events (recurrence):\", int(gb[\"cens\"].sum()))\n",
    "gb.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "a7fc0475",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-17T23:25:24.297020Z",
     "iopub.status.busy": "2026-10-17T23:25:24.296623Z",
     "iopub.status.idle": "2026-10-17T23:25:24.718522Z",
     "shell.execute_reply": "2026-10-17T23:25:24.716512Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArIAAAGGCAYAAACHemKmAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjIsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvgI3uAAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAm0xJREFUeJzs3Xl8U3XW+PHPzZ60TVfaUij7Jgi44I64zbj7zLg77guMOG6Dy7gvqAw66qg4Ovo8jtu4jaKOPx2VUVxRQXBBNkF2WtpC17TNnnt/f4SEpE3bNE3apJz369UX9Ca595u0lNOT8z1H0TRNQwghhBBCiAyj6+sFCCGEEEIIkQgJZIUQQgghREaSQFYIIYQQQmQkCWSFEEIIIURGkkBWCCGEEEJkJAlkhRBCCCFERpJAVgghhBBCZCQJZIUQQgghREaSQFYIIYQQQmQkCWSFEP3GokWLUBSFDz/8sK+XkjL98Tn2x+ckhOgdEsgKIZJq2LBhTJkypd3xzz//nNzcXMaNG8fWrVv7YGWpt3LlShRFQVEU7rjjjpj3ue2228L3+fnnn3t5hX3n448/RlEUPv74475eSjvpvDYhROckkBVCpNy///1vjj/+eMaNG8eiRYsYMmRIXy8ppbKysnjxxRfRNC3quKqq/POf/yQrKyvhc0+dOhVN0zj++ON7usy00R+fkxCid0ggK4RIqWeeeYYzzjiDadOm8cknn1BUVNTXS0q5008/na1bt/LJJ59EHf/444/Ztm0bp59+eh+tTAgh+hcJZIUQKTN37lxmzJjBWWedxXvvvReViVy/fn34LXZFUbBYLEyYMIEHHngAVVXD93vvvfdQFIVFixYxd+5cBg0ahNVq5YgjjmDZsmVdriGR68ybN4+hQ4disViYOnUqP/74Y7ee98SJE9l33315/vnno44/99xzHHzwwey1114xH9fU1MQNN9zAiBEjMJlMDBw4kCuuuIKGhobwfTqqJ43nsZHP8eGHH2b48OHo9XrWr1/f4XOJ57wej4fbbruN0aNHY7PZGDZsGBdffDGbN28Ggr/M/PrXvwbg17/+dfhr8be//a3D5xS51gceeIDBgwdjt9s599xzaWlpAeD++++nvLwcq9XKSSedRHV1ddTa4/nad7W2eF8DIUTfkEBWCJF0mqbxxz/+kVtvvZVrrrmGl19+GaPRGHWfUaNGoWla+KOqqoqbbrqJe+65h7/85S/tzvnII4+gKArLly/np59+wmq1cuSRR7JmzZpO19Ld6/z973/H7Xbz3XffsXLlSlwuF6eeeio+n69br8Ell1zCW2+9RXNzMwCNjY38+9//5uKLL455/+bmZg4//HDeeecd/vd//5f6+nref/99Fi9ezK9+9Su8Xm+H1+ruYx999FG8Xi9LlizhP//5T7uvTXfPe/PNN/P000/zv//7v9TV1fHVV1/xq1/9innz5gEwffp0PvroIwA++uij8Nfiqquu6vJ1nDdvHhaLhZ9++olPPvmETz/9lKuuuoo5c+ZgMplYvnw5X331FT/++CNXXHFF1GPj+dp3tbaefF2EEL1AE0KIJBo6dKgGaIB2zjnndPvxV111lTZs2LDw5++++64GaGeffXbU/RobG7Xc3FztrLPOCh/78ssvNUD74IMPEr7OhRdeGHW/BQsWaID2n//8p8tzrlixQgO0Bx98UKutrdVMJpP2zDPPaJqmaU8++aRmsVi0xsZGbe7cuRqgrVmzJvzY2bNna4qiaMuXL48655o1azRFUbTnnnuuw+cY72NDz/HMM8/s8rl057z77LOPduqpp3Z6ro8++kgDtI8++qjdbbGeU2itF198cdR977nnHs1oNGqXXXZZ1PE5c+ZoiqJoO3fu7PJ5tf3ad7a2eF8DIUTfkIysECLpRo4cyd57782bb77Jm2++2eH9/vnPf3LooYdit9uj3tLdsmVLuwzo//zP/0R9npuby1FHHdWuDrWn1znppJOiPt97770B2LhxIwB+vz/q7WpFUXjooYfaXbOwsJCTTz45XF7w3HPPcdppp5Gbmxtzje+++y5jx45l0qRJUcfHjRvHoEGD+Pzzzzt8ft19bNvXsqfnnTx5Mu+//z5z5sxJeieGE044od21fT4fRx99dNTxvfbaC03TwuUMId352sfSk6+LECL1JJAVQiRdXl4en376KXvvvTfnnHMOr732Wrv7PPPMM1x44YWceOKJrFy5Ep/Ph6Zp3HzzzWiaRiAQiLp/SUlJu3OUlJRQV1fX6Vq6e52BAwdGfW6324FgaUB3XXzxxSxatIh33nmHpUuXdlhWAFBdXc3atWsxGAwYDAb0ej06nQ5FUaioqOj0eXb3sYMGDYpr/fGe97HHHmPGjBnMmzePvfbai9LSUi677LJ2QWUi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3HMPa9euZdiwYQCcfPLJbNu2jSeeeAKTycR1112H1+tlyZIl4baLFosFk8nEY489xhFHHEFRURGrV6/mkEMOYdKkScybN4/8/HxmzpxJRUUFpaWlPPzww+Tk5HDppZcyefJknnvuOSAYOI8ZM4ajjjqKm266iW3btvH73/+ec889l4ceegiAxYsXc8ghhzBx4kQeeeQRBg4cyJ133smqVatYtWoVOp0OVVXZvn07EMysLl68mCuuuIKXXnqJU045BYCVK1cyceJEqqqqKC0tjXptAoEACxcu5LjjjuOnn34iPz8fm83GunXrurx2S0sL+++/P9OmTePKK69EURRmz57N9u3b+frrr9HpdOHnMHbsWObNm8dee+1FcXExRqOxy3WHHjt48GCefvppysrKuOeee/jhhx9Yu3YtJpOJ2267jQULFrBs2bLwc7r33nv55z//ybp16zj88MM58sgjuffee2N+b9x00018/vnnLF68OHzsrrvu4vXXX2fNmjU4HA72339/jjnmGK644go0TePuu++mtraWL7/8EkVReOCBB/i///s//vGPf1BaWsrXX3/NkiVLeOqpp9pdT7oWiLQ1MNfKpqxsttY7GWyykGU2gGIgYLSh9zlB9QJg02BktoENLUYqnTp+/4WRfxzSQHagFYu5AI+qx+H1sbPZw5ACW/sLhepnQ0LDFDoTOWghoo43XGoQa9hC5KAFGaQghIjF54Q/l/XNtW/dHt1OsAvXX389558f/Dl422238cQTT/D5558zbNgwli1bxn/+8x9WrFjB3nvvDcBrr73G8OHDef/99znppJPC57nqqqu45JJL2p3/73//O4ceeigAs2bN4qyzzuLf//43++23HwBXX301d955Z/j+Tz/9NIqi8Pzzz2MymZg8eTKPPPIIF154IbfeeisFBQVR5z7ssMMAmDNnDuPGjWPbtm0MHToUnU7H4MGDw/cdMWIEK1eu5Pnnnw8HhJ3R6/UUFwdL5gYOHEhRUVG759XRtf/xj39gNpv5v//7v/D9X3rpJQoKCli8eHH49QCYN28exx57bNS54133X/7yF0488UQAXnzxRcrLy3nllVe4+OKLueyyy5g7dy4//fQTkyZNQtM0nn/+eaZPnw5AVVVVVIa4renTp/Pggw+yevVqxo8fj6ZpvPDCC1x55ZUA/N///R85OTlRQenL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7dq1qKrK2LFjZSCCEEIIIUQ3ePwq7oia2eScM4DbF0DTtKgS0P4ooUC2uLgYVVUxmUxMnDgx2WsSQgghhNgjXPuvH1N27tX3HIfN1KPZV2kvoRrZgQMHsn379mSvRQghhBCi37Ma9exbntfXy+gXEgrTr732WmbNmsXTTz9NXl5ekpckhBBCCNF/KYrCC5cewIcrq7FbjJiN+qSev7rJxdDCLKxJPm86SiiQffrpp9m4cSNvvvkmZWVlmEymqNvXr1+flMUJIYQQQvRHiqJgNugxG/VYkhxwmg3Bc/b3+lhIMJC98cYbk70OIYQQQgghuiWhQFZabAkhhBBCiL6W0GavZHrzzTc54ogjGDduHGeeeSZr167t9P4bNmzg6quvZv/99+eggw7i+uuvp7a2tpdWK4QQQggh0kWfBrLvvPMO55xzDmeeeSYvv/wyJpOJadOmdRiYBgIBTjrpJMaNG8f//d//8fDDD/PNN99wzDHH4PF4enn1QgghhBCiLymapml9dfH999+fyZMn8+yzzwLg8/kYOHAgf/zjH7n99ttjPiYQCKDX7y6KXrduHWPHjuWzzz7jiCOOiOu6DoeD3NxcmpqasNvtPX8iQgghhBDd0Oz28cmaHditxqRv9qpqdDGsKIv9huYn9by9pTtxWp9lZJubm/n+++857rjjwseMRiPHHHMMn332WYePiwxiIRjYxjouhBBCCCH6tz4b91BRUQFAaWlp1PHS0lJ++umnuM9z++23M2LECA488MAO7+PxeKJKDxwORzdXK4QQQggh0k2fZWRVVQXAYIiOpY1GYzjL2pXbb7+dBQsW8K9//atdL9tIc+fOJTc3N/xRXl6e+MKFEEIIIURa6LNAtqioCIC6urqo47W1tQwYMKDLx9933308+uijvP/++0yZMqXT+95yyy00NTWFP7Zt25b4woUQQgghRFros0C2pKSEIUOG8PXXX0cd/+qrrzjggAM6feycOXOYO3cu7733HtOmTevyWmazGbvdHvUhhBBCCCEyW5+23/rDH/7AM888w8qVK9E0jSeffJLNmzczY8aM8H1uvvnmqA1h999/P3PnzuX999/nyCOP7INVCyGEEEKIdNBnm70gOOq2srKSKVOmYDabsVgsvPLKK0yYMCF8n9raWiorKwGor6/nlltuISsri4suuijqXA888ABnn312r65f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",
      "text/plain": [
       "<Figure size 700x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "log-rank test p-value: 0.0034\n"
     ]
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(7, 4))\n",
    "for group, d in gb.groupby(\"horTh\"):\n",
    "    KaplanMeierFitter(label=f\"hormonal therapy: {group}\").fit(d[\"time\"] / 365.25, d[\"cens\"]).plot_survival_function(ax=ax)\n",
    "ax.set_xlabel(\"years after surgery\"); ax.set_ylabel(\"recurrence-free probability\"); ax.set_title(\"Kaplan-Meier estimate\")\n",
    "plt.tight_layout(); plt.show()\n",
    "\n",
    "yes, no = gb[gb.horTh == \"yes\"], gb[gb.horTh == \"no\"]\n",
    "test = logrank_test(yes[\"time\"], no[\"time\"], event_observed_A=yes[\"cens\"], event_observed_B=no[\"cens\"])\n",
    "print(f\"log-rank test p-value: {test.p_value:.4f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d293da8c",
   "metadata": {},
   "source": [
    "The curves separate and the log-rank test says the difference is unlikely to be chance. But treated and\n",
    "untreated patients may differ in other ways (age, tumour size, lymph nodes). **Cox proportional-hazards\n",
    "regression** estimates the effect of therapy while adjusting for them; a hazard ratio below 1 means a\n",
    "lower risk of recurrence."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "2e66c7f1",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-17T23:25:24.722880Z",
     "iopub.status.busy": "2026-10-17T23:25:24.722301Z",
     "iopub.status.idle": "2026-10-17T23:25:25.150442Z",
     "shell.execute_reply": "2026-10-17T23:25:25.148073Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<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",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>model</th>\n",
       "      <td>lifelines.CoxPHFitter</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>duration col</th>\n",
       "      <td>'time'</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>event col</th>\n",
       "      <td>'cens'</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>baseline estimation</th>\n",
       "      <td>breslow</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>number of observations</th>\n",
       "      <td>686</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>number of events observed</th>\n",
       "      <td>299</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>partial log-likelihood</th>\n",
       "      <td>-1737.174</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>time fit was run</th>\n",
       "      <td>2026-10-17 23:25:24 UTC</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div><table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th style=\"min-width: 12px;\"></th>\n",
       "      <th style=\"min-width: 12px;\">exp(coef)</th>\n",
       "      <th style=\"min-width: 12px;\">exp(coef) lower 95%</th>\n",
       "      <th style=\"min-width: 12px;\">exp(coef) upper 95%</th>\n",
       "      <th style=\"min-width: 12px;\">p</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>horTh</th>\n",
       "      <td>0.714</td>\n",
       "      <td>0.554</td>\n",
       "      <td>0.919</td>\n",
       "      <td>0.009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>age</th>\n",
       "      <td>0.991</td>\n",
       "      <td>0.973</td>\n",
       "      <td>1.009</td>\n",
       "      <td>0.311</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>menostat</th>\n",
       "      <td>1.306</td>\n",
       "      <td>0.912</td>\n",
       "      <td>1.871</td>\n",
       "      <td>0.145</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tsize</th>\n",
       "      <td>1.008</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.016</td>\n",
       "      <td>0.051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tgrade</th>\n",
       "      <td>1.324</td>\n",
       "      <td>1.075</td>\n",
       "      <td>1.629</td>\n",
       "      <td>0.008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>pnodes</th>\n",
       "      <td>1.051</td>\n",
       "      <td>1.036</td>\n",
       "      <td>1.067</td>\n",
       "      <td>&lt;0.0005</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>progrec</th>\n",
       "      <td>0.998</td>\n",
       "      <td>0.997</td>\n",
       "      <td>0.999</td>\n",
       "      <td>&lt;0.0005</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>estrec</th>\n",
       "      <td>1.000</td>\n",
       "      <td>0.999</td>\n",
       "      <td>1.001</td>\n",
       "      <td>0.708</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table><br><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",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Concordance</th>\n",
       "      <td>0.688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Partial AIC</th>\n",
       "      <td>3490.349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>log-likelihood ratio test</th>\n",
       "      <td>101.860 on 8 df</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>-log2(p) of ll-ratio test</th>\n",
       "      <td>58.965</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/latex": [
       "\\begin{tabular}{lrrrr}\n",
       " & exp(coef) & exp(coef) lower 95% & exp(coef) upper 95% & p \\\\\n",
       "covariate &  &  &  &  \\\\\n",
       "horTh & 0.714 & 0.554 & 0.919 & 0.009 \\\\\n",
       "age & 0.991 & 0.973 & 1.009 & 0.311 \\\\\n",
       "menostat & 1.306 & 0.912 & 1.871 & 0.145 \\\\\n",
       "tsize & 1.008 & 1.000 & 1.016 & 0.051 \\\\\n",
       "tgrade & 1.324 & 1.075 & 1.629 & 0.008 \\\\\n",
       "pnodes & 1.051 & 1.036 & 1.067 & 0.000 \\\\\n",
       "progrec & 0.998 & 0.997 & 0.999 & 0.000 \\\\\n",
       "estrec & 1.000 & 0.999 & 1.001 & 0.708 \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/plain": [
       "<lifelines.CoxPHFitter: fitted with 686 total observations, 387 right-censored observations>\n",
       "             duration col = 'time'\n",
       "                event col = 'cens'\n",
       "      baseline estimation = breslow\n",
       "   number of observations = 686\n",
       "number of events observed = 299\n",
       "   partial log-likelihood = -1737.174\n",
       "         time fit was run = 2026-10-17 23:25:24 UTC\n",
       "\n",
       "---\n",
       "          exp(coef) exp(coef) lower 95% exp(coef) upper 95%       p\n",
       "covariate                                                          \n",
       "horTh         0.714               0.554               0.919   0.009\n",
       "age           0.991               0.973               1.009   0.311\n",
       "menostat      1.306               0.912               1.871   0.145\n",
       "tsize         1.008               1.000               1.016   0.051\n",
       "tgrade        1.324               1.075               1.629   0.008\n",
       "pnodes        1.051               1.036               1.067 <0.0005\n",
       "progrec       0.998               0.997               0.999 <0.0005\n",
       "estrec        1.000               0.999               1.001   0.708\n",
       "---\n",
       "Concordance = 0.688\n",
       "Partial AIC = 3490.349\n",
       "log-likelihood ratio test = 101.860 on 8 df\n",
       "-log2(p) of ll-ratio test = 58.965"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X = gb.assign(horTh=(gb.horTh == \"yes\").astype(int), menostat=(gb.menostat == \"Post\").astype(int),\n",
    "              tgrade=gb.tgrade.map({\"I\": 1, \"II\": 2, \"III\": 3}))\n",
    "cph = CoxPHFitter().fit(X[[\"time\", \"cens\", \"horTh\", \"age\", \"menostat\", \"tsize\", \"tgrade\", \"pnodes\", \"progrec\", \"estrec\"]],\n",
    "                        duration_col=\"time\", event_col=\"cens\")\n",
    "cph.print_summary(columns=[\"exp(coef)\", \"exp(coef) lower 95%\", \"exp(coef) upper 95%\", \"p\"], decimals=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "aac6700d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-17T23:25:25.154326Z",
     "iopub.status.busy": "2026-10-17T23:25:25.153714Z",
     "iopub.status.idle": "2026-10-17T23:25:25.471965Z",
     "shell.execute_reply": "2026-10-17T23:25:25.470369Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adjusted for the other factors, hormonal therapy multiplies the risk of recurrence by 0.71 (about 29% lower). More positive lymph nodes and a higher tumour grade raise it.\n"
     ]
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(6, 3.6))\n",
    "cph.plot(hazard_ratios=True, ax=ax); ax.set_title(\"Hazard ratios (95% CI)\"); plt.tight_layout(); plt.show()\n",
    "hr = cph.hazard_ratios_[\"horTh\"]\n",
    "print(f\"Adjusted for the other factors, hormonal therapy multiplies the risk of recurrence by {hr:.2f} \"\n",
    "      f\"(about {100 * (1 - hr):.0f}% lower). More positive lymph nodes and a higher tumour grade raise it.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "34007f8d",
   "metadata": {},
   "source": [
    "## 5. A diagnostic classifier\n",
    "The Wisconsin breast-cancer dataset (bundled with scikit-learn) describes cell nuclei from 569 biopsies,\n",
    "each labelled malignant or benign. In diagnosis the two errors are not equal: missing a malignancy\n",
    "(false negative) is far worse than a false alarm, so we choose the decision threshold for **sensitivity**,\n",
    "not accuracy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "a022b814",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-17T23:25:25.478964Z",
     "iopub.status.busy": "2026-10-17T23:25:25.478561Z",
     "iopub.status.idle": "2026-10-17T23:25:26.396334Z",
     "shell.execute_reply": "2026-10-17T23:25:26.394552Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cross-validated ROC AUC: 0.996\n",
      "threshold 0.524: sensitivity 0.958, specificity 0.997, missed malignancies 9, false alarms 1\n",
      "threshold 0.085: sensitivity 0.995, specificity 0.868, missed malignancies 1, false alarms 47\n"
     ]
    },
    {
     "data": {
      "image/png": "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bglHR0fxv//9r9LrrUyxsbHCzMxMfP/990IIIdLS0kS7du3ESy+99NS+9+/fF66uruL11183ioC7efOmMDU1FT/99JMQQoiUlBTRunVr8fLLL5fap6CgQHTu3FkMGjRIpKenCyGEePz4sdi6dWuV1FxZrl+/LkxMTMS6deuEEE8+U8uWLcXs2bNL7bNu3TphZmYmrl+/LoQQorCwUHh7e4vWrVtXSc2V5dq1a2Lp0qXizz//FP369StXwEVHRwulUim2bdsmhBAiMTFRNGnSRMyfP98gNTHg/mHlypXC1tZWZ8SxZcsWoVKpxKNHjwzWpyb47LPPhL29vSgoKJDaNmzYIExMTERKSkq51zN16lQxYMCASqiw6nz44YfCyclJaDQaqW316tVCrVaX+demRqMRAwYMEF999ZVYs2aNUQTckiVLhIuLi9BqtVLbqlWrhLm5ucjOzi6xT0BAgFAoFOLWrVtVVWaVWLx4sXB1ddVp++qrr4SlpaXIzc0tsc/y5cuFs7OzTtuXX34p6tatW2l1VrXyBtzChQtFixYtdNo+/fRTYWdnJwoLC5+5Dh6D+4eoqCi4u7vDzMxMauvevTs0Gg2io6MN1qcmiIqKQocOHWBi8tclS7t3747CwkL8/vvv5VqHVqvFhQsX0KJFi8oqs0pERUWhc+fOOhd37d69O/Ly8nD16tVS+y1duhRmZmZYsGBBVZRZJaKiotClSxedC5V3794dubm5uH79eol9jhw5gnbt2qFZs2a4evUqrl27hoKCgqoqudJERUWha9euOm3du3dHdnY2YmJiSuwzY8YM2NvbY968eTh06BA2bdqEr776CsuWLauKkquV0rZfWlpahY/tlqRWXmy5LI8fP0a9evV02oqeP3782GB9agJDfK4PP/wQd+7cwa5duwxeX1V6/PgxGjZsqNP2tG0RERGB7777DlFRUXrdtaK6evz4MZo3b67T9rRtUXT3jl69eiElJQU5OTnIycnBmjVrMHr06EqvubI8fvwY7du312l72rZwcnLCvHnz8L///Q8nTpxAYmIi3N3d8cILL1R6vdXN48eP0bZtW502Q353cgT3D6ampsjNzdVpy8nJAQCdEdqz9qkJnvVzrV69GsuWLcP27dvRunXrSqmxquizLaZMmYLp06fj1q1biIiIkGaVRURE4MGDB5VbcCXS93fk1KlT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",
      "text/plain": [
       "<Figure size 450x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.datasets import load_breast_cancer\n",
    "from sklearn.pipeline import make_pipeline\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.model_selection import cross_val_predict, StratifiedKFold\n",
    "from sklearn.metrics import roc_auc_score, roc_curve, confusion_matrix\n",
    "\n",
    "data = load_breast_cancer()\n",
    "y = (data.target == 0).astype(int)                  # 1 = malignant\n",
    "model = make_pipeline(StandardScaler(), LogisticRegression(max_iter=5000, C=0.5))\n",
    "proba = cross_val_predict(model, data.data, y, cv=StratifiedKFold(5, shuffle=True, random_state=0), method=\"predict_proba\")[:, 1]\n",
    "print(f\"cross-validated ROC AUC: {roc_auc_score(y, proba):.3f}\")\n",
    "\n",
    "fpr, tpr, thr = roc_curve(y, proba)\n",
    "for target_sens in (0.95, 0.99):\n",
    "    i = next(k for k, t in enumerate(tpr) if t >= target_sens)\n",
    "    tn, fp, fn, tp = confusion_matrix(y, proba >= thr[i]).ravel()\n",
    "    print(f\"threshold {thr[i]:.3f}: sensitivity {tp / (tp + fn):.3f}, specificity {tn / (tn + fp):.3f}, \"\n",
    "          f\"missed malignancies {fn}, false alarms {fp}\")\n",
    "\n",
    "plt.figure(figsize=(4.5, 4)); plt.plot(fpr, tpr); plt.plot([0, 1], [0, 1], \"--\", color=\"grey\")\n",
    "plt.xlabel(\"1 - specificity\"); plt.ylabel(\"sensitivity\"); plt.title(\"ROC curve (5-fold cross-validated)\"); plt.tight_layout(); plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d7d1905b",
   "metadata": {},
   "source": [
    "## Libraries worth knowing in this field\n",
    "| Area | Libraries |\n",
    "|---|---|\n",
    "| sequences, files, databases | Biopython, scikit-bio, pysam (genomics alignments) |\n",
    "| single-cell and omics | Scanpy, AnnData |\n",
    "| protein structure | Biopython PDB, MDAnalysis; AlphaFold predictions are distributed as files these read |\n",
    "| medical imaging | pydicom, SimpleITK, MONAI (deep learning) |\n",
    "| survival and clinical statistics | lifelines, scikit-survival, statsmodels |\n",
    "| epidemiology | epipy, compartment models with SciPy (`solve_ivp`) |\n",
    "\n",
    "## Exercises\n",
    "1. Increase the number of mutations in the simulation until neighbour joining gets the tree wrong. How much divergence can it handle?\n",
    "2. Stratify the Kaplan-Meier curves by tumour grade (`tgrade`) instead of therapy.\n",
    "3. Replace logistic regression with gradient boosting in the diagnostic model. Does the AUC improve, and is it worth the loss in interpretability?"
   ]
  }
 ],
 "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.12.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
