{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "a64c7c6d",
   "metadata": {},
   "source": [
    "# Model Comparison and Joint Analysis\n",
    "\n",
    "## Objective\n",
    "Everything up to this point gives me four things to compare: the Wisconsin tabular model, the corrected BreaKHis image model, and the synthetic fusion variants. This notebook puts them side by side so I can answer the real project question directly: where each branch is strong, what changes under synthetic fusion, and which improvements look more like pairing artefacts than genuine extra signal.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "codex_research_commentary": true
   },
   "source": [
    "## Notebook Purpose\n",
    "\n",
    "This notebook brings the tabular, image, and synthetic-fusion results into one comparison frame. It is designed to answer what each model family contributes and what can safely be claimed.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "codex_research_commentary": true
   },
   "source": [
    "## Why This Matters\n",
    "\n",
    "The dissertation needs a joint interpretation rather than separate isolated result tables. This notebook separates reused comparator evidence, new image-model evidence, and exploratory fusion evidence.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "codex_research_commentary": true
   },
   "source": [
    "## Load Cross-Branch Results\n",
    "\n",
    "This setup cell reads the key outputs from the Wisconsin review, BreaKHis evaluation, and fusion experiments. It prepares the data needed for one consistent comparison table.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "25b76455",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-04-19T22:42:34.364768Z",
     "iopub.status.busy": "2026-04-19T22:42:34.364589Z",
     "iopub.status.idle": "2026-04-19T22:42:36.814584Z",
     "shell.execute_reply": "2026-04-19T22:42:36.814158Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Project root: /Users/sergeysotskiy/Documents/UNI/year 3/Dissertation/dissertation_project\n",
      "Outputs: /Users/sergeysotskiy/Documents/UNI/year 3/Dissertation/dissertation_project/outputs\n"
     ]
    }
   ],
   "source": [
    "from __future__ import annotations\n",
    "\n",
    "import json\n",
    "import random\n",
    "import sys\n",
    "from pathlib import Path\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "SEED = 42\n",
    "random.seed(SEED)\n",
    "np.random.seed(SEED)\n",
    "plt.style.use('seaborn-v0_8-whitegrid')\n",
    "\n",
    "CWD = Path.cwd().resolve()\n",
    "if (CWD / 'src').exists() and (CWD / 'data').exists():\n",
    "    PROJECT_ROOT = CWD\n",
    "elif (CWD.parent / 'src').exists() and (CWD.parent / 'data').exists():\n",
    "    PROJECT_ROOT = CWD.parent\n",
    "elif (CWD.parent.parent / 'src').exists() and (CWD.parent.parent / 'data').exists():\n",
    "    PROJECT_ROOT = CWD.parent.parent\n",
    "else:\n",
    "    raise RuntimeError(f'Could not resolve dissertation_project root from {CWD}')\n",
    "\n",
    "REPO_ROOT = PROJECT_ROOT.parent\n",
    "OUTPUTS = PROJECT_ROOT / 'outputs'\n",
    "FIGURES = OUTPUTS / 'figures'\n",
    "METRICS = OUTPUTS / 'metrics'\n",
    "REPORTS = OUTPUTS / 'reports'\n",
    "MODELS = PROJECT_ROOT / 'models'\n",
    "DATA_ROOT = PROJECT_ROOT / 'data' / 'dataset_cancer_v1' / 'dataset_cancer_v1'\n",
    "WISCONSIN_ROOT = PROJECT_ROOT / 'notebook_Wisconsin'\n",
    "\n",
    "for path in [FIGURES, METRICS, REPORTS]:\n",
    "    path.mkdir(parents=True, exist_ok=True)\n",
    "\n",
    "if str(PROJECT_ROOT) not in sys.path:\n",
    "    sys.path.append(str(PROJECT_ROOT))\n",
    "\n",
    "print('Project root:', PROJECT_ROOT)\n",
    "print('Outputs:', OUTPUTS)\n",
    "\n",
    "from src.fusion import comparison_table\n",
    "from src.metrics import save_metric_barplot\n",
    "\n",
    "wisconsin_metrics = pd.read_csv(REPORTS / 'wisconsin_published_metrics.csv')\n",
    "breakhis_metrics = pd.read_csv(METRICS / 'breakhis_patient_level_metrics.csv')\n",
    "fusion_summary = pd.read_csv(METRICS / 'synthetic_fusion_summary.csv')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "codex_research_commentary": true
   },
   "source": [
    "## Build Joint Comparison Table\n",
    "\n",
    "This cell constructs a compact table with family, model name, accuracy, ROC-AUC, stability/calibration note, and claim type. The `claim_type` column is important because not every metric has the same evidential status.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "146cd8cd",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-04-19T22:42:36.816368Z",
     "iopub.status.busy": "2026-04-19T22:42:36.816230Z",
     "iopub.status.idle": "2026-04-19T22:42:36.828394Z",
     "shell.execute_reply": "2026-04-19T22:42:36.827901Z"
    }
   },
   "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",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>family</th>\n",
       "      <th>model</th>\n",
       "      <th>accuracy</th>\n",
       "      <th>roc_auc</th>\n",
       "      <th>calibration_or_stability</th>\n",
       "      <th>claim_type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>monomodel</td>\n",
       "      <td>BreaKHis corrected patient-level model</td>\n",
       "      <td>0.769231</td>\n",
       "      <td>0.888889</td>\n",
       "      <td>ECE=0.235</td>\n",
       "      <td>main new image result</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>monomodel</td>\n",
       "      <td>Wisconsin published branch</td>\n",
       "      <td>0.960000</td>\n",
       "      <td>0.997000</td>\n",
       "      <td>MC Dropout reported in source notebook</td>\n",
       "      <td>published Wisconsin branch</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>synthetic_fusion</td>\n",
       "      <td>random | early_fusion</td>\n",
       "      <td>0.970175</td>\n",
       "      <td>0.994775</td>\n",
       "      <td>std_acc=0.010</td>\n",
       "      <td>exploratory only</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>synthetic_fusion</td>\n",
       "      <td>random | late_fusion</td>\n",
       "      <td>0.971930</td>\n",
       "      <td>0.990410</td>\n",
       "      <td>std_acc=0.010</td>\n",
       "      <td>exploratory only</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>synthetic_fusion</td>\n",
       "      <td>same_label | early_fusion</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>std_acc=0.000</td>\n",
       "      <td>exploratory only</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             family                                   model  accuracy  \\\n",
       "0         monomodel  BreaKHis corrected patient-level model  0.769231   \n",
       "1         monomodel              Wisconsin published branch  0.960000   \n",
       "2  synthetic_fusion                   random | early_fusion  0.970175   \n",
       "3  synthetic_fusion                    random | late_fusion  0.971930   \n",
       "4  synthetic_fusion               same_label | early_fusion  1.000000   \n",
       "\n",
       "    roc_auc                calibration_or_stability  \\\n",
       "0  0.888889                               ECE=0.235   \n",
       "1  0.997000  MC Dropout reported in source notebook   \n",
       "2  0.994775                           std_acc=0.010   \n",
       "3  0.990410                           std_acc=0.010   \n",
       "4  1.000000                           std_acc=0.000   \n",
       "\n",
       "                    claim_type  \n",
       "0  main new image result  \n",
       "1      published Wisconsin branch  \n",
       "2             exploratory only  \n",
       "3             exploratory only  \n",
       "4             exploratory only  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rows = [\n",
    "    {\n",
    "        'family': 'monomodel',\n",
    "        'model': 'Wisconsin published branch',\n",
    "        'accuracy': float(wisconsin_metrics[wisconsin_metrics['metric'] == 'accuracy']['value'].iloc[0]),\n",
    "        'roc_auc': float(wisconsin_metrics[wisconsin_metrics['metric'] == 'roc_auc']['value'].iloc[0]),\n",
    "        'calibration_or_stability': 'MC Dropout reported in source notebook',\n",
    "        'claim_type': 'published Wisconsin branch',\n",
    "    },\n",
    "    {\n",
    "        'family': 'monomodel',\n",
    "        'model': 'BreaKHis corrected patient-level model',\n",
    "        'accuracy': float(breakhis_metrics['accuracy'].iloc[0]),\n",
    "        'roc_auc': float(breakhis_metrics['roc_auc'].iloc[0]),\n",
    "        'calibration_or_stability': f\"ECE={breakhis_metrics['ece'].iloc[0]:.3f}\",\n",
    "        'claim_type': 'main new image result',\n",
    "    },\n",
    "]\n",
    "for pairing_type, experiment in [('same_label', 'early_fusion'), ('random', 'early_fusion'), ('random', 'late_fusion')]:\n",
    "    subset = fusion_summary[(fusion_summary['pairing_type'] == pairing_type) & (fusion_summary['experiment'] == experiment)]\n",
    "    rows.append(\n",
    "        {\n",
    "            'family': 'synthetic_fusion',\n",
    "            'model': f'{pairing_type} | {experiment}',\n",
    "            'accuracy': float(subset[subset['metric'] == 'accuracy']['mean'].iloc[0]),\n",
    "            'roc_auc': float(subset[subset['metric'] == 'roc_auc']['mean'].iloc[0]),\n",
    "            'calibration_or_stability': f\"std_acc={subset[subset['metric'] == 'accuracy']['std'].iloc[0]:.3f}\",\n",
    "            'claim_type': 'exploratory only',\n",
    "        }\n",
    "    )\n",
    "comparison_df = comparison_table(rows)\n",
    "comparison_df.to_csv(METRICS / 'joint_model_comparison.csv', index=False)\n",
    "comparison_df\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "codex_research_commentary": true
   },
   "source": [
    "## Save Comparison Figures\n",
    "\n",
    "This cell creates accuracy and ROC-AUC comparison figures. These plots are intended for the final results/discussion sections where the model families are compared directly.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "bb1174b7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-04-19T22:42:36.829719Z",
     "iopub.status.busy": "2026-04-19T22:42:36.829623Z",
     "iopub.status.idle": "2026-04-19T22:42:37.062591Z",
     "shell.execute_reply": "2026-04-19T22:42:37.062006Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9cAAAHqCAYAAAAODL1zAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAg3NJREFUeJzt3QmYneP5+PGHIGInqVhae9UWW1KUVFtK7YLGvoulCK19KbHvSyl+CNGItQhKiaWq/aGWhiA0ovYi9j0Iif/1fX7/e/rOyZlk4k1yzpzz/VxXrmRmzpw5mXnmed/7ue/nfmb45ptvvkmSJEmSJOlbm/Hbf6okSZIkSTK4liRJkiRpKjBzLUmSJElSSQbXkiRJkiSVZHAtSZIkSVJJBteSJEmSJJVkcC1JkiRJUkkG15IkSZIklWRwLUmSJElSSQbXktSgdtppp/SDH/wgbbvttm0+5je/+U1+zBFHHJGaxe9///v8f57WnzM1/ec//8lff+jQoW0+5uuvv84/x1VWWSWtuuqq6eGHH54qX7vW//dGwveR72c9WGeddabJ732Ml8o/K6+8cvrFL36Rzj333DxWKz333HPpsMMOS2uvvXZaYYUV0k9/+tN00EEHpSeffLLNr/X000+nQw89ND92xRVXTD//+c/TMccck1577bUpes0vv/xyfo2rr756Gjdu3BT//j3yyCP54/xdNGHChHTDDTekHXbYIT83v5dbbLFFGjJkSNWvI6njm6nWL0CSNO3MOOOMacSIEWnMmDFpgQUWaPWxsWPHpr/+9a9++xvE//7v/6abb7457bvvvmnNNddMyy233FR53r59+6Yf//jHU+W5mt31118/0e9hI/9fiz744IN0++23p4svvjgH1wTF4dZbb01HH310HrMs+C288MJ5zrrxxhvTdtttlx+72267tXq+q6++Op1yyik5aD344IPT/PPPn1555ZV0+eWXp7vvvjsNHjw4LbPMMu16rTfddFNacskl8+cPGzYsbbbZZqX//59//nnaZ5998uIA/4d+/fqlmWeeOS96nXHGGenvf/97uvDCC9Mss8xS+mtJqh8G15LUwLhZ/fe//51vGHfddddWHyOw7tKlS5prrrlq9vo09Xz44Yf57y233DJ973vfm2rPSzDYLAHhtEb2tpn/rz/72c9yFpgMcATXzz77bA6sN99883TiiSfmBcFAkHvyySen008/PWeGWTTC8OHD8/vJCPO5gUCb7HWfPn3SUUcdNclKjzB+/Ph0yy23pG222SY98cQT6brrrpsqwfWpp56aHn/88ZylLn4vevfunYN+FgT4WjvvvHPpryWpflgWLkkNbLbZZks/+clPcnBd6Y477shlmjPN1Hqd9csvv8wZlQ022CD16NEjrb/++unSSy/NJY7FknNuank/JZk8jvLzp556aqKyzT322KOlJJJMzvPPPz9ROeU//vGP/JyUdvJ8lFK+/fbbaf/9989lzvwf/vCHP7R6bj5+5JFH5o/xeb/85S/TX/7yl4n+L9zkrrXWWvl5eDzvq/TPf/4z7bjjjmmllVZKq622Wjr88MPT+++/P0Xfa4IGylq5eV5++eXTj370o/w2GbtiKe7555+fgwUCBV433x/KUovIvHGDz8cpIx01atQkvzblvVHiS3DB97KtUlYex+sIr776av658DPi/0+Q8be//W2SZeGMHYJ4vqd8b4899tj00Ucftfqc9dZbL91///1p0003zWW+jDWCmMnhazOWCEj4XvLcH3/8ccvH+V4dcMAB+evyGP6vBFvFnwOvlzFPFp/H8L2+6KKL0qeffpqDrp49e+b3nXnmmembb75p9Xl//vOf8/eD7wVjkd+F4tj/4osv0tlnn51/L/h/Ma7Jqv7rX/9q9T3eZZdd0oABA/LHN9pooxzEVZaFk12N3zOqA4477rj8GqfF72I1X331VTrppJPSD3/4w9SrV69W456fHa/3gQcemOh3hfcXv+dTYo455kgzzDBDy9tkspmnfvvb37YKrANB+IILLpi/D4Hs9JxzzpnLxivNN998+fu/7rrr5uqcyeH/x1zC947fOf5fLEiWwfeQbPhWW21VdZFhk002Sbvvvnvq3r17qa8jqf4YXEtSg+PGPkrDAzfwlCVyk1dEoEFgcdlll+VyYG58ubH/3e9+lwOForvuuisHs9wUn3POOendd99N/fv3z0EEKH+kHBKUb3IT/+abb+Yb/xdeeKHVc3GTTMB3ySWXpMUXXzx/LTI63//+93NQRJBJkBwBA1+LYJobfcpICVgoJd1vv/3Sn/70p1Y35n/84x/T3nvvnf8PBICVQfpjjz2Ws/qzzjprfgzB16OPPpq/PoFUe0tAeTz/L147N/+8TaDGHtOiK6+8Mr344ov5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XEuSJEmSVJLBtSRJkiRJJRlcS5IkSZJUksG1JEmSJEklGVxLkiRJklSSwbUkSZIkSSUZXEuSJEmSVJLBtSRJkiRJJRlcS5IkSZJUksG1JEmSJEklGVxLkiRJklSSwbUkSZIkSSUZXEuSJEmSVJLBtSRJkiRJJRlcS5IkSZJUksG1JEmSJEklGVxLkiRJklSSwbUkSZIkSSUZXEuSJEmSVJLBdYP68ssv01FHHZV69eqVevfunQYNGtTmY++555604YYbplVWWSVtt9126Zlnnpmur1WSJEmSOjqD6wZ1xhlnpJEjR6bBgwenAQMGpAsuuCANGzZsosc9//zz6eCDD0577713uvXWW9Oyyy6b//3555/X5HVLkiRJUkdkcN2Axo4dm2644YZ09NFHp+WXXz6tt956qV+/funqq6+e6LEPPvhgWmqppVKfPn3SIosskg466KD0zjvvpH//+981ee2SJEmS1BEZXDegUaNGpa+//jqXeYeePXumJ598Mk2YMKHVY+eZZ54cSA8fPjx/bOjQoWmOOebIgbYkSZIkqX1maufj1IGQeZ533nnTLLPM0vK+bt265X3YH374YZpvvvla3r/RRhul++67L22//fapU6dOacYZZ0yXXHJJmnvuudt8/vHjx+c/Uq05DuW4U7NwvpNjTs1gfB3GGFPymgyuGxD7pYuBNeLtcePGtXr/Bx98kIPxY489Nq200krp2muvTUceeWS6+eabU9euXas+/+jRo6fhq5fab8SIEX67NN057tRs4+6/S/JqJs51ctxNOYPrBtS5c+eJguh4e9ZZZ231/rPOOistvfTSaYcddshvn3jiiblz+E033ZT22muvqs/P42ebbbZUV+74W61fgWpg5ZVXru33/V+1/fJqznF3fXq9pl9fzTfuXq3ZV1Yzz3VPPf7Pmn59Nee4a6ufVXuTiwbXDah79+45I82+65lm+r8fMdlpAuu55pqr1WM5dmunnXZqeZuy8GWWWSa98cYbbT4/5eP8kWrNcSjHnZqF850cc2oGneowxpiS12RDswbEcVoE1cVyHhqW9ejRIwfPRfPPP3964YUXWr3vpZdeSt/97nen2+uVJEmSpI7O4LoBdenSJR+tddxxx6Wnnnoq3XvvvWnQoEFp5513bslif/HFF/nfW2+9dfrjH/+YbrnllvTKK6/kMnGy1ltssUWN/xeSJEmS1HFYFt6gaEpGcL3LLrvko7X69++f1l9//fyx3r17p1NPPTVtueWWuVv4Z599ljuEjxkzJme9Bw8e3GYzM0mSJEnSxAyuGzh7ffrpp+c/lZ577rlWb/ft2zf/kSRJkiR9O5aFS5IkSZJUksG1JEmSJEklGVxLkiRJklSSwbUkSZIkSSUZXEuSJEmSVJLBtSRJkiRJJRlcS5IkSZJUksG1JEmSJEklGVxLkiRJklSSwbUkSZIkSSUZXEuSJEmSVJLBtSRJkiRJJRlcS5IkSZJUksG1JEmSJEklGVxLkiRJklSSwbUkSZIkSSUZXEuSJEmSVJLBtSRJkiRJJRlcS5IkSZJUksG1JEmSJEklGVxLkiRJklSSwbUkSZIkSSUZXEuSJEmSVJLBtSRJkiRJJRlcS5IkSZJUksG1JEmSJEklGVxLkiRJklSSwbUkSZIkSSUZXEuSJEmSVJLBtSRJkiRJJRlcS5IkSZJUksG1JEmSJEklGVxLkiRJklSSwbUkSZIkSSUZXEuSJEmSVJLBtSRJkiRJJRlcS5IkSZJUksG1JEmSJEklGVxLkiRJklSSwbUkSZIkSSUZXEuSJEmSVJLBtSRJkiRJJRlcS5IkSZJUksG1JEmSJEklGVxLkiRJklSSwbUkSZIkSSUZXEuSJEmSVJLBtSRJkiRJJRlcS5IkSZJUksG1JEmSJEklGVxLkiRJklSSwbUkSZIkSSUZXEuSJEmSVJLBtSRJkiRJJRlcS5IkSZJUksF1Hfn000/ThAkTWr3vueeeS5988skUP9eXX36ZjjrqqNSrV6/Uu3fvNGjQoDYfy9fYbrvt0oorrpg23XTT9PDDD3+r1y9JkiRJzcrguk5cccUVae21104jRoxo9f7TTz89B8dDhgyZouc744wz0siRI9PgwYPTgAED0gUXXJCGDRs20eMI3Hffffe01FJLpdtuuy2tt956af/990/vvfde6f+TJEmSJDULg+s6cOutt6bzzjsvHXTQQWn55Zdv9bELL7wwHXLIIenss89Od9xxR7ueb+zYsemGG25IRx99dH4+AuZ+/fqlq6++eqLH3nzzzWm22WZLxx13XFp00UXTAQcckP8mMJckSZIktc9M7XycpiGyywTCffv2nehjXbp0STvttFP66quv0uWXX5422mijyT7fqFGj0tdff51WWWWVlvf17NkzXXzxxbnsfMYZ/7um8uijj6Z11103derUqeV9N91001T5f0mSJElSszC4rgMvvfRSWmONNSb5mHXWWSf9/ve/b9fzvfPOO2neeedNs8wyS8v7unXrlvdhf/jhh2m++eZref9rr72W91ofc8wx6b777ksLL7xwOvzww3Mw3pbx48fnP1KtOQ7luFOzcL6TY07NYHwdxhhT8poMruvAXHPNld5///30ve99r83HfPzxx2n22Wdv1/N9/vnnrQJrxNvjxo2bqIT80ksvTTvvvHMaOHBg+vOf/5z22GOPdOedd6YFF1yw6vOPHj26Xa9DmtYqexRI04PjTs027v67JK9m4lwnx92UM7iuAzQyo+T7/PPPb/MxfJzO3+3RuXPniYLoeHvWWWdt9X7KwZdddtm81xrLLbdcevDBB/M+8H322afq8y+99NJ5n3ZdueNvtX4FqoGVV165tt/3f9X2y6s5x9316fWafn0137h7tWZfWc081z31+D9r+vXVnOOuGpKR7U0uGlzXgf322y9ttdVWuenYbrvtllZYYYU055xzpo8++ig988wz6Q9/+EN6+umn0zXXXNOu5+vevXv64IMP8r7rmWaaqaVUnMCaLHnRd77znbTEEku0et9iiy2W3nzzzTafn4C8uEdbqhXHoRx3ahbOd3LMqRl0qsMYY0pek93C68ACCyyQO3lTz0+Azf5runyvueaaac8998yPIbBecskl2/V8ZKIJqovlPMOHD089evRo1cwsVoc457roxRdfzHuvJUmSJEntY+a6TpAt5qzrMWPG5GCX86fnmWeeXKZdbEDWHnQY79OnTz5e65RTTklvv/12GjRoUDr11FNbsthkxslkb7vttumqq67KzdI222yzdMstt+QmZ5tvvvk0+p9KkiRJUuMxuK7DLDZ/yjryyCNzcL3LLrukOeaYI/Xv3z+tv/76+WO9e/fOgfaWW26ZM9SXXXZZOvnkk3NjM7Lj/E1puSRJkiSpfQyu6wDnWM8wwwwTvX/mmWfOGWay1+zJ7tq16xRlr08//fT8p1JlGTjHbg0dOvRbvnpJkiRJksF1HVh99dWrvn/ChAn5CK577703dwtnX/ZSSy013V+fJEmSJGnSDK7rwP777z/Zx5xwwgnprLPOShdffPF0eU2SJEmSpPazW3gH8ctf/jI98cQTtX4ZkiRJkqQqDK47CM6nHjduXK1fhiRJkiSpCoPrDuKBBx5ISyyxRK1fhiRJkiSpCvdc14HHHnuszYZmnHc9YsSIfBY1Z1ZLkiRJkuqPwXWdHMVVzUwzzZSP4vrBD36Qm5n9/Oc/n+6vTZIkSZI0eQbXdWDUqFG1fgmSJEmSpBLcc90B0MjsjjvuSHvuuWetX4okSZIkqQoz13Xs8ccfT7fccku68847897rFVZYodYvSZIkSZJUhcF1nXnjjTdyQH3rrbemV155Jc0wwwxpo402Srvuumvq0aNHrV+eJEmSJKkKy8LrwNixY9PNN9+cG5utu+666YorrkgrrrhiOv/889OMM86YfvWrXxlYS5IkSVIdM3NdB9Zaa63UtWvXtM466+RAerXVVsudwiVJkiRJHYMRXB1gL/UTTzyR91h36tQpzTzzzOmHP/xhrV+WJEmSJKmdDK7rwJAhQ9Jbb72VG5fdfvvtuSx8nnnmST/72c/yx7/55ptav0RJkiRJ0iS457pOdO/ePTctu/HGG9Pdd9+ddt555/T000+n8ePHpx133DGddNJJnoctSZIkSXXK4LoOLbLIImnffffNWWy6hm+zzTbp/vvvT1tssUWtX5okSZIkqQqD6zo2fPjwtPjii6eDDjoo3Xvvvem6666r9UuSJEmSJFVhcF3H9txzz7wXO6y00ko1fT2SJEmSpOoMruuYjcwkSZIkqWMwuJYkSZIkqSSD6zq2zz77pLnnnrvWL0OSJEmSNBkG13Xk008/TRMmTGh5e++9905vvvlm+uSTT2r6uiRJkiRJk2ZwXSeuuOKKtPbaa6cRI0a0ev/pp5+eevfunYYMGVKz1yZJkiRJmrSZJvNxTQecZX3eeeelQw45JC2//PKtPnbhhRemG2+8MZ199tmpa9euaaONNvJnIkmSJEl1xuC6DgwePDgdffTRqW/fvhN9rEuXLmmnnXZKX331Vbr88ssNriVJkiSpDlkWXgdeeumltMYaa0zyMeuss0568cUXp9trkiRJkiS1n8F1HZhrrrnS+++/P8nHfPzxx2n22Wefbq9JkiRJktR+Btd1gEZmlHxPCh/v1avXdHtNkiRJkqT2M7iuA/vtt18aPnx46tevX3rwwQfTRx99lI/k+uCDD9IDDzyQ3//www+n/v371/qlSpIkSZKqsKFZHVhggQXS1VdfnY4//vgcSFdaa6210jXXXJOWXHLJmrw+SZIkSdKkGVzXicUWWyyfdT1mzJj03HPPpU8++STNM888abnllkvzzTdfrV+eJEmSJGkSDK7rTPfu3dOXX36ZPvzwwxxc80eSJEmSVN8MruvE559/ni644II0dOjQHFgHgustt9wy77eeddZZa/oaJUmSJEnVGVzXSWC9ww475AZme+21V+rZs2c+nuvtt99OTz/9dC4Xp6EZ+7INsCVJkiSp/hhc14FLL700jR8/Pt12221pjjnmaLUPe7XVVkvbbLNN2nnnndPAgQPtGC5JkiRJdcijuOrAHXfckQ466KBWgXUR7z/44IPT7bffPt1fmyRJkiRp8gyu68Cbb76Zvv/970/yMUsssUR66623pttrkiRJkiS1n8F1HejWrVt6+eWXJ/mYl156Kc0///zT7TVJkiRJktrP4LoO/OIXv0hnn312PoKrrYZn55xzTtp4442n+2uTJEmSJE2ewXUd2G+//dK4ceNSnz590nXXXZdGjhyZXnvttfT444+nIUOGpA033DA/jk7ikiRJkqT6Y7fwOkDDMoLq3/3ud+mss85Kn376aZphhhnSN998k+aee+601VZbpf333z916dKl1i9VkiRJklSFwXWdmH322dOBBx6Y/9C47KOPPsqBNcdxderUKb3zzjvpuOOOS2eccUatX6okSZIkqYLBdR0YM2ZMOuKII9IjjzyS31577bVzEE1wzfnXl19+ebrwwgvTzDPPXOuXKkmSJEmqwj3XdeCEE05Ir7/+eg6ozz333JylPvXUU3MGu2/fvrnZ2SabbJKGDRtW65cqSZIkSarCzHUdGD58eN5v/aMf/Si/vdxyy6UtttgijRo1Ku+7vv7661OPHj1q/TIlSZIkSW0wuK4DH3/8cVpyySVb3l5kkUXSV199lRZeeOEcdFsOLkmSJEn1zbLwOkB2mqZlRbzdv39/A2tJkiRJ6gAMruu8g7gkSZIkqf5ZFl4n7rzzznzedZgwYUK6++67U9euXVs9rk+fPjV4dZIkSZKkSTG4rgMLLbRQGjRoUKv3EVRfffXVrd43wwwzGFxLkiRJUh0yuK4D9913X61fgiRJkiSpBPdcS5IkSZJUksG1JEmSJEklGVw3qC+//DIdddRRqVevXql3794T7emu5j//+U9aZZVV0iOPPDJdXqMkSZIkNQr3XDeoM844I40cOTINHjw4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+vXVnONu3q4z1/Trq/nG3deLLlazr63mneu6dKnpl1eTjrtqvvjii/x3ZQVwNQbXDYg91JXBcbw966yztuuxlY8DmW+8+uqrqd4c03vOWr8E1cDo0aNr+n0/ZvHdavr11Zzjbv3NWlcbqTnUdNwdd0rtvrZq5uMaz3XfX9YwpRmNrvG4mxRioTnmmGOSj3HUNqDu3bunDz74IO+7nmmmmVrKvwmY55prroke++6777Z6H29Xlopj7rnnTosttlgOyGec0UyxJEmSpMY2YcKEHFgTC02OwXUDWnbZZXNQTVMyjtjC8OHDU48ePSYKijnbeuDAgembb77Jzcz4+/HHH0/77LPPRM/Lc7IfW5IkSZKaxRyTyVgH048NqEuXLqlPnz7puOOOS0899VS6995706BBg9LOO+/cksWOvQMbbLBB+vjjj9PJJ5+c/v3vf+e/2Ye94YYb1vh/IUmSJEkdxwzfkKpUwyFAJri+++6780rLHnvskXbdddf8sR/84Afp1FNPTVtuuWV+mwB8wIAB6YUXXsgfO/7449Nyyy1X4/+BKn366af5ZxlVBpIkSZLqh8G11AH2eZx44onpX//6V7ruuuvy2+55lyRJkuqLZeFSnSOQXm211dLIkSNzJ3cDa00L77//fnr77bfzv6mOaM9xE9LUwpijCadUC853qgWLhxuTwbVUpxf64sW+Z8+ead55501Dhw5t+bg0tRDUbL755nl80Q2TbQcu4mh6iLmMMRenW7z22mt+8zVdx5/znaan8ePH57/d4teYDK6lGnr22Wdzg7lqF/rixX6eeeZJ6623Xrr22mtr8jrVuOLIvt69e6dnnnmm5dz7G264IV111VXprbfeym+7wq6ppTiWYp5j3P3P//xPXkjcfvvt03nnndcy9qRphfFHoHPbbbele+65J/c2qRyj0tTWqVOn/Pc///nPfN1VY3HPtVRDP/3pT/Mfms8VG5VxjBoX+oUWWij94he/SN26dUuPPvpo7vj+t7/9LZ9PLn1bjDVuKCNTiIcffjj99re/TXvvvXdexPnss8/y42abbbZ0+eWXewyfpnjRhj+zzjpry5hj8TBuKot+9atfpc6dO+cx9vOf/zxvgaGKYqONNkr9+/f3O69SKsdeXGtp4vruu++mo446Ko9V3rf88sunCy+80O+4pgqus5Vz3htvvJGvrzvttFMel1xjd9ttt7TLLrv4XW8QZq6lGoi9hXRwf+CBB/IEG4H16aefns8Zf/PNN9Of/vSnHOxwTvkPf/jDtMQSS6RrrrkmP87ScH1bxRLcqJxYY4010uyzz54uuuiiXCVx11135VMFyCgOGTLEMad2Y2vBiiuumBcJi2OOm0xuNjke8sknn0xfffVV/hjZ6mHDhuWtLz/60Y/yTSbHQbKgOHbsWL/zaheOFb3jjjtaVdtEIF0McHibeY8TU373u9/l6y2L1gcffHD6xz/+kf8dny9NCmOEeYx7tBgvxZ4llYE1R96us8466dJLL02HH354+t///d9cNXb77bfn51BjMLiWaiACG7LSY8aMyaVBeP755/O/zz333HTOOeek66+/Pi288MI5s83xaptuumm6+eab82Pdq6P2qFyE4cIfATMXeRZ4TjjhhNzMjHJc/uZIPqy88spps802a9nr775ETQ7BM1loFmdYsCmOwyuvvDKtueaa6bTTTsvZQoIa5rWNN944z4k9evTIj51lllnSMsssk29aWXyU2oNAheA4ghyukfz58MMPczaaKgiunzRv/M53vpPWX3/9HOzEfMf1mEAnFhMNrjU5jC+2T7FI88UXX7S8j2slSRS2V5111lktDWmXWmqpvJjIwiEJE+ZKFhOpTrzvvvv8hjcIg2tpGqq8OMfbDz74YC4JuuWWW9Jcc82Vb0TBBMxjyN4wYW+99dbp73//e+rVq1eemH/2s5+l9957L+/RYQL34q+2xl1bjXoYNwQsf/zjH9NvfvObdMABB+QqCTKHP/7xj9N8883Xsu+aVXe2LTDmGJvVxrQUQTVjI7LT3/ve99JLL72UAxu8/PLL+Ubz2GOPzfPdKaeckl599dV05plnpjnnnDOtvvrqOesYll122bTgggu2ZBGltsRcxyINx1YusMACLR+jOd7++++fr7lssyIIOuyww3I5+CabbJLHXsx3M888c37fQw895Mkcmqy4FrJAzYJMly5dWj7G9XKbbbbJC4rPPfdc2nfffXMlGKgMw/zzz5//XmSRRdLSSy+dnnrqqbzYqI7P4Fqaht2+K7PLvE1gzA0AN49zzz13fh83m6x6MskyKa+yyir5RpT9h5QLbbvttvlGlGzOqquu2tLYzNJwVVPs9v3Xv/41DRw4MJfhgoY9LOosuuiiuRKCbA1VEizccPNJpcTj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l1xySS7d3nvvvfPncMY1llpqqbTwwgvnrHQ8Z2TB99hjj3TGGWfkDDYNyyqPMSKgdh+1JEmSJKnug+vYR00QW5kdpoP3H/7wh3x+9T/+8Y/0xz/+MY0ZMybddNNNucnYqquumj+H/dGUgF944YVpgw02SMcff3w67LDDcrMygmuO27r++uvzcxZLzHkOMuCSJEmSJHWo4JrsdJRlF8+MJrNMUHzLLbekjz76KL/v2Wefzdno9ddfPwfhlHx/+umnuTM4f/fs2TPvnX7vvffy42lexhFdp512Wu4EzrnV7Kn++c9/nvdQx9cNlnpLkiRJkqa1Gb6prNOeAm+99VaaeeaZW86HJjgmmK0MaMeNG5d+/etf5z3TdPt+4IEH0jLLLJP233//HCyzH/rzzz/PWWsali2wwAK5FPz000/PWecjjzwyd/gmMOfvaID28MMP52z39ttvn7uDS5IkSZLUITLXZJwvuuiitO6666btttsuHXrooWno0KH/92QzzpgDazLO7I/+xS9+kTt933vvvTmA/tOf/pSOOeaYdOWVV+a3TzzxxDT33HOnOeecM2eiZ5999rTXXnul3/72t2ns2LHpoYceysE0Afbo0aPT8OHDW74OOLuas6ojsGadoMRagSRJkiRJ0/YoLgLmfv365TOjyTrz79VXXz0NGTIknXvuuWnxxRfPXbhpSEY2uWvXrrlMe6GFFsrBNQ3H2HNNNvquu+7Kzc223nrr/Nx///vf89s77rhjPouaruE0K+P9a665Zlp77bVzB3GakqF4ZFcE1BHYS5IkSZJUt8E1+6JHjRqVdtttt3TIIYe0vP+II47I5eHXXXddDq7p8E3Wmj3QdPiO4DcC5R/+8IfpwAMPzA3KOMOahmYExh9++GEOygnSyWxvtNFG+WsSdC+66KLp8MMPr/q6qpWhS5IkSZJUl8E12NtMqTb7oinlZt9z586dc2k3503HudJLL710zjKT7SZAJmu95JJLpl/+8pdpm222yY8jICfLzdnTG264YXrhhRdyUM4RXJtuumnad999W/Zyh+IRW5IkSZIk1YspilTZY0137zfffDMH1njiiSdyVpqu3p999ll+H2dW8zgCaHBMFtln9ly/++67+X1kwV955ZW0wgor5ACcY7WuuOKK3PmbPdfFJmktL9bAWpIkSZLUCN3COWO6V69eucs3R2u9//77+fxp9kiTzSZA5n3sn6Z5GUdl4bXXXsv7tLt06ZKDZBqdUWJOhjoC9UA38GpnYkuSJEmS1BDB9Q033JCDZgJsyrxpNjbbbLPlvdM77LBD2nLLLfP+6J122iktu+yyqX///jnoBllrMt2vv/56LgX3+CxJkiRJUiOY4g3Mm2yySc4o77nnnqlPnz65fJss81JLLZUbmnFkFjiqiy7hlH6Hbt265Uz2rrvumgNrSr49OkuSJEmS1HTBNWXdZK0pCR83blx+38wzz5w+/vjj9N5777Ucl0Wjsp/+9KdVs9MRVHt8liRJkiSpKcvCMWzYsHTcccelO++8M80+++zpnnvuyUdxjR07Np155plpiSWWmDavVpIkSZKkRgmusdxyy+UO4GPGjMl7rrfYYovcoKxr166tHufxWZIkSZKkRvetg+uzzjorB9a77LJL6tGjR8v7eTq7fEuSJEmSmsm3Dq4reXyWJEmSJKlZlQqux48fn7PUNCaTJEmSJKlZTbXMtSRJkiRJzcqUsyRJkiRJJRlcS5IkSZJUksG1JEmSJEklGVxLkiRJklSSwbUkSZIkSSUZXEuSJEmSVJLBtSRJkiRJJRlcS5IkSZJUksG1JEmSJEklGVxLkiRJkpTK+X8RM/Xx6fLezQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_df = comparison_df[['model', 'accuracy', 'family']]\n",
    "save_metric_barplot(\n",
    "    plot_df,\n",
    "    x='model',\n",
    "    y='accuracy',\n",
    "    hue='family',\n",
    "    output_path=FIGURES / 'joint_model_accuracy_comparison.png',\n",
    "    title='Monomodel and fusion comparison by accuracy',\n",
    "    ylabel='Accuracy',\n",
    ")\n",
    "\n",
    "plot_df_auc = comparison_df[['model', 'roc_auc', 'family']].rename(columns={'roc_auc': 'value'})\n",
    "fig, ax = plt.subplots(figsize=(10, 5))\n",
    "ax.bar(plot_df_auc['model'], plot_df_auc['value'], color=['#3182bd', '#31a354', '#756bb1', '#de2d26', '#9e9ac8'])\n",
    "ax.set_title('Monomodel and fusion comparison by ROC-AUC')\n",
    "ax.set_ylabel('ROC-AUC')\n",
    "plt.setp(ax.get_xticklabels(), rotation=20, ha='right')\n",
    "fig.tight_layout()\n",
    "fig.savefig(FIGURES / 'joint_model_roc_auc_comparison.png', dpi=300)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "codex_research_commentary": true
   },
   "source": [
    "## Synthesis Notes\n",
    "\n",
    "This cell records plain-language answers to the main comparative questions. It helps translate metric tables into dissertation claims and caveats.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "be7bfce7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-04-19T22:42:37.063957Z",
     "iopub.status.busy": "2026-04-19T22:42:37.063856Z",
     "iopub.status.idle": "2026-04-19T22:42:37.067737Z",
     "shell.execute_reply": "2026-04-19T22:42:37.067313Z"
    }
   },
   "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",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>question</th>\n",
       "      <th>answer</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Which monomodel is strongest on its own?</td>\n",
       "      <td>The published Wisconsin branch reports the highes...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>What is the main new image result?</td>\n",
       "      <td>The corrected patient-level BreaKHis model pro...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Do synthetic fusion gains look genuine?</td>\n",
       "      <td>Only cautiously. Same-label pairing inflates a...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>What should be claimed in the dissertation?</td>\n",
       "      <td>Use the unimodal findings as the main resul...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                      question  \\\n",
       "0     Which monomodel is strongest on its own?   \n",
       "1      What is the main new image result?   \n",
       "2      Do synthetic fusion gains look genuine?   \n",
       "3  What should be claimed in the dissertation?   \n",
       "\n",
       "                                              answer  \n",
       "0  The published Wisconsin branch reports the highes...  \n",
       "1  The corrected patient-level BreaKHis model pro...  \n",
       "2  Only cautiously. Same-label pairing inflates a...  \n",
       "3  Use the unimodal findings as the main resul...  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "analysis_notes = pd.DataFrame(\n",
    "    [\n",
    "        {'question': 'Which monomodel is strongest on its own?', 'answer': 'The published Wisconsin branch reports the highest published metrics, but it remains a reused external component rather than new work.'},\n",
    "        {'question': 'What is the main new image result?', 'answer': 'The corrected patient-level BreaKHis model provides the strongest new unimodal result because leakage is removed.'},\n",
    "        {'question': 'Do synthetic fusion gains look genuine?', 'answer': 'Only cautiously. Same-label pairing inflates alignment, while random-pairing controls are much weaker.'},\n",
    "        {'question': 'What should be claimed in the dissertation?', 'answer': 'Use the unimodal findings as the main results and keep synthetic fusion clearly exploratory.'},\n",
    "    ]\n",
    ")\n",
    "analysis_notes\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86fe6518",
   "metadata": {},
   "source": [
    "## Interpretation\n",
    "\n",
    "Putting the models side by side makes the trade-offs much clearer. The Wisconsin branch is still the strongest tabular component and it gives me a stable reference point. The corrected BreaKHis model is the main new image result because it is built on the patient-level split I actually trust. The synthetic fusion results are still useful, but mostly because they show how quickly artificial pairing can inflate the numbers. I expected fusion to help more than it really did once the control runs were included, and that ended up being part of the point.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "codex_research_commentary": true
   },
   "source": [
    "## How This Notebook Supports The Dissertation\n",
    "\n",
    "This notebook prevents the final discussion from becoming a list of disconnected experiments. It makes the hierarchy of evidence explicit: published tabular comparator, new patient-level image result, and exploratory synthetic fusion.\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python (dissertation_dl)",
   "language": "python",
   "name": "dissertation_dl"
  },
  "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.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
