{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# Practical 2 — Audit and build a reliable ML protocol\n",
        "\n",
        "In this practical, you will first audit a deliberately flawed experiment, then rebuild it as a valid learning and evaluation protocol.\n",
        "\n",
        "By the end of the session, you should be able to:\n",
        "\n",
        "- distinguish training, validation and test roles;\n",
        "- detect preprocessing, model-selection and duplicate leakage;\n",
        "- select a metric for an imbalanced classification problem;\n",
        "- keep related observations together during splitting;\n",
        "- combine preprocessing and prediction in a `Pipeline`;\n",
        "- select a hyperparameter with cross-validation;\n",
        "- compare a model with a simple baseline;\n",
        "- write a concise ML audit.\n",
        "\n",
        "> The intentionally flawed result is part of the exercise. Do not reuse it as evidence in the final conclusion."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "scikit-learn version: 1.9.0\n"
          ]
        }
      ],
      "source": [
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "from sklearn import __version__ as sklearn_version\n",
        "\n",
        "RANDOM_STATE = 42\n",
        "print(\"scikit-learn version:\", sklearn_version)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 1. Scenario and provided data\n",
        "\n",
        "A monitoring system must detect a rare machine failure. Each row contains measurements available before the maintenance decision. The positive class (`y = 1`) represents a failure.\n",
        "\n",
        "The dataset below is synthetic so that the methodological problems are controlled and reproducible. Some source records were accidentally exported twice. `source_id` identifies the original record.\n",
        "\n",
        "Documentation: [`make_classification`](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_classification.html)."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "X shape: (1380, 12)\n",
            "Positive-class prevalence: 14.710%\n",
            "Unique source records: 1200\n"
          ]
        }
      ],
      "source": [
        "from sklearn.datasets import make_classification\n",
        "\n",
        "X_original, y_original = make_classification(\n",
        "    n_samples=1_200,\n",
        "    n_features=12,\n",
        "    n_informative=6,\n",
        "    n_redundant=2,\n",
        "    weights=[0.85, 0.15],\n",
        "    class_sep=1.3,\n",
        "    flip_y=0.01,\n",
        "    random_state=RANDOM_STATE,\n",
        ")\n",
        "\n",
        "# Simulate heterogeneous physical units.\n",
        "feature_scales = np.array([1, 10, 100, 0.1, 50, 2, 0.01, 20, 5, 200, 0.5, 80])\n",
        "X_original = X_original * feature_scales\n",
        "\n",
        "# Simulate an accidental second export of 180 source records.\n",
        "rng = np.random.default_rng(RANDOM_STATE)\n",
        "duplicated_sources = rng.choice(len(X_original), size=180, replace=False)\n",
        "X = np.vstack([X_original, X_original[duplicated_sources]])\n",
        "y = np.concatenate([y_original, y_original[duplicated_sources]])\n",
        "source_id = np.concatenate([np.arange(len(X_original)), duplicated_sources])\n",
        "\n",
        "# Shuffle the exported rows.\n",
        "order = rng.permutation(len(X))\n",
        "X, y, source_id = X[order], y[order], source_id[order]\n",
        "feature_names = [f\"sensor_{j:02d}\" for j in range(X.shape[1])]\n",
        "\n",
        "print(\"X shape:\", X.shape)\n",
        "print(\"Positive-class prevalence:\", f\"{y.mean():.3%}\")\n",
        "print(\"Unique source records:\", np.unique(source_id).size)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 2. First inspection\n",
        "\n",
        "Before modelling, answer the following questions.\n",
        "\n",
        "1. How many exported rows and original source records are present?\n",
        "2. How many positive and negative examples are there?\n",
        "3. Would accuracy alone be sufficient for this task?\n",
        "4. Do the features have comparable numerical scales?\n",
        "\n",
        "Display the class counts and a boxplot of the features."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "tags": [
          "exercise"
        ]
      },
      "outputs": [],
      "source": [
        "# TODO: inspect the class distribution and feature scales.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "tags": [
          "correction"
        ]
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Class counts: {np.int64(0): np.int64(1177), np.int64(1): np.int64(203)}\n",
            "Number of duplicated rows: 180\n"
          ]
        },
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAABEIAAAGGCAYAAAB/gyR8AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvctoD+AAAAAlwSFlzAAAPYQAAD2EBqD+naQAAt45JREFUeJzs3XlcTfn/B/DX7bajssuEUijKvkaUZRiMEoaxM4zBmLFGlhnbjF0zYzRjmzEz2RNGttlEyJY1ikQTStY2peX2+f3x0/26041b7u106/V8PDy4n/O+p/c97r2d8z6fRSaEECAiIiIiIiIiKgMMpE6AiIiIiIiIiKi4sBBCRERERERERGUGCyFEREREREREVGawEEJEREREREREZQYLIURERERERERUZrAQQkRERERERERlBgshRERERERERFRmsBBCRERERERERGUGCyFEREREREREVGawEEJEREQaiYiIgEwmw/bt24vtZ544cQIymQzBwcFa3e/jx4/x4YcfomrVqpDJZJg1a5ZW908lX0hICGQyGf766y+pUyEiomLGQggREekNR0dHyGQytX8OHz6ss5/p5eWlk32TdGbNmoWTJ0/i/PnzEEJg6dKlUqdERERExcRQ6gSIiIgKo1GjRoiIiJA6DdJzx44dg5ubG+rUqSN1KiQRd3d3CCGkToOIiCTAHiFERERU5jx+/BhmZmZSp0FEREQSYCGEiIhKnT179qBDhw4oX748zM3N4ebmhqNHj6rE9OjRQzmsRi6Xo3r16vjggw8QExOjjDE1NcWNGzewb98+Zayjo6Nyu6GhIaZPn57v5/fo0QNNmzZVabO1tcWgQYNw6dIleHh4wNzcHJMnTwYApKenY86cOahXrx5MTExQrVo1jB49Gg8fPnzt61QoFFi8eDEcHR1hbm6OWrVq4cMPP8SNGzdU4tLT0zFv3jw4OjrC1NQUtra2+Oyzz/DkyRPgZVHg1WFGJiYmaNCgARYsWIDs7Ow3Hm9N8tc019f57rvvUKdOHZiZmaFdu3YIDQ0tdC4bN26ETCZDUlISNm3apHzNsbGxAIAHDx5gzJgxsLa2hrGxMezs7DBr1ixkZGQof8ar85b88MMPcHBwgFwux/nz5wEA165dw4ABA1C1alWYmJjAyckJ33333Rtf3yeffAIrKys8e/YMH374ISwtLVGpUiWMGjUKT58+VRublJSEkSNHolKlSnByclJu/+2339C6dWuYm5ujfPny6NatG86ePauyj/Lly+PTTz/FsWPH0LJlS5iamsLBwQHff/99vtzyYk+ePAlXV1eYmZlh8eLFAIDY2FgMHToU1apVg4mJCerXr4+FCxfme+8kJSVh+vTpcHBwUP4sX19fpKamqsRMnToVdnZ2MDY2Rs2aNTFx4kQkJycrY168eAFfX184ODjAzMwMdnZ2GD16NP79999CxaibI2Tv3r2QyWQ4ffo0/Pz8ULt2bZiamqJjx464cuVKvuMSERGB7t27w9zcHNWrV8fMmTNx48YNyGQybNy48Y3/50REJBFBRESkJxo0aCAaNWr02piVK1cKAwMDsXDhQnHv3j3x8OFDMW/ePCGXy8Wff/6p9jkvXrwQ4eHhomPHjqJevXri+fPnKj/T09NT7fPkcrmYNm1avvbu3buLJk2aqLTVqVNHdOrUSbz33nvi8uXLIiEhQQQGBooXL16Itm3bilq1aong4GCRkpIiIiIiRLt27USDBg1Eampqga91/vz5okKFCuLgwYMiLS1NJCQkiJ07d4pPPvlEGZOeni5atWolatSoIXbt2iWePHki/v33X7FmzRrh5+endr9Pnz4VO3fuFJaWlmLmzJnK9qtXrwoAYtu2bSrHTpP8NclVndDQUAFAeHl5iblz54rExERx+/Zt4e3tLUxMTMS5c+cKnYsQQlhaWoqPPvpI5Wc9e/ZM1K1bVzg4OIgTJ06I5ORksXfvXlGpUiXh7u4ucnJyVHLq27evmDNnjoiPjxfHjx8XERER4syZM8Lc3Fx4enqK69evi5SUFLFr1y5hYWGhcizVGTdunLC0tBQffPCBOHDggEhOThb//POPsLGxES1bthRZWVn5YgcOHCj2798vnj59Kn766SchhBCzZs0SxsbGYvXq1eLBgwciPj5eTJo0Kd/xKleunOjevbvo06ePuHHjhnj8+LFYtmyZMDAwEMuXL1fJ7dXY69evi7i4OPH777+L+/fvi+rVq4smTZqI8+fPi6SkJLFlyxZRrlw50bdvX5Vj6+joKGxtbUVwcLBISkoSMTExYtmyZWLTpk1CCCGSk5NFw4YNRf369cXff/8tUlNTxfnz50Xjxo1Fq1atlK//008/FVWrVhUhISEiPT1d3Lt3T/zyyy8qn0VNYo4ePSoAqHwv7NmzRwAQQ4YMEStXrhSPHj0SN27cEE2bNhV169YV2dnZyti4uDhRsWJF0b59exERESGePn0q1q9fLz744AMBQGzYsOG1/99ERCQdFkKIiEhvNGjQQADI96dTp05CCCHi4+OFsbGxGDduXL7ndu3aVbRo0eK1+4+KihIARHBwsMrP1FYhxMjISNy9e1el/dtvvxUARGhoqEp7XFycMDIyKrBYIYQQ7u7uwsPD47WvaeXKlQKA+Pvvv18bp87cuXNFxYoVlY/VFUI0zV+TXNXJKzp0795dpT0jI0PUqFFDvPvuu4XORRRQCFm4cKEAIM6cOaPS/vPPPwsAYteuXSo5devWLV++rVq1EvXq1ROZmZkq7StXrhSGhoYiPj6+wNc6btw4AUD89ttvKu3BwcECgPj111/zxf7yyy8qsZGRkUImk4k5c+aotOfm5ormzZurHMdy5coJCwsLkZSUpBI7aNAgUb58eZGSkqISW758+Xyxn332mZDL5eLmzZsq7StWrBAAxNGjR4V4WZwxMDAQFy9eLPD1z5s3TxgYGIiIiAiV9oiICJXj4uzsLAYMGFDgfjSNeV0hZPTo0SqxBw4cEADEkSNHlG0TJ04UJiYm+f5PJ0+ezEIIEVEJx6ExRESkVxo1aoSXhXzln5CQEADAH3/8gaysLAwYMCDf87p27YoLFy4gLS0NABATE4OhQ4fCxsYGRkZGKsNebt26pZPcmzdvDhsbG5W2/fv3o0aNGujQoYNKe61atdCgQQMcO3aswP01adIEx48fx7x58xAREaF24seDBw+iRo0a6Ny582tzCwwMRKdOnWBlZQUDAwPIZDIsXrwYz549Uw6hUUfT/DXJ9XX69Omj8tjU1BQ9evTAsWPHoFAoCpVLQf7++2/Y2NigdevWKu39+/dXbn9dTomJiTh37hw8PT1hbGyssq1r167IycnBqVOnCv1ae/bsCWNjY/zzzz9vjD1w4ACEEPk+AzKZDJ07d853DDp16gRLS0uVNi8vL6SlpeUbSqMu9u+//4aLiwvq1aun0v7fY3bw4EE0bNgw35CxV+3fvx8NGzZEo0aNVNobNWqEGjVqqLyX9u/fjyVLlhQ4tEqTmNfp1auXymNnZ2cAwO3bt5VtR48eRYsWLWBtba0S+9//EyIiKnlYCCEiolLjwYMHAIDu3bvD0NAQcrkcBgYGMDAwwKxZsyCEwNOnT5GcnIz27dvj1q1bCAoKQlJSEoQQuHfvHgBoNC/G6xR0kf/OO++ozfnBgwcwNDRUyVkmkyEiIuK1RYivvvoKU6ZMwaZNm+Di4oKqVati2LBhKhd+Dx8+VPtzXxUYGIgBAwagXbt2uHjxIjIzM1WWlH3d8dA0f01yfZ3q1aurbcvMzFQWt97mWALAkydPUKNGjXzt5cuXR7ly5fD48WOV9v8e17z33+rVq5U/Py+HvALAm3IwNTWFhYWFSptMJkPVqlXz/Xxzc3NYWVmpzaFFixb5PgMrV67EixcvkJ6erowv6Lji5dwxr3u9eM0xy2vL24cm78MHDx7g2rVrav//Hjx4oDx2a9aswejRo+Hn5wdHR0dYW1tjzJgxKvN/aBLzOv8tbuT9nyQlJam89mrVquV7rro2IiIqWVgIISKiUqNKlSoAgJMnTyInJwcKhQK5ubnIzc1V9h6pXbs2jhw5gsTERKxevRqtW7dGuXLlAAB37twp1M+ztLRUmegxz/3799XGGxkZqc3ZwcEBOTk5Kjnn5Xv8+PECf365cuWwYsUKxMfH4+bNm1i0aBFCQkLg5uamzKtq1aoF5pPn119/hZ2dHZYuXQo7OztlnpocD03z1yTX10lMTFTbZmJigvLlyxcql4JUqlRJ7c9JS0vD8+fPle+vPP/9/8zb/sUXXyh//n9z+Pjjj1+bw4sXL5CSkqLSJoTAo0ePULly5df+/FdzuHHjRoGfAXNzc2V8QccVgEY/r6BjlteWl48m78MqVaqgTZs2Bf7/BQUFAQAqVqyItWvXIjExEdevX8esWbPw+++/o1OnTsjJydE45nVkMtkbYypXrqx2QuM3TXJMRETSYyGEiIhKje7du8PIyAg7duzQKN7ExETl8a+//povply5csjMzFT7fHt7e0RERKi03bp1q1Bd8d9//33cunULFy5c0Pg56tSrVw/jx4/Hl19+iUePHiEyMhIA0Lt3bzx48CDfqjn/9d9jkZ6errzw1Hb+BeX6Ovv371d5nJmZiSNHjqBTp06Qy+VFzuVVXbp0wd27dxEeHq7SnnccunTp8trnv/POO2jWrBmCgoI0utguyH9f66FDh5CVlfXGn4+XQzpkMpnGn4Hjx4/nK7zs27cP5cqVQ5s2bd74/C5duuDKlSsqQ0YAYPfu3crtePk+vH79Oi5dulTgvt5//31cuHBB46FpMpkMTk5O+PzzzzF16lT8+++/iIuLK3RMUXl4eCA8PFzZCydPcHCwVvZPRES6w0IIERGVGjY2NliyZAm+/fZbzJs3D3fu3EFGRgZu3LgBf39/DB06FHhlroM5c+bg7t27ePjwIZYuXZrvghAv5wa4dOmScnnVV40dOxanTp3C+vXrkZqaivDwcEyfPh2tWrXSOOcJEyagXbt26Nu3L3bv3o3Hjx8jOTkZZ86cwaRJk/Dzzz8X+FwvLy9s2rQJt27dQmZmJqKjo7Ft2zZUq1YNDRs2BACMHz8erVq1wuDBg7F79248e/YMd+/exdq1a/HNN98AL+c0iIqKwrfffou0tDRERkaib9+++ebaeJv8Ncn1dUxMTDB//nw8fPgQsbGxGDZsGJ48eYJFixZp5VgCwKRJk2Bra4vBgwcjLCwMqamp2L9/P6ZOnQo3Nzf07dv3jXn++OOPiImJgbe3Ny5cuID09HTcvXsX+/btQ5cuXVSWgVXH0tIS+/fvx6FDh5Camopjx47hk08+QbNmzTBw4MA3/nxnZ2fMmjULCxYswLJlyxAXF4eMjAxcv34dq1atwoQJE1Ti27Rpg5EjRyI6OhpPnz7FypUrsWPHDsydOxcVKlR448+bOXMmKleujP79++PixYtISUnB9u3bMX/+fPTp0wfu7u4AAB8fH9SvXx99+/bFwYMHkZycjDt37mD58uXK/5eZM2eifv366N27Nw4cOIBnz57h6dOnOHnyJMaMGYM9e/YAL+dbCQgIwJ07d5CZmYnr168jKCgIdevWRe3atTWOeVs+Pj4wNzfHwIEDERkZqVySOT4+Xiv7JyIiHZJ6tlYiIiJNabJ8rhBCHDx4UHTr1k1YWVkJU1NT4eTkJD777DMRExOjjDlx4oRo166dMDc3F9bW1sLHx0fEx8cLAGLFihXKuNjYWNG5c2dRrlw5AUA0aNBAuU2hUIg5c+aI6tWrCzMzM9G1a1dx69atAleNGThwoNp8MzIyxOLFi4Wzs7MwNTUVlSpVEq6ursLf319lKd//un79uhg3bpxwcHAQJiYmwsbGRowYMSLfCh5paWnC19dX2NvbC2NjY2Frays+++wz8fjxYyFeriiydOlSYWdnJ0xNTUXTpk3F77//Lvz8/AQAkZCQIEQBq8Zomr+muf5X3got+/fvF6tXrxa1atUSJiYmok2bNiIkJKTIx1LdqjHi5cpDo0aNEtWrVxeGhoaiTp06YsaMGSItLU1tTurcuHFDDB8+XNSsWVMYGRmJOnXqiH79+ilXUClI3pK4T548EQMGDBAVKlQQVlZWYvjw4eLRo0dqYwuya9cu0alTJ2FhYSHMzc2Fs7Oz8PHxUVm1qFy5cmLixInin3/+EU2bNhXGxsaibt264ttvv823v7xYdW7fvi0+/PBDUaVKFWFkZCTs7e3Fl19+mW/lnKdPn4rJkyeLOnXqCGNjY+Hg4CBmzZqlsjpNamqqmDNnjnB0dBQmJiaiSpUqomPHjuLnn39W7u/ChQtixIgRyvdrnTp1xLhx40RcXJxyP5rEvG7VmLCwMJXcnz17JgCIJUuWqLRfvXpVdOvWTZiZmYmqVasKHx8fcenSpXyr/BARUckiE4Wdtp2IiIiItO6TTz7B9u3bVSbk1KXy5ctj5MiR+P7774vl55UVR44cQY8ePfDHH3+gW7duUqdDRERqcGgMEREREZGW7N69G6ampvmWYSYiopKDhRAiIiIioiKYOHEiDh8+jKSkJNy7dw9Lly7Fzz//jGnTpsHS0lLq9IiIqACGUidARERERKSPRo4ciQULFmDkyJFISkqCg4MDVq1ahUmTJkmdGhERvQbnCCEiIiIiIiKiMoNDY4iIiIiIiIiozGAhhIiIiIiIiIjKDM4RUkS5ubmIj49HhQoVIJPJpE6HiIiIiIiIqMwSQiA1NRU1a9aEgcHr+3ywEFJE8fHxqFWrltRpEBEREREREdFLd+/ehY2NzWtjWAgpogoVKgAvD7KFhYXU6RARERERERGVWSkpKahVq5byWv11WAgporzhMBYWFiyEEBEREREREZUAmkxdwclSiYiIiIiIiKjMYCGEiIiIiIiIiMoMFkKIiIiIiIiIqMxgIYSIiIiIiIiIygwWQoiIiIiIiIiozOCqMURERERERBJSKBQIDQ1FQkICrK2t4ebmBrlcLnVaRKUWe4QQERERERFJJCgoCA4ODvDw8MDgwYPh4eEBBwcHBAUFSZ0aUanFQggREREREZEEgoKC0L9/f7i4uCAsLAypqakICwuDi4sL+vfvz2IIkY7IhBBC6iT0UUpKCiwtLZGcnAwLCwup0yEiIiIiIj2iUCjg4OAAFxcX7N69GydPnlQOjWnfvj369euHiIgIREdHc5gMkQYKc43OHiFERERERETFLDQ0FLGxsXB1dUX9+vVVhsbUr18f7dq1w507dxAaGip1qkSlDgshRERERERExSwhIQEA4Ovrq3ZozOzZs1XiiEh7uGoMERWrrKws+Pv7IyYmBvb29pgwYQKMjY2lTouIiIioWFWrVg0A0KFDB+zduxcGBv9/j7pt27bYu3cvOnbsiJMnTyrjiEh7WAghomLj4+MDPz8/5OTkKNtmzJiBKVOmYPny5ZLmRkRERFSSyGQyqVMgKrU4NIaIioWPjw9WrFiBypUrY8OGDUhISMCGDRtQuXJlrFixAj4+PlKnSERERFRsHj58CAA4efIkvLy8VIbGeHl54eTJkypxRKQ9XDWmiLhqDJHmsrKyUK5cOVSuXBn37t2DoeH/OqPl5OTAxsYGT548wfPnzzlMhoiIiMqEkJAQeHh4YMmSJVi3bh1iY2OV2+zs7DB27FjMnj0bR48ehbu7u6S5EukDrhpDRCWKv78/cnJysHjxYpUiCAAYGhpi4cKFyMnJgb+/v2Q5EhERERUnNzc32Nra4tSpU7h58yaOHj2KrVu34ujRo7hx4wbCwsJgZ2cHNzc3qVMlKnVYCCEinYuJiQEA9O7dW+32vPa8OCIiIqLSTi6XY9WqVQgODka/fv1gYmKC3r17w8TEBP369UNwcDBWrlwJuVwudapEpY5eFkKeP3+OkJAQnD17FgqFQm3MxYsXcfjwYdy9e7fA/WgSQ0Rvz97eHgAQHBysdntee14cERERUVng7e2NwMBAXL16Fa6urrCwsICrqysiIiIQGBgIb29vqVMkKpX0bo6QjRs3Ytq0aXB0dIS5uTkyMjKwZ88eWFtbAwBSU1PRu3dvREZGokGDBggPD4ePjw/mz5+v3IcmMW/COUKINMc5QoiIiIgKplAoEBoaioSEBFhbW8PNzY09QYgKqTDX6Hq1fO6hQ4fw8ccfY8+ePfD09AQAXLp0CampqcpCyNy5c3H//n3cuHEDFStWxD///IMuXbrA3d1dOcmQJjFEpD3GxsaYMmUKVqxYARsbGyxcuBC9e/dGcHAwvvjiCyQmJmLGjBksghAREVGZJJfLeR1CVIz0qkdI+/btUaVKFezbt0/tdiEEqlSpgunTp8PX11fZ3rJlSzRp0gSbNm3SKEYT7BFCVHg+Pj7w8/NDTk6Oss3Q0BBTpkzB8uXLJc2NiIiIiIj0V6nsEfLixQucOXMG33//PeLj43H16lXUrFkTzs7OkMlkAIB79+7h6dOnaNKkicpzmzZtisuXL2sco05mZiYyMzOVj1NSUrT8ColKv+XLl2Px4sXw9/dHTEwM7O3tMWHCBPYEISIiIiKiYqM3hZAnT55AoVDg2LFj+Prrr+Ho6IirV6/inXfewe+//46aNWsiOTkZAFCxYkWV51auXBlJSUkAoFGMOkuWLMGCBQt08MqIyhZjY2NMnjxZ6jSIiIiISgzOEUJUvPRm1Zi8O8aXLl3C9evX8ccffyAmJgbZ2dmYNm2aSkx6errKc9PS0mBiYqJxjDq+vr5ITk5W/uFKM0RERERE9LaCgoLg4OAADw8PDB48GB4eHnBwcEBQUJDUqRGVWnpTCKlSpQosLCzQu3dvlC9fHgBgbm6O999/H2fOnAEA1K5dG3K5PF+R4u7du7Czs9M4Rh0TExNYWFio/CEiIiIiIiqqoKAg9O/fHy4uLggLC0NqairCwsLg4uKC/v37sxhCpCN6UwiRyWTo2bMnoqOjVdpv3bqFd955BwBgamoKDw8P7N69W7n92bNn+Pvvv/Hee+9pHENERERERKRLCoUC06ZNQ+/evbF37160bdsW5cuXR9u2bbF371707t0b06dPh0KhkDpVolJHr1aNuXXrFtq0aYNBgwahffv2OHPmDH744QccPHgQXbt2BQCcP38ebm5uGDp0KNq1a4d169YhIyMDZ8+ehampqcYxb8JVY4iIiIiIqKhCQkLg4eGBsLAwtG3bNt/2sLAwuLq64ujRo1xal0gDhblG15seIQDg4OCACxcuoHz58vj9999hYmKCS5cuKYsgeLkM7vnz52FmZoYjR47g/fffx4kTJ1QKHJrEEBERERER6UpCQgIAwNnZGRkZGfj000/RvXt3fPrpp8jIyICzs7NKHBFpj171CClJ2COEiIiIiIiKKq9HiJubG0JDQ/Ntz2tnjxAizZTaHiFERERERESlgZubG8zMzBAaGgpjY2PMmjULt27dwqxZs2BsbIzQ0FCYmZnBzc1N6lSJSh0WQoioWCkUCoSEhGDbtm0ICQnhBGBERERUJmVlZSEjIwMA0LVrV/Tp0wfVqlVDnz59lEP/MzIykJWVJXGmRKUPCyFEVGyCgoLg4OAADw8PDB48GB4eHnBwcODScERERFTmzJgxAwDQt29fXL9+Ha6urrCwsICrqysiIyPh5eWlEkdE2sNCCBEVi6CgIPTv3x8uLi4ICwtDamoqwsLC4OLigv79+7MYQkRERGVKdHQ0AGDFihW4desWjh49iq1bt+Lo0aOIjo7GsmXLVOKISHtYCCEinVMoFJg2bRp69+6NvXv3om3btihfvjzatm2LvXv3onfv3pg+fTqHyRAREVGZUa9ePQDAxo0bIZfL4e7ujg8//BDu7u6Qy+XYtGmTShwRaQ9XjSkirhpDpLm8WdHDwsLQtm3bfNvDwsLg6urKWdGJiIiozMjIyIC5uTmMjY2RmpoKY2Nj5basrCxUqFABWVlZSE9Ph5mZmaS5EukDrhpDRCVKQkICAMDZ2Vnt9rz2vDgiIiKi0s7MzAyenp7KosfMmTNx8+ZNzJw5U1kE8fT0ZBGEJFVaFzpgIYSIdM7a2hoAEBERoXZ7XnteHBEREVFZsHfvXmUxZPny5WjQoAGWL1+uLILs3btX6hSpDCvNCx1waEwRcWgMkeYUCgUcHBzg4uKCvXv3wsDgfzXY3NxceHl5ISIiAtHR0ZDL5ZLmSkRERKRN6enpiIqKem1MRkYGVq1ahejoaNSrVw/Tpk3TqCeIo6MjzM3NtZgt0f/LW+igd+/emD17NpydnREREYGvv/4awcHBCAwMhLe3t9RpqijMNToLIUXEQghR4eR9mfbq1Qs9evSAmZkZMjIycPjwYRw4cKBEfpkSERERva0LFy6gRYsWOtl3eHg4mjdvrpN9U9mlrzcxWQgpBiyEEBWej48P/Pz8kJOTo2wzNDTElClTsHz5cklzIyIiItIFTXqEAEBkZCSGDh2KgIAAODk5abRv9gghXdDXhQ4Kc41uWGxZEVGZFhQUhJUrV6JXr1547733lD1CDh06hJUrV6Jt27bsEUJERESljrm5eaF6bTg5ObGXB0mqLCx0wEIIEemcQqHAtGnT0Lt373zd6z755BN4eXlh+vTp8PT0LFHd64iIiIiIyppXFzpQ1yOkNCx0wFVjiEjnQkNDERsbi9mzZ6sUQQDAwMAAvr6+uHPnDkJDQyXLkYiIiIiIADc3N9ja2uLrr79Gbm6uyrbc3FwsWbIEdnZ2cHNzkyzHt8UeIUSkc2Whex0RERERUWkgl8uxatUq9O/fH56engUudKDPPblZCCEinXu1e12rVq0QGhqKhIQEWFtbw83NrVR0ryMiIiIiKi28vb0xffp0+Pn5ITg4WNluaGiI6dOn6/3cfiyEEJHO5XWvmzRpEh49eoR///1Xua1OnTqoWrWq3nevIyIiIiIqLUr7QgecI4SIdE4ul2PAgAE4f/48Xrx4gfXr1yM+Ph7r16/HixcvcP78efTv31+vu9cREREREZUGry50sG/fPkyYMAGjRo3ChAkTsG/fPvTu3RvTp0+HQqGQOtUiYyGEiHROoVBg165daNmyJczMzPDxxx+jZs2a+Pjjj2Fubo6WLVsiMDBQr79MiYiIiIhKg7Kw0AGHxhCRzuV9mW7btk3tHCFnz56Fq6srQkND4e7uLnW6RERERERlVllY6ICFECLSuVe/TOVyeb5iR2n4MiUiIiIiKg1eXeigbdu2+baXhoUOODSGiHTu1S9ThUKBkJAQbNu2DSEhIVAoFKXiy5SIiIiIqDTIW+jg66+/Rm5ursq23NxcLFmyRO8XOtDbHiEPHjzAiRMnUK9ePTRp0kRlmxAC58+fR2JiIpydnWFra5vv+ZrEEJF2cNUYIiIiIiL9IJfLsWrVKvTv3x9eXl7w9fWFs7MzIiIisGTJEgQHByMwMFCvFzrQyx4hCoUCAwYMwODBg/Hzzz+rbEtJSYGbmxv69OmDVatWoVGjRpg7d26hY4hIe7hqDBERERGR/vD29kZgYCCuXr0KV1dXWFhYwNXVFREREQgMDNTrpXOhrz1C5s+fDxsbG6SmpubbNnfuXCQmJiIyMhJWVlY4duwY3N3d0blzZ3Tu3FnjGCLSnldXjXn8+DE+/vhj5TY7OzvlqjFLlixhMYSIiIiIqATw9vaGp6dnvoUOSsP5ut4VQo4ePYqAgABcvHgx34SLQggEBATAx8cHVlZWAIBOnTqhVatWCAgIQOfOnTWKISLt4qoxRERERET6R91CB6WBXhVCHj9+jOHDh+O3335TFjFede/ePTx79gyNGzdWaW/cuDEuXbqkcYw6mZmZyMzMVD5OSUnRwisiKhu4agwRERERUcmSnp6OqKioN8ZlZGQgNjYWtra2MDMz02jfjo6OMDc310KWuqE3hRAhBEaMGIGhQ4cWWJFKTk4GAFSsWFGlvXLlykhKStI4Rp0lS5ZgwYIFb/06iMqiV1eNad68Ofz9/RETEwN7e3tMmDCBq8YQERERERWzqKgotGjRQif7Dg8PR/PmzXWyb23Qm0LIzp07cfLkSQwdOhSBgYHAy6LGrVu3EBgYiH79+sHExAR4Wdl6VVpaGkxNTQFAoxh1fH19MXXqVOXjlJQU1KpVS4uvkKj0yls1ZujQobh9+zaEEMptU6dORd26dblqDBERERFRMXJ0dER4ePgb4yIjIzF06FAEBATAyclJ432XZHpTCLG0tETXrl2xe/duZduzZ89w48YNbN++Hd7e3qhVqxYMDQ0RFxen8ty4uDjUrVsXADSKUcfExERZRCGiwpHL5WjSpAn27duXb5sQAjExMfD09CwVEy8REREREekDc3PzQvXacHJyKtG9PApDb5bP7dGjBwIDA1X+2NraolevXggMDISBgQFMTU3h4eGh7DECAE+ePMHff/+N9957DwA0iiEi7crKysLvv/8OADAwUP3ayXv8+++/IysrS5L8iIiIiIio7NCbQoimli5dipCQEIwaNQrr169Hjx49UL9+fYwePbpQMUSkPd999x2EELCwsEB6ejqOHj2KrVu34ujRo0hPT0eFChUghMB3330ndapERERERFTK6XUhpFu3bmjatKlKW/PmzREeHo6KFSvi2LFj6NevH0JDQ1WGtWgSQ0Tas3fvXgDAF198ARMTE7i7u+PDDz+Eu7s7TExMMHfuXJU4IiIiIiIiXdGbOULUWbFihdp2R0dHrF69+rXP1SSGiLRDJpNpNY6IiIiIiKio9LpHCBHpB09PTwDAggULkJOTo7ItJycHixcvVokjIiIiIiLSFRZCiEjnPvvsM8hkMqSmpqJmzZqYNm0a1q5di2nTpqFmzZpITU2FTCbDZ599JnWqRERERERUyun10Bgi0g/GxsaYPn06VqxYgUePHqkdljZ9+nQYGxtLkh8REREREZUd7BFCRMWibdu2gJp5QPIe520nIiIiIiLSJRZCiEjnFAoFpk2bhvfffx+pqamYOHEi3n33XUycOBGpqal4//33MX36dCgUCqlTJSIiIiKiUo6FECLSudDQUMTGxsLV1RWNGjXC2rVr8ccff2Dt2rVo1KgR2rVrhzt37iA0NFTqVImIiIiIqJTjHCFEpHMJCQkAAF9fX5iZmalse/jwIWbPnq0SR0REREREpCsshBCRzlWrVk35786dO8PBwQEZGRkwMzPDrVu3cODAgXxxREREREREusBCCBHpXN7cH6ampjh8+LDKXCBy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",
            "text/plain": [
              "<Figure size 1100x400 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "classes, counts = np.unique(y, return_counts=True)\n",
        "print(\"Class counts:\", dict(zip(classes, counts)))\n",
        "print(\"Number of duplicated rows:\", len(X) - np.unique(source_id).size)\n",
        "\n",
        "plt.figure(figsize=(11, 4))\n",
        "plt.boxplot(X, tick_labels=feature_names)\n",
        "plt.xticks(rotation=60, ha=\"right\")\n",
        "plt.ylabel(\"Observed value\")\n",
        "plt.title(\"Feature scales before preprocessing\")\n",
        "plt.tight_layout()\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "tags": [
          "correction"
        ]
      },
      "source": [
        "### Proposed answer\n",
        "\n",
        "1) 180 duplicates, 1200 original\n",
        "2) 1177 vs 203\n",
        "3) The positive class is rare, so a model that predicts only the negative class can obtain high accuracy. \n",
        "Precision, recall and F1 score will make failures in the positive class more visible. \n",
        "4) The feature scales differ by several orders of magnitude, which matters for a distance-based classifier.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 3. The deliberately flawed experiment\n",
        "\n",
        "The following experiment was sent with this conclusion:\n",
        "\n",
        "> “The model reaches excellent accuracy. We tested many values of $k$ and retained the best one, so this model is validated and ready for deployment.”\n",
        "\n",
        "Run the code, an then audit it to identify errors."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "tags": [
          "flawed-example"
        ]
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Selected k: 1\n",
            "Reported test accuracy: 0.942\n"
          ]
        }
      ],
      "source": [
        "from sklearn.model_selection import train_test_split\n",
        "from sklearn.preprocessing import StandardScaler\n",
        "from sklearn.neighbors import KNeighborsClassifier\n",
        "\n",
        "X_scaled = StandardScaler().fit_transform(X)\n",
        "\n",
        "X_train_bad, X_test_bad, y_train_bad, y_test_bad, id_train_bad, id_test_bad = train_test_split(\n",
        "    X_scaled, y, source_id, test_size=0.25, random_state=RANDOM_STATE\n",
        ")\n",
        "\n",
        "best_accuracy_bad = -np.inf\n",
        "best_k_bad = None\n",
        "best_model_bad = None\n",
        "\n",
        "for k in range(1, 31):\n",
        "    candidate = KNeighborsClassifier(n_neighbors=k)\n",
        "    candidate.fit(X_train_bad, y_train_bad)\n",
        "    test_accuracy = candidate.score(X_test_bad, y_test_bad)\n",
        "    if test_accuracy > best_accuracy_bad:\n",
        "        best_accuracy_bad = test_accuracy\n",
        "        best_k_bad = k\n",
        "        best_model_bad = candidate\n",
        "\n",
        "print(\"Selected k:\", best_k_bad)\n",
        "print(\"Reported test accuracy:\", f\"{best_accuracy_bad:.3f}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 4. Audit the protocol\n",
        "\n",
        "Identify at least five problems in the experiment or its conclusion. For each problem, state:\n",
        "\n",
        "- what information or assumption is problematic;\n",
        "- why it can bias the result;\n",
        "- how the protocol should be changed.\n",
        "\n",
        "Consider preprocessing, partitions, duplicated sources, metric choice, model selection and the strength of the final claim."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "tags": [
          "exercise"
        ]
      },
      "outputs": [],
      "source": [
        "# TODO: write your audit as Python comments or in a new Markdown cell.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "tags": [
          "correction"
        ]
      },
      "source": [
        "### Proposed audit\n",
        "\n",
        "1. `StandardScaler` was fitted before splitting, so test-set feature statistics influenced training.\n",
        "2. Rows were split without stratification, making the rare-class proportion less controlled.\n",
        "3. Duplicate source records can occur in both partitions, so some test observations may already have been seen during training.\n",
        "4. The test set was used repeatedly to select $k$; it therefore acted as validation data.\n",
        "5. Accuracy hides errors on the rare positive class.\n",
        "6. No simple baseline was evaluated.\n",
        "7. One split gives no information about sensitivity to the partition.\n",
        "8. The result does not compute a trustworthy performance: there is no independent final evaluation, averaged performance values and uncertainty estimate."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 5. Show why accuracy is insufficient\n",
        "\n",
        "Evaluate the flawed selected model with:\n",
        "\n",
        "- accuracy;\n",
        "- precision, recall and F1 score for the positive class;\n",
        "- ROC-AUC, computed from the positive-class scores;\n",
        "- a confusion matrix.\n",
        "\n",
        "Compare it with a classifier that always predicts the most frequent class. Recall that random ranking corresponds to a ROC-AUC of 0.5.\n",
        "\n",
        "Documentation: [classification metrics](https://scikit-learn.org/stable/modules/model_evaluation.html#classification-metrics), [`DummyClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.dummy.DummyClassifier.html)."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "tags": [
          "exercise"
        ]
      },
      "outputs": [],
      "source": [
        "# TODO: compute several metrics for best_model_bad and a most-frequent baseline.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "tags": [
          "correction"
        ]
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Selected k-NN\n",
            "  accuracy : 0.942\n",
            "  precision: 0.854\n",
            "  recall   : 0.714\n",
            "  F1 score : 0.778\n",
            "  ROC-AUC  : 0.847\n",
            "Most-frequent baseline\n",
            "  accuracy : 0.858\n",
            "  precision: 0.000\n",
            "  recall   : 0.000\n",
            "  F1 score : 0.000\n",
            "  ROC-AUC  : 0.500\n"
          ]
        },
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfwAAAHGCAYAAACRsznYAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvctoD+AAAAAlwSFlzAAAPYQAAD2EBqD+naQAAQt1JREFUeJzt3XlclNX+B/DPsA27qMgmICqCiGua4ZIsauZu7vtyy9LqiqVm2e2WvxarqzfLFq+aa3UtlzJNDTPXEq8LLqAguIELqIiAIAPMnN8fypMjCgMzMAzn8369nlfOmfM8851p9Dvfc87zPCohhAARERHValbmDoCIiIiqHhM+ERGRBJjwiYiIJMCET0REJAEmfCIiIgkw4RMREUmACZ+IiEgCTPhEREQSYMKvgf773//ip59+MncYFbJ582asXr3a3GHUaFlZWVi4cCESExPNHUqlpKam4rvvvsOnn36Kffv2mfz4lv75VDV+PmQsG3MHIJONGzciNTX1oc/17NkToaGhAIAFCxbA3d0dgwYNquYIK+/rr79GYmIixo8fb+5QFNevX8e3336LPn36ICgoyNzhICMjA6+88grc3d3RvHlzc4dTITExMRg0aBB69uyJxo0bo3HjxiZ/DUv+fCqist9LWT4fqjpM+NXoyy+/xL59+zB16tRSz+Xm5polptrs8uXLeOWVV+Dl5VUjEr4lmzdvHjp06IBNmzZV2WvUq1cP0dHRCAkJqbLXqAkq+72U5fOhqsOEX80cHBywcOFCc4dBVCEpKSmIjIys0tfw8PDg340y8PMhYzHhW4iff/4Z586dAwBYW1ujfv366Nq1K/z9/ZU+MTExSEtLw7PPPqu0HT9+HLt27cITTzyBTp06Ke3fffcdHB0dS00bHD16FHFxcdBqtXjsscfQoUOHUrHk5eVh+/btyMzMRIcOHfDYY48Z/D5WrlyJBg0aoG/fvjh8+DCOHDkCDw8P9OrVC46Ojo/se+LECRw8eBDNmjVDREQEAODGjRv4/fffcePGDTRs2BBRUVFwcXEBAJw9exbffvstAGDbtm1IT08HAISFhSEsLEx5jbKOcb+CggLs2bMH58+fh6enJ7p164b69evr9TH0WA9at24drl69imnTphn0GZoilvT0dKxduxb9+/dHo0aNsH37dly6dAktW7ZE165dlX6nTp1CTEwMsrKy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",
            "text/plain": [
              "<Figure size 640x480 with 2 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "from sklearn.dummy import DummyClassifier\n",
        "from sklearn.metrics import (\n",
        "    accuracy_score, precision_score, recall_score, f1_score, roc_auc_score,\n",
        "    ConfusionMatrixDisplay, RocCurveDisplay,\n",
        ")\n",
        "\n",
        "pred_bad = best_model_bad.predict(X_test_bad)\n",
        "score_bad = best_model_bad.predict_proba(X_test_bad)[:, 1]\n",
        "dummy_bad = DummyClassifier(strategy=\"most_frequent\")\n",
        "dummy_bad.fit(X_train_bad, y_train_bad)\n",
        "pred_dummy_bad = dummy_bad.predict(X_test_bad)\n",
        "score_dummy_bad = dummy_bad.predict_proba(X_test_bad)[:, 1]\n",
        "\n",
        "def classification_metrics(y_true, y_pred, y_score):\n",
        "    return {\n",
        "        \"accuracy\": accuracy_score(y_true, y_pred),\n",
        "        \"precision\": precision_score(y_true, y_pred, zero_division=0),\n",
        "        \"recall\": recall_score(y_true, y_pred),\n",
        "        \"F1 score\": f1_score(y_true, y_pred),\n",
        "        \"ROC-AUC\": roc_auc_score(y_true, y_score),\n",
        "    }\n",
        "\n",
        "def print_classification_metrics(name, metrics):\n",
        "    print(name)\n",
        "    for metric_name, value in metrics.items():\n",
        "        print(f\"  {metric_name:9s}: {value:.3f}\")\n",
        "\n",
        "metrics_bad = classification_metrics(y_test_bad, pred_bad, score_bad)\n",
        "metrics_dummy_bad = classification_metrics(\n",
        "    y_test_bad, pred_dummy_bad, score_dummy_bad\n",
        ")\n",
        "print_classification_metrics(\"Selected k-NN\", metrics_bad)\n",
        "print_classification_metrics(\"Most-frequent baseline\", metrics_dummy_bad)\n",
        "\n",
        "ConfusionMatrixDisplay.from_predictions(y_test_bad, pred_bad)\n",
        "plt.title(\"Flawed protocol: confusion matrix\")\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "tags": [
          "correction"
        ]
      },
      "source": [
        "### Interpretation\n",
        "\n",
        "The dummy model obtains high accuracy solely because negatives dominate, while its precision, recall and F1 score are zero. Its constant score also gives a ROC-AUC of 0.5, the random-ranking reference. Accuracy therefore cannot support the conclusion on its own. The selected k-NN may improve minority detection, but its current result remains invalid because preprocessing, duplicates and model selection contaminated the test evaluation."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 6. Measure duplicate leakage\n",
        "\n",
        "Use `id_train_bad` and `id_test_bad` to count how many original sources occur in both partitions.\n",
        "\n",
        "Why does this violate the independence expected between training and test data?"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "tags": [
          "exercise"
        ]
      },
      "outputs": [],
      "source": [
        "# TODO: find source identifiers shared by the flawed training and test sets.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "tags": [
          "correction"
        ]
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Sources present in both train and test: 69\n",
            "First shared identifiers: [  8  27  42  83  91 107 126 130 132 142]\n"
          ]
        }
      ],
      "source": [
        "shared_sources = np.intersect1d(id_train_bad, id_test_bad)\n",
        "print(\"Sources present in both train and test:\", shared_sources.size)\n",
        "print(\"First shared identifiers:\", shared_sources[:10])"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 7. Build an independent final test set\n",
        "\n",
        "Use [`GroupShuffleSplit`](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GroupShuffleSplit.html) to reserve approximately 25% of the source records for final testing. Pass `source_id` through the `groups` argument so that all copies of one source stay together.\n",
        "\n",
        "Requirements:\n",
        "\n",
        "- do not scale the data before splitting;\n",
        "- create `X_dev`, `X_test`, `y_dev`, `y_test`, `groups_dev`, and `groups_test`;\n",
        "- verify that the two group sets are disjoint;\n",
        "- inspect the positive-class prevalence in both partitions;\n",
        "- do not evaluate a model on `X_test` yet."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "tags": [
          "exercise"
        ]
      },
      "outputs": [],
      "source": [
        "from sklearn.model_selection import GroupShuffleSplit\n",
        "\n",
        "# TODO: construct a group-aware development/test split.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "metadata": {
        "tags": [
          "correction"
        ]
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Rows in development / test: 1038 342\n",
            "Unique groups in development / test: 900 300\n",
            "Positive prevalence in development / test: 14.836% 14.327%\n"
          ]
        }
      ],
      "source": [
        "outer_split = GroupShuffleSplit(\n",
        "    n_splits=1, test_size=0.25, random_state=RANDOM_STATE \n",
        ")\n",
        "\n",
        "dev_idx, test_idx = next(outer_split.split(X, y, groups=source_id))\n",
        "\n",
        "X_dev, X_test = X[dev_idx], X[test_idx]\n",
        "y_dev, y_test = y[dev_idx], y[test_idx]\n",
        "groups_dev, groups_test = source_id[dev_idx], source_id[test_idx]\n",
        "\n",
        "assert np.intersect1d(groups_dev, groups_test).size == 0\n",
        "print(\"Rows in development / test:\", len(X_dev), len(X_test))\n",
        "print(\"Unique groups in development / test:\",\n",
        "      np.unique(groups_dev).size, np.unique(groups_test).size)\n",
        "print(\"Positive prevalence in development / test:\",\n",
        "      f\"{y_dev.mean():.3%}\", f\"{y_test.mean():.3%}\") #! attention : on est pas forcément stratified !"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 8. Define the complete learning pipeline\n",
        "\n",
        "Create a [`Pipeline`](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html) containing:\n",
        "\n",
        "1. `StandardScaler`;\n",
        "2. `KNeighborsClassifier`.\n",
        "\n",
        "Why must the scaler be inside the object passed to cross-validation?"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "metadata": {
        "tags": [
          "exercise"
        ]
      },
      "outputs": [],
      "source": [
        "from sklearn.pipeline import Pipeline\n",
        "\n",
        "# TODO: create the pipeline in a variable named model.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "metadata": {
        "tags": [
          "correction"
        ]
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<style>.sk-global {\n",
              "  /* Definition of color scheme common for light and dark mode */\n",
              "  --sklearn-color-text: #000;\n",
              "  --sklearn-color-text-muted: #666;\n",
              "  --sklearn-color-line: gray;\n",
              "  /* Definition of color scheme for unfitted estimators */\n",
              "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
              "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
              "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
              "  --sklearn-color-unfitted-level-3: chocolate;\n",
              "  /* Definition of color scheme for fitted estimators */\n",
              "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
              "  --sklearn-color-fitted-level-1: #d4ebff;\n",
              "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
              "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
              "}\n",
              "\n",
              ".sk-global.light {\n",
              "  /* Specific color for light theme */\n",
              "  --sklearn-color-text-on-default-background: black;\n",
              "  --sklearn-color-background: white;\n",
              "  --sklearn-color-border-box: black;\n",
              "  --sklearn-color-icon: #696969;\n",
              "}\n",
              "\n",
              ".sk-global.dark {\n",
              "  --sklearn-color-text-on-default-background: white;\n",
              "  --sklearn-color-background: #111;\n",
              "  --sklearn-color-border-box: white;\n",
              "  --sklearn-color-icon: #878787;\n",
              "}\n",
              "\n",
              ".sk-global {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              ".sk-global pre {\n",
              "  padding: 0;\n",
              "}\n",
              "\n",
              ".sk-global input.sk-hidden--visually {\n",
              "  border: 0;\n",
              "  clip-path: inset(100%);\n",
              "  height: 1px;\n",
              "  margin: -1px;\n",
              "  overflow: hidden;\n",
              "  padding: 0;\n",
              "  position: absolute;\n",
              "  width: 1px;\n",
              "}\n",
              "\n",
              ".sk-global div.sk-dashed-wrapped {\n",
              "  border: 1px dashed var(--sklearn-color-line);\n",
              "  margin: 0 0.4em 0.5em 0.4em;\n",
              "  box-sizing: border-box;\n",
              "  padding-bottom: 0.4em;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              ".sk-global div.sk-container {\n",
              "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
              "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
              "     so we also need the `!important` here to be able to override the\n",
              "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
              "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
              "  display: inline-block !important;\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              ".sk-global div.sk-text-repr-fallback {\n",
              "  display: none;\n",
              "}\n",
              "\n",
              "div.sk-parallel-item,\n",
              "div.sk-serial,\n",
              "div.sk-item {\n",
              "  /* draw centered vertical line to link estimators */\n",
              "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
              "  background-size: 2px 100%;\n",
              "  background-repeat: no-repeat;\n",
              "  background-position: center center;\n",
              "}\n",
              "\n",
              "/* Parallel-specific style estimator block */\n",
              "\n",
              ".sk-global div.sk-parallel-item::after {\n",
              "  content: \"\";\n",
              "  width: 100%;\n",
              "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
              "  flex-grow: 1;\n",
              "}\n",
              "\n",
              ".sk-global div.sk-parallel {\n",
              "  display: flex;\n",
              "  align-items: stretch;\n",
              "  justify-content: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              ".sk-global div.sk-parallel-item {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "}\n",
              "\n",
              ".sk-global div.sk-parallel-item:first-child::after {\n",
              "  align-self: flex-end;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              ".sk-global div.sk-parallel-item:last-child::after {\n",
              "  align-self: flex-start;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              ".sk-global div.sk-parallel-item:only-child::after {\n",
              "  width: 0;\n",
              "}\n",
              "\n",
              "/* Serial-specific style estimator block */\n",
              "\n",
              ".sk-global div.sk-serial {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "  align-items: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  padding-right: 1em;\n",
              "  padding-left: 1em;\n",
              "}\n",
              "\n",
              "\n",
              "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
              "clickable and can be expanded/collapsed.\n",
              "- Pipeline and ColumnTransformer use this feature and define the default style\n",
              "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
              "*/\n",
              "\n",
              "/* Pipeline and ColumnTransformer style (default) */\n",
              "\n",
              ".sk-global div.sk-toggleable {\n",
              "  /* Default theme specific background. It is overwritten whether we have a\n",
              "  specific estimator or a Pipeline/ColumnTransformer */\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "/* Toggleable label */\n",
              ".sk-global label.sk-toggleable__label {\n",
              "  cursor: pointer;\n",
              "  display: flex;\n",
              "  width: 100%;\n",
              "  margin-bottom: 0;\n",
              "  padding: 0.5em;\n",
              "  box-sizing: border-box;\n",
              "  text-align: center;\n",
              "  align-items: center;\n",
              "  justify-content: center;\n",
              "  gap: 0.5em;\n",
              "}\n",
              "\n",
              ".sk-global label.sk-toggleable__label .caption {\n",
              "  font-size: 0.6rem;\n",
              "  font-weight: lighter;\n",
              "  color: var(--sklearn-color-text-muted);\n",
              "}\n",
              "\n",
              ".sk-global label.sk-toggleable__label-arrow:before {\n",
              "  /* Arrow on the left of the label */\n",
              "  content: \"▸\";\n",
              "  float: left;\n",
              "  margin-right: 0.25em;\n",
              "  color: var(--sklearn-color-icon);\n",
              "}\n",
              "\n",
              ".sk-global label.sk-toggleable__label-arrow:hover:before {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "/* Toggleable content - dropdown */\n",
              "\n",
              ".sk-global div.sk-toggleable__content {\n",
              "  display: none;\n",
              "  text-align: left;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              ".sk-global div.sk-toggleable__content.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              ".sk-global div.sk-toggleable__content pre {\n",
              "  margin: 0.2em;\n",
              "  border-radius: 0.25em;\n",
              "  color: var(--sklearn-color-text);\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              ".sk-global div.sk-toggleable__content.fitted pre {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              ".sk-global input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
              "  /* Expand drop-down */\n",
              "  display: block;\n",
              "  width: 100%;\n",
              "  overflow: visible;\n",
              "}\n",
              "\n",
              ".sk-global input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
              "  content: \"▾\";\n",
              "}\n",
              "\n",
              "/* Pipeline/ColumnTransformer-specific style */\n",
              "\n",
              ".sk-global div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              ".sk-global div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator-specific style */\n",
              "\n",
              "/* Colorize estimator box */\n",
              ".sk-global div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              ".sk-global div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              ".sk-global div.sk-label label.sk-toggleable__label,\n",
              ".sk-global div.sk-label label {\n",
              "  /* The background is the default theme color */\n",
              "  color: var(--sklearn-color-text-on-default-background);\n",
              "}\n",
              "\n",
              "/* On hover, darken the color of the background */\n",
              ".sk-global div.sk-label:hover label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "/* Label box, darken color on hover, fitted */\n",
              ".sk-global div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator label */\n",
              "\n",
              ".sk-global div.sk-label label {\n",
              "  font-family: monospace;\n",
              "  font-weight: bold;\n",
              "  line-height: 1.2em;\n",
              "}\n",
              "\n",
              ".sk-global div.sk-label-container {\n",
              "  text-align: center;\n",
              "}\n",
              "\n",
              "/* Estimator-specific */\n",
              ".sk-global div.sk-estimator {\n",
              "  font-family: monospace;\n",
              "  border: 1px dotted var(--sklearn-color-border-box);\n",
              "  border-radius: 0.25em;\n",
              "  box-sizing: border-box;\n",
              "  margin-bottom: 0.5em;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              ".sk-global div.sk-estimator.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "/* on hover */\n",
              ".sk-global div.sk-estimator:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              ".sk-global div.sk-estimator.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
              "\n",
              "/* Common style for \"i\" and \"?\" */\n",
              "\n",
              ".sk-estimator-doc-link,\n",
              "a:link.sk-estimator-doc-link,\n",
              "a:visited.sk-estimator-doc-link {\n",
              "  float: right;\n",
              "  font-size: smaller;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "  border-radius: 1em;\n",
              "  height: 1em;\n",
              "  width: 1em;\n",
              "  text-decoration: none !important;\n",
              "  margin-left: 0.5em;\n",
              "  text-align: center;\n",
              "  /* unfitted */\n",
              "  border: var(--sklearn-color-unfitted-level-3) 1pt solid;\n",
              "  color: var(--sklearn-color-unfitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted,\n",
              "a:link.sk-estimator-doc-link.fitted,\n",
              "a:visited.sk-estimator-doc-link.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "  border: var(--sklearn-color-fitted-level-3) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  border: var(--sklearn-color-fitted-level-0) 1pt solid;\n",
              "  color: var(--sklearn-color-unfitted-level-0);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "  border: var(--sklearn-color-fitted-level-0) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-0);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "/* Span, style for the box shown on hovering the info icon */\n",
              ".sk-estimator-doc-link span {\n",
              "  display: none;\n",
              "  z-index: 9999;\n",
              "  position: relative;\n",
              "  font-weight: normal;\n",
              "  right: .2ex;\n",
              "  padding: .5ex;\n",
              "  margin: .5ex;\n",
              "  width: min-content;\n",
              "  min-width: 20ex;\n",
              "  max-width: 50ex;\n",
              "  color: var(--sklearn-color-text);\n",
              "  box-shadow: 2pt 2pt 4pt #999;\n",
              "  /* unfitted */\n",
              "  background: var(--sklearn-color-unfitted-level-0);\n",
              "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted span {\n",
              "  /* fitted */\n",
              "  background: var(--sklearn-color-fitted-level-0);\n",
              "  border: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link:hover span {\n",
              "  display: block;\n",
              "}\n",
              "\n",
              "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
              "\n",
              ".sk-global a.estimator_doc_link {\n",
              "  float: right;\n",
              "  font-size: 1rem;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "  border-radius: 1rem;\n",
              "  height: 1rem;\n",
              "  width: 1rem;\n",
              "  text-decoration: none;\n",
              "  /* unfitted */\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "}\n",
              "\n",
              ".sk-global a.estimator_doc_link.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              ".sk-global a.estimator_doc_link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              ".sk-global a.estimator_doc_link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-top-container.sk-global {\n",
              "  /* pydata-sphinx-theme hides overflow, so scrolling is disabled.\n",
              "   We need to set it to !important and add tabindex=\"0\" in the HTML\n",
              "   to allow keyboard-only users to navigate the display. */\n",
              "  overflow-x: scroll !important;\n",
              "  max-width: 100%;\n",
              "}\n",
              "\n",
              ".estimator-table {\n",
              "    font-family: monospace;\n",
              "}\n",
              "\n",
              ".estimator-table summary {\n",
              "    padding: .5rem;\n",
              "    cursor: pointer;\n",
              "}\n",
              "\n",
              ".estimator-table summary::marker {\n",
              "    font-size: 0.7rem;\n",
              "}\n",
              "\n",
              ".estimator-table details[open] {\n",
              "    padding-left: 0.1rem;\n",
              "    padding-right: 0.1rem;\n",
              "    padding-bottom: 0.3rem;\n",
              "}\n",
              "\n",
              ".estimator-table .parameters-table {\n",
              "    margin-left: auto !important;\n",
              "    margin-right: auto !important;\n",
              "    margin-top: 0;\n",
              "}\n",
              "\n",
              ".estimator-table .parameters-table tr:nth-child(odd) {\n",
              "    background-color: #fff;\n",
              "}\n",
              "\n",
              ".estimator-table .parameters-table tr:nth-child(even) {\n",
              "    background-color: #f6f6f6;\n",
              "}\n",
              "\n",
              ".estimator-table .parameters-table tr:hover td {\n",
              "    background-color: #e0e0e0;\n",
              "}\n",
              "\n",
              ".estimator-table table :is(td, th) {\n",
              "    border: 1px solid rgba(106, 105, 104, 0.232);\n",
              "}\n",
              "\n",
              "/*\n",
              "    `table td`is set in notebook with right text-align.\n",
              "    We need to overwrite it.\n",
              "*/\n",
              ".estimator-table table td.param {\n",
              "    text-align: left;\n",
              "    position: relative;\n",
              "    padding: 0;\n",
              "}\n",
              "\n",
              ".user-set td {\n",
              "    color:rgb(255, 94, 0);\n",
              "    text-align: left !important;\n",
              "}\n",
              "\n",
              ".user-set td.value {\n",
              "    color:rgb(255, 94, 0);\n",
              "    background-color: transparent;\n",
              "}\n",
              "\n",
              ".default td, .estimator-table th {\n",
              "    color: black;\n",
              "    text-align: left !important;\n",
              "}\n",
              "\n",
              ".user-set td i,\n",
              ".default td i {\n",
              "    color: black;\n",
              "}\n",
              "\n",
              "td.fitted-att-type {\n",
              "    white-space: preserve nowrap;\n",
              "}\n",
              "\n",
              "/*\n",
              "    Styles for parameter documentation links\n",
              "    We need styling for visited so jupyter doesn't overwrite it\n",
              "*/\n",
              "a.param-doc-link,\n",
              "a.param-doc-link:link,\n",
              "a.param-doc-link:visited {\n",
              "    text-decoration: underline dashed;\n",
              "    text-underline-offset: .3em;\n",
              "    color: inherit;\n",
              "    display: block;\n",
              "    padding: .5em;\n",
              "}\n",
              "\n",
              "@supports(anchor-name: --doc-link) {\n",
              "    a.param-doc-link,\n",
              "    a.param-doc-link:link,\n",
              "    a.param-doc-link:visited {\n",
              "    anchor-name: --doc-link;\n",
              "    }\n",
              "}\n",
              "\n",
              "/* \"hack\" to make the entire area of the cell containing the link clickable */\n",
              "a.param-doc-link::before {\n",
              "    position: absolute;\n",
              "    content: \"\";\n",
              "    inset: 0;\n",
              "}\n",
              "\n",
              ".param-doc-description {\n",
              "    display: none;\n",
              "    position: absolute;\n",
              "    z-index: 9999;\n",
              "    left: 0;\n",
              "    padding: .5ex;\n",
              "    margin-left: 1.5em;\n",
              "    color: var(--sklearn-color-text);\n",
              "    box-shadow: .3em .3em .4em #999;\n",
              "    width: max-content;\n",
              "    text-align: left;\n",
              "    max-height: 10em;\n",
              "    overflow-y: auto;\n",
              "\n",
              "    /* unfitted */\n",
              "    background: var(--sklearn-color-unfitted-level-0);\n",
              "    border: thin solid var(--sklearn-color-unfitted-level-3);\n",
              "}\n",
              "\n",
              "@supports(position-area: center right) {\n",
              "    .param-doc-description {\n",
              "    position-area: center right;\n",
              "    position: fixed;\n",
              "    margin-left: 0;\n",
              "    }\n",
              "}\n",
              "\n",
              "/* Fitted state for parameter tooltips */\n",
              ".fitted .param-doc-description {\n",
              "    /* fitted */\n",
              "    background: var(--sklearn-color-fitted-level-0);\n",
              "    border: thin solid var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "\n",
              ".param-doc-link:hover .param-doc-description {\n",
              "    display: block;\n",
              "}\n",
              "\n",
              ".copy-paste-icon {\n",
              "    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIDYuNy4yIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgQ29weXJpZ2h0IDIwMjUgRm9udGljb25zLCBJbmMuLS0+PHBhdGggZD0iTTIwOCAwTDMzMi4xIDBjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMWw2Ny45IDY3LjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlMNDQ4IDMzNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTkyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjg4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4ek00OCAxMjhsODAgMCAwIDY0LTY0IDAgMCAyNTYgMTkyIDAgMC0zMiA2NCAwIDAgNDhjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE3NmMwLTI2LjUgMjEuNS00OCA0OC00OHoiLz48L3N2Zz4=);\n",
              "    background-repeat: no-repeat;\n",
              "    background-size: 14px 14px;\n",
              "    background-position: 0;\n",
              "    display: inline-block;\n",
              "    width: 14px;\n",
              "    height: 14px;\n",
              "    cursor: pointer;\n",
              "}\n",
              "\n",
              ".features {\n",
              "  font-family: monospace;\n",
              "  cursor: pointer;\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "  border: 1px dotted var(--sklearn-color-border-box);\n",
              "  border-radius: .20em;\n",
              "  margin-bottom: 0.5em;\n",
              "  font-size: inherit; /* Needed for jupyter */\n",
              "}\n",
              "\n",
              ".features.fitted {\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              ".features summary {\n",
              "  cursor: pointer;\n",
              "  display: flex;\n",
              "  margin-bottom: 0;\n",
              "  text-align: center;\n",
              "  align-items: center;\n",
              "  justify-content: center;\n",
              "  gap: 0.5em;\n",
              "  padding: .25em;\n",
              "}\n",
              "\n",
              ".features details[open] > summary {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "  border-radius: .20em 0 0 0;\n",
              "}\n",
              "\n",
              ".features.fitted details[open] > summary {\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "  border-radius: .20em 0 0 0;\n",
              "}\n",
              "\n",
              ".features details > summary .arrow::before {\n",
              "  content: \"▸\";\n",
              "  color: grey;\n",
              "}\n",
              "\n",
              ".features details[open] > summary .arrow::before {\n",
              "  content: \"▾\";\n",
              "}\n",
              "\n",
              ".features details:hover > summary {\n",
              "  margin: 0;\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              ".features.fitted details:hover > summary {\n",
              "  margin: 0;\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              ".features .features-container {\n",
              "  max-width: 15em;\n",
              "  max-height: 10em;\n",
              "  overflow: auto;\n",
              "  scrollbar-width: thin;\n",
              "  padding: .25em 0.1rem;\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "  border-radius: 0 0 .5em .5em;\n",
              "}\n",
              "\n",
              ".features.fitted .features-container {\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              ".features .image-container {\n",
              "  block-size: 1em;\n",
              "  inline-size: 1em;\n",
              "  padding: 0;\n",
              "  margin: 0%;\n",
              "  display: flex;\n",
              "  justify-content: center;\n",
              "  align-items: center;\n",
              "}\n",
              "\n",
              ".features .copy-paste-icon {\n",
              "  background-size: 1em 1em;\n",
              "  width: 1em;\n",
              "  height: 1em;\n",
              "  filter: grayscale(100%) opacity(60%);\n",
              "}\n",
              "\n",
              ".features .features-container table {\n",
              "  width: 100%;\n",
              "  margin: 0.01em;\n",
              "}\n",
              "\n",
              ".features .features-container table tr:nth-child(odd) {\n",
              "  background-color: #fff;\n",
              "}\n",
              "\n",
              ".features .features-container table tr:nth-child(even) {\n",
              "  background-color: #f6f6f6;\n",
              "}\n",
              "\n",
              ".features .features-container table tr:hover {\n",
              "  background-color: #e0e0e0;\n",
              "}\n",
              "\n",
              ".features .features-container table {\n",
              "  table-layout: inherit;\n",
              "}\n",
              "\n",
              ".features .features-container table td {\n",
              "  text-align: left;\n",
              "  padding: 0 0.5em;\n",
              "  border: 1px solid rgba(106, 105, 104, 0.232);\n",
              "  white-space: nowrap;\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              ".total_features {\n",
              "  display: flex;\n",
              "  justify-content: center;\n",
              "  margin-top: 0.5em;\n",
              "}\n",
              "</style><body><div id=\"sk-container-id-1\" tabindex=\"0\" class=\"sk-top-container sk-global\"><div class=\"sk-text-repr-fallback\"><pre>Pipeline(steps=[(&#x27;scaler&#x27;, StandardScaler()), (&#x27;knn&#x27;, KNeighborsClassifier())])</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 sk-global\" id=\"sk-estimator-id-1\" type=\"checkbox\" ><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label  sk-toggleable__label-arrow\"><div><div>Pipeline</div></div><div><a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.pipeline.Pipeline.html\">?<span>Documentation for Pipeline</span></a><span class=\"sk-estimator-doc-link \">i<span>Not fitted</span></span></div></label><div class=\"sk-toggleable__content \" data-param-prefix=\"\">\n",
              "        <div class=\"estimator-table\">\n",
              "            <details>\n",
              "                <summary>Parameters</summary>\n",
              "                <table class=\"parameters-table\">\n",
              "                  <tbody>\n",
              "                    \n",
              "        <tr class=\"user-set\">\n",
              "            <td><i class=\"copy-paste-icon\"\n",
              "                 onclick=\"copyToClipboard('steps',\n",
              "                          this.parentElement.nextElementSibling)\"\n",
              "            ></i></td>\n",
              "            <td class=\"param\">\n",
              "        <a class=\"param-doc-link\"\n",
              "            style=\"anchor-name: --doc-link-steps;\"\n",
              "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.pipeline.Pipeline.html#:~:text=steps,-list%20of%20tuples\">\n",
              "            steps\n",
              "            <span class=\"param-doc-description\"\n",
              "            style=\"position-anchor: --doc-link-steps;\">\n",
              "            steps: list of tuples<br><br>List of (name of step, estimator) tuples that are to be chained in<br>sequential order. To be compatible with the scikit-learn API, all steps<br>must define `fit`. All non-last steps must also define `transform`. See<br>:ref:`Combining Estimators &lt;combining_estimators&gt;` for more details.</span>\n",
              "        </a>\n",
              "    </td>\n",
              "            <td class=\"value\">[(&#x27;scaler&#x27;, ...), (&#x27;knn&#x27;, ...)]</td>\n",
              "        </tr>\n",
              "    \n",
              "\n",
              "        <tr class=\"default\">\n",
              "            <td><i class=\"copy-paste-icon\"\n",
              "                 onclick=\"copyToClipboard('transform_input',\n",
              "                          this.parentElement.nextElementSibling)\"\n",
              "            ></i></td>\n",
              "            <td class=\"param\">\n",
              "        <a class=\"param-doc-link\"\n",
              "            style=\"anchor-name: --doc-link-transform_input;\"\n",
              "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.pipeline.Pipeline.html#:~:text=transform_input,-list%20of%20str%2C%20default%3DNone\">\n",
              "            transform_input\n",
              "            <span class=\"param-doc-description\"\n",
              "            style=\"position-anchor: --doc-link-transform_input;\">\n",
              "            transform_input: list of str, default=None<br><br>The names of the :term:`metadata` parameters that should be transformed by the<br>pipeline before passing it to the step consuming it.<br><br>This enables transforming some input arguments to ``fit`` (other than ``X``)<br>to be transformed by the steps of the pipeline up to the step which requires<br>them. Requirement is defined via :ref:`metadata routing &lt;metadata_routing&gt;`.<br>For instance, this can be used to pass a validation set through the pipeline.<br><br>You can only set this if metadata routing is enabled, which you<br>can enable using ``sklearn.set_config(enable_metadata_routing=True)``.<br><br>.. versionadded:: 1.6</span>\n",
              "        </a>\n",
              "    </td>\n",
              "            <td class=\"value\">None</td>\n",
              "        </tr>\n",
              "    \n",
              "\n",
              "        <tr class=\"default\">\n",
              "            <td><i class=\"copy-paste-icon\"\n",
              "                 onclick=\"copyToClipboard('memory',\n",
              "                          this.parentElement.nextElementSibling)\"\n",
              "            ></i></td>\n",
              "            <td class=\"param\">\n",
              "        <a class=\"param-doc-link\"\n",
              "            style=\"anchor-name: --doc-link-memory;\"\n",
              "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.pipeline.Pipeline.html#:~:text=memory,-str%20or%20object%20with%20the%20joblib.Memory%20interface%2C%20default%3DNone\">\n",
              "            memory\n",
              "            <span class=\"param-doc-description\"\n",
              "            style=\"position-anchor: --doc-link-memory;\">\n",
              "            memory: str or object with the joblib.Memory interface, default=None<br><br>Used to cache the fitted transformers of the pipeline. The last step<br>will never be cached, even if it is a transformer. By default, no<br>caching is performed. If a string is given, it is the path to the<br>caching directory. Enabling caching triggers a clone of the transformers<br>before fitting. Therefore, the transformer instance given to the<br>pipeline cannot be inspected directly. Use the attribute ``named_steps``<br>or ``steps`` to inspect estimators within the pipeline. Caching the<br>transformers is advantageous when fitting is time consuming. See<br>:ref:`sphx_glr_auto_examples_neighbors_plot_caching_nearest_neighbors.py`<br>for an example on how to enable caching.</span>\n",
              "        </a>\n",
              "    </td>\n",
              "            <td class=\"value\">None</td>\n",
              "        </tr>\n",
              "    \n",
              "\n",
              "        <tr class=\"default\">\n",
              "            <td><i class=\"copy-paste-icon\"\n",
              "                 onclick=\"copyToClipboard('verbose',\n",
              "                          this.parentElement.nextElementSibling)\"\n",
              "            ></i></td>\n",
              "            <td class=\"param\">\n",
              "        <a class=\"param-doc-link\"\n",
              "            style=\"anchor-name: --doc-link-verbose;\"\n",
              "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.pipeline.Pipeline.html#:~:text=verbose,-bool%2C%20default%3DFalse\">\n",
              "            verbose\n",
              "            <span class=\"param-doc-description\"\n",
              "            style=\"position-anchor: --doc-link-verbose;\">\n",
              "            verbose: bool, default=False<br><br>If True, the time elapsed while fitting each step will be printed as it<br>is completed.</span>\n",
              "        </a>\n",
              "    </td>\n",
              "            <td class=\"value\">False</td>\n",
              "        </tr>\n",
              "    \n",
              "                  </tbody>\n",
              "                </table>\n",
              "            </details>\n",
              "        </div>\n",
              "    </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 sk-global\" id=\"sk-estimator-id-2\" type=\"checkbox\" ><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label  sk-toggleable__label-arrow\"><div><div>StandardScaler</div></div><div><a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.preprocessing.StandardScaler.html\">?<span>Documentation for StandardScaler</span></a></div></label><div class=\"sk-toggleable__content \" data-param-prefix=\"scaler__\">\n",
              "        <div class=\"estimator-table\">\n",
              "            <details>\n",
              "                <summary>Parameters</summary>\n",
              "                <table class=\"parameters-table\">\n",
              "                  <tbody>\n",
              "                    \n",
              "        <tr class=\"default\">\n",
              "            <td><i class=\"copy-paste-icon\"\n",
              "                 onclick=\"copyToClipboard('copy',\n",
              "                          this.parentElement.nextElementSibling)\"\n",
              "            ></i></td>\n",
              "            <td class=\"param\">\n",
              "        <a class=\"param-doc-link\"\n",
              "            style=\"anchor-name: --doc-link-copy;\"\n",
              "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.preprocessing.StandardScaler.html#:~:text=copy,-bool%2C%20default%3DTrue\">\n",
              "            copy\n",
              "            <span class=\"param-doc-description\"\n",
              "            style=\"position-anchor: --doc-link-copy;\">\n",
              "            copy: bool, default=True<br><br>If False, try to avoid a copy and do inplace scaling instead.<br>This is not guaranteed to always work inplace; e.g. if the data is<br>not a NumPy array or scipy.sparse CSR matrix, a copy may still be<br>returned.</span>\n",
              "        </a>\n",
              "    </td>\n",
              "            <td class=\"value\">True</td>\n",
              "        </tr>\n",
              "    \n",
              "\n",
              "        <tr class=\"default\">\n",
              "            <td><i class=\"copy-paste-icon\"\n",
              "                 onclick=\"copyToClipboard('with_mean',\n",
              "                          this.parentElement.nextElementSibling)\"\n",
              "            ></i></td>\n",
              "            <td class=\"param\">\n",
              "        <a class=\"param-doc-link\"\n",
              "            style=\"anchor-name: --doc-link-with_mean;\"\n",
              "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.preprocessing.StandardScaler.html#:~:text=with_mean,-bool%2C%20default%3DTrue\">\n",
              "            with_mean\n",
              "            <span class=\"param-doc-description\"\n",
              "            style=\"position-anchor: --doc-link-with_mean;\">\n",
              "            with_mean: bool, default=True<br><br>If True, center the data before scaling.<br>This does not work (and will raise an exception) when attempted on<br>sparse matrices, because centering them entails building a dense<br>matrix which in common use cases is likely to be too large to fit in<br>memory.</span>\n",
              "        </a>\n",
              "    </td>\n",
              "            <td class=\"value\">True</td>\n",
              "        </tr>\n",
              "    \n",
              "\n",
              "        <tr class=\"default\">\n",
              "            <td><i class=\"copy-paste-icon\"\n",
              "                 onclick=\"copyToClipboard('with_std',\n",
              "                          this.parentElement.nextElementSibling)\"\n",
              "            ></i></td>\n",
              "            <td class=\"param\">\n",
              "        <a class=\"param-doc-link\"\n",
              "            style=\"anchor-name: --doc-link-with_std;\"\n",
              "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.preprocessing.StandardScaler.html#:~:text=with_std,-bool%2C%20default%3DTrue\">\n",
              "            with_std\n",
              "            <span class=\"param-doc-description\"\n",
              "            style=\"position-anchor: --doc-link-with_std;\">\n",
              "            with_std: bool, default=True<br><br>If True, scale the data to unit variance (or equivalently,<br>unit standard deviation).</span>\n",
              "        </a>\n",
              "    </td>\n",
              "            <td class=\"value\">True</td>\n",
              "        </tr>\n",
              "    \n",
              "                  </tbody>\n",
              "                </table>\n",
              "            </details>\n",
              "        </div>\n",
              "    </div></div></div><div class=\"sk-item\"><div class=\"sk-estimator  sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually sk-global\" id=\"sk-estimator-id-3\" type=\"checkbox\" ><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label  sk-toggleable__label-arrow\"><div><div>KNeighborsClassifier</div></div><div><a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.neighbors.KNeighborsClassifier.html\">?<span>Documentation for KNeighborsClassifier</span></a></div></label><div class=\"sk-toggleable__content \" data-param-prefix=\"knn__\">\n",
              "        <div class=\"estimator-table\">\n",
              "            <details>\n",
              "                <summary>Parameters</summary>\n",
              "                <table class=\"parameters-table\">\n",
              "                  <tbody>\n",
              "                    \n",
              "        <tr class=\"default\">\n",
              "            <td><i class=\"copy-paste-icon\"\n",
              "                 onclick=\"copyToClipboard('n_neighbors',\n",
              "                          this.parentElement.nextElementSibling)\"\n",
              "            ></i></td>\n",
              "            <td class=\"param\">\n",
              "        <a class=\"param-doc-link\"\n",
              "            style=\"anchor-name: --doc-link-n_neighbors;\"\n",
              "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#:~:text=n_neighbors,-int%2C%20default%3D5\">\n",
              "            n_neighbors\n",
              "            <span class=\"param-doc-description\"\n",
              "            style=\"position-anchor: --doc-link-n_neighbors;\">\n",
              "            n_neighbors: int, default=5<br><br>Number of neighbors to use by default for :meth:`kneighbors` queries.</span>\n",
              "        </a>\n",
              "    </td>\n",
              "            <td class=\"value\">5</td>\n",
              "        </tr>\n",
              "    \n",
              "\n",
              "        <tr class=\"default\">\n",
              "            <td><i class=\"copy-paste-icon\"\n",
              "                 onclick=\"copyToClipboard('weights',\n",
              "                          this.parentElement.nextElementSibling)\"\n",
              "            ></i></td>\n",
              "            <td class=\"param\">\n",
              "        <a class=\"param-doc-link\"\n",
              "            style=\"anchor-name: --doc-link-weights;\"\n",
              "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#:~:text=weights,-%7B%27uniform%27%2C%20%27distance%27%7D%2C%20callable%20or%20None%2C%20default%3D%27uniform%27\">\n",
              "            weights\n",
              "            <span class=\"param-doc-description\"\n",
              "            style=\"position-anchor: --doc-link-weights;\">\n",
              "            weights: {&#x27;uniform&#x27;, &#x27;distance&#x27;}, callable or None, default=&#x27;uniform&#x27;<br><br>Weight function used in prediction.  Possible values:<br><br>- &#x27;uniform&#x27; : uniform weights.  All points in each neighborhood<br>  are weighted equally.<br>- &#x27;distance&#x27; : weight points by the inverse of their distance.<br>  in this case, closer neighbors of a query point will have a<br>  greater influence than neighbors which are further away.<br>- [callable] : a user-defined function which accepts an<br>  array of distances, and returns an array of the same shape<br>  containing the weights.<br><br>Refer to the example entitled<br>:ref:`sphx_glr_auto_examples_neighbors_plot_classification.py`<br>showing the impact of the `weights` parameter on the decision<br>boundary.</span>\n",
              "        </a>\n",
              "    </td>\n",
              "            <td class=\"value\">&#x27;uniform&#x27;</td>\n",
              "        </tr>\n",
              "    \n",
              "\n",
              "        <tr class=\"default\">\n",
              "            <td><i class=\"copy-paste-icon\"\n",
              "                 onclick=\"copyToClipboard('algorithm',\n",
              "                          this.parentElement.nextElementSibling)\"\n",
              "            ></i></td>\n",
              "            <td class=\"param\">\n",
              "        <a class=\"param-doc-link\"\n",
              "            style=\"anchor-name: --doc-link-algorithm;\"\n",
              "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#:~:text=algorithm,-%7B%27auto%27%2C%20%27ball_tree%27%2C%20%27kd_tree%27%2C%20%27brute%27%7D%2C%20default%3D%27auto%27\">\n",
              "            algorithm\n",
              "            <span class=\"param-doc-description\"\n",
              "            style=\"position-anchor: --doc-link-algorithm;\">\n",
              "            algorithm: {&#x27;auto&#x27;, &#x27;ball_tree&#x27;, &#x27;kd_tree&#x27;, &#x27;brute&#x27;}, default=&#x27;auto&#x27;<br><br>Algorithm used to compute the nearest neighbors:<br><br>- &#x27;ball_tree&#x27; will use :class:`BallTree`<br>- &#x27;kd_tree&#x27; will use :class:`KDTree`<br>- &#x27;brute&#x27; will use a brute-force search.<br>- &#x27;auto&#x27; will attempt to decide the most appropriate algorithm<br>  based on the values passed to :meth:`fit` method.<br><br>Note: fitting on sparse input will override the setting of<br>this parameter, using brute force.</span>\n",
              "        </a>\n",
              "    </td>\n",
              "            <td class=\"value\">&#x27;auto&#x27;</td>\n",
              "        </tr>\n",
              "    \n",
              "\n",
              "        <tr class=\"default\">\n",
              "            <td><i class=\"copy-paste-icon\"\n",
              "                 onclick=\"copyToClipboard('leaf_size',\n",
              "                          this.parentElement.nextElementSibling)\"\n",
              "            ></i></td>\n",
              "            <td class=\"param\">\n",
              "        <a class=\"param-doc-link\"\n",
              "            style=\"anchor-name: --doc-link-leaf_size;\"\n",
              "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#:~:text=leaf_size,-int%2C%20default%3D30\">\n",
              "            leaf_size\n",
              "            <span class=\"param-doc-description\"\n",
              "            style=\"position-anchor: --doc-link-leaf_size;\">\n",
              "            leaf_size: int, default=30<br><br>Leaf size passed to BallTree or KDTree.  This can affect the<br>speed of the construction and query, as well as the memory<br>required to store the tree.  The optimal value depends on the<br>nature of the problem.</span>\n",
              "        </a>\n",
              "    </td>\n",
              "            <td class=\"value\">30</td>\n",
              "        </tr>\n",
              "    \n",
              "\n",
              "        <tr class=\"default\">\n",
              "            <td><i class=\"copy-paste-icon\"\n",
              "                 onclick=\"copyToClipboard('p',\n",
              "                          this.parentElement.nextElementSibling)\"\n",
              "            ></i></td>\n",
              "            <td class=\"param\">\n",
              "        <a class=\"param-doc-link\"\n",
              "            style=\"anchor-name: --doc-link-p;\"\n",
              "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#:~:text=p,-float%2C%20default%3D2\">\n",
              "            p\n",
              "            <span class=\"param-doc-description\"\n",
              "            style=\"position-anchor: --doc-link-p;\">\n",
              "            p: float, default=2<br><br>Power parameter for the Minkowski metric. When p = 1, this is equivalent<br>to using manhattan_distance (l1), and euclidean_distance (l2) for p = 2.<br>For arbitrary p, minkowski_distance (l_p) is used. This parameter is expected<br>to be positive.</span>\n",
              "        </a>\n",
              "    </td>\n",
              "            <td class=\"value\">2</td>\n",
              "        </tr>\n",
              "    \n",
              "\n",
              "        <tr class=\"default\">\n",
              "            <td><i class=\"copy-paste-icon\"\n",
              "                 onclick=\"copyToClipboard('metric',\n",
              "                          this.parentElement.nextElementSibling)\"\n",
              "            ></i></td>\n",
              "            <td class=\"param\">\n",
              "        <a class=\"param-doc-link\"\n",
              "            style=\"anchor-name: --doc-link-metric;\"\n",
              "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#:~:text=metric,-str%20or%20callable%2C%20default%3D%27minkowski%27\">\n",
              "            metric\n",
              "            <span class=\"param-doc-description\"\n",
              "            style=\"position-anchor: --doc-link-metric;\">\n",
              "            metric: str or callable, default=&#x27;minkowski&#x27;<br><br>Metric to use for distance computation. Default is &quot;minkowski&quot;, which<br>results in the standard Euclidean distance when p = 2. See the<br>documentation of `scipy.spatial.distance<br>&lt;https://docs.scipy.org/doc/scipy/reference/spatial.distance.html&gt;`_ and<br>the metrics listed in<br>:class:`~sklearn.metrics.pairwise.distance_metrics` for valid metric<br>values.<br><br>If metric is &quot;precomputed&quot;, X is assumed to be a distance matrix and<br>must be square during fit. X may be a :term:`sparse graph`, in which<br>case only &quot;nonzero&quot; elements may be considered neighbors.<br><br>If metric is a callable function, it takes two arrays representing 1D<br>vectors as inputs and must return one value indicating the distance<br>between those vectors. This works for Scipy&#x27;s metrics, but is less<br>efficient than passing the metric name as a string.</span>\n",
              "        </a>\n",
              "    </td>\n",
              "            <td class=\"value\">&#x27;minkowski&#x27;</td>\n",
              "        </tr>\n",
              "    \n",
              "\n",
              "        <tr class=\"default\">\n",
              "            <td><i class=\"copy-paste-icon\"\n",
              "                 onclick=\"copyToClipboard('metric_params',\n",
              "                          this.parentElement.nextElementSibling)\"\n",
              "            ></i></td>\n",
              "            <td class=\"param\">\n",
              "        <a class=\"param-doc-link\"\n",
              "            style=\"anchor-name: --doc-link-metric_params;\"\n",
              "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#:~:text=metric_params,-dict%2C%20default%3DNone\">\n",
              "            metric_params\n",
              "            <span class=\"param-doc-description\"\n",
              "            style=\"position-anchor: --doc-link-metric_params;\">\n",
              "            metric_params: dict, default=None<br><br>Additional keyword arguments for the metric function.</span>\n",
              "        </a>\n",
              "    </td>\n",
              "            <td class=\"value\">None</td>\n",
              "        </tr>\n",
              "    \n",
              "\n",
              "        <tr class=\"default\">\n",
              "            <td><i class=\"copy-paste-icon\"\n",
              "                 onclick=\"copyToClipboard('n_jobs',\n",
              "                          this.parentElement.nextElementSibling)\"\n",
              "            ></i></td>\n",
              "            <td class=\"param\">\n",
              "        <a class=\"param-doc-link\"\n",
              "            style=\"anchor-name: --doc-link-n_jobs;\"\n",
              "            rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.9/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#:~:text=n_jobs,-int%2C%20default%3DNone\">\n",
              "            n_jobs\n",
              "            <span class=\"param-doc-description\"\n",
              "            style=\"position-anchor: --doc-link-n_jobs;\">\n",
              "            n_jobs: int, default=None<br><br>The number of parallel jobs to run for neighbors search.<br>``None`` means 1 unless in a :obj:`joblib.parallel_backend` context.<br>``-1`` means using all processors. See :term:`Glossary &lt;n_jobs&gt;`<br>for more details.<br>Doesn&#x27;t affect :meth:`fit` method.</span>\n",
              "        </a>\n",
              "    </td>\n",
              "            <td class=\"value\">None</td>\n",
              "        </tr>\n",
              "    \n",
              "                  </tbody>\n",
              "                </table>\n",
              "            </details>\n",
              "        </div>\n",
              "    </div></div></div></div></div></div></div><script>/*  Authors: The scikit-learn developers\n",
              " SPDX-License-Identifier: BSD-3-Clause\n",
              "*/\n",
              "\n",
              "function copyToClipboard(text, element) {\n",
              "    // Get the parameter prefix from the closest toggleable content\n",
              "    const toggleableContent = element.closest('.sk-toggleable__content');\n",
              "    const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
              "    const fullParamName = paramPrefix ? `${paramPrefix}${text}` : text;\n",
              "\n",
              "    const originalStyle = element.style;\n",
              "    const computedStyle = window.getComputedStyle(element);\n",
              "    const originalWidth = computedStyle.width;\n",
              "    const originalHTML = element.innerHTML.replace('Copied!', '');\n",
              "\n",
              "    navigator.clipboard.writeText(fullParamName)\n",
              "        .then(() => {\n",
              "            element.style.width = originalWidth;\n",
              "            element.style.color = 'green';\n",
              "            element.innerHTML = \"Copied!\";\n",
              "\n",
              "            setTimeout(() => {\n",
              "                element.innerHTML = originalHTML;\n",
              "                element.style = originalStyle;\n",
              "            }, 2000);\n",
              "        })\n",
              "        .catch(err => {\n",
              "            console.error('Failed to copy:', err);\n",
              "            element.style.color = 'red';\n",
              "            element.innerHTML = \"Failed!\";\n",
              "            setTimeout(() => {\n",
              "                element.innerHTML = originalHTML;\n",
              "                element.style = originalStyle;\n",
              "            }, 2000);\n",
              "        });\n",
              "    return false;\n",
              "}\n",
              "\n",
              "document.querySelectorAll('.copy-paste-icon').forEach(function(element) {\n",
              "    const toggleableContent = element.closest('.sk-toggleable__content');\n",
              "    const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
              "\n",
              "    const parent = element.parentElement;\n",
              "    if (!parent || !parent.nextElementSibling) {\n",
              "        console.warn('Expected copy-paste icon is missing from the DOM structure');\n",
              "        return;\n",
              "    }\n",
              "\n",
              "    const paramName = element.parentElement.nextElementSibling\n",
              "        .textContent.trim().split(' ')[0];\n",
              "    const fullParamName = paramPrefix ? `${paramPrefix}${paramName}` : paramName;\n",
              "\n",
              "    element.setAttribute('title', fullParamName);\n",
              "});\n",
              "\n",
              "/**\n",
              " * Copy the list of feature names formatted as a Python list.\n",
              " *\n",
              " * @param {HTMLElement} element - The copy button inside a `.features` block; its siblings\n",
              " *   contain a `details` element and a table containing feature named.\n",
              " * @returns {boolean} Always returns `false` so callers can prevent the default click behavior.\n",
              " */\n",
              "function copyFeatureNamesToClipboard(element) {\n",
              "    var detailsElem = element.closest('.features').querySelector('details');\n",
              "    var wasOpen = detailsElem.open;\n",
              "    detailsElem.open = true;\n",
              "    var content = element.closest('.features').querySelector('tbody')\n",
              "                  .innerText.trim();\n",
              "    if (!wasOpen) detailsElem.open = false;\n",
              "    const rows = content.split('\\n').map(row => `    \"${row}\"`);\n",
              "    const formattedText = `[\\n${rows.join(',\\n')},\\n]`;\n",
              "    const originalHTML = element.innerHTML.replace('✔', '');\n",
              "    const originalStyle = element.style;\n",
              "    const copyMark = document.createElement('span');\n",
              "    copyMark.innerHTML = '✔';\n",
              "    copyMark.style.color = 'blue';\n",
              "    copyMark.style.fontSize = '1em';\n",
              "\n",
              "    navigator.clipboard.writeText(formattedText)\n",
              "        .then(() => {\n",
              "            element.style.display = 'none';\n",
              "            element.parentElement.appendChild(copyMark);\n",
              "\n",
              "            setTimeout(() => {\n",
              "                copyMark.remove();\n",
              "                element.innerHTML = originalHTML;\n",
              "                element.style = originalStyle;\n",
              "            }, 1000);\n",
              "        })\n",
              "        .catch(err => {\n",
              "            console.error('Failed to copy:', err);\n",
              "            element.style.color = 'orange';\n",
              "            element.innerHTML = \"Failed!\";\n",
              "            setTimeout(() => {\n",
              "                element.innerHTML = originalHTML;\n",
              "                element.style = originalStyle;\n",
              "            }, 1000);\n",
              "        });\n",
              "    return false;\n",
              "}\n",
              "/**\n",
              " * Adapted from Skrub\n",
              " * https://github.com/skrub-data/skrub/blob/403466d1d5d4dc76a7ef569b3f8228db59a31dc3/skrub/_reporting/_data/templates/report.js#L789\n",
              " * @returns \"light\" or \"dark\"\n",
              " */\n",
              "function detectTheme(element) {\n",
              "    const body = document.querySelector('body');\n",
              "\n",
              "    // Check VSCode theme\n",
              "    const themeKindAttr = body.getAttribute('data-vscode-theme-kind');\n",
              "    const themeNameAttr = body.getAttribute('data-vscode-theme-name');\n",
              "\n",
              "    if (themeKindAttr && themeNameAttr) {\n",
              "        const themeKind = themeKindAttr.toLowerCase();\n",
              "        const themeName = themeNameAttr.toLowerCase();\n",
              "\n",
              "        if (themeKind.includes(\"dark\") || themeName.includes(\"dark\")) {\n",
              "            return \"dark\";\n",
              "        }\n",
              "        if (themeKind.includes(\"light\") || themeName.includes(\"light\")) {\n",
              "            return \"light\";\n",
              "        }\n",
              "    }\n",
              "\n",
              "    // Check Jupyter theme\n",
              "    if (body.getAttribute('data-jp-theme-light') === 'false') {\n",
              "        return 'dark';\n",
              "    } else if (body.getAttribute('data-jp-theme-light') === 'true') {\n",
              "        return 'light';\n",
              "    }\n",
              "\n",
              "    // Guess based on a parent element's color\n",
              "    const color = window.getComputedStyle(element.parentNode, null).getPropertyValue('color');\n",
              "    const match = color.match(/^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i);\n",
              "    if (match) {\n",
              "        const [r, g, b] = [\n",
              "            parseFloat(match[1]),\n",
              "            parseFloat(match[2]),\n",
              "            parseFloat(match[3])\n",
              "        ];\n",
              "\n",
              "        // https://en.wikipedia.org/wiki/HSL_and_HSV#Lightness\n",
              "        const luma = 0.299 * r + 0.587 * g + 0.114 * b;\n",
              "\n",
              "        if (luma > 180) {\n",
              "            // If the text is very bright we have a dark theme\n",
              "            return 'dark';\n",
              "        }\n",
              "        if (luma < 75) {\n",
              "            // If the text is very dark we have a light theme\n",
              "            return 'light';\n",
              "        }\n",
              "        // Otherwise fall back to the next heuristic.\n",
              "    }\n",
              "\n",
              "    // Fallback to system preference\n",
              "    return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n",
              "}\n",
              "\n",
              "\n",
              "function forceTheme(elementId) {\n",
              "    const estimatorElement = document.querySelector(`#${elementId}`);\n",
              "    if (estimatorElement === null) {\n",
              "        console.error(`Element with id ${elementId} not found.`);\n",
              "    } else {\n",
              "        const theme = detectTheme(estimatorElement);\n",
              "        estimatorElement.classList.add(theme);\n",
              "    }\n",
              "}\n",
              "\n",
              "forceTheme('sk-container-id-1');</script></body>"
            ],
            "text/plain": [
              "Pipeline(steps=[('scaler', StandardScaler()), ('knn', KNeighborsClassifier())])"
            ]
          },
          "execution_count": 14,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "model = Pipeline([\n",
        "    (\"scaler\", StandardScaler()),\n",
        "    (\"knn\", KNeighborsClassifier()),\n",
        "])\n",
        "model"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 9. Select $k$ without touching the test set\n",
        "\n",
        "Use [`StratifiedGroupKFold`](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedGroupKFold.html) inside [`GridSearchCV`](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html).\n",
        "\n",
        "Requirements:\n",
        "\n",
        "- use five folds, shuffling and the course random seed;\n",
        "- keep duplicate sources together with `groups=groups_dev`;\n",
        "- try `knn__n_neighbors` from 1 to 30;\n",
        "- use F1 score as the primary selection metric;\n",
        "- fit the search on development data only.\n",
        "\n",
        "Explain the double underscore in `knn__n_neighbors`."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "metadata": {
        "tags": [
          "exercise"
        ]
      },
      "outputs": [],
      "source": [
        "from sklearn.model_selection import StratifiedGroupKFold, GridSearchCV\n",
        "\n",
        "# TODO: create cv and search, then fit search on the development data.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "metadata": {
        "tags": [
          "correction"
        ]
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Selected parameters: {'knn__n_neighbors': np.int64(3)}\n",
            "Mean validation F1 score: 0.777\n"
          ]
        }
      ],
      "source": [
        "cv = StratifiedGroupKFold(\n",
        "    n_splits=5, shuffle=True, random_state=RANDOM_STATE\n",
        ")\n",
        "search = GridSearchCV(\n",
        "    estimator=model,\n",
        "    param_grid={\"knn__n_neighbors\": np.arange(1, 31)},\n",
        "    scoring=\"f1\",\n",
        "    cv=cv,\n",
        "    n_jobs=-1,\n",
        "    return_train_score=True,\n",
        ")\n",
        "search.fit(X_dev, y_dev, groups=groups_dev)\n",
        "\n",
        "print(\"Selected parameters:\", search.best_params_)\n",
        "print(\"Mean validation F1 score:\", f\"{search.best_score_:.3f}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "---\n",
        "\n",
        "The remainder of this pratical work is optionnal during the class, but recommended as homework to go further.\n",
        "\n",
        "---\n",
        "\n",
        "\n",
        "## 10. Optional — Inspect the cross-validation results\n",
        "\n",
        "`GridSearchCV.cv_results_` contains NumPy-compatible arrays with the fold results. Extract $k$, mean training score, mean validation score and validation standard deviation. Display the first five values, then plot training and validation performance against $k$.\n",
        "\n",
        "Questions:\n",
        "\n",
        "1. Is the selected value clearly superior to nearby values?\n",
        "2. What behaviour do you observe for very small $k$?\n",
        "3. Is the standard deviation across folds a confidence interval?"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "metadata": {
        "tags": [
          "exercise"
        ]
      },
      "outputs": [],
      "source": [
        "# TODO: inspect search.cv_results_ and plot the learning behaviour.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "metadata": {
        "tags": [
          "correction"
        ]
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            " k | train F1 | validation F1 | fold std\n",
            " 1 |   1.000  |      0.771    |  0.070\n",
            " 2 |   0.869  |      0.703    |  0.090\n",
            " 3 |   0.899  |      0.777    |  0.061\n",
            " 4 |   0.808  |      0.727    |  0.050\n",
            " 5 |   0.847  |      0.774    |  0.052\n"
          ]
        },
        {
          "data": {
            "image/png": "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mJqaKt57771Sl0Z9xGQyiStXrpS6DOoDNptNvPfee8WCggLx9ttvbzfomc1mMSoqSnzooYdEURRFp9Mpnn322eLMmTMlqJh62/PPPy9+88034vfff99h0Lv//vslqY8C65lnnhELCgr8j9esWSPKZDJx3bp1/m0ff/yxqFarxS1btohiSzgwGo3iK6+8IknN1HvWrFkjfv755/7HlZWVYmZmpnjrrbf6t50IeieefwovL7zwglhdXe1//M4774gAxPz8fP+2G264QRw5cqT/A4B//OMfolqtFouKiiSpuas4Rq8db7/9NkaMGIHLL78cAJCUlISFCxfi7bffBlej6D+qq6uxfft21NTUSF0KBZDBYMCzzz6LrKysU+6zatUquFwu3HvvvUDLujr33nsvvv32W5SUlPRhtRQIixcvxqxZsyCTyTrcz2azYfv27SgpKeHfgjBy3333tfr3P2fOHAwYMAA//fSTf9tbb72FWbNmYdKkSQCAYcOGYd68eXjrrbckqZl6z5w5c3DJJZf4HycmJuKKK67Apk2b2uxbWlqKHTt2tOnGTaFt0aJFiI+P9z+ePn06AKC8vBwA0NjYiI8++gh33303IiMjAQB33nknIiMj8f7770tUddcw6LVj165dGDduXKttEyZMQG1tLUpLSyWri/rWQw89hIULFyIjIwMzZ87kG/p+bNeuXRgyZAgMBoN/24QJEwAAeXl5ElZGfemtt97CwoULMXr0aIwaNQrbtm2TuiQKgNLSUlRWViI7O9u/7VTvC/bs2QNBECSokgJp+/btrZ7/E+68807cdNNNSExMxDXXXMPAF0aqqqqwadMmrFmzBjfddBNmzZqFadOmAQDy8/PhdrtbvQYoFAqcccYZ2LVrl4RVd45Brx11dXUwmUyttp14XFdXJ1FV1JeeeeYZmM1m5OXl4dixY7BarbjuuuukLoskwtcEuvnmm1FTU4O8vDyUl5dj1KhRmDt3LqxWq9SlUS/yer246aabMHjwYMybN8+//VSvAR6PBzabTYJKKVBeffVVbNq0CUuXLvVvUyqVePfdd1FTU4O9e/fiwIED2LZtG373u99JWiv1nm3btmHJkiVYvHgxDh48iLvuugtKZfOclSf+zrf3GhDs7wEY9NqhUqngdDpbbXM4HADQZiY2Ck+33HILFAoFACAhIQGPPfYYfvrpJ7bq9VN8TaD58+f7W3R1Oh1eeOEFlJeX44cffpC6NOolgiDgpptuwoEDB/Dpp59Co9H4v8fXgP5h1apV+OMf/4jXXnsNZ511ln+7VqvFb37zG//jzMxM3Hffffj444/h9XolqpZ60+zZs7Fp0yYcPXoUf//731t131WpVADQ7mtAsP/7Z9BrR0ZGBsrKylptKysrg0wmQ1pammR1kXQSExOBlt8D6n9O9ZqAlmU3qP8xmUxQKBR8TQgTgiDgt7/9Lb7//nusX7++zZjdU70GxMXFnXIpBgotn3zyCebPn4+XX34ZN998c6f7JyYmwu12o7a2tk/qo75z9dVXIz09HV9//TXQ8u8f7bwHLCsrC/r3AAx67Zg5cya+//57NDU1+betWbMGkyZNajVGh8LTyc/7CWvXroVKpeLaaf3UzJkzcfz4cezZs8e/bc2aNYiOjsb48eMlrY0Cz+Vywefztdr23XffwefzYeTIkZLVRb1DEATcfPPN+Pbbb7F+/XoMHjy4zT4zZ87EF1980er3YM2aNZg5c2YfV0uBsGbNGlx77bV46aWXcNttt7X5/qneF8THx3MdvRDncrnatMo2NDSgpqbG31UzOzsbgwYNwqeffurf58TEPMH+GsAF09uxcOFCvPLKK7jsssvwhz/8Ab/88gtWr16NtWvXSl0a9YF169Zh+fLluO6665CcnIwff/wRf/vb3/DnP/8ZMTExUpdHAbBjxw44HA5UVlaioaHB311jypQpAIBp06bhoosuwjXXXIPHHnsMVVVVeOyxx/Dss88GfbcN6lxxcTGKi4uxd+9eoGWsxrFjxzBkyBDEx8ejtLQUV199NRYuXIisrCzk5+fj8ccfx+WXX+7/HaHQ9fvf/x4rV67EP//5T9TU1PhnWk5OTva37N1zzz14//33MX/+fNxwww349NNPkZ+fj7ffflvi6qmn1q1bh6uvvhrz58/HiBEj/K//SqXSP8vqm2++ic2bN2POnDmIjo7Gl19+iTfeeAOvv/465HK2mYSyiooKzJs3D7fccgtycnJQVVWFl156CQkJCViwYIF/v6eeego33HADEhISMGTIEDz55JMYN25cq7G8wUgmco7odlVXV+Ppp5/G7t27kZCQgLvuugtTp06VuizqI5s2bcKKFStQUlKCjIwMXH/99f7Zlyj8XHvtte3OqLtx40b/WE2Hw4Fly5Zh48aN0Ov1uO6663DNNddIUC31ttdffx3vvPNOm+0PPfQQZs2aBQA4fPgwli9fjgMHDiApKckf/DtbkoGC31VXXYWKioo22+fOnYt77rnH/7iwsBDPPvssjhw5gvT0dCxevBijRo3q42qpt7366qvtTpFvNBrx1Vdf+R9/9tln+M9//oOamhpkZmbitttuw5gxY/q4WgqEgoICLF++HPv370d0dDQmTZqEW2+9tU0vvq+++gpvvvkmLBYLJk6ciPvuuw9RUVGS1d0VDHpERERERERhhu3NREREREREYYZBj4iIiIiIKMww6BEREREREYUZBj0iIiIiIqIww6BHREREREQUZhj0iIiIiIiIwgyDHhERERERUZhh0CMiIslt2bIF27Ztk7qMNhwOB9atW4d///vfqKysDNh1tm3bhi1btnTrmK7cs2C9r6cSavUSEQUzpdQFEBGRtPLy8nDw4EGMHz8eWVlZ/u02mw1ffPEFLrroIkRFRQW0hhdffBEGgwHjx48P6HW6o7GxEWPHjoXJZMKgQYMwdOhQJCUlBeRar732GhobG3HWWWd1+Ziu3LNgvK8dCbV6iYiCGYMeEVE/9/777+P555/H2WefjU2bNvm3l5WV4brrrsPevXsDHvSC0XfffQez2YzDhw9DLg9sB5gJEybA6XQG9BpERNS/MOgRERFSUlKwfft2rFmzBpdddlm7+2zYsAGxsbEYPXq0f9vOnTtht9sxZcoUoKXrnVKpxNChQ5GXlwebzYZp06YhIiICVqsVmzdvhlarxeTJk6HRaNpco6GhAbt27YLdbse0adOg1+vb7LN7924UFRUhPT0dY8eObRXCTlx/yJAh2LJlC0RRxIUXXtjuz+Pz+bBlyxbU1NRgyJAhGD58uP9727dvx5dffgmlUomPPvoIarUaV1xxRZtznLje8OHD/XVPnDix3WDcUd25ubnwer2t9rfb7fjhhx+g0WiQm5uLoqIiNDU1+e/1CU1NTZ1eu7P72tG9QDef+/bufVFREfbv34+EhATk5uZCpVK1+5y05+uvv4ZSqcT555/f5WOIiIhBj4iIACQnJ+Oaa67B0qVLMXv2bCgUijb7PP744zjzzDNbvdl/6623UFpa6n+z/+KLL+LgwYOor6/HiBEjcPjwYTidTjzxxBN45JFHMHz4cOTn5yM2NhZbtmyBWq32nysvLw+jR4/G4MGDcfz4cdjtdnz//ffIyckBAFitVsybNw9HjhzBmDFjcODAAcTFxeGzzz5DXFyc//oFBQWwWCzIycnByJEj2w165eXluOCCC2Cz2TBs2DBs3rwZl156Kd577z3IZDLs3r3bH4z++9//IiIiot2gd+J6NpsNmZmZKC0thdlsxo8//ujvBtuVun/ddbOwsBDTp0+HSqVCdnY2Dhw4gOTkZCQlJbUKenl5eTjjjDNOee2u3NfO7kV3nvv27v1f/vIXvPTSS5g6dSosFgscDgdWr16NjIyMDn8nRVHEPffcg48++ghr167tcF8iImqLQY+IiAAADz74IN566y28/fbbWLhw4Wmf5+jRo9izZw8GDRoEp9OJQYMG4e6778aePXuQlpYGm82GjIwMfPzxx5g/f77/uJ07d2LTpk2YPHkyvF4vLr30Utx999344osvAAB//OMfYTQaUVBQAJVKBZ/Ph8suuwxLlizBG2+84T/P3r17sWvXrjatUif705/+BKPRiK1bt0Kn0+Hw4cPIzc3Fe++9hxtvvBG33HILRFHE448/jg8//LDDn/fQoUPYtWsXsrOzIQgCzjnnHCxbtgyvvPJKt+o+2b333ousrCx8/fXXUKvVyMvLw5lnnonZs2d369pdua+d3Yvu+PW9t9vteOqpp7B+/XpMnToVAHDgwAE4HI4Oz+P1erFw4UJs2bIFmzZt6jQUEhFRWwx6REQEADCZTLj//vvx8MMPtwpg3TVr1iwMGjQIAKDVajF27FjExsYiLS0NAGA0Gv2tfSc7++yzMXnyZACAUqnE4sWLMWvWLDQ2NkKpVOLDDz/En/70J6xZswaiKEIURaSnp+Obb75pdZ7zzjuvw5Dn8/mwatUq/Otf/4JOpwMADB48GFdffTU+/PDDboebmTNnIjs7GwAgl8sxdepU/8yRTqezy3Wf4PV6sWbNGqxatcrf4jl27FjMnDmzW9fuyn3V6XS9ei9+fe8VCgVUKhX27t2LKVOmQCaTYdiwYR2ew+l04oorrkBZWRk2bdqE+Pj4btVARETNGPSIiMjv7rvvxssvv4wXXnih3a6KXRETE9PqsUajaXfbrycfGThwYKvHJ8JicXExtFot3G43du7cicLCwlb7nWgpOiE5ObnD+srKyuDxeJCZmdlqe1ZWFrZu3drpz/drsbGxrR6f/LOVl5d3ue4TysvL4fP52tyPgQMHoqKiosvXPvm4k518Xw0GQ6/ei1/fe41Gg/feew/33HMPHn30UUybNg3z58/H3LlzT3mO1atXw+VyIS8vjyGPiKgHGPSIiMhPp9PhkUcewT333INzzjmn1ffkcjkEQWi1rTdniqyvr2/3cVxcnH/ikrvuugtz5szp8DwnxpWdyolxcXV1da2219XV+b/XWyIjI4Eu1n3CifBmsVhabf/1/emqju6rwWAAunAvuvrct3fvr7zySlx55ZU4dOgQvvjiC9x44414+umncdddd7Vb77XXXguv14s5c+Zgw4YN7LZJRHSauGA6ERG1cvPNNyMlJQWPP/54q+0DBgxAQUGB/7HX6221HENPbdy4sVUoWb16NXJycpCQkIC4uDiMGzcOr776apvjysrKunUdvV6P3NxcrF692r/N4/FgzZo1bWa07KnTqdtgMGD06NFYs2aNf5vdbse6detOq4aO7mtX78XpPveNjY2wWq0AgCFDhmDx4sW46KKL8PPPP5/yGLlcjhUrVmDKlCmYPn06iouLT+vnJiLq79iiR0RErSgUCjz11FO4/PLLW23/zW9+gwsuuABLlixBVlYWPvzwQ5jN5l67rkajwYwZM3DbbbehoKAAL730Ej766CP/91977TXMnDkTM2fOxBVXXAG73Y5vv/0Wo0aNwnPPPdetay1btgwXXHABRFFEbm4uVq5cCa/Xi3vvvbfXfp6e1P3kk09i7ty5EAQBw4YNw4oVK4AutFa2p7P72pV7cbrPvdVqxbRp0zB37lyMGDECx48fx+eff44PPvigw+Pkcjneeecd3HjjjTj33HOxYcMGpKend/tnJyLqzxj0iIj6udzc3DZr2s2dOxeLFi1CZWUloqOjAQAzZszA2rVrsWrVKuTn5+P+++9HWVlZq25/kydPhlarbXWuqVOnthlLNn369FbjwiZPnowZM2YgPT0dX3/9Nex2O9auXYvp06f79xk3bhzy8/OxYsUK/PLLL0hISMA999zTan219q7fnnPPPRfbtm3Du+++i59++gmzZs3C7bff7v9Z0TJO7dJLL+3wPO1db+TIka0ed6XuXy+Yfskll+C7777DBx98gP379+OBBx7ARx991CrodeXaXbmvXbkXp/vcDxgwAFu3bsWKFSvw448/wmQyYf369ZgwYUKn9/NE2HvwwQfx2muv4a9//WvAF64nIgonMlEURamLICIiov9paGiAXq+HUtn8eazT6UROTg7uueceLFq0SOryiIgoBDDoERERBZkDBw7glltuwVVXXQWlUol3330XVqsVW7dubdXSRkREdCoMekREREFo586d+Oijj1BXV4cRI0bg1ltvhV6vl7osIiIKEQx6REREREREYYajmomIiIiIiMIMgx4REREREVGYYdAjIiIiIiIKMwx6REREREREYYZBj4iIiIiIKMww6BEREREREYUZBj0iIiIiIqIww6BHREREREQUZhj0iIiIiIiIwsz/B64TGIp7u922AAAAAElFTkSuQmCC",
            "text/plain": [
              "<Figure size 900x400 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "cv_results = search.cv_results_\n",
        "k_values = np.asarray(cv_results[\"param_knn__n_neighbors\"], dtype=int)\n",
        "mean_train_scores = cv_results[\"mean_train_score\"]\n",
        "mean_validation_scores = cv_results[\"mean_test_score\"]\n",
        "std_validation_scores = cv_results[\"std_test_score\"]\n",
        "\n",
        "print(\" k | train F1 | validation F1 | fold std\")\n",
        "for k, train, validation, std in zip(\n",
        "    k_values[:5], mean_train_scores[:5],\n",
        "    mean_validation_scores[:5], std_validation_scores[:5],\n",
        "):\n",
        "    print(f\"{k:2d} |   {train:.3f}  |      {validation:.3f}    |  {std:.3f}\")\n",
        "\n",
        "plt.figure(figsize=(9, 4))\n",
        "plt.plot(k_values, mean_train_scores, label=\"training\")\n",
        "plt.plot(k_values, mean_validation_scores, label=\"validation\")\n",
        "plt.fill_between(\n",
        "    k_values,\n",
        "    mean_validation_scores - std_validation_scores,\n",
        "    mean_validation_scores + std_validation_scores,\n",
        "    alpha=0.2, label=\"± one fold standard deviation\",\n",
        ")\n",
        "plt.xlabel(\"Number of neighbours k\")\n",
        "plt.ylabel(\"F1 score\")\n",
        "plt.legend()\n",
        "plt.tight_layout()\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "tags": [
          "correction"
        ]
      },
      "source": [
        "### Proposed interpretation\n",
        "\n",
        "Very small $k$ tends to produce a high training score and a larger train/validation gap. Nearby values can have very similar validation scores, so the numerical winner should not be overinterpreted. The fold standard deviation describes variation among these folds; because their training sets overlap, it is not automatically a confidence interval."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 11. Compare with a baseline under the same protocol\n",
        "\n",
        "Use [`cross_val_score`](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_val_score.html) to evaluate a most-frequent `DummyClassifier` with the same folds, groups and F1 metric.\n",
        "\n",
        "Why is comparison under the same splitting protocol important?"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "metadata": {
        "tags": [
          "exercise"
        ]
      },
      "outputs": [],
      "source": [
        "from sklearn.model_selection import cross_val_score\n",
        "\n",
        "# TODO: evaluate a most-frequent baseline with the same cv object.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "metadata": {
        "tags": [
          "correction"
        ]
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Dummy fold scores: [0. 0. 0. 0. 0.]\n",
            "Dummy mean F1 score: 0.000\n"
          ]
        }
      ],
      "source": [
        "dummy = DummyClassifier(strategy=\"most_frequent\")\n",
        "dummy_scores = cross_val_score(\n",
        "    dummy, X_dev, y_dev,\n",
        "    cv=cv, groups=groups_dev, scoring=\"f1\",\n",
        ")\n",
        "print(\"Dummy fold scores:\", np.round(dummy_scores, 3))\n",
        "print(\"Dummy mean F1 score:\", f\"{dummy_scores.mean():.3f}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 12. Bonus — Choose a decision threshold on development data\n",
        "\n",
        "The classifier uses a threshold of 0.5 by default. For a rare failure, missing a positive case may be more costly than raising a false alarm. Suppose the operational requirement is therefore to obtain at least 80% recall on development data.\n",
        "\n",
        "Use [`cross_val_predict`](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_val_predict.html) to obtain out-of-fold positive-class scores for the selected pipeline on `X_dev`. Then use [`roc_curve`](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html) to:\n",
        "\n",
        "1. plot the ROC curve and identify the point associated with each threshold;\n",
        "2. among thresholds reaching at least 80% recall, retain the one with the lowest false-positive rate.\n",
        "\n",
        "Why must this threshold be fixed without looking at the final test set?"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 21,
      "metadata": {
        "tags": [
          "exercise"
        ]
      },
      "outputs": [],
      "source": [
        "from sklearn.model_selection import cross_val_predict\n",
        "from sklearn.metrics import roc_curve\n",
        "\n",
        "# TODO: obtain out-of-fold scores and choose the decision threshold.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 22,
      "metadata": {
        "tags": [
          "correction"
        ]
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Chosen threshold: 0.333\n",
            "OOF recall at this threshold: 0.864\n",
            "OOF false-positive rate: 0.063\n"
          ]
        },
        {
          "data": {
            "image/png": "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IjIyEgAwYMAA7NixA8XFxXLHydbbtrS0xP79+7mfyZMnc/vIegXJ/P7772jUqBFatWoFAOjWrRt+//13ufMePnyYazx/XWzlmZuby62TXpWxY8fi1KlT2L17NyQSCYKDg7nnXne9ylDkd1FZzOqMgWgHKnEQrRYcHIzQ0FDk5+ejsLAQGzZs4HooVYYxhh49eqBv374ICAiAUCjETz/9hEWLFgEAvv76a3Tv3h2dOnXChAkToKenh4iICJSUlOC3336rNpZGjRrhrbfewkcffYSsrCysXr0aX3zxBbdM6YoVK9C+fXuMHDkSQUFBOH36NG7fvo0bN24oFFt57dq1w2effYb169fD2dkZHTt2rHS/Pn36wMbGBp9++inefvttua7HNbne8hT5XVQWszpjINqBEgfRODMzM4SEhMgN/pNZv349fHx8cP36dVhYWGDfvn24fPmyXFtC2UFxenp6uHfvHnbv3o1r167BzMwMe/bs4Z53dXXFP//8g127duHOnTuwsLDAO++8g2HDhr02zrZt22LNmjX47bffkJ6ejt27d2PEiBHc897e3rh37x62bduGy5cvw8fHB+vXr4e7u7tCsZUf3NetWzf8+uuvOHfuHG7cuAEnJ6dKBwDy+XyEhobi4sWL+OCDD+SeU+V6W7duXWm7gyK/i8pi7tGjh8rvOdFOtOY4IQpYsmQJIiIicPHiRU2HQojGURsHIYQQpVBVFSEKqKr6hpCGiKqqCCGEKIWqqgghhCiFEgchhBClUOIghBCiFEochBBClEKJgxBCiFIocRBCCFEKJQ5CCCFKocRBCCFEKZQ4CCGEKOX/zTsgMjKtrh0AAAAASUVORK5CYII=",
            "text/plain": [
              "<Figure size 800x400 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "oof_scores = cross_val_predict(\n",
        "    search.best_estimator_, X_dev, y_dev,\n",
        "    groups=groups_dev, cv=cv, method=\"predict_proba\", n_jobs=-1,\n",
        ")[:, 1]\n",
        "\n",
        "fpr_curve, recall_curve, thresholds = roc_curve(\n",
        "    y_dev, oof_scores\n",
        ")\n",
        "target_recall = 0.80\n",
        "eligible = np.flatnonzero(recall_curve >= target_recall)\n",
        "best_index = eligible[np.argmin(fpr_curve[eligible])]\n",
        "decision_threshold = thresholds[best_index]\n",
        "\n",
        "print(\"Chosen threshold:\", f\"{decision_threshold:.3f}\")\n",
        "print(\"OOF recall at this threshold:\", f\"{recall_curve[best_index]:.3f}\")\n",
        "print(\"OOF false-positive rate:\", f\"{fpr_curve[best_index]:.3f}\")\n",
        "\n",
        "plt.figure(figsize=(8, 4))\n",
        "plt.plot(fpr_curve, recall_curve, \"o-\", label=\"development ROC\")\n",
        "plt.scatter(\n",
        "    fpr_curve[best_index], recall_curve[best_index], s=100, color=\"tab:red\",\n",
        "    label=f\"chosen threshold = {decision_threshold:.3f}\", zorder=3,\n",
        ")\n",
        "plt.plot([0, 1], [0, 1], \"k--\", label=\"random ranking\")\n",
        "plt.xlabel(\"False-positive rate\")\n",
        "plt.ylabel(\"Recall / true-positive rate\")\n",
        "plt.axis(\"square\")\n",
        "plt.legend()\n",
        "plt.tight_layout()\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "tags": [
          "correction"
        ]
      },
      "source": [
        "With $k=3$, predicted probabilities are discrete. The chosen threshold is $1/3$: one positive neighbour is enough to predict a failure, whereas the default threshold effectively requires at least two. This should increase recall and reduce precision. The 80% target is measured on development predictions and is not guaranteed on a new finite test sample. Looking at the test set to choose the threshold would turn it into validation data."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 13. Freeze the protocol and evaluate once\n",
        "\n",
        "Before revealing the final result, write down:\n",
        "\n",
        "- the selected learning procedure;\n",
        "- the primary metric;\n",
        "- the baseline;\n",
        "- the expected limitation of this experiment.\n",
        "\n",
        "Then use the fitted `search.best_estimator_` to evaluate `X_test` exactly once. Compare decisions obtained with the default threshold 0.5 and with the previously frozen `decision_threshold`. Report accuracy, precision, recall, F1 score, ROC-AUC and the confusion matrices. Plot the ROC curve and compare it with the random-ranking diagonal.\n",
        "\n",
        "> With the default `refit=True`, `GridSearchCV` has already refitted the selected pipeline on all development data."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 23,
      "metadata": {
        "tags": [
          "exercise"
        ]
      },
      "outputs": [],
      "source": [
        "# The default keeps this section executable if the threshold bonus was skipped.\n",
        "decision_threshold = globals().get(\"decision_threshold\", 0.5)\n",
        "\n",
        "# TODO: perform the single final evaluation.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "metadata": {
        "tags": [
          "correction"
        ]
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Final k-NN — threshold 0.5\n",
            "  accuracy : 0.936\n",
            "  precision: 0.966\n",
            "  recall   : 0.571\n",
            "  F1 score : 0.718\n",
            "  ROC-AUC  : 0.851\n",
            "Final k-NN — threshold 0.333\n",
            "  accuracy : 0.936\n",
            "  precision: 0.814\n",
            "  recall   : 0.714\n",
            "  F1 score : 0.761\n",
            "  ROC-AUC  : 0.851\n"
          ]
        },
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAA00AAAGGCAYAAACns2pyAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvctoD+AAAAAlwSFlzAAAPYQAAD2EBqD+naQAARgVJREFUeJzt3Xt8jvXjx/H3vfNmttnBHOcUMzkfy6GEQiiJ5FQ6KdI3x0RKKnSQDr98UXxTUc6HUkooOUVOOVNhZmzsYCc739fvj7hz23aZtbltXs/HY4/cn/u6rvu9NffH+75OFsMwDAEAAAAAcuXk6AAAAAAAcCOjNAEAAACACUoTAAAAAJigNAEAAACACUoTAAAAAJigNAEAAACACUoTAAAAAJigNAEAAACACUoTAAAAAJigNOG6iImJkcVi0dSpUx0dxeb999+XxWJRVFRUoW1z7ty5slgs+vPPP6+67Nq1a2WxWLR27dpCe30AwM2jf//+qlSpkqNj2LFYLHrxxRcLdZt+fn4aOnRovpatW7euunbtWqivD4jShH+jZ8+eslgsV/1q2LCho6MWe2lpaRo7dqxCQkLk7u6u0NBQvf/++zIM46rrHj58OM//N++///51yQ8AuLpNmzbla161WCz6+eefHR232Fu7dq1atWolLy8v+fv7q3fv3jp58mS+1j106JCee+45hYWFydPTU1WqVNHDDz+sPXv2XLdlcX1RmlBgS5YskWEYtq/Vq1dLkmbMmGE3zl/0f69Pnz769NNPNX/+fCUkJGjy5MkaO3asXn755Xxv45NPPrH7/2IYhoYNG1akuQEA+de6desc79OhoaEKDQ3NMd62bVtHxy3W1q5dq86dO6tVq1Y6c+aMdu3apbNnz6pNmzaKi4u76vrjxo1T48aN9c033yguLk7Lly9XRESEbrvtNu3evfu6LIvry8XRAQCYW79+vVasWKFPP/1Ubdq0kSQ9+OCD+u233/T222/rmWeeueEOzwAA4EY2YsQI1a1bV2+99ZYsFot8fX31xRdfqFq1anrnnXc0ZcoU0/WXL19u97hx48aaPXu26tSpo88++0yNGjUq8mVxfbGnCdfd6tWrVb9+fXl4eCgsLEzLli2ze/7y859WrlypBg0ayM3NTfPmzZMkRUZG6qmnnlLFihXl5uamqlWraty4cUpPT7dtIy4uTs8++6yqVKkiT09P1apVS8OGDVNMTEyOPNnZ2Ro3bpyCg4NVqlQpdenSJdfd83v37tX9998vf39/eXh4qF69epo+fXq+DpHbsmWLWrVqJU9PT1WuXPmazu1aunSpLBaL7r//frvxHj16KDMzUytWrMj3tgAAJc/58+fVr18/+fr6yt/fX08++aQuXLhgt8yl859iYmLUt29flSlTRs2aNbM9P3v2bDVp0kSenp7y8fFR586dcxwpsmDBAjVv3ly+vr4KDAxUhw4dtG7dulwzbdy4Uc2aNZOHh4dq1KihuXPn5lgmIyNDr776qmrWrCk3NzcFBwdrwIABioiIuOr3nJKSoueee05ly5aVt7e3unbtqlOnTuXr5/XHH39o37596t69uywWi228UqVKatasmRYvXpyv7VzJ1dVVklSqVCmHLYuiQ2nCdfXrr79q2bJl+uabb3Ty5Ek1adJEvXv31vHjx3Msu2nTJi1btkwrVqzQ3r17VbFiRUVERKhZs2bau3evli9frri4OM2dO1fz589X7969bes++uijWrt2rZYvX674+Hj98MMPuuWWW/S///0vx+u88sorqlWrlo4cOaJffvlF+/fv14ABA+yW2bdvn1q2bKnk5GRt3rxZp0+f1qBBgzRs2DCNHDnS9HvevXu32rdvr8DAQO3fv1+7du1SSkqKpk+fnq+f2d69e1W2bFmVKVPGbjwsLMyWLT/GjBkjd3d3lS5dWq1bt9aiRYvytR4A4MZltVr17LPPauDAgTp16pTmzp2rL7/8Uq+88kquyw4aNEgDBw7UsWPHbBdXeO655/Sf//xHTzzxhCIiInTo0CFVrFhRrVu31oEDB6SLh7P16dNHffv21YkTJ3Ts2DGNHz8+1w8BDx06pJkzZ+qrr75SZGSkOnfurMceeyzH4WW9evXStGnT9Nprr+ncuXP69ttv9fvvv6tFixZXvUjTgw8+qC+//FKzZ8/W6dOn9cILL2jQoEHKyMi46s9s7969kqTQ0NAcz4WFhenYsWNKSUm56nYuyczM1IEDBzR48GCFhIRoyJAh131ZXAcGUEhWr15tSDJmzJiR47lz584ZkozatWsb2dnZtvGYmBjDxcXFePnll3MsW7VqVSMrK8tuOwMGDDB8fHyMqKgou/FVq1YZkoyNGzcahmEY3t7exujRo03zvvfee4Yk47XXXrMbnz59uiHJOHLkiG3svvvuM3x8fIz4+Hi7ZZ999lnDycnJ+OuvvwzDMIxPP/3UkGT88ccftmW6detmBAUFGRcuXLBbt2vXroYk48cffzTNGRYWZoSGhub6nLOzs9GjRw/T9Y8cOWIMGjTI2LFjh5GcnGwcOnTIGDhwoCHJeOONN0zXBQA4VmhoaJ5zQL9+/QxJxnfffWc3/thjjxk+Pj65Lrt06VK78R07dhiSjClTptiNZ2VlGbVr1zYefPBBwzAMY/z48Ya7u7thtVpN80oyKlSoYKSmptrGLly4YPj4+BiDBw+2ja1fv96QZEybNs1u/cOHDxtOTk7G888/bxvz9fU1nn32WdvjdevWGZKMTz75xG7dtWvXGpKMLl26mGacNWuWIclYvXp1judGjBhhSDJOnjxpug3DMIyIiAhDku0rNDTU2Ldv33VdFtcPe5pwXXXu3FlOTv/82gUEBKh8+fI6duxYjmW7dOkiZ2dnu7FvvvlGd9xxh4KDg+3G27VrJ4vFog0bNkiSGjRooDlz5uijjz5SeHi4aaYuXbrYPa5bt64k2WVat26d2rVrJz8/P7tle/bsKavVqp9++inP7a9fv14dOnSQp6en3Xj37t1Nc13u8sMHLmcYRp7PXVKrVi3NmjVLTZo0UalSpVS7dm19+umnuueeezRx4kSdPXs23zkAADcWFxcX3XPPPXZjdevWVWJiYo5D0i0WS47Lca9atUq6uNfncs7Ozmrbtq3dvJqenq5+/fpp06ZNpnt02rdvLw8PD9tjT09P1ahRI8e8qouHml8uNDRU9erVy/Owv8vXve+++3K8rre3d57rXcls/rza3KqLh/MZhqHU1FTt3LlTlSpVUqtWrfTrr79et2Vx/VCacF2VL18+x5iPj4/Onz+fY7xixYp2j9PT03X+/Hl9++23cnFxkbOzs5ydneXk5CQvLy8ZhqHY2Fjp4nHX9957r1566SVVrVpV1apV0/Dhw3M9p+nKTD4+PtLFY8QvvW5KSorKlSuXY91LY7ltVxcvFZ6SkpKj5EnKdSw3AQEBio+PzzGelJQkq9Uqf3//fG3nSvfff78yMzO1ffv2Aq0PAHC8smXL5viA8cp57JKgoCC5ubnZjV06DC40NNQ2tzo5OcnJyUkzZ860zas9e/bU9OnTtWfPHrVp00Z+fn7q1KlTrvcazM9cf2m7ec2tec2rl9Z1cnJSUFBQjufyM7cGBARIUq5z6/nz52WxWHIcEm/Gw8NDjRs3tl3E4aWXXrruy6LoUZpwXeXnk5tLLp34eIm7u7u8vb3Vu3dvZWVlKTs7W9nZ2bJarbZLsE6bNk26+CnNF198odjYWO3atUtPPvmkPv7441z37lwtk7u7u0qVKqXo6Ogcz10aCwwMzHVdDw8PeXl5ma57NfXq1dPZs2dzvLkfOnRIklS/fv18bQcAUPL8m3lVl81fkZGRtrnVarXa5lar1WpbdsiQITp48KDOnDmjuXPnKiEhQR07dtS2bduuOdOlD/zymh/zmld1sfRYrVadO3cux3P5OXqiXr16kqQjR47keO7QoUOqXr16gS66ULp0aVWrVi3Xo2eu17IoOpQmFCvdunXT2rVr83UPBV08bKFRo0Z66aWXNGDAAG3ZskXZ2dnX/Lrt2rXT+vXrlZiYaDe+dOlSOTk56a677jJdd+3atUpLS7MbX7lyZb5eu0ePHjIMI8fyy5Ytk4uLS46r6uXX119/LVdXV7urJwEAbi6XDtdbuHBhvtcpV66cHnroIX366aeyWq3avHnzNb9u+/btpVwusX3pynaXns9Nu3btpIuH7F9u/fr1SkpKuupr16pVS3Xr1s1x9dlTp07pt99+U8+ePa/pe7kkPj5ef/zxh+1CTY5YFkWH0oRi5a233pK7u7s6d+6sDRs2KCkpSdHR0Vq3bp169eql3377TQkJCWrXrp1WrFihU6dOKT09Xb/99pvWrFmjNm3a5DiMIT9ef/11ZWZmqmfPnjpy5Iji4+M1ffp0zZw5U0OHDlX16tXzXPfVV19VYmKi+vbtq+PHjysmJkZvvPGGXFzyd5u0Dh06qFu3bnrxxRe1ceNGpaena9myZfrggw80evRoVa5c2bbs/v37ZbFYbFdEkqThw4frww8/1OHDh5WamqqjR4/qqaee0g8//KDx48fn+zBBAEDJ06JFCz333HMaO3as3nvvPUVEROjChQvav3+/3nzzTY0YMUK6eAXW119/Xfv27VNqaqqio6M1Y8YMOTk56Y477rjm123Xrp26dOmiV155RYsWLVJiYqJ27dqlXr16KSgoSGPGjDFd9+6779aYMWO0atUqJSUladOmTZo2bZpq1qyZr9d/9913tW/fPr3wwgtKTExUeHi4BgwYoHLlymn06NF2y3bo0EEWi0VZWVmSpM2bN+vRRx/V5s2bFRcXp8TERP3yyy/q0qWLLBaLXnvtNdu6RbUsrj9KE4qVypUra+fOnWrRooUee+wxBQYGqlGjRnrnnXfUp08fNWnSRL6+vnrllVc0f/583X777SpTpoz69u2rBx98sMD3NGrQoIE2b94sDw8PtWjRQuXKldN///tfTZ06Ve+//77puk2aNNHatWsVFRWlsLAwNWzYUK6urtd06dCFCxfq0UcfVd++feXj46MXX3xRkyZN0qRJk6667ujRo3XmzBn17NlT/v7+at68uf766y8tWrQo10vSAgBuLh9++KE+/vhjLV26VLfeeqvKli2rfv36KTk5WS+88IIkaeTIkbJarerfv78CAgJUv359HT16VGvXrlXTpk0L9LpLly7V888/r3HjxikwMFAdO3bUrbfeql9//TXX86IusVgsWrZsmXr37q3HHntM5cqV06RJk/Tf//43xzlbebnnnnv03XffadOmTSpXrpwaNmyooKAgbdy40XbOU15uu+02de3aVRMnTlTt2rUVGBioRx55RKGhodq5c6fdz6OolsX1ZzHyc2dOAAAAALhJsacJAAAAAExQmgAAAADABKUJAAAAAExQmgAAAADABKUJAAAAAExQmgAAAADARP7urnkDs1qtOn36tEqXLi2LxeLoOABwTQzDUFJSkipUqCAnJz7HQvHCHAygOLuWObjYl6bTp0+rcuXKjo4BAP9KRESEKlWq5OgYwDVhDgZQEuRnDi72pal06dKSpPBdVeXjzae0KHwP1Krn6AgowbKUqU36zvZeBhQnzMG4HpiHUVSuZQ4u9qXp0uEAPt5O8inNGzYKn4vF1dERUJIZf/+HQ5tQHDEH43pgHkaRuYY5mHc4AAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADBBaQIAAAAAE5QmAAAAADDh4ugA+Pd+3+Ktn1f4KTrCTWUrZeje/rGq1SDVbpkz4W5aMTtIEX+6y9s3Wx37xKrJncnXvB0gL1VqpanLIzGqUTdVX0wtpz2bSjs6EgAUuYRYZ307L1BHdnnJ1d1Q/duT1blfrFzdDNsyWZnSmoUB2vVLaaUkOim4coa6DIhVzfr/zLHz3wvWzp/t3zerhKbp+bdPXdfvB8VTcOV03f94jEJqpisr06KDO720am6gLiQ7OzpaiXFD7GnKysrS+fPnHR2jWFr2cZDmTQtWzfqpevDpc/L2zdbzXWpp21of2zIn/3DXM+1DlZLkpAcGndOtzVM06elq2vC13zVtB8hLt4ExemnWCZ0Jd1fd5hfkG5Dl6EgArkFCQoIyMjIcHaPYSU1x0nP31lJmukWd+8Xq9o4JWvZxkF59rJqMfzqTpo+vpM/fKadm7RLVc/BZubgYGn5fTR3Z42lb5tRf7vIqbdXj487YvroNjHHMN4ZipUxQpj787g+Vr5KhFbMDtX5ZGXV4MF6vf3Hc0dFKFIfuaTIMQy+++KI++ugjWa1WBQUF6aOPPtJ9993nyFjFSsc+seox6JztcZO2SToT7q5lHwepRYdESdLXnwYquHKGRr4XIYtF0l1JykizaPbrFXRHt/OyWPK3HSAv65eV0TdzA+XkbOiZiacdHQdAPm3dulWPP/64jh8/LsMw1LdvX82cOVPu7u6OjlYsuHlY9fFPh+Xh9U9DCq6UoZEP1NSJwx6qFpYmSdr8na8efPqcOj4cJ0lqcmeytq/z1bYffRXa8J+9TX6BWarbIsUB3wmKs3q3pcgvIFtvDQ1R2oW/9yylpzrptc+Py9c/SwlxHFhWGBy6p+m9997Txx9/rA0bNig5OVnDhg1Tz549deTIEUfGKlZKlbbmMpatjDSL7XFCrIsCy2X+XZguCiyfqbORbor40z3f2wHykpLI7n+guImNjVWXLl3UpUsXJSYm6uDBg1q3bp1Gjx7t6GjFhrOz7AqTJJXyyZYkZaT/M3/eUi9VR3/3kvXiVHsm3E3nY1xUs/4Fu3X3by+lF3vX0KSnq2jV5wHKzr4e3wWKu+OHPJSdJdVu/M/vU+3GKYo66aak88zPhcWhpen//u//9OSTT6pp06ZydnbWiBEjVKlSJc2aNcuRsYq1M+Fu2vC1n27v+M/eobotUrR/eymdOOwhScpIs+jHRf6SpOgIt3xvBwBQcsybN0+ZmZl644035Obmpho1amjkyJGaM2eOUlM5n7WgFvxfsIIrZah6nTTb2LgZ4crKtKh/0zp6tmMtDe1cS0OnnLKbYz1KWdX2/ng9+PRZ1W+ZrK8+CNbLA6rbHeYH5CbiTw+N61tdL3x4Uv/98Yg+3XxITdomafSDNWS18uF3YXHY/rpz587pxIkTat26td14mzZttH37dkfFKtYS4501YWA11WqQqgefPmsb7/pojI4d8NRz99ZS5Rppio12VZuu57Vzg5SVmfMvU17bAQCUHNu3b1fTpk3l4eFhG7vjjjt04cIFHThwQE2bNnVovuJo0fSy2rzaV28u+MvuQhAr5gTq6O9eemTUGQVVzNSva3z0v8nlFdooRVVqpUuSBk+MlJvHP+vUaZqiIXfX1vZ1PhwmD1M+/lka/NppHdnjpdXzA+RZKlt9h53V4+PO6M1nqzg6Xonh0NIkSYGBgXbjQUFB2rp1a57rpaenKz093fY4MZE3EklKTnDWuD415OVt1cTPjsn5sv+zzs7S8Hcj9MT404qOcFNAuUxFR7jpm7lBCiiXme/tAABKjnPnzuU6B0vS2bO5f2DGHJy3lXMC9fnUcnpl9nG785LOxzpr/nvl9MKH4brrgb8vetW0bZKOH/LUvHfL6aVZ4ZJkV5gkqcatafILzNRfBzwpTTDV7dEY+fhnacg9tZSd9feH4Sf/8NDMdUe16rMA7d/u7eiIJYLDDs+zXDzBJivL/ipbWVlZcnbO+/jLKVOmyNfX1/ZVuXLlIs96o0tOcNbYh2vIxdXQpC//kpd3zvOTJMmnTLZq1k+Vf9ksbVvrI9+ATFWvk3rN2wEAFH8WiyXXOVhSnvMwc3Duvv40UJ+8UUEvf3JCzdsn2T2XkuAsa7ZFgRXsP6QMLJ+pxPi8P5nMSLcoJdFZHp7MxTBXuky2zp9zsRUmSYo54/r3c/6cGFdYHFaaKlSoIEmKjo62G4+OjrY9l5uxY8cqISHB9hUREVHkWW9kKUlOGte3upxd/i46uV3QIe2Ck9YtLWN7fGinl1bMDlK/4dFycc3/dgAAJUfFihVznYN12Rx9JebgnL75LEAfv/Z3Ycptj1C5KhnyD87Ud18EKPtiRz19wk07N5RW3eZ/75FKSXLSyv8F2i78kJUpfTyxgmSRWnZKuK7fD4qfA9tLqUpomurf/s/9N7s+GquMNIv++N3TdF3kn8MOvvL19VWDBg30448/6qGHHpIufsK1bt06Pfvss3mu5+7uzqVQL/PVB8E6sruUqtdJ1cv9q9vGS5fJ1sS5f1+f39XNqt83e+t/k8urtF+2ok66qc/z0br/8Zhr2g6Ql9BGKRo04Z9LjQ8YGa37HovR1u99tWRmWYdmA5C7O+64Q/PmzdP58+fl5/f3fft++OEHBQYGKiwsLNd1mIPtxUa5aPq4SvLxz9LC/yurhf/3z/vdgFFRatQmWc7O0vhZJzR1eIj6N71VZYIyFfGXh26/J0G9h/5dUt09rIqKcNPD9esqqEKGYs64ydsvSxPnHlO5EO6fBXMbV/mpVoMLemPeMUUed5dnKas8S1k1dXhlxZzJ/YJfuHYWw3DcdVmWLFmivn37asaMGbr99ts1depUff311zp48KDKls3fP7QSExPl6+ur+KPV5VP6hrhX73UVddLNtgv2ci5uhmo3sr+UadxZF8VGuSqkZprcPe3/t1/Ldm42HSs0dHSEG14pn2xVrZ3zaltx0a46E84/sMxkGZn6WSuVkJAgHx9uJo3rJy0tTfXq1VPt2rU1adIk/fnnn3r00Uf16quvauTIkfnaxs0+B2ekW3R0j1euz1W+JU2+Af8cGpWdLZ095abkBGcFV86QT5mch02lp1p06i8PlS6TpaAK9rcKuZkxD+ePZ6lsla+SoYx0i6JOuikr8+b7O3mtrmUOdmhpkqT58+frgw8+UHR0tOrVq6c333xTdevWzff6N/sbNooeb9YoSpQmONLJkyc1ZswYbd26Vb6+vnr88cf1/PPP53t95mBcD8zDKCrXMgc7/Npo/fr1U79+/RwdAwCAm05ISIi++uorR8cAgBseHwsBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYcMnvgv3798/3RufNm1fQPAAA4Arz5s3T999/n69lBwwYoI4dOxZ5JgC4meS7NLm45HtRAABQiJycnPI9D1ssliLPAwA3m3w3oblz5xZtEgAAkKu+ffuqb9++jo4BADctzmkCAAAAABMFKk2GYWjmzJlq1qyZAgICbONjx45VZGRkYeYDAABXOHz4sHr06KGQkBDNmDFDkrRhwwbNmTPH0dEAoEQqUGn64IMPNHnyZA0YMEBxcXG28Zo1a+qNN94ozHwAAOAyMTExuuOOO1S2bFmFhYUpPT1dktSsWTNNmTJFMTExjo4IACVOgUrTjBkztHjxYv3nP/+xG7/77ru1dOnSwsoGAACusHjxYrVv314zZ85UnTp1bONeXl5q0KCB1qxZ49B8AFASFag0hYeHq379+tIVV+nx9vZWQkJC4aUDAAB28pqDxTwMAEWmQKUpJCREu3fvlq54w16+fLlq165deOkAAICdvObgxMRErVu3jnkYAIpAgUrTsGHD9Mgjj2jJkiWSpM2bN+vll1/W0KFDNXz48MLOCAAALurTp482bdqkcePGKTIyUpGRkVqwYIHtPKc777zT0REBoMQp0B1rhwwZovT0dA0ePFhWq1WtW7dWmTJlNHnyZA0cOLDwUwIAAElSmTJltHbtWj399NPatGmTdHGPU6dOnTR79mw5OXE3EQAobAUqTZI0fPhwPf/88woPD5fValXVqlXl7OxcuOkAAEAOderU0caNGxUXF6dz584pODhYfn5+jo4FACVWgUvTJc7OznJ2ds5xMioAAChal+ZfV1dXR0cBgBKtQPvwMzIyNH78ePn5+alKlSqqUqWK/Pz89MorrygzM7PwUwIAAJuff/5ZTZo0kZ+fn0JDQ+Xt7a327dtr3759jo4GACVSgUrT8OHDNXfuXE2bNk179uzRnj17NG3aNP3vf//TiBEjCj8lAACQJB04cEAdO3ZU06ZN9csvv+jw4cNau3at/Pz81LZtW507d87REQGgxCnQ4Xnz5s3TmjVr1KJFC9tYgwYNVLduXXXq1En/93//V5gZAQDARYsWLVKPHj00a9Ys21hoaKjatWunVq1a6dtvv+WiTABQyAq0p8nT01O1atXKMR4aGipPT8/CyAUAAHKR1xxssVhUs2ZN5mEAKAIFKk333HOP3n33XRmGYRszDEPvvvuu7rnnnsLMBwAALtOhQwctWLBAUVFRduOHDx/Wzz//rJYtWzosGwCUVPk+PO+ZZ56x/TkjI0OTJk3S4sWL1bRpUxmGoZ07d+ro0aN6+OGHiyorAAA3pcWLF2vdunW2x6mpqapRo4buuusuBQUFKTIyUj/99JNq1aqlP/74Q5UrV3ZoXgAoafJdmmJiYuweP/jgg5Kk9PR0SVK9evVUr149rp4HAEAhS0lJsZuHmzdvbvtzUlKSfHx8dP/990sXCxUAoHDluzQtWbKkaJMAAIBcDRw4kIs7AIADFeicJgAAAAC4WRTokuOSlJaWpu3bt+vkyZPKysqye45PwwAAKFpHjhzRwYMHlZCQYDfevHlz1alTx2G5AKAkKlBp2rdvn7p166a4uDglJSUpICBAsbGxkqQKFSpQmgAAKEKPP/64Pv/8c7m7u8vFxUUXLlxQVlaWfHx8NG3aNEoTABSyAh2eN3z4cD300EO2T7diYmL0559/qmXLlnr22WcLOyMAALho1apV+umnnxQeHq6nnnpKEydO1IULFzR16lT5+/urT58+jo4IACVOgUrTzp07NWbMGFksFlksFmVkZKhGjRqaM2eO3R3KAQBA4dq5c6f69++vihUrysnJSRkZGXJ1ddXIkSMVGhqqH374wdERAaDEKVBpOn/+vAICAiRJQUFBOn36tCSpYsWKio6OLtyEAADAJj4+Ptc5WMzDAFBk/vXV81q2bKkJEyZox44dGjt2rMLCwgonGQAAMNWyZUstWLBAa9as0bfffqtly5YxDwNAESjQhSDGjBlj+/Pbb7+tHj16qFmzZqpUqZIWLlxYmPkAAMBlOnTooDJlykiS7rzzTvXp00fdunWT1WrV4MGDdeeddzo6IgCUOBbDMIzC2FBycrK8vb0LY1PXJDExUb6+voo/Wl0+pbntFApfxwoNHR0BJViWkamftVIJCQny8fFxdBwUU5mZmbJarXJ3d7+ur8scjOuBeRhF5Vrm4ALfp+lKjihMAABAcnV1dXQEACjR8l2a+vfvn++Nzps3r6B5AADAFebNm6fvv/8+X8sOGDBAHTt2LPJMAHAzyXdpcnEptJ1SAADgGjg5OeV7HrZYLEWeBwBuNvluQnPnzi3aJAAAIFd9+/ZV3759HR0DAG5aJWb3Ua827eXi5OboGCiBXKpe3xOrcZOxpkvhjg4B/Ds96jWVi4XzqlA0XKqVc3QElFTWdOlE/hblUjcAAAAAYILSBAAAAAAmKE0AAAAAYILSBAAAAAAmClSaDMPQzJkz1axZMwUEBNjGx44dq8jIyMLMBwAArnD48GH16NFDISEhmjFjhiRpw4YNmjNnjqOjAUCJVKDS9MEHH2jy5MkaMGCA4uLibOM1a9bUG2+8UZj5AADAZWJiYnTHHXeobNmyCgsLU3p6uiSpWbNmmjJlimJiYhwdEQBKnAKVphkzZmjx4sX6z3/+Yzd+9913a+nSpYWVDQAAXGHx4sVq3769Zs6cqTp16tjGvby81KBBA61Zs8ah+QCgJCpQaQoPD1f9+vWlK+487u3trYSEhMJLBwAA7OQ1B4t5GACKTIFKU0hIiHbv3i1d8Ya9fPly1a5du/DSAQAAO3nNwYmJiVq3bh3zMAAUgQKVpmHDhumRRx7RkiVLJEmbN2/Wyy+/rKFDh2r48OGFnREAAFzUp08fbdq0SePGjVNkZKQiIyO1YMEC23lOd955p6MjAkCJ41KQlYYMGaL09HQNHjxYVqtVrVu3VpkyZTR58mQNHDiw8FMCAABJUpkyZbR27Vo9/fTT2rRpk3Rxj1OnTp00e/ZsOTlxNxEAKGwFKk2SNHz4cD3//PMKDw+X1WpV1apV5ezsXLjpAABADnXq1NHGjRsVFxenc+fOKTg4WH5+fo6OBQAlVoFLkyQ5OTmpWrVqhZcGAADkm7+/v/z9/R0dAwBKvAKVpp49e5o+f+lcJwAAULjmzp2rVatW5fn8Y489pi5dulzXTABQ0hWoNAUGBto9tlqt+uOPP/Tzzz+rT58+hZUNAABcoVSpUjnm4YSEBP34448qV66cPD09HZYNAEqqApWmmTNn5jr+wQcfaP/+/f82EwAAyEOvXr3Uq1evHOPR0dFq06aNwsLCHJILAEqyQr3EzsCBA/Xtt98W5iYBAEA+BAcHq1WrVtq4caOjowBAiVOopenEiRNKT08vzE0CAIB8Cg8PZx4GgCJQoMPzxo8fn2MsPj5eS5cu1YMPPlgYuQAAQC6+++47bdmyxW4sMzNTv/32m3bt2qV58+Y5LBsAlFQFKk2XbqZ3uTJlyuiFF17Qs88+Wxi5AABALo4dO5ZjHnZzc1OtWrX00UcfqUKFCg7LBgAlVYFK088//1z4SQAAwFUNHTpUQ4cOdXQMALipFOicpkaNGhV+EgAAcFVTp07V/PnzHR0DAG4qBSpNx48fV2JiYuGnAQAAppKTk/XXX385OgYA3FQKVJq6d++uOXPmFH4aAABgqmvXrlq6dKmSk5MdHQUAbhoFOqcpPT1dI0aM0MKFC1WnTh25ubnZPZ/XzW8BAMC/c/z4cZ0/f17Vq1dX27Zt5e/vb/f8Qw89pHbt2jksHwCURNdUmrp27apVq1YpMzPTdmlxDtMDAKDoffLJJwoODlZKSoqaNWsmSbJarYqJibFbLjU11UEJAaDkuqbS9O2330qSlixZUlR5AABALg4cOKCUlBQNGzZMAwcOdHQcALipFOicJgAAAAC4WVzzOU1XHgaQm8DAwILmAQAAeUhJSbnqPOzt7S0PD4/rlgkAbgbXXJqCgoKuuoxhGAXNAwAA8jB+/HiNHz/edJn33ntPw4YNu26ZAOBmcM2lafny5UWTBAAAmHr88cfVrVs302Xq1at33fIAwM3imktT9+7diyYJAAAwVa9ePeZhAHAALgQBAAAAACauqTT5+voWXRIAAJAnT09Pubu7OzoGANyUrunwvPPnzxddEgAAkKcpU6Y4OgIA3LQ4PA8AAAAATFCaAAAAAMAEpQkAAAAATFCaAAAAAMAEpQkAAAAATFCaAAAAAMAEpQkAAAAATFCaAAAAAMAEpQkAAAAATFCaAAAAAMAEpQkAAAAATFCaAAAAAMAEpQkAAAAATFCaAAAAAMAEpQkAAAAATFCaAAAAAMAEpQkAAAAATFCaAAAAAMAEpQkAAAAATFCaAAAAAMAEpQkAAAAATFCaAAAAAMAEpQkAAAAATFCaAAAAAMAEpQkAAAAATFCaAAAAAMAEpQkAAAAATFCaAAAAAMAEpQkAAAAATFCaAAAAAMAEpQkAAAAATFCaAAAAAMAEpQkAAAAATLg4OgCKTkDZNBlWKS7GXZIl12W8S2eqbPlUnY7wUloqvw7IPxcXq8qWu6C4WI88f3ecna0KCk5VttWi2LOeslpz/z0EgJLHUMgtaUpPc1L0KXfTJStUTZOHZ7aOHSp13dKh+PPxTZdXqSzFnPVUVpb9fpCAwFT5lsmwG8vMcFJEeOnrnLLk4F/JJVC3h8PVY0C4LBZDLq6G0i44a/qUMO3+NdC2TEj1ZPV45ISatzkn3zKZeumZJtqzPcChuVE8BJW7oAFPHdHtd5xRfKyHAoNTtW1jOX34Zn2lXnC1Ldf1weMa8NQRJSe7yMXVkJPF0Kz36mrTTxUcmh8AipKLq1XdBpzVvX3PKqh8hn7fWloTngzNc/lbmybprS8Py8XV0L23NJM1mw+XYK5+4xgNHHxQgWVTlZXppNI+mVoy/xYt/KyWbZke/f7S3feeVPQZL9vYuWhPvTamhYNSF38OL01paWlasmSJDh8+rCeeeELVqlVzdKRir3ylVI1+vLlioj1ksRga8OyfGvfO7xrUvbXiY//+tKt2/fM6sLuMFnxSXXO+2eToyChGqlZP0u7fAvXB5AbKznaSf2Ca3vxoi54Zvl/vTWokSapcNUmDR+7Xu6811PrvK0uS+j5xRKNe3aWd24LsyhUAx9qzZ49WrlypmjVrqm/fvo6OU+z5+GWpbMV0TRxUU/2HRcrTKzvPZb19szTq3WNavSBI3Qacva45UXyFVEvS+5Mb6uRxH0lSw2ZnNen9X/XnYT/t3FbWttyB3wM08QVKUmFx6DlNX3zxhWrUqKGFCxdq0qRJCg8Pd2ScEuPjqbUVE+0hSTIMi1bMqyKvUtmqeWuCbZk1Kyrpx5UVlZ7m7MCkKI5+2xKsn76vrOzsv98+4mI89POPFVW/SaxtmYDANEnSnh1BtrHd24Lk6mrkOFwAgGPExsaqZcuWeuSRRzR//nwtWrTI0ZFKhLhzbpr1ehWdOuZ51WWHv3Vca5cG6tAu7+uSDSXDqqXVbIVJkvb8FqS0VGcFl0+xW87JyVCFyskq45/mgJQlj0P3NIWGhur3339XWlqaVq1a5cgoJVrVmkmSpLNnrv4GDhREtRqJOhv1z+/Xvt0B2rsrQINH7NOKRdXl6mJVn8ePat3qSoqK5Jh94Ebg7OysqVOnqmXLlurZs6eysrIcHemm0u2RaPkHZWjSR7eo7X2x+VgD+IeHZ5YqVEqRp1eW2neOUMw5jxyHvze9/awqVflVpX0ylJjgpo/eqa89v5XNc5sw59DS1Lx5c0nSqVOnHBmjRPMslaUhLx7SbxsDdeIPTv5D4WvZ9rRuuyNKE0c3t41lZzvpq//V0vDxuzXqld1ycbEqMdFNM96t4dCsAP7h5+enli1bOjrGTala2AX1+0+khj1QhwvkoEAqVUnW8y/uUWmfDHmVytLM9+opMeGfC44c2uuvrxdVU/SZUnJ2tmrg4IN6ecpvGvronToTyZ7NgnD4OU3XKj09Xenp6bbHiYmJDs1zI3P3yNaE93crM9NJU1+u5+g4KIHqN47RyFd26/NZtbVja7Bt/JbQ83r9/V817fVG2vBjRUlSrwF/6J2Zm/V0n7sUF+PhwNQACoo5uHC8+P5fWrssUF7e2aoelqKgCn8ftlw97ILOnXFTQiznfcLcn4f99NzAttLFc5omvLVdWZlO+mXd33Pu5XudsrOd9Ol/b1X7zqfUqu0ZLZlf02G5i7Nid5+mKVOmyNfX1/ZVuXJlR0e6Ibm5Z2vCB7tU2idTLz3TVMmJvAGjcNVtGKNX3t6uRZ/X1OIv7N+Ab2sTpbgYd1thkqTlX9WQu3u2GrfgZGeguGIOLhypF5zUqFWiRk49rpFTj+vevn+/Lw5/67ia33Xe0fFQzOz5rawO7vXXbW2i8lzGarUoPs5dgcGp1zVbSVLsStPYsWOVkJBg+4qIiHB0pBvO34Vpt3z9MjX26aZKPO/m6EgoYW5tEKtXp27Xknm3aOHcWjmeT0p0UynvLLm4/nPVKB+/DDm7GEpO5PcRKK6YgwvHsAdu1bNd6tq+PptaSZL03H236sclQVddHzc3Fxer3WOLxVBAUJqSk/85gOzy+VeSAoJSVaFiik5xn6YCK3aH57m7u8vd3fwmcTczJydDL0/bo2o1k/T2uPoKLJumwLJ/XzXlXLSHkhL+/gfrpZvalvbLlCSVq3xB1c+7Kj7W3XZZciA3tcLi9erUbdq+JVjbNweres2/r8poGNLxP30lSZvWl9fDjx3Vi6/v1NeLqsvF1aqHBx7V6VNe2rMj8CqvAOBGxRycP1VqXZCzsyFvn2y5e1pVPSxFVqtFJ4545WNtIG9OToben7NBq5ZWU/jx0vIqlaWO3U4qIChNq5b+c9ueD/73y9/LHCst/8A09XnsqKLPeGndavYOF1SxK00w5+6RLT//DMWe9dATw47aPbdgdjVtXldOunifpkeH/ilJOnaktLr0PKUuPU/p++UV9e2iEIdkR/FQ9ZZERUWWUuWQZA1/aY9tPDvbomFP3CFJio3x1PAn2uiBPsfU94kjys520uH9/lr2ZQ2lpfK2A6BkG/JquLx9//mkf+TU40pPddKInnVyXT7pvIv+OuglGdcxJIolq9WiiS+0UPfex3RXx1NKT3fW8T999PEHdynm7D9XsX111N/LtL37lFKSXfXzD5X09eJqSk9nDi4oi2EYDvsrunv3bi1dulRJSUn68MMP1b9/f1WpUkXt2rVTu3bt8rWNxMRE+fr6qkPwU3Jx4rAfFAEPPlVF0cmypmtt+HQlJCTIx8cnH2sAhWfSpElKTU3V0qVLZbVa1atXL3l6euqll17K1/qX5uC73B+Si4VzZ1E0nCuUc3QElFBZ1nStPfFRvuZgh9ZNZ2dneXh4yMPDQ6+//vo/oVxowQAAFDV3d3cZhqF+/frZjQEA7Dm0ndSvX1/169d3ZAQAAG5ao0aNcnQEACgWit3V8wAAAADgeqI0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJShMAAAAAmKA0AQAAAIAJF0cH+LcMw5AkZVkzHB0FJZXV0QFQkl1677r0XgYUJ7Y52Mh0dBSUYIY13dERUEJdyxxc7EtTUlKSJOnnc585OgoAFFhSUpJ8fX0dHQO4Jpfm4I0Zyx0dBSXZCUcHQEmXnznYYhTzjzetVqtOnz6t0qVLy2KxODrODS8xMVGVK1dWRESEfHx8HB0HJQy/X9fOMAwlJSWpQoUKcnLiiGkUL8zB14b3SBQ1fseuzbXMwcV+T5OTk5MqVark6BjFjo+PD3+ZUGT4/bo27GFCccUcXDC8R6Ko8TuWf/mdg/lYEwAAAABMUJoAAAAAwASl6Sbj7u6uCRMmyN3d3dFRUALx+wUAeeM9EkWN37GiU+wvBAEAAAAARYk9TQAAAABggtIEAAAAACYoTQAAAABggtJ0E8nIyNCuXbt05MgRR0dBCRUTE6NNmzYpJibG0VEA4IZz4sQJ7dixQ8nJyY6OghLIMAzt3LlTe/fudXSUEonSdJNYs2aNKlasqJ49e6ply5Zq3LixIiMjHR0LJcShQ4f0yCOPqH79+mrTpo3Wrl3r6EgAcMNISUnRvffeq7p166p///4KDg7WnDlzHB0LJYTVatXUqVNVq1YtdejQQYMGDXJ0pBKJ0nQTiIuL00MPPaQhQ4bo2LFjOn36tLy8vPTYY485OhpKiEOHDqlDhw46evSoo6MAwA3nxRdf1JEjR3TixAkdPnxYs2bN0qBBg7R//35HR0MJkJ6erqioKK1evVr9+vVzdJwSi9J0E1i6dKnS09M1evRo6eI1/EePHq0ff/xRERERjo6HEqBHjx565JFH5OHh4egoAHBDycrK0ueff64hQ4YoMDBQktS/f39VqVJFc+fOdXQ8lACenp6aOnWqbrnlFkdHKdEoTTeB3bt3KzQ0VN7e3rax5s2bS5L27NnjwGQAAJRsx44dU2Jiopo0aWI33qxZM+3evdthuQBcG0rTTSAuLk4BAQF2Y5cex8XFOSgVAAAl36V5Nrd5mDkYKD4oTTcBV1dXpaWl2Y2lpqZKktzc3ByUCgCAks/V1VWScp2HmYOB4oPSdBOoUqVKjivlXXocEhLioFQAAJR8VapUkS6bdy+JjIxkDgaKEUrTTeDuu+9WeHi43XX7V65cKT8/PzVr1syh2QAAKMkCAwPVsGFDff3117ax+Ph4/fLLL7r77rsdmg1A/rk4OgCK3p133qnOnTurd+/eeu211xQdHa3XXntNb7/9NocGoFCcP39e+/fvV3Z2tiTpyJEj2rRpk8qXL68aNWo4Oh4AONTkyZPVrVs3hYSEqFGjRnr33XdVo0YNPfLII46OhhJi165dunDhgs6cOaOkpCRt2rRJktSqVStZLBZHxysRLIZhGI4OgaKXmpqqadOmacOGDfLy8lKfPn3Uu3dvR8dCCbFt2zaNHDkyx3j37t01atQoh2QCgBvJTz/9pJkzZyo2NlaNGjXSmDFjbJcgB/6tfv36KTw8PMf4+vXr+YC8kFCaAAAAAMAE5zQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKEwAAAACYoDQBAAAAgAlKE4q9DRs2aO/evbbH69at0/79+2+ILFcqSLYffvhBR44c+dfZHPlzAQCUTKdPn9bSpUttj0+ePKnly5ffEFmuVJBsx44d0zfffPOvszny54LCQWlCoUtOTtaCBQu0YMECLVy4UGvWrFFkZGSRvd6UKVP05Zdf2h5PmDBBS5Ysyff6a9eu1cGDB4sky5WuNZskjRkzplDesAvy2gCA4mfDhg22eXj58uXauXOnrFZrkbzWrl279Oijj9oeb9myRU899VS+1w8PD9fKlSuLJMuVrjWbJK1fv17PPffcv85WkNfGjcXF0QFQ8kRFRalPnz5q3769AgMDFR0drc2bN2vUqFGaPHlykb9+hw4dVLdu3XwvP378eHXt2lV16tQp0lwAAFwPU6ZM0aFDh3T77bcrPT1dW7duVVBQkFavXq1KlSoV6WtXqVJFPXr0yPfyGzdu1KhRo3T//fcXaS7g36I0oci8+uqrat26tSRp/vz56t+/v+677z55e3srOjparVu31pYtWxQTE6NevXpJkrKzs7V9+3adPXtWNWvWzLXInD9/Xhs3blRAQIAaNWqU4/k2bdooODjYbsxqtWrHjh2KiopSw4YNFRISIl18s46NjdW+ffu0YMECSVKPHj3k5uZWKFmuZvPmzYqIiJDFYlFQUJAaNmwof3//XJc9d+6c9uzZIxcXF7Vp00YuLvZ/ffOTFwBwc7j99ttt81piYqLq16+vsWPHas6cOVq2bJk6deqkqKgoHTx4UA0aNFCNGjUkSREREdq1a5f8/f3VuHFjlSpVym67hmHo119/VXx8vOrXr5/jdStWrKjOnTvnGI+MjNSuXbsUGBioZs2aycXFRVFRUfr111+VlpZmy1q3bl3bB5//NsvVnD17VuvXr5ckeXp6qlatWgoLC8t12aysLP3+++86deqUmjdvrvLly+dY5mp5UbxRmnBddO/eXZL0+++/68yZM/riiy9UqlQpBQUFqVy5curVq5dOnDihbt26KTs7W7fccot27typFi1aaOHChXJ1dZUkbdu2TZ07d1blypUVEBCgyMhIWSwWNWzY0PZaEyZMsNvbdOzYMXXv3l1xcXFq0KCBDh8+rCFDhmjkyJHaunWr4uPjdejQIVksFklSly5ddPr06ULJcjW//fabfv31V0nSqVOntG/fPn322We2n9clq1at0vvvv6/69etr7969Klu2rNatW6cyZcpIUr5+dgCAm5OPj4/uuusu7dixQ4mJierTp4+6dOmio0ePqkGDBvLx8VGNGjX0wgsvaPbs2brtttsUHx+vkydPavHixWrZsqV0sTh0795dW7duVYsWLbRv3z7deuutdq+1ZcsWDR06VA888IBtbPTo0Zo+fbqaN2+uzMxMGYahb7/9VtHR0dq5c6fS09O1YsUKSZKLi4vq1q1bKFmuJiYmxva6Fy5c0JYtW9S2bVstWrRITk7/nMGSnJysVq1aydnZWU5OTtq5c6e++OIL9ezZ07bM1fKiBDCAQvbHH38YkoyNGzfaxnbv3m1IMlauXGlMmDDBkGR88803duu1aNHCGDVqlO1xcnKyceuttxrvvPOOYRiGYbVajQYNGhhPPPGEbZmvvvrKkGSMGTPGNtaqVStjwoQJtseNGzc2OnfubKSmphqGYRhZWVl2r92iRQvj9ddfL5IsV7oy25U+++wzo2zZskZGRoZtrEGDBoaPj49x4sQJwzAMIyEhwQgLCzNGjBiR77z5eW0AQMnQsWNHo3fv3nZjrVq1Mu6++27j3LlzhiSja9euRmZmpu35zz//3AgJCTGioqJsY1OnTjWqVatmZGdnG4ZhGLNmzTICAgKMiIgIwzAMIy4uzrjllluMUqVK2db56quvjICAANvjOXPmGO7u7saOHTtsY9u3bzciIyMNwzCML774wggODrbLWlhZrnRltivFxcUZISEhxrx582xjn3zyiSHJ7t8JU6ZMMQIDA43ExMR8573aa+PGx54mFJl169bp1KlTOnfunD744AM1aNBAHTt21K5du1StWjV17drVtuzBgwe1bds2DRgwQEuWLJFhGDIMQ7fccot++uknjRo1SkeOHNHvv/+uhQsX2tZ7+OGH9eKLL+aZYd++fdq1a5d27NghDw8PSZKzs7Pda1+pqLLkJSoqSvv371dsbKyysrJ09uxZnThxQjVr1rQt89BDD6lKlSrSxU8MBw8erLffflvvvvtuvvICAG4uJ0+e1IIFC5Senq4ff/xRW7du1erVq23PDx482O4w708//VT169fXxo0bbfOIl5eXjh8/rvDwcFWrVk2LFi1Snz59bOdFlSlTRoMGDdLEiRPzzPHZZ5+pT58+atKkiW2sWbNmptmLKktusrKytHPnTkVGRiojI0MhISHavn27+vXrZ1vG2dlZI0aMsD0eNmyYJkyYoPXr1+v+++/PV14Uf5QmFJmNGzfq0KFD8vPz08iRIzVw4EC5u7tLUo5jgU+cOCFdvOLP5bvEPTw8bLvbT548KUmqWrWq3bpXPr7cpXVq1aqV79xFlSU3kydP1qRJk9S4cWMFBwfbXu/SeUl5bbdatWqKjIxUVlZWvvICAG4ukZGRWrFihdzc3FS1alXt27dPderUUUxMjJTHPOzr65vjKqu9e/dWdna2dHHuu/J8pasVgpMnT6pTp07XlL2oslzp8OHD6tSpk1xcXFS7dm15e3vr9OnTOS6WERQUJC8vL9tjDw8PlS9fXuHh4fnOi+KP0oQic/mFIK506fyhS3x8fCRJb7zxRp4FJyAgQJIUHx+vcuXK2cbj4+PzzODn5ydJio2NVenSpfOVu6iyXCk6OlovvfSSfvnlF7Vp00a6eF7T4sWLZRiG3bJXbjc+Pl5+fn5ycXHJV14AwM3l8gtB5Ca3ebhNmzb68MMP81wnICAg1/nIjJ+fn2JjY/OduyizXOmVV16xnf97Sffu3XPMwefPn5dhGHY/s/j4eAUGBuY7L4o/7tOEG0LTpk0VEBCgmTNn2o0bhqHTp09LksLCwuTv7287aVOSjh49anrD1iZNmsjf31+ff/653fi5c+dsf/b29lZaWlqRZ7lSdHS0JCk0NNQ2ltd9lL755hu7T6uWLVumVq1a5TsvAABmOnXqpAULFuj8+fN245ffZ7F169b6+uuv7e75tGzZMtPt3nPPPVq8eLFSU1NtY6mpqUpOTpZymYOLMsuVoqKi7ObgmJgYbdiwIcdyaWlp+uGHH2yP161bp5SUFN122235zovijz1NuCF4eHho9uzZevjhh3XmzBm1a9dO586d08qVK/Xkk0/qqaeekpeXlyZOnKjhw4frzJkzCgwM1IcffihfX1/T7c6YMUMDBgxQRESEWrRooT179ighIUFffPGFdLF0LFq0SDVq1JCnp6d69OhRJFmuFBYWplq1aunhhx9W//79deDAAVumK8XFxalTp07q1auXNm3apO+//15btmzJ988OAAAz48aN05o1a9S0aVM988wz8vb21vbt23XgwAFt27ZNkjRq1Ch99tln6tKlix544AH99NNP2rFjh+l2x44dq1WrVum2227T448/rszMTH355Zdavny5vL291bBhQ6WkpGjChAkKCwtT3bp1iyzLlbp3767XX39dpUuXloeHh/773//mupynp6eeeuopPffcc3JyctJbb72lZ555RtWrV8/3zw7FH6UJha506dLq3bu3goKCcn0+rxvPdu/eXXv37tW8efO0adMmhYSEaMaMGWrcuLFtmaFDh6pSpUr65ptvdOHCBc2dO1cbN260XSRBudzc9qGHHlLt2rU1b948bdmyRc2aNdOTTz5pe/7ll19WUFCQfvnlF6WmpqpLly6FluVKl2dzdXXVL7/8ounTp+vnn39WlSpVtHXrVr300kt2P7tOnTqpdevWSkhI0ObNm+Xr66tt27bZ3ZMiP3mv9aa/AIDiqW3btnbn4FzO3d1dvXv3tt2y4hIfHx9t3bpV8+fP19atW+Xm5qY777xTs2bNsi0THBysHTt26KOPPtKOHTvUpk0bDRs2TDNmzLAtc+XNbf38/LR9+3Z9+umn2rlzp8qVK6cFCxbY5sqqVavq+++/1/Lly7Vy5UrbJccLI8uVrsw2fPhwBQcH66effpKrq6veeustRUVF2e35qlGjhp544gkNGTJE8+fPV2RkpN5880099thj1/Szu9ab/uLGYzGuPHATAAAAAGDDOU0AAAAAYILSBAAAAAAmKE0AAAAAYILSBAAAAAAmKE0AAAAAYILSBAAAAAAmKE0AAAAAYILSBAAAAAAmKE0AAAAAYILSBAAAAAAmKE0AAAAAYILSBAAAAAAm/h/3JRWQzkCm+wAAAABJRU5ErkJggg==",
            "text/plain": [
              "<Figure size 1000x400 with 2 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        },
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        },
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "\n",
            "Reported flawed result vs final valid results\n",
            "metric     | flawed | valid 0.5 | valid tuned\n",
            "accuracy   | 0.942  |    0.936  |     0.936\n",
            "precision  | 0.854  |    0.966  |     0.814\n",
            "recall     | 0.714  |    0.571  |     0.714\n",
            "F1 score   | 0.778  |    0.718  |     0.761\n",
            "ROC-AUC    | 0.847  |    0.851  |     0.851\n"
          ]
        }
      ],
      "source": [
        "decision_threshold = globals().get(\"decision_threshold\", 0.5)\n",
        "final_model = search.best_estimator_\n",
        "y_test_pred_default = final_model.predict(X_test)\n",
        "y_test_score = final_model.predict_proba(X_test)[:, 1]\n",
        "y_test_pred_tuned = (y_test_score >= decision_threshold).astype(int)\n",
        "\n",
        "metrics_final_default = classification_metrics(\n",
        "    y_test, y_test_pred_default, y_test_score\n",
        ")\n",
        "metrics_final_tuned = classification_metrics(\n",
        "    y_test, y_test_pred_tuned, y_test_score\n",
        ")\n",
        "print_classification_metrics(\"Final k-NN — threshold 0.5\", metrics_final_default)\n",
        "print_classification_metrics(\n",
        "    f\"Final k-NN — threshold {decision_threshold:.3f}\", metrics_final_tuned\n",
        ")\n",
        "\n",
        "fig, axes = plt.subplots(1, 2, figsize=(10, 4))\n",
        "ConfusionMatrixDisplay.from_predictions(\n",
        "    y_test, y_test_pred_default, ax=axes[0], colorbar=False\n",
        ")\n",
        "axes[0].set_title(\"Threshold 0.5\")\n",
        "ConfusionMatrixDisplay.from_predictions(\n",
        "    y_test, y_test_pred_tuned, ax=axes[1], colorbar=False\n",
        ")\n",
        "axes[1].set_title(f\"Threshold {decision_threshold:.3f}\")\n",
        "plt.tight_layout()\n",
        "plt.show()\n",
        "\n",
        "RocCurveDisplay.from_predictions(y_test, y_test_score, name=\"k-NN\")\n",
        "plt.plot([0, 1], [0, 1], \"k--\", label=\"random ranking (AUC = 0.5)\")\n",
        "plt.axis(\"square\")\n",
        "plt.legend()\n",
        "plt.show()\n",
        "\n",
        "print(\"\\nReported flawed result vs final valid results\")\n",
        "print(\"metric     | flawed | valid 0.5 | valid tuned\")\n",
        "for metric_name in metrics_final_default:\n",
        "    print(\n",
        "        f\"{metric_name:10s} | {metrics_bad[metric_name]:.3f}  | \"\n",
        "        f\"   {metrics_final_default[metric_name]:.3f}  | \"\n",
        "        f\"    {metrics_final_tuned[metric_name]:.3f}\"\n",
        "    )"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 14. Optional — Write the ML audit\n",
        "\n",
        "Complete this short audit in a new Markdown cell, one sentence for each point.\n",
        "\n",
        "### ML audit card\n",
        "\n",
        "- **Prediction task and positive class:**\n",
        "- **Independent unit:**\n",
        "- **Outer test design:**\n",
        "- **Preprocessing and leakage protection:**\n",
        "- **Hyperparameter-selection protocol:**\n",
        "- **Primary metric and justification:**\n",
        "- **Baseline:**\n",
        "- **Final result:**\n",
        "- **What the result does not establish:**\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "tags": [
          "correction"
        ]
      },
      "source": [
        "### Before and after correcting the protocol\n",
        "\n",
        "The flawed and valid values are displayed side by side, but they were computed on different test partitions and are therefore not a controlled model comparison. Several flawed-protocol metrics can be optimistic because its test set influenced preprocessing and model selection, and because some test sources were also present during training. With the valid protocol, lowering the threshold increases recall and F1 while reducing precision; accuracy and ROC-AUC barely change. ROC-AUC is identical for both valid decision thresholds because the underlying scores and their ranking have not changed. The valid values are the only credible estimates because they concern genuinely unseen groups.\n",
        "\n",
        "### Example audit card\n",
        "\n",
        "- **Prediction task and positive class:** detect a rare machine failure; failure is positive.\n",
        "- **Independent unit:** the original source record, not an exported row.\n",
        "- **Outer test design:** one group-held-out test set containing unseen source identifiers.\n",
        "- **Preprocessing and leakage protection:** scaling and k-NN are fitted together in a pipeline.\n",
        "- **Hyperparameter-selection protocol:** $k=1,\\ldots,30$ selected by five-fold stratified group CV on development data; the decision threshold is then fixed from out-of-fold development scores.\n",
        "- **Primary metric and justification:** F1 score, because both false alarms and missed failures matter while the positive class is under-represented.\n",
        "- **Baseline:** most-frequent dummy classifier under the same CV protocol; its F1 score is zero.\n",
        "- **Final result:** report accuracy, precision, recall, F1, ROC-AUC and the confusion matrices at both thresholds; state which threshold was fixed for use.\n",
        "- **What the result does not establish:** performance over time, at another site, or under a different failure prevalence.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 15. Bonus — Uncertainty by group bootstrap\n",
        "\n",
        "The final score is computed from one finite test sample. Estimate a 95% bootstrap interval for F1 score. Because rows from one source are dependent, resample **source identifiers**, not individual rows.\n",
        "\n",
        "For each bootstrap repetition:\n",
        "\n",
        "1. sample test source identifiers with replacement;\n",
        "2. collect all rows belonging to each sampled source;\n",
        "3. recompute F1 score.\n",
        "\n",
        "Does this interval quantify uncertainty caused by changing the training set or algorithm seed?"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "metadata": {
        "tags": [
          "exercise",
          "optional"
        ]
      },
      "outputs": [],
      "source": [
        "# TODO (optional): bootstrap independent test groups and build a percentile interval.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 26,
      "metadata": {
        "tags": [
          "correction",
          "optional"
        ]
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "F1 score: 0.761\n",
            "Group-bootstrap 95% interval: [0.642, 0.854]\n"
          ]
        }
      ],
      "source": [
        "bootstrap_rng = np.random.default_rng(RANDOM_STATE)\n",
        "unique_test_groups = np.unique(groups_test)\n",
        "bootstrap_scores = []\n",
        "\n",
        "for _ in range(2_000):\n",
        "    sampled_groups = bootstrap_rng.choice(\n",
        "        unique_test_groups, size=len(unique_test_groups), replace=True\n",
        "    )\n",
        "    sampled_indices = np.concatenate([\n",
        "        np.flatnonzero(groups_test == group) for group in sampled_groups\n",
        "    ])\n",
        "    bootstrap_scores.append(\n",
        "        f1_score(\n",
        "            y_test[sampled_indices], y_test_pred_tuned[sampled_indices]\n",
        "        )\n",
        "    )\n",
        "\n",
        "ci_low, ci_high = np.quantile(bootstrap_scores, [0.025, 0.975])\n",
        "observed_score = f1_score(y_test, y_test_pred_tuned)\n",
        "print(f\"F1 score: {observed_score:.3f}\")\n",
        "print(f\"Group-bootstrap 95% interval: [{ci_low:.3f}, {ci_high:.3f}]\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "tags": [
          "correction",
          "optional"
        ]
      },
      "source": [
        "The interval describes sampling uncertainty associated with the group-held-out test sample while treating the fitted model as fixed. It does not include variability caused by collecting a different training set, changing the split used for development or changing a stochastic learning algorithm."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 16. Optional — Takeaways\n",
        "\n",
        "Complete each sentence in your own words.\n",
        "\n",
        "1. A test set becomes validation data when ...\n",
        "2. A pipeline prevents preprocessing leakage because ...\n",
        "3. Related observations must stay in the same partition because ...\n",
        "4. Accuracy was misleading here because ...\n",
        "5. Cross-validation helps model selection, but does not ...\n",
        "6. A high final score alone does not prove ...\n",
        "7. Lowering the decision threshold usually increases ... and decreases ...\n",
        "8. Changing the decision threshold leaves ROC-AUC unchanged because ..."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": []
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python (cours-ml)",
      "language": "python",
      "name": "cours-ml"
    },
    "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": 4
}
