{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "C9n706etcK_4"
      },
      "source": [
        "# NLP Assignment (Imbalanced Dataset)\n",
        "Subkitted\n",
        "\n",
        "This notebook:\n",
        "- Mounts Google Drive\n",
        "- Creates a project folder named **`NLP assignmet`**\n",
        "- Creates subfolders (including **data/** for your dataset)\n",
        "- Provides a clean starting pipeline (preprocess → split → TF-IDF → baseline RF → over/under/SMOTE)\n",
        "\n",
        "> Put your dataset file (e.g., `unbalanceddataset.csv`) into:  \n",
        "`MyDrive/NLP assignmet/data/`\n"
      ],
      "id": "C9n706etcK_4"
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        },
        "id": "KbTM1HTIcK_5",
        "outputId": "6b08505b-250e-407a-8d18-127999296f31"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "[nltk_data] Downloading package punkt to /root/nltk_data...\n",
            "[nltk_data]   Package punkt is already up-to-date!\n",
            "[nltk_data] Downloading package punkt_tab to /root/nltk_data...\n",
            "[nltk_data]   Package punkt_tab is already up-to-date!\n",
            "[nltk_data] Downloading package stopwords to /root/nltk_data...\n",
            "[nltk_data]   Package stopwords is already up-to-date!\n",
            "[nltk_data] Downloading package wordnet to /root/nltk_data...\n",
            "[nltk_data]   Package wordnet is already up-to-date!\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "✅ All libraries imported successfully (NLTK + sklearn + imblearn + plotting + spaCy)\n"
          ]
        }
      ],
      "source": [
        "# =========================\n",
        "# 1) Install + Imports (FULL)\n",
        "# =========================\n",
        "!pip -q install pandas numpy scikit-learn nltk imbalanced-learn matplotlib seaborn spacy\n",
        "\n",
        "# ---- Core ----\n",
        "import re\n",
        "import numpy as np\n",
        "import pandas as pd\n",
        "from pathlib import Path\n",
        "\n",
        "# ---- NLTK ----\n",
        "import nltk\n",
        "from nltk.corpus import stopwords\n",
        "from nltk.tokenize import word_tokenize\n",
        "from nltk.stem import PorterStemmer, WordNetLemmatizer\n",
        "\n",
        "# NLTK resources (including punkt_tab fix)\n",
        "nltk.download('punkt')\n",
        "nltk.download('punkt_tab')     # ✅ required by some NLTK versions for tokenization\n",
        "nltk.download('stopwords')\n",
        "nltk.download('wordnet')\n",
        "\n",
        "# ---- scikit-learn: split + features ----\n",
        "from sklearn.model_selection import train_test_split, GridSearchCV\n",
        "from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer\n",
        "\n",
        "# ---- scikit-learn: models ----\n",
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn.linear_model import LogisticRegression\n",
        "from sklearn.svm import SVC\n",
        "from sklearn.tree import DecisionTreeClassifier\n",
        "from sklearn.neighbors import KNeighborsClassifier\n",
        "from sklearn.naive_bayes import GaussianNB\n",
        "\n",
        "# ---- scikit-learn: preprocessing (optional) ----\n",
        "from sklearn.preprocessing import LabelEncoder, StandardScaler\n",
        "\n",
        "# ---- Metrics ----\n",
        "from sklearn.metrics import (\n",
        "    accuracy_score, precision_score, recall_score, f1_score,\n",
        "    confusion_matrix, classification_report\n",
        ")\n",
        "\n",
        "# ---- Imbalanced-learn ----\n",
        "from imblearn.over_sampling import RandomOverSampler, SMOTE\n",
        "from imblearn.under_sampling import RandomUnderSampler\n",
        "\n",
        "# ---- Visualization ----\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n",
        "\n",
        "# ---- spaCy (optional in lecture, included here) ----\n",
        "import spacy\n",
        "try:\n",
        "    _ = spacy.load(\"en_core_web_sm\")\n",
        "except OSError:\n",
        "    !python -m spacy download en_core_web_sm\n",
        "    _ = spacy.load(\"en_core_web_sm\")\n",
        "\n",
        "print(\"✅ All libraries imported successfully (NLTK + sklearn + imblearn + plotting + spaCy)\")\n"
      ],
      "id": "KbTM1HTIcK_5"
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        },
        "id": "S6MGF6PKcK_7",
        "outputId": "47bbec03-8cc2-4340-ace0-f1a253ebd52e"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n",
            "✅ Project folders created at:\n",
            "/content/drive/MyDrive/NLP assignmet\n",
            "\n",
            "📂 Folder structure:\n",
            "- data      : /content/drive/MyDrive/NLP assignmet/data\n",
            "- figures   : /content/drive/MyDrive/NLP assignmet/figures\n",
            "- logs      : /content/drive/MyDrive/NLP assignmet/logs\n",
            "- models    : /content/drive/MyDrive/NLP assignmet/models\n",
            "- notebooks : /content/drive/MyDrive/NLP assignmet/notebooks\n",
            "- outputs   : /content/drive/MyDrive/NLP assignmet/outputs\n",
            "- reports   : /content/drive/MyDrive/NLP assignmet/reports\n",
            "- src       : /content/drive/MyDrive/NLP assignmet/src\n",
            "\n",
            "📌 Run output folder:\n",
            "/content/drive/MyDrive/NLP assignmet/outputs/run_20251213_071709\n"
          ]
        }
      ],
      "source": [
        "# =========================\n",
        "# 2) Mount Google Drive\n",
        "# =========================\n",
        "from google.colab import drive\n",
        "from pathlib import Path\n",
        "import os\n",
        "import datetime\n",
        "\n",
        "drive.mount('/content/drive', force_remount=False)\n",
        "\n",
        "# =========================\n",
        "# 3) Create project folders\n",
        "# =========================\n",
        "PROJECT_NAME = \"NLP assignmet\"\n",
        "BASE_DIR = Path(\"/content/drive/MyDrive\") / PROJECT_NAME\n",
        "\n",
        "DIRS = {\n",
        "    \"data\": BASE_DIR / \"data\",\n",
        "    \"notebooks\": BASE_DIR / \"notebooks\",\n",
        "    \"src\": BASE_DIR / \"src\",\n",
        "    \"models\": BASE_DIR / \"models\",\n",
        "    \"outputs\": BASE_DIR / \"outputs\",\n",
        "    \"figures\": BASE_DIR / \"figures\",\n",
        "    \"reports\": BASE_DIR / \"reports\",\n",
        "    \"logs\": BASE_DIR / \"logs\",\n",
        "}\n",
        "\n",
        "for p in DIRS.values():\n",
        "    p.mkdir(parents=True, exist_ok=True)\n",
        "\n",
        "run_stamp = datetime.datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n",
        "run_dir = DIRS[\"outputs\"] / f\"run_{run_stamp}\"\n",
        "run_dir.mkdir(parents=True, exist_ok=True)\n",
        "\n",
        "os.environ[\"NLP_PROJECT_DIR\"] = str(BASE_DIR)\n",
        "os.environ[\"NLP_RUN_DIR\"] = str(run_dir)\n",
        "\n",
        "print(\"✅ Project folders created at:\")\n",
        "print(BASE_DIR)\n",
        "print(\"\\n📂 Folder structure:\")\n",
        "for key in sorted(DIRS.keys()):\n",
        "    print(f\"- {key:10s}: {DIRS[key]}\")\n",
        "print(\"\\n📌 Run output folder:\")\n",
        "print(run_dir)\n"
      ],
      "id": "S6MGF6PKcK_7"
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "PlRDkGDPcK_7"
      },
      "source": [
        "## Importing the dataset in the data folder\n",
        "- I have uploaded your CSV (example name: `unbalanceddataset.csv`) to:\n",
        "  - `MyDrive/NLP assignmet/data/`\n"
      ],
      "id": "PlRDkGDPcK_7"
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        },
        "id": "z6MVjQLhcK_8",
        "outputId": "639d733e-1f0d-4e29-e394-3086846e48f0"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "✅ Found dataset: /content/drive/MyDrive/NLP assignmet/data/unbalanceddataset.csv\n"
          ]
        }
      ],
      "source": [
        "# =========================\n",
        "# 4) Locate dataset file\n",
        "# =========================\n",
        "DATA_FILE = DIRS['data'] / 'unbalanceddataset.csv'   # change if your file name differs\n",
        "\n",
        "if DATA_FILE.exists():\n",
        "    print('✅ Found dataset:', DATA_FILE)\n",
        "else:\n",
        "    print('⚠️ Dataset not found at:', DATA_FILE)\n",
        "    print('👉 Upload your CSV to:', DIRS['data'])\n",
        "    print('\\nCurrent files in data folder:')\n",
        "    for f in DIRS['data'].glob('*'):\n",
        "        print(' -', f.name)\n"
      ],
      "id": "z6MVjQLhcK_8"
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3u1DQlWtcK_8"
      },
      "source": [
        "## Pipeline (preprocess → split → TF‑IDF → RF → resampling)\n",
        "If your file is present, run the cells below."
      ],
      "id": "3u1DQlWtcK_8"
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 345
        },
        "id": "vSFbAh9ZcK_8",
        "outputId": "6f207c67-c0bf-425e-eb5f-d6d905e9c1d5"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Shape: (2600, 2)\n",
            "Columns: ['text', 'sentiment']\n",
            "\n",
            "Class distribution:\n",
            "sentiment\n",
            "positive    2000\n",
            "negative     600\n",
            "Name: count, dtype: int64\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "                                                text sentiment\n",
              "0  Java Concurrency in Practice is probably the b...  positive\n",
              "1    haha aww hun i bet you are more creative tha...  positive\n",
              "2  _pickle lol, thank you very much Hope you`re h...  positive\n",
              "3  Out for an evening on the town with jeremy. Sa...  negative\n",
              "4   - just took over the #1 Most Endorsed spot on...  positive"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-a87eb527-602d-491f-a0d7-f09b1de61525\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>text</th>\n",
              "      <th>sentiment</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>Java Concurrency in Practice is probably the b...</td>\n",
              "      <td>positive</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>haha aww hun i bet you are more creative tha...</td>\n",
              "      <td>positive</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>_pickle lol, thank you very much Hope you`re h...</td>\n",
              "      <td>positive</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>Out for an evening on the town with jeremy. Sa...</td>\n",
              "      <td>negative</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>- just took over the #1 Most Endorsed spot on...</td>\n",
              "      <td>positive</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-a87eb527-602d-491f-a0d7-f09b1de61525')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-a87eb527-602d-491f-a0d7-f09b1de61525 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-a87eb527-602d-491f-a0d7-f09b1de61525');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-d82504f6-4f32-450d-8434-701ae38316a1\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-d82504f6-4f32-450d-8434-701ae38316a1')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-d82504f6-4f32-450d-8434-701ae38316a1 button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "df",
              "summary": "{\n  \"name\": \"df\",\n  \"rows\": 2600,\n  \"fields\": [\n    {\n      \"column\": \"text\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 2600,\n        \"samples\": [\n          \" Looking forward to following your journey on this endeavor - just subscribed to your blog\",\n          \"Frustrated with copying 13Gigs across USB 1.1.Stupid old servers\",\n          \" Thanks so much Jon.....same to your mom    That is so sweet of you to think of all of us\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"sentiment\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 2,\n        \"samples\": [\n          \"negative\",\n          \"positive\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 7
        }
      ],
      "source": [
        "# =========================\n",
        "# 5) Load data\n",
        "# =========================\n",
        "import pandas as pd\n",
        "\n",
        "df = pd.read_csv(DATA_FILE)\n",
        "print('Shape:', df.shape)\n",
        "print('Columns:', list(df.columns))\n",
        "print('\\nClass distribution:')\n",
        "print(df['sentiment'].value_counts())\n",
        "df.head()\n"
      ],
      "id": "vSFbAh9ZcK_8"
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 787
        },
        "id": "aYqf56tVcK_8",
        "outputId": "c95c47c7-d013-4455-db47-6ab4fdebde43"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "✅ Preprocessing done.\n",
            "Rows before: 2598 | Rows after: 2598 | Dropped: 0 (0.00%)\n",
            "\n",
            "Class distribution (Before vs After):\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "           Before  After\n",
              "sentiment               \n",
              "negative      599    599\n",
              "positive     1999   1999"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-29f1d538-d0dc-4978-bd4f-d86ab0ecc72a\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Before</th>\n",
              "      <th>After</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>sentiment</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>negative</th>\n",
              "      <td>599</td>\n",
              "      <td>599</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>positive</th>\n",
              "      <td>1999</td>\n",
              "      <td>1999</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-29f1d538-d0dc-4978-bd4f-d86ab0ecc72a')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-29f1d538-d0dc-4978-bd4f-d86ab0ecc72a button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-29f1d538-d0dc-4978-bd4f-d86ab0ecc72a');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-b9928287-6571-404e-9616-85d39749ec31\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-b9928287-6571-404e-9616-85d39749ec31')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-b9928287-6571-404e-9616-85d39749ec31 button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "  <div id=\"id_66433150-9198-4617-adea-f75917afb455\">\n",
              "    <style>\n",
              "      .colab-df-generate {\n",
              "        background-color: #E8F0FE;\n",
              "        border: none;\n",
              "        border-radius: 50%;\n",
              "        cursor: pointer;\n",
              "        display: none;\n",
              "        fill: #1967D2;\n",
              "        height: 32px;\n",
              "        padding: 0 0 0 0;\n",
              "        width: 32px;\n",
              "      }\n",
              "\n",
              "      .colab-df-generate:hover {\n",
              "        background-color: #E2EBFA;\n",
              "        box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "        fill: #174EA6;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate {\n",
              "        background-color: #3B4455;\n",
              "        fill: #D2E3FC;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate:hover {\n",
              "        background-color: #434B5C;\n",
              "        box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "        filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "        fill: #FFFFFF;\n",
              "      }\n",
              "    </style>\n",
              "    <button class=\"colab-df-generate\" onclick=\"generateWithVariable('summary_table')\"\n",
              "            title=\"Generate code using this dataframe.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "    <script>\n",
              "      (() => {\n",
              "      const buttonEl =\n",
              "        document.querySelector('#id_66433150-9198-4617-adea-f75917afb455 button.colab-df-generate');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      buttonEl.onclick = () => {\n",
              "        google.colab.notebook.generateWithVariable('summary_table');\n",
              "      }\n",
              "      })();\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "summary_table",
              "summary": "{\n  \"name\": \"summary_table\",\n  \"rows\": 2,\n  \"fields\": [\n    {\n      \"column\": \"sentiment\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 2,\n        \"samples\": [\n          \"positive\",\n          \"negative\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Before\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 989,\n        \"min\": 599,\n        \"max\": 1999,\n        \"num_unique_values\": 2,\n        \"samples\": [\n          1999,\n          599\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"After\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 989,\n        \"min\": 599,\n        \"max\": 1999,\n        \"num_unique_values\": 2,\n        \"samples\": [\n          1999,\n          599\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Example:\n",
            "RAW  : Java Concurrency in Practice is probably the best Java book I`ve ever bought. There`s a recipe in there for interrupting ...\n",
            "CLEAN: java concurr practic probabl best java book ever bought recip interrupt block io op ...\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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559avHixnnzySQUHBysuLk4ffvihGjZsqL1795r/6v744481cOBAdejQQS+++KIuXryoXbt2afPmzerSpYsk6bnnntPXX3+t/v37q2LFijp58qR+/fVX7du3TzVq1MjxNnbr1k2vvvqqVqxYob59+2baZ8+ePWrdurWqVKmisWPHym636+DBg1q/fr0kqUKFCho7dqxGjRqlfv36qX79+pLksN9OnjypFi1aqFOnTnr66afl6+t73brGjx8vm82m4cOHKz4+XlOnTlXTpk0VHR2drSMSWantvwzD0GOPPaY1a9aod+/eqlatmpYvX65hw4bp77//1pQpUxz6//rrr/r222/1wgsvyMPDQ++8847at2+vmJgYFStWzKGOhg0bau3atVmqOyEhQf/++68Mw1B8fLzeffddJSUlORzFkaRnn31Ws2fPVq9evTRw4EAdPnxY7733nv73v/9p/fr1KlCggD7//HN99NFH2rJli3l6L337+/Tpozlz5qhDhw4aOnSoNm/erMjISO3bt0+LFi1yWNf+/fvVuXNnPfvss+rbt6/Kly+v8+fPq2HDhvr777/17LPPqlSpUtqwYYPCw8N14sSJ616A0LFjR3Xv3l1bt241w7ckHT16VJs2bdLEiRMl3fj9dyPff/+9kpKS1KlTJ/n5+alRo0aaO3eu+dlq0KCBPv/8c3Xr1k2PPvqounfvLkkqU6aMjh8/rqioKH3++ecZlpuVfX+9fZddhw4dkiSH91VuvCafffaZzp49q7CwMF28eFHTpk3TI488ot27dzt8Ti9fvqzQ0FDVq1dPb7/9tgoVKpStz8uYMWMUERGhOnXqaOzYsXJ1ddXmzZu1evVqNWvWTJL0+eefq0ePHgoNDdVbb72l8+fP6/3331e9evX0v//9z/xHWPv27bVnzx4NGDBAQUFBio+PV1RUlGJiYszpZs2aqUSJEnrllVfk7e2tI0eO6Ntvv83Svn7qqacUHBysyMhI7dixQ5988ol8fHz01ltvmX169uyphQsXqlu3bnr44Yf1888/q1WrVtl6TZFFBpALEhISDElG27Zts/ycwMBAo0ePHub0xYsXjdTUVIc+hw8fNux2uzF27FhzXtu2bY1KlSpdd9leXl5GWFhYlmtJN2vWLEOSsXXr1usuu3r16ub06NGjjf9+lKZMmWJIMv75559rLmPr1q2GJGPWrFkZ2ho2bGhIMj744INM2xo2bGhOr1mzxpBk3HPPPUZiYqI5f+HChYYkY9q0aea8q/f3tZZ5vdp69OhhBAYGmtOLFy82JBmvv/66Q78OHToYNpvNOHjwoDlPkuHq6uowb+fOnYYk491333V4viSHmq4l/fW6+mG3243Zs2c79P3ll18MScbcuXMd5i9btizD/B49ehju7u4O/aKjow1JRp8+fRzmv/TSS4YkY/Xq1ea8wMBAQ5KxbNkyh77jxo0z3N3djT/++MNh/iuvvGI4OzsbMTEx19zWhIQEw263G0OHDnWYP2HCBMNmsxlHjx41DCNr77/rad26tVG3bl1z+qOPPjJcXFyM+Ph4h36SMnzGwsLCjMz+t5KdfX+tfXct6a/VP//8Y/zzzz/GwYMHjTfeeMOw2WxGlSpVbrjcrL4mhw8fNiQZBQsWNP766y+z3+bNmw1JxuDBgx1qkmS88sorDsvM6uflwIEDhpOTk/H4449n+E5MS0szDMMwzp49a3h7ext9+/Z1aI+NjTW8vLzM+adPnzYkGRMnTrzmPly0aNENv/cM48prPnr0aHM6/bvvmWeecej3+OOPG8WKFTOnt2/fbkgyBg0a5NCvZ8+eGZaJm8epWOSKxMRESZKHh0eOl2G32+XkdOUtmZqaqpMnT5qnkf57CtXb21t//fWXtm7des1leXt7a/PmzTp+/HiO67mWwoULX/fq2PRxR999912OLzSw2+3q1atXlvt3797dYd936NBBJUuW1I8//pij9WfVjz/+KGdnZw0cONBh/tChQ2UYRoYrKps2baoyZcqY01WqVJGnp6f+/PNPh36GYWT5aJ0kTZ8+XVFRUYqKitIXX3yhxo0bq0+fPg5HHL766it5eXnp0Ucf1b///ms+atasqcKFC2vNmjU33FZJGjJkSIZtlZRh/GhwcLBCQ0Md5n311VeqX7++ihQp4lBD06ZNlZqaqnXr1l1z/elDExYuXOhw2m7BggV6+OGHVapUKUk39/47efKkli9frs6dO5vz2rdvL5vNpoULF2ZrWf+V3X2f2b67nnPnzqlEiRIqUaKEypYtq1dffVUhISEZjqLmxmvSrl073XPPPeZ0rVq1VLt27Uw/a88//7zDdFY/L4sXL1ZaWppGjRplfiemSz+9HRUVpTNnzqhz584OdTs7O6t27drmPk0fK7p27doMp73Tpb9nlixZopSUlEz7XM9zzz3nMF2/fn2dPHnS/P9C+nCLF154waHfgAEDsr0u3BjBDrnC09NTkm7qdiBpaWmaMmWKypUrJ7vdruLFi6tEiRLatWuXEhISzH7Dhw9X4cKFVatWLZUrV05hYWEZTjNNmDBBv/32mwICAlSrVi1FRERkCA85lZSUdN0A27FjR9WtW1d9+vSRr6+vOnXqpIULF2brf7L33HNPtgbulytXzmHaZrOpbNmyDmNoboWjR4/K398/w/6oUKGC2f5f6eHjv4oUKXLN/+FkVa1atdS0aVM1bdpUXbt21dKlS1WxYkX1799fly5dkiQdOHBACQkJ8vHxMUNA+iMpKUnx8fHXXcfRo0fl5OSksmXLOsz38/OTt7d3hm0NDg7OsIwDBw5o2bJlGdbftGlTSbphDR07dtSxY8e0ceNGSVdON27fvl0dO3Z06JPT99+CBQuUkpKi6tWr6+DBgzp48KBOnTql2rVra+7cuTd8/rVkd99ntu+ux83NzQz269at07Fjx7R+/foMYxJz4zW5+rMmSffdd1+Gz5qLi4vuvfdeh3lZ/bwcOnRITk5Oqlix4jW3+cCBA5KujP29uvYVK1aYddvtdr311lv66aef5OvrqwYNGmjChAmKjY01l9WwYUO1b99eY8aMUfHixdW2bVvNmjUry7eLufpzXaRIEUkyP9fpn52r9//VnyXkDsbYIVd4enrK398/wyDi7HjjjTc0cuRIPfPMMxo3bpyKFi0qJycnDRo0yOF/ShUqVND+/fu1ZMkSLVu2TN98841mzJihUaNGacyYMZKujPmoX7++Fi1apBUrVmjixIl666239O2332Z664as+uuvv5SQkHDdL6SCBQtq3bp1WrNmjZYuXaply5ZpwYIFeuSRR7RixQo5OzvfcD234kq9a91EOTU1NUs15YZrrcfIZOD4zXByclLjxo01bdo0HThwQJUqVVJaWpp8fHyuGVBKlCiRpWVn9WbUmb2GaWlpevTRR/Xyyy9n+pz77rvvusts06aNChUqpIULF6pOnTpauHChnJyc9OSTTzqsN6fvv/R9U7du3Uzb//zzz2tewHE92d332X3/Ozs7m0Hsem7Fa3It/z0DcSukfyd+/vnn8vPzy9D+3wuHBg0apDZt2mjx4sVavny5Ro4cqcjISK1evVrVq1c3b3K+adMm/fDDD1q+fLmeeeYZTZo0SZs2bVLhwoWvW8vt+lwjawh2yDWtW7fWRx99pI0bNyokJCTbz//666/VuHFjzZw502H+mTNnVLx4cYd57u7u6tixozp27KhLly7piSee0Pjx4xUeHm5ekl+yZEm98MILeuGFFxQfH68aNWpo/PjxNxXs0geF3+g0kZOTk5o0aaImTZpo8uTJeuONN/Taa69pzZo1atq0aa7/UkX6v97TGYahgwcPOtxvr0iRIjpz5kyG5x49etThf9bZqS0wMFArV67U2bNnHY5C/P7772Z7Xrl8+bKkK0dYpSuD+1euXKm6devmKDgHBgYqLS1NBw4cMI+wSFd+geHMmTNZ2tYyZcooKSkpSyEkM+7u7mrdurW++uorTZ48WQsWLFD9+vUz3M7jRu+/zBw+fFgbNmxQ//791bBhQ4e2tLQ0devWTfPmzdOIESOuWd+13js3u+9vpey+Jld/1iTpjz/+yNIvsmT181KmTBmlpaVp796917zPZfqQBh8fnyzVXqZMGQ0dOlRDhw7VgQMHVK1aNU2aNMnhCv+HH35YDz/8sMaPH6958+apa9eumj9/vvr06XPD5V9P+mfn8OHDDkc8Dx48eFPLReY4FYtc8/LLL8vd3V19+vRRXFxchvZDhw5p2rRp13y+s7Nzhn/hffXVV/r7778d5p08edJh2tXVVRUrVpRhGEpJSVFqaqrDqVvpypefv7//Td2JfvXq1Ro3bpyCg4PNWxdk5tSpUxnmpX85p68//X5WmQWtnEi/Ui/d119/rRMnTjiE2DJlymjTpk3mqUnpypiaq2+Lkp3aWrZsqdTUVL333nsO86dMmSKbzZbjEH2ztztJSUnRihUr5Orqaoawp556SqmpqRo3blyG/pcvX77h9rZs2VKSMlwlOXnyZEnK0hV+Tz31lDZu3Kjly5dnaDtz5owZRq+nY8eOOn78uD755BPt3LnT4TSslLX3X2bSj6a9/PLL6tChg8PjqaeeUsOGDW94OvZa752b3fe3UnZfk8WLFzt8J23ZskWbN2/O0ns9q5+Xdu3aycnJSWPHjs1wCj39OzI0NFSenp564403Mh0X988//0i6cg/MixcvOrSVKVNGHh4e5vvh9OnTGb57s/Keyar0fwjPmDHDYf67775708tGRhyxQ64pU6aM5s2bp44dO6pChQoOvzyxYcMGffXVV9f9bdjWrVtr7Nix6tWrl+rUqaPdu3dr7ty5GU79NGvWTH5+fqpbt658fX21b98+vffee2rVqpU8PDx05swZ3XvvverQoYOqVq2qwoULa+XKldq6dasmTZqUpW356aef9Pvvv+vy5cuKi4vT6tWrFRUVpcDAQH3//ffXvVHn2LFjtW7dOrVq1UqBgYGKj4/XjBkzdO+996pevXrmvvL29tYHH3wgDw8Pubu7q3bt2tkeW5SuaNGiqlevnnr16qW4uDhNnTpVZcuWdbglS58+ffT111+refPmeuqpp3To0CF98cUXDhczZLe2Nm3aqHHjxnrttdd05MgRVa1aVStWrNB3332nQYMGZVh2VmX3difpr5d0ZUzUvHnzdODAAb3yyivm+M+GDRvq2WefVWRkpKKjo9WsWTMVKFBABw4c0FdffaVp06apQ4cO11xH1apV1aNHD3300Uc6c+aMGjZsqC1btmjOnDlq166dGjdufMM6hw0bpu+//16tW7dWz549VbNmTZ07d067d+/W119/rSNHjmQ4On219PuivfTSS3J2dlb79u0d2rPy/svM3LlzVa1aNQUEBGTa/thjj2nAgAHasWPHNW8ZVLNmTUnSwIEDFRoaKmdnZ3Xq1Omm9/2tlN3XpGzZsqpXr56ef/55JScna+rUqSpWrNg1T+X+V1Y/L2XLltVrr72mcePGqX79+nriiSdkt9u1detW+fv7KzIyUp6ennr//ffVrVs31ahRQ506dVKJEiUUExOjpUuXqm7dunrvvff0xx9/qEmTJnrqqadUsWJFubi4aNGiRYqLi1OnTp0kSXPmzNGMGTP0+OOPq0yZMjp79qw+/vhjeXp6mv+guRk1a9ZU+/btNXXqVJ08edK83ckff/whKXtnCZAFeXQ1Lizsjz/+MPr27WsEBQUZrq6uhoeHh1G3bl3j3XffNS5evGj2y+x2J0OHDjVKlixpFCxY0Khbt66xcePGDLfj+PDDD40GDRoYxYoVM+x2u1GmTBlj2LBhRkJCgmEYhpGcnGwMGzbMqFq1quHh4WG4u7sbVatWNWbMmHHD2q++fYarq6vh5+dnPProo8a0adMcbimS7urbnaxatcpo27at4e/vb7i6uhr+/v5G586dM9xO4bvvvjMqVqxouLi4ONxepGHDhte8ncu1bnfy5ZdfGuHh4YaPj49R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6akTJ07oxIkTeumllzL069q1q3744QclJSWZ85YvX67z58/r8ccflyRFRkbqs88+0wcffKA9e/Zo8ODBevrpp/Xzzz/fit2D/MQALKhhw4ZGvXr1HOY99NBDxvDhw41ffvnF8PT0NC5evOjQXqZMGePDDz80DMMwateubYSFhTm0161b16hateo115mammp4eHgYP/zwgzlPkrFo0SKHfqNHj3ZYzosvvmg88sgj5vTy5csNu91unD592jAMw+jdu7fRr18/h2X88ssvhpOTk3HhwoVr1gMgdzRs2NCoUKGCkZaWZs4bPny4UaFCBeOPP/4wJBnr16832/7991+jYMGCxsKFCw3DMIzKlSsbERERmS57zZo1hiTz8z5r1izDy8srQ7/AwEBjypQphmEYRkpKilG8eHHjs88+M9s7d+5sdOzY0TAMw7h48aJRqFAhY8OGDQ7L6N27t9G5c+dsbz/uLByxg2VVqVLFYbpkyZKKj4/Xzp07lZSUpGLFipnj3QoXLqzDhw/r0KFDkqT9+/erVq1aDs+/ejouLk59+/ZVuXLl5OXlJU9PTyUlJSkmJiZbdXbt2lVr167V8ePHJV05WtiqVSt5e3tLknbu3KnZs2c71BoaGqq0tDQdPnw4W+sCkDMPP/ywbDabOR0SEqIDBw5o7969cnFxUe3atc22YsWKqXz58tq3b58kaeDAgXr99ddVt25djR49Wrt27bqpWlxcXPTUU09p7ty5kqRz587pu+++M4/yHzx4UOfPn9ejjz7q8L3x2Wefmd9xsC4unoBlFShQwGHaZrMpLS1NSUlJKlmypNauXZvhOelhKit69OihkydPatq0aQoMDJTdbldISIguXbqUrTofeughlSlTRvPnz9fzzz+vRYsWafbs2WZ7UlKSnn32WQ0cODDDc0uVKpWtdQG4/fr06aPQ0FAtXbpUK1asUGRkpCZNmqQBAwbkeJldu3ZVw4YNFR8fr6ioKBUsWFDNmzeXJPMU7dKlS3XPPfc4PI+fLLM+gh3uOjVq1FBsbKxcXFzMCxquVr58eW3dulXdu3c35109Rm79+vWaMWOGWrZsKUk6duyY/v33X4c+BQoUUGpq6g1r6tq1q+bOnat7771XTk5OatWqlUO9e/fuVdmyZbO6iQBy2ebNmx2m08fVVqxYUZcvX9bmzZtVp04dSdLJkye1f/9+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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Saved plot: /content/drive/MyDrive/NLP assignmet/figures/class_distribution_before_after.png\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 0 Axes>"
            ]
          },
          "metadata": {}
        }
      ],
      "source": [
        "# =========================\n",
        "# 6) Text preprocessing + tables + plots\n",
        "# =========================\n",
        "import re\n",
        "import os\n",
        "from typing import Optional\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "from nltk.corpus import stopwords\n",
        "from nltk.tokenize import word_tokenize\n",
        "from nltk.stem import PorterStemmer, WordNetLemmatizer\n",
        "\n",
        "stemmer = PorterStemmer()\n",
        "lemmatizer = WordNetLemmatizer()\n",
        "stop_words = set(stopwords.words(\"english\"))\n",
        "\n",
        "_URL_RE = re.compile(r\"http\\S+|www\\.\\S+\", flags=re.IGNORECASE)\n",
        "_HTML_RE = re.compile(r\"<.*?>\")\n",
        "_NON_ALPHA_RE = re.compile(r\"[^a-zA-Z\\s']+\")\n",
        "_WS_RE = re.compile(r\"\\s+\")\n",
        "\n",
        "def preprocess_text(text: Optional[str], use_lemmatization: bool = False) -> str:\n",
        "    if text is None:\n",
        "        return \"\"\n",
        "    text = str(text).lower().strip()\n",
        "    if not text:\n",
        "        return \"\"\n",
        "    text = _URL_RE.sub(\" \", text)\n",
        "    text = _HTML_RE.sub(\" \", text)\n",
        "    text = _NON_ALPHA_RE.sub(\" \", text)\n",
        "    text = _WS_RE.sub(\" \", text).strip()\n",
        "    if not text:\n",
        "        return \"\"\n",
        "\n",
        "    tokens = word_tokenize(text)\n",
        "    tokens = [t for t in tokens if t not in stop_words and len(t) > 1]\n",
        "\n",
        "    if use_lemmatization:\n",
        "        tokens = [lemmatizer.lemmatize(t) for t in tokens]\n",
        "    else:\n",
        "        tokens = [stemmer.stem(t) for t in tokens]\n",
        "\n",
        "    return \" \".join(tokens)\n",
        "\n",
        "required_cols = {\"text\", \"sentiment\"}\n",
        "missing = required_cols - set(df.columns)\n",
        "if missing:\n",
        "    raise ValueError(f\"Missing required columns: {missing}\")\n",
        "\n",
        "raw_rows = len(df)\n",
        "raw_counts = df[\"sentiment\"].value_counts(dropna=False)\n",
        "\n",
        "df = df.copy()\n",
        "df[\"text\"] = df[\"text\"].astype(str)\n",
        "df[\"clean_text\"] = df[\"text\"].apply(lambda s: preprocess_text(s, use_lemmatization=False))\n",
        "df[\"clean_text\"] = df[\"clean_text\"].fillna(\"\").astype(str).str.strip()\n",
        "\n",
        "df_clean = df.dropna(subset=[\"sentiment\"]).copy()\n",
        "df_clean = df_clean[df_clean[\"clean_text\"].str.len() > 0].reset_index(drop=True)\n",
        "\n",
        "clean_rows = len(df_clean)\n",
        "clean_counts = df_clean[\"sentiment\"].value_counts(dropna=False)\n",
        "\n",
        "summary_table = (\n",
        "    pd.DataFrame({\"Before\": raw_counts, \"After\": clean_counts})\n",
        "    .fillna(0)\n",
        "    .astype(int)\n",
        "    .sort_index()\n",
        ")\n",
        "\n",
        "dropped_rows = raw_rows - clean_rows\n",
        "dropped_pct = (dropped_rows / raw_rows * 100) if raw_rows else 0.0\n",
        "\n",
        "print(\"✅ Preprocessing done.\")\n",
        "print(f\"Rows before: {raw_rows} | Rows after: {clean_rows} | Dropped: {dropped_rows} ({dropped_pct:.2f}%)\")\n",
        "print(\"\\nClass distribution (Before vs After):\")\n",
        "display(summary_table)\n",
        "\n",
        "if clean_rows > 0:\n",
        "    print(\"\\nExample:\")\n",
        "    print(\"RAW  :\", df_clean.loc[0, \"text\"][:120], \"...\")\n",
        "    print(\"CLEAN:\", df_clean.loc[0, \"clean_text\"][:120], \"...\")\n",
        "\n",
        "ax = summary_table.plot(kind=\"bar\")\n",
        "ax.set_title(\"Class Distribution: Before vs After Preprocessing\")\n",
        "ax.set_xlabel(\"Class\")\n",
        "ax.set_ylabel(\"Count\")\n",
        "plt.xticks(rotation=0)\n",
        "plt.tight_layout()\n",
        "plt.show()\n",
        "\n",
        "fig_dir = None\n",
        "if \"DIRS\" in globals() and isinstance(DIRS, dict) and \"figures\" in DIRS:\n",
        "    fig_dir = DIRS[\"figures\"]\n",
        "elif os.getenv(\"NLP_PROJECT_DIR\"):\n",
        "    fig_dir = os.path.join(os.getenv(\"NLP_PROJECT_DIR\"), \"figures\")\n",
        "\n",
        "if fig_dir:\n",
        "    os.makedirs(fig_dir, exist_ok=True)\n",
        "    fig_path = os.path.join(str(fig_dir), \"class_distribution_before_after.png\")\n",
        "    plt.figure()\n",
        "    summary_table.plot(kind=\"bar\")\n",
        "    plt.title(\"Class Distribution: Before vs After Preprocessing\")\n",
        "    plt.xlabel(\"Class\")\n",
        "    plt.ylabel(\"Count\")\n",
        "    plt.xticks(rotation=0)\n",
        "    plt.tight_layout()\n",
        "    plt.savefig(fig_path, dpi=200)\n",
        "    plt.close()\n",
        "    print(f\"Saved plot: {fig_path}\")\n",
        "\n",
        "X = df_clean[\"clean_text\"]\n",
        "y = df_clean[\"sentiment\"]\n"
      ],
      "id": "aYqf56tVcK_8"
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 787
        },
        "id": "l3N1J3oCcK_9",
        "outputId": "7bb8ac0b-c712-4492-b184-ddd9cb3da9bc"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "✅ Split done.\n",
            "Train size: 1818 | Test size: 780\n",
            "\n",
            "Class distribution (Train vs Test):\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "           Train  Test\n",
              "sentiment             \n",
              "negative     419   180\n",
              "positive    1399   600"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-fbedfdc1-a73f-4932-8a85-c2ce5b3fc6c1\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Train</th>\n",
              "      <th>Test</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>sentiment</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>negative</th>\n",
              "      <td>419</td>\n",
              "      <td>180</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>positive</th>\n",
              "      <td>1399</td>\n",
              "      <td>600</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-fbedfdc1-a73f-4932-8a85-c2ce5b3fc6c1')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-fbedfdc1-a73f-4932-8a85-c2ce5b3fc6c1 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-fbedfdc1-a73f-4932-8a85-c2ce5b3fc6c1');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-647f8a85-c5e5-47f1-935d-ee7c64c982a8\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-647f8a85-c5e5-47f1-935d-ee7c64c982a8')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-647f8a85-c5e5-47f1-935d-ee7c64c982a8 button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "  <div id=\"id_cdafcc65-32fb-412d-a6c3-dcdeb6985ddc\">\n",
              "    <style>\n",
              "      .colab-df-generate {\n",
              "        background-color: #E8F0FE;\n",
              "        border: none;\n",
              "        border-radius: 50%;\n",
              "        cursor: pointer;\n",
              "        display: none;\n",
              "        fill: #1967D2;\n",
              "        height: 32px;\n",
              "        padding: 0 0 0 0;\n",
              "        width: 32px;\n",
              "      }\n",
              "\n",
              "      .colab-df-generate:hover {\n",
              "        background-color: #E2EBFA;\n",
              "        box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "        fill: #174EA6;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate {\n",
              "        background-color: #3B4455;\n",
              "        fill: #D2E3FC;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate:hover {\n",
              "        background-color: #434B5C;\n",
              "        box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "        filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "        fill: #FFFFFF;\n",
              "      }\n",
              "    </style>\n",
              "    <button class=\"colab-df-generate\" onclick=\"generateWithVariable('split_table')\"\n",
              "            title=\"Generate code using this dataframe.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "    <script>\n",
              "      (() => {\n",
              "      const buttonEl =\n",
              "        document.querySelector('#id_cdafcc65-32fb-412d-a6c3-dcdeb6985ddc button.colab-df-generate');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      buttonEl.onclick = () => {\n",
              "        google.colab.notebook.generateWithVariable('split_table');\n",
              "      }\n",
              "      })();\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "split_table",
              "summary": "{\n  \"name\": \"split_table\",\n  \"rows\": 2,\n  \"fields\": [\n    {\n      \"column\": \"sentiment\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 2,\n        \"samples\": [\n          \"positive\",\n          \"negative\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Train\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 692,\n        \"min\": 419,\n        \"max\": 1399,\n        \"num_unique_values\": 2,\n        \"samples\": [\n          1399,\n          419\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Test\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 296,\n        \"min\": 180,\n        \"max\": 600,\n        \"num_unique_values\": 2,\n        \"samples\": [\n          600,\n          180\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAASIpJREFUeJzt3Xt8z/X///H7e3a07b05bbMaGy2ZJCENpcOYYymKWpKPU302khS+hVFSfJxzSJ8+6JM+dCIhzCnREhPKKWlMsa3MNiPbbK/fHy5ev97msM1OXm7Xy+V9uXg9n8/X6/V4vZp19zo83zbDMAwBAADguudU3gUAAACgZBDsAAAALIJgBwAAYBEEOwAAAIsg2AEAAFgEwQ4AAMAiCHYAAAAWQbADAACwCIIdAACARRDsgAoqODhYzz77bHmXcc1iY2Nls9nKZF/333+/7r//fnN548aNstls+vTTT8tk/88++6yCg4PLZF8VxY14zEBFRrADytihQ4c0YMAA1alTR+7u7rLb7WrZsqWmTZumv/76q7zLu6L58+fLZrOZH3d3dwUGBioyMlLTp0/XqVOnSmQ/x44dU2xsrHbu3Fki2ytJFbm2v/v7f6crfTZu3FjepZaZsjwnZ86cUWxs7A11flExOJd3AcCNZMWKFXr88cfl5uamZ555RrfffrtycnK0efNmvfzyy9qzZ4/mzp1b3mVe1dixYxUSEqLc3FwlJydr48aNGjx4sCZPnqxly5bpjjvuMMe+9tprGj58eJG2f+zYMY0ZM0bBwcG68847C73emjVrirSf4rhSbe+9957y8/NLvYbC+O9//+uw/MEHHyguLq5Ae/369a9pPxXpmK+mrM6JdD7YjRkzRpIcriIDpY1gB5SRxMRE9ejRQ7Vr19b69etVs2ZNsy86Olq//PKLVqxYUY4VFl779u3VtGlTc3nEiBFav369OnXqpIcfflj79u2Th4eHJMnZ2VnOzqX7q+bMmTOqXLmyXF1dS3U/V+Pi4lKu+/+7p59+2mH5u+++U1xcXIH2i104l4VVkY75aop7ToDrCbdigTIyYcIEZWVl6f3333cIdRfccssteuGFFy67flpamoYOHaqGDRvKy8tLdrtd7du3165duwqMnTFjhho0aKDKlSurSpUqatq0qT766COz/9SpUxo8eLCCg4Pl5uYmPz8/tWnTRjt27Cj28T344IMaOXKkjhw5og8//NBsv9QzdnFxcWrVqpV8fX3l5eWlevXq6f/+7/8knX8urlmzZpKk3r17m7fH5s+fL+n81Y/bb79dCQkJuu+++1S5cmVz3YufsbsgLy9P//d//6eAgAB5enrq4Ycf1tGjRx3GXO6Zxr9v82q1Xep5s9OnT+ull15SUFCQ3NzcVK9ePf3rX/+SYRgO42w2m2JiYrR06VLdfvvtcnNzU4MGDbRq1aoCNe3fv19JSUkF2ovqSufyiy++UMeOHRUYGCg3NzfVrVtXr7/+uvLy8hy2cfExHz58WDabTf/61780d+5c1a1bV25ubmrWrJm2bdt2xXq2b98um82mBQsWFOhbvXq1bDabli9fLql0foYlKT8/X1OnTlWDBg3k7u4uf39/DRgwQCdPnixQa2RkpKpXry4PDw+FhIToH//4h3kOatSoIUkaM2aM+XMSGxt7TbUBhcEVO6CMfPnll6pTp45atGhRrPV//fVXLV26VI8//rhCQkKUkpKid999V61bt9bevXsVGBgo6fytsUGDBqlbt2564YUXdPbsWe3evVtbt27VU089JUl67rnn9OmnnyomJkZhYWE6ceKENm/erH379umuu+4q9jH27NlT//d//6c1a9aoX79+lxyzZ88ederUSXfccYfGjh0rNzc3/fLLL9qyZYuk87fBxo4dq1GjRql///669957JcnhvJ04cULt27dXjx499PTTT8vf3/+KdY0bN042m03Dhg1Tamqqpk6dqoiICO3cudO8slgYhant7wzD0MMPP6wNGzaoT58+uvPOO7V69Wq9/PLL+v333zVlyhSH8Zs3b9bnn3+uf/7zn/L29tb06dPVtWtXJSUlqVq1ag51tG7dukSe37rcuZw/f768vLw0ZMgQeXl5af369Ro1apQyMzM1ceLEq273o48+0qlTpzRgwADZbDZNmDBBjz32mH799dfLXuVr2rSp6tSpo48//li9evVy6Fu8eLGqVKmiyMhISaX3MzxgwADNnz9fvXv31qBBg5SYmKh33nlHP/zwg7Zs2SIXFxelpqaqbdu2qlGjhoYPHy5fX18dPnxYn3/+uSSpRo0amj17tp5//nk9+uijeuyxxyTJ4REFoNQYAEpdRkaGIcl45JFHCr1O7dq1jV69epnLZ8+eNfLy8hzGJCYmGm5ubsbYsWPN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Dta6deuUnJyskydPXramqKgo7dixQ+PGjVO3bt0c/lU9bNgwffvtt4qJidHOnTt18OBBffHFF7w8AZShpKQkDRkyRAcOHND//vc/zZgxQy+88IJCQ0P1yCOPqF+/ftq8ebN27dqlp59+WjfddJMeeeQRSdLgwYO1evVqJSYmaseOHdqwYYPq169/yf0EBwcrKytL69at059//qkzZ85ctqannnpKc+bMUVxcnHkbVpK8vb01dOhQvfjii1qwYIEOHTqkHTt2aMaMGVqwYEHJnhhUOAQ73HBsNptWrlyp++67T71799att96qHj166MiRI/L395d0PmiNGDFCQ4cO1V133aXExEQ9++yzcnd3N7fz/vvv6+TJk7rrrrvUs2dPDRo0SH5+fg77mjRpkuLi4hQUFKTGjRtftqZbbrlFd999t3bv3u3wC1o6/6zg119/rZ9//ln33nuvGjdurFGjRikwMLAEzwqAK3nmmWf0119/6e6771Z0dLReeOEF9e/fX9L5N9+bNGmiTp06KTw8XIZhaOXKleYVtLy8PEVHR6t+/fpq166dbr31Vs2aNeuS+2nRooWee+45de/eXTVq1NCECRMuW1NUVJT27t2rm266SS1btnToe/311zVy5EiNHz/e3O+KFSsUEhJSQmcEFRXfPAEUUps2bRQQEKD//ve/5V0KgDJ0//3368477+QrvXBd4Bk74BLOnDmjOXPmKDIyUpUqVdL//vc/rV271pwHDwCAiohgB1zChdu148aN09mzZ1WvXj199tlnioiIKO/SAAC4LG7FAgAAWAQvTwAAAFgEwQ4AAMAiCHYAAAAWQbADAACwCIIdAACARRDsAKCE2Gw2LV26tLzLAHADI9gBQCElJydr4MCBqlOnjtzc3BQUFKTOnTtr3bp15V0aAEhigmIAKJTDhw+rZcuW8vX11cSJE9WwYUPl5uZq9erVio6O1v79+8u7RADgih0AFMY///lP2Ww2ff/99+ratatuvfVWNWjQQEOGDNF33313yXWGDRumW2+9VZUrV1adOnU0cuRI5ebmmv27du3SAw88IG9vb9ntdjVp0kTbt2+XJB05ckSdO3dWlSpV5OnpqQYNGmjlypVlcqwArl9csQOAq0hLS9OqVas0btw4eXp6Fuj39fW95Hre3t6aP3++AgMD9eOPP6pfv37y9vbWK6+8IkmKiopS48aNNXv2bFWqVEk7d+6Ui4uLJCk6Olo5OTnatGmTPD09tXfvXnl5eZXaMQKwBoIdAFzFL7/8IsMwdNtttxVpvddee838c3BwsIYOHapFixaZwS4pKUkvv/yyud3Q0FBzfFJSkrp27aqGDRtKkurUqXOthwHgBsCtWAC4iuJ+pfbixYvVsmVLBQQEyMvLS6+99pqSkpLM/iFDhqhv376KiIjQW2+9pUOHDpl9gwYN0htvvKGWLVtq9OjR2r179zUfBwDrI9gBwFWEhobKZrMV6QWJ+Ph4RUVFqUOHDlq+fLl++OEHvfrqq8rJyTHHxMbGas+ePerYsaPWr1+vsLAwLVmyRJLUt29f/frrr+rZs6d+/PFHNW3aVDNmzCjxYwNgLTajuP8UBYAbSPv27fXjjz/qwIEDBZ6zS09Pl6+vr2w2m5YsWaIuXbpo0qRJmjVrlsNVuL59++rTTz9Venr6Jffx5JNP6vTp01q2bFmBvhEjRmjFihVcuQNwRVyxA4BCmDlzpvLy8nT33Xfrs88+08GDB7Vv3z5Nnz5d4eHhBcaHhoYqKSlJixYt0qFDhzR9+nTzapwk/fXXX4qJidHGjRt15MgRbdmyRdu2bVP9+vUlSYMHD9bq1auVmJioHTt2aMOGDWYfAFwOL08AQCHUqVNHO3bs0Lhx4/TSSy/p+PHjqlGjhpo0aaLZs2cXGP/www/rxRdfVExMjLKzs9WxY0eNHDlSsbGxkqRKlSrpxIkTeuaZZ5SSkqLq1avrscce05gxYyRJeXl5io6O1m+//Sa73a527dppypQpZXnIAK5D3IoFAACwCG7FAgAAWATBDgAAwCIIdgAAABZBsAMAALAIgh0AAIBFEOwAAAAsgmAHAABgEQQ7AAAAiyDYAQAAWATBDgAAwCIIdgAAABZBsAMAALCI/wcYZ35r6Knm8gAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "✅ TF-IDF done.\n",
            "Vectorizer config: {'max_features': 50000, 'ngram_range': (1, 2), 'min_df': 2, 'max_df': 0.95, 'sublinear_tf': True}\n",
            "Train shape: (1818, 1838) | Test shape: (780, 1838)\n",
            "Saved plot: /content/drive/MyDrive/NLP assignmet/figures/class_distribution_train_test.png\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 0 Axes>"
            ]
          },
          "metadata": {}
        }
      ],
      "source": [
        "# =========================\n",
        "# 7) Split + TF-IDF (with tables + plots)\n",
        "# =========================\n",
        "import os\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "from sklearn.model_selection import train_test_split\n",
        "from sklearn.feature_extraction.text import TfidfVectorizer\n",
        "\n",
        "X_train, X_test, y_train, y_test = train_test_split(\n",
        "    X, y, test_size=0.30, random_state=42, stratify=y\n",
        ")\n",
        "\n",
        "split_table = pd.DataFrame(\n",
        "    {\n",
        "        \"Train\": y_train.value_counts(),\n",
        "        \"Test\": y_test.value_counts(),\n",
        "    }\n",
        ").fillna(0).astype(int).sort_index()\n",
        "\n",
        "print(\"✅ Split done.\")\n",
        "print(f\"Train size: {len(X_train)} | Test size: {len(X_test)}\")\n",
        "print(\"\\nClass distribution (Train vs Test):\")\n",
        "display(split_table)\n",
        "\n",
        "ax = split_table.plot(kind=\"bar\")\n",
        "ax.set_title(\"Class Distribution: Train vs Test\")\n",
        "ax.set_xlabel(\"Class\")\n",
        "ax.set_ylabel(\"Count\")\n",
        "plt.xticks(rotation=0)\n",
        "plt.tight_layout()\n",
        "plt.show()\n",
        "\n",
        "tfidf_config = {\n",
        "    \"max_features\": 50000,\n",
        "    \"ngram_range\": (1, 2),\n",
        "    \"min_df\": 2,\n",
        "    \"max_df\": 0.95,\n",
        "    \"sublinear_tf\": True,\n",
        "}\n",
        "\n",
        "vectorizer = TfidfVectorizer(**tfidf_config)\n",
        "X_train_vec = vectorizer.fit_transform(X_train)\n",
        "X_test_vec = vectorizer.transform(X_test)\n",
        "\n",
        "print(\"\\n✅ TF-IDF done.\")\n",
        "print(\"Vectorizer config:\", tfidf_config)\n",
        "print(\"Train shape:\", X_train_vec.shape, \"| Test shape:\", X_test_vec.shape)\n",
        "\n",
        "fig_dir = None\n",
        "if \"DIRS\" in globals() and isinstance(DIRS, dict) and \"figures\" in DIRS:\n",
        "    fig_dir = DIRS[\"figures\"]\n",
        "elif os.getenv(\"NLP_PROJECT_DIR\"):\n",
        "    fig_dir = os.path.join(os.getenv(\"NLP_PROJECT_DIR\"), \"figures\")\n",
        "\n",
        "if fig_dir:\n",
        "    os.makedirs(fig_dir, exist_ok=True)\n",
        "    fig_path = os.path.join(str(fig_dir), \"class_distribution_train_test.png\")\n",
        "    plt.figure()\n",
        "    split_table.plot(kind=\"bar\")\n",
        "    plt.title(\"Class Distribution: Train vs Test\")\n",
        "    plt.xlabel(\"Class\")\n",
        "    plt.ylabel(\"Count\")\n",
        "    plt.xticks(rotation=0)\n",
        "    plt.tight_layout()\n",
        "    plt.savefig(fig_path, dpi=200)\n",
        "    plt.close()\n",
        "    print(f\"Saved plot: {fig_path}\")\n"
      ],
      "id": "l3N1J3oCcK_9"
    },
    {
      "cell_type": "code",
      "execution_count": 22,
      "metadata": {
        "id": "IMCnUQ9AcK_9"
      },
      "outputs": [],
      "source": [
        "# =========================\n",
        "# 8) Evaluation helper (tables + confusion matrix plot + saving)\n",
        "# =========================\n",
        "import os\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n",
        "from IPython.display import display\n",
        "\n",
        "from sklearn.metrics import (\n",
        "    accuracy_score,\n",
        "    precision_score,\n",
        "    recall_score,\n",
        "    f1_score,\n",
        "    confusion_matrix,\n",
        "    classification_report,\n",
        ")\n",
        "\n",
        "EVAL_RESULTS = []\n",
        "\n",
        "def _get_output_dir():\n",
        "    if \"DIRS\" in globals() and isinstance(DIRS, dict) and \"outputs\" in DIRS:\n",
        "        return str(DIRS[\"outputs\"])\n",
        "    proj = os.getenv(\"NLP_PROJECT_DIR\")\n",
        "    if proj:\n",
        "        return os.path.join(proj, \"outputs\")\n",
        "    return None\n",
        "\n",
        "def _get_fig_dir():\n",
        "    if \"DIRS\" in globals() and isinstance(DIRS, dict) and \"figures\" in DIRS:\n",
        "        return str(DIRS[\"figures\"])\n",
        "    proj = os.getenv(\"NLP_PROJECT_DIR\")\n",
        "    if proj:\n",
        "        return os.path.join(proj, \"figures\")\n",
        "    return None\n",
        "\n",
        "def evaluate_model(model_name, y_true, y_pred, labels=None, save_artifacts=True):\n",
        "    if labels is None:\n",
        "        labels = sorted(pd.Series(y_true).dropna().unique().tolist())\n",
        "\n",
        "    acc = accuracy_score(y_true, y_pred)\n",
        "    prec = precision_score(y_true, y_pred, average=\"weighted\", zero_division=0)\n",
        "    rec = recall_score(y_true, y_pred, average=\"weighted\", zero_division=0)\n",
        "    f1 = f1_score(y_true, y_pred, average=\"weighted\", zero_division=0)\n",
        "\n",
        "    cm = confusion_matrix(y_true, y_pred, labels=labels)\n",
        "    report_df = pd.DataFrame(\n",
        "        classification_report(y_true, y_pred, output_dict=True, zero_division=0)\n",
        "    ).transpose()\n",
        "\n",
        "    metrics_row = {\n",
        "        \"Model\": model_name,\n",
        "        \"Accuracy\": acc,\n",
        "        \"Precision_weighted\": prec,\n",
        "        \"Recall_weighted\": rec,\n",
        "        \"F1_weighted\": f1,\n",
        "    }\n",
        "    EVAL_RESULTS.append(metrics_row)\n",
        "\n",
        "    print(\"\\n\" + \"=\" * 70)\n",
        "    print(model_name)\n",
        "\n",
        "    display(pd.DataFrame([metrics_row]).set_index(\"Model\"))\n",
        "\n",
        "    print(\"\\nConfusion Matrix:\")\n",
        "    display(pd.DataFrame(cm, index=labels, columns=labels))\n",
        "\n",
        "    plt.figure()\n",
        "    sns.heatmap(cm, annot=True, fmt=\"d\", xticklabels=labels, yticklabels=labels)\n",
        "    plt.title(f\"Confusion Matrix - {model_name}\")\n",
        "    plt.xlabel(\"Predicted\")\n",
        "    plt.ylabel(\"Actual\")\n",
        "    plt.tight_layout()\n",
        "    plt.show()\n",
        "\n",
        "    print(\"\\nClassification Report:\")\n",
        "    display(report_df)\n",
        "\n",
        "    if save_artifacts:\n",
        "        out_dir = _get_output_dir()\n",
        "        fig_dir = _get_fig_dir()\n",
        "\n",
        "        metrics_path = None\n",
        "        report_path = None\n",
        "        fig_path = None\n",
        "\n",
        "        if out_dir:\n",
        "            os.makedirs(out_dir, exist_ok=True)\n",
        "            metrics_path = os.path.join(out_dir, \"metrics_summary.csv\")\n",
        "            pd.DataFrame(EVAL_RESULTS).to_csv(metrics_path, index=False)\n",
        "\n",
        "            safe_name = model_name.replace(\" \", \"_\").replace(\"+\", \"plus\")\n",
        "            report_path = os.path.join(out_dir, f\"classification_report_{safe_name}.csv\")\n",
        "            report_df.to_csv(report_path)\n",
        "\n",
        "        if fig_dir:\n",
        "            os.makedirs(fig_dir, exist_ok=True)\n",
        "            safe_name = model_name.replace(\" \", \"_\").replace(\"+\", \"plus\")\n",
        "            fig_path = os.path.join(fig_dir, f\"confusion_matrix_{safe_name}.png\")\n",
        "\n",
        "            plt.figure()\n",
        "            sns.heatmap(cm, annot=True, fmt=\"d\", xticklabels=labels, yticklabels=labels)\n",
        "            plt.title(f\"Confusion Matrix - {model_name}\")\n",
        "            plt.xlabel(\"Predicted\")\n",
        "            plt.ylabel(\"Actual\")\n",
        "            plt.tight_layout()\n",
        "            plt.savefig(fig_path, dpi=200)\n",
        "            plt.close()\n",
        "\n",
        "        if metrics_path:\n",
        "            print(f\"Saved metrics to: {metrics_path}\")\n",
        "        if report_path:\n",
        "            print(f\"Saved report to: {report_path}\")\n",
        "        if fig_path:\n",
        "            print(f\"Saved confusion matrix to: {fig_path}\")\n",
        "\n",
        "    return metrics_row\n",
        "\n",
        "def get_results_table():\n",
        "    if not EVAL_RESULTS:\n",
        "        return pd.DataFrame()\n",
        "    return (\n",
        "        pd.DataFrame(EVAL_RESULTS)\n",
        "        .set_index(\"Model\")\n",
        "        .sort_values(\"F1_weighted\", ascending=False)\n",
        "    )\n"
      ],
      "id": "IMCnUQ9AcK_9"
    },
    {
      "cell_type": "code",
      "execution_count": 23,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1144
        },
        "id": "nt6t2x2jcK_9",
        "outputId": "a3f73b18-5af3-44fe-dd1a-dc2b51b33009"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Fitting 5 folds for each of 108 candidates, totalling 540 fits\n",
            "✅ Best params: {'max_depth': None, 'min_samples_leaf': 1, 'min_samples_split': 5, 'n_estimators': 100}\n",
            "✅ CV best score (f1_weighted): 0.8289\n",
            "⏱️ GridSearch time: 342.9s\n",
            "\n",
            "======================================================================\n",
            "RandomForest (Baseline)\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "                         Accuracy  Precision_weighted  Recall_weighted  \\\n",
              "Model                                                                    \n",
              "RandomForest (Baseline)  0.857692            0.850994         0.857692   \n",
              "\n",
              "                         F1_weighted  \n",
              "Model                                 \n",
              "RandomForest (Baseline)     0.847533  "
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-eb5f718d-6781-4a1b-80e5-5e9fe9c74a66\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Accuracy</th>\n",
              "      <th>Precision_weighted</th>\n",
              "      <th>Recall_weighted</th>\n",
              "      <th>F1_weighted</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Model</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>RandomForest (Baseline)</th>\n",
              "      <td>0.857692</td>\n",
              "      <td>0.850994</td>\n",
              "      <td>0.857692</td>\n",
              "      <td>0.847533</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-eb5f718d-6781-4a1b-80e5-5e9fe9c74a66')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-eb5f718d-6781-4a1b-80e5-5e9fe9c74a66 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-eb5f718d-6781-4a1b-80e5-5e9fe9c74a66');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"    print(f\\\"Saved vectorizer to: {os\",\n  \"rows\": 1,\n  \"fields\": [\n    {\n      \"column\": \"Model\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 1,\n        \"samples\": [\n          \"RandomForest (Baseline)\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Accuracy\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 0.8576923076923076,\n        \"max\": 0.8576923076923076,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.8576923076923076\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Precision_weighted\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 0.8509942001422122,\n        \"max\": 0.8509942001422122,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.8509942001422122\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Recall_weighted\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 0.8576923076923076,\n        \"max\": 0.8576923076923076,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.8576923076923076\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"F1_weighted\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 0.8475334774160361,\n        \"max\": 0.8475334774160361,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.8475334774160361\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Confusion Matrix:\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "          negative  positive\n",
              "negative        96        84\n",
              "positive        27       573"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-cd2db38e-7785-4cfc-a1e8-2cbac9e737bc\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>negative</th>\n",
              "      <th>positive</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>negative</th>\n",
              "      <td>96</td>\n",
              "      <td>84</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>positive</th>\n",
              "      <td>27</td>\n",
              "      <td>573</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-cd2db38e-7785-4cfc-a1e8-2cbac9e737bc')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-cd2db38e-7785-4cfc-a1e8-2cbac9e737bc button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-cd2db38e-7785-4cfc-a1e8-2cbac9e737bc');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-2eaf9d27-865e-40b2-bbf4-3f55d3656f42\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-2eaf9d27-865e-40b2-bbf4-3f55d3656f42')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-2eaf9d27-865e-40b2-bbf4-3f55d3656f42 button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"    print(f\\\"Saved vectorizer to: {os\",\n  \"rows\": 2,\n  \"fields\": [\n    {\n      \"column\": \"negative\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 48,\n        \"min\": 27,\n        \"max\": 96,\n        \"num_unique_values\": 2,\n        \"samples\": [\n          27,\n          96\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"positive\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 345,\n        \"min\": 84,\n        \"max\": 573,\n        \"num_unique_values\": 2,\n        \"samples\": [\n          573,\n          84\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 2 Axes>"
            ],
            "image/png": "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RCQqlgiZYBEREZHYWCJkiZCIiIhIbBzBIiIiIlEJHMFigkVEREQiY4LFEiERERGR2DiCRURERKJiiZAJFhEREYmNCRZLhERERERi4wgWERERiYolQiZYREREJDImWCwREhEREYmOI1hEREQkKo5gMcEiIiIisQkSVUegciwREhEREYmMI1hEREQkKpYImWARERGRyAQZS4QsERIRERGJjCNYREREJCqWCJlgERERkcgE3kXIEiERERGR2DiCRURERKJiiZAJFhEREYmMdxGyREhEREQkOo5gERERkagEQdURqB5HsIiIiIhExhEsIiIiEhXnYDHBIiIiIpExwWKJkIiIiEh0HMEiIiIiUXGSOxMsIiIiEhlLhCwREhEREYmOI1hEREQkKj7suZgJ1v79+4t9wK+//rrEwRAREVHZx2cRFjPB6tq1a7EOJpFIkJeX92/iISIiIirzipVgyWRMRYmIiKh4ZCwRcg4WERERiYtzsEqYYKWnp+PMmTOIiYlBdna2wrYxY8aIEhgRERFRWaV0gvX333/Dy8sLGRkZSE9Ph7m5ORITE6Gvrw8rKysmWERERP9xXAerBOtgjR8/Hp07d8br16+hp6eHCxcu4MmTJ3B2dsbPP//8OWIkIiKiMkQQxHuVVUonWFFRUZgwYQI0NDSgqamJrKwsVK5cGQsXLsQPP/zwOWIkIiIiKlOUTrC0tbWhofFuNysrK8TExAAATExM8PTpU3GjIyIiojJHkElEe5VVSs/BatiwIS5fvozq1avDzc0N06ZNQ2JiIjZu3Ig6dep8jhiJiIioDOEyDSUYwZo3bx7Kly8PAJg7dy7MzMwwcuRIJCQkYO3ataIHSERERFTWKD2C1bhxY/mfrayscPToUVEDIiIiorKN62BxoVEiIiISWVm++08sSidY9vb2kEiKzkwfPXr0rwIiIiIiKuuUTrDGjRun8D4nJwd///03jh49ikmTJokVFxEREZVRnOReggRr7Nixhbb/8ssv+Ouvv/51QERERFS2qWoO1urVq7F69Wo8fvwYAFC7dm1MmzYNnp6eAIDMzExMmDABW7duRVZWFjw8PLBq1SpYW1vLjxETE4ORI0fi1KlTMDQ0hK+vL4KCgqClpVzKpPRdhEXx9PTErl27xDocERERkVIqVaqE+fPn48qVK/jrr7/Qtm1bdOnSBTdv3gTw7mk0Bw4cwI4dO3DmzBm8ePEC3bt3l++fl5cHb29vZGdnIyIiAqGhoQgJCcG0adOUjkUiCOJMRVu4cCFWrVolzxpVqaGNq6pDICIAb2XZn+5ERJ/dnfjLpXq+q5W7iHasRk/3/av9zc3NsWjRIvTs2ROWlpbYvHkzevbsCQC4c+cOHB0dERkZiebNm+PIkSPo1KkTXrx4IR/VCg4OxuTJk5GQkAAdHZ1in7dEC42+P8ldEATExcUhISEBq1atUvZwRERE9IVRhzlYeXl52LFjB9LT0+Hi4oIrV64gJycH7u7u8j61atVClSpV5AlWZGQk6tatq1Ay9PDwwMiRI3Hz5k00bNiw2OdXOsHq0qWLQoKloaEBS0tLtG7dGrVq1VL2cERERERFysrKQlZWlkKbVCqFVCottP+NGzfg4uKCzMxMGBoaYs+ePXByckJUVBR0dHRgamqq0N/a2hpxcXEAgLi4OIXkKn97/jZlKJ1gzZgxQ9ldSt2NV49VHQIRAXj74pyqQyAiFRBzkntQUBBmzpyp0DZ9+vQi85GaNWsiKioKKSkp2LlzJ3x9fXHmzBnR4ikupRMsTU1NxMbGwsrKSqE9KSkJVlZWyMvLEy04IiIiKnvELBEGBgYiICBAoa2o0SsA0NHRQbVq1QAAzs7OuHz5MpYvX45vvvkG2dnZSE5OVhjFevnyJWxsbAAANjY2uHTpksLxXr58Kd+mDKXvIixqTnxWVpZSk7+IiIiIPkUqlcLY2Fjh9bEE60MymQxZWVlwdnaGtrY2wsPD5dvu3r2LmJgYuLi4AABcXFxw48YNxMfHy/uEhYXB2NgYTk5OSsVd7BGsFStWAAAkEgnWrVsHQ0ND+ba8vDycPXuWc7CIiIgIqnpSTmBgIDw9PVGlShW8efMGmzdvxunTp3Hs2DGYmJhgyJAhCAgIgLm5OYyNjTF69Gi4uLigefPmAIAOHTrAyckJAwYMwMKFCxEXF4effvoJ/v7+SiV1gBIJ1tKlSwG8G8EKDg6GpqamfJuOjg7s7OwQHBys1MmJiIjoy6Oquwjj4+MxcOBAxMbGwsTEBPXq1cOxY8fQvn17AO9yGQ0NDfTo0UNhodF8mpqaOHjwIEaOHAkXFxcYGBjA19cXs2bNUjoWpdfBatOmDXbv3g0zMzOlT1ZatHQqqjoEIgInuROpC22LqqV6vojyPUQ7VovYsrmIudKT3E+dOvU54iAiIqIvhKoelaNOlJ7k3qNHDyxYsKBA+8KFC9GrVy9RgiIiIqKySybiq6xSOsE6e/YsvLy8CrR7enri7NmzogRFREREVJYpXSJMS0srdDkGbW1tpKamihIUERERlV0CWCJUegSrbt262LZtW4H2rVu3Kr1GBBEREX15ZIJ4r7JK6RGsqVOnonv37nj48CHatm0LAAgPD8fmzZuxc+dO0QMkIiIiKmuUTrA6d+6MvXv3Yt68edi5cyf09PRQv359nDx5Eubm5p8jRiIiIipDZCwRKp9gAYC3tze8vb0BAKmpqdiyZQsmTpyIK1eu8FmERERE/3Gcg1WCOVj5zp49C19fX1SoUAGLFy9G27ZtceHCBTFjIyIiIiqTlBrBiouLQ0hICNavX4/U1FT07t0bWVlZ2Lt3Lye4ExEREYCyvX6VWIo9gtW5c2fUrFkT169fx7Jly/DixQusXLnyc8ZGREREZZAAiWivsqrYI1hHjhzBmDFjMHLkSFSvXv1zxkRERERUphV7BOv8+fN48+YNnJ2d0axZM/zvf/9DYmLi54yNiIiIyiA+KkeJBKt58+b49ddfERsbi2+//RZbt25FhQoVIJPJEBYWhjdv3nzOOImIiKiMYIJVgrsIDQwMMHjwYJw/fx43btzAhAkTMH/+fFhZWeHrr7/+HDESERERlSklXqYBAGrWrImFCxfi2bNn2LJli1gxERERURnGSe4lXGj0Q5qamujatSu6du0qxuGIiIioDJOV3bxINP9qBIuIiIiIChJlBIuIiIgoH59FyASLiIiIRCaoOgA1wBIhERERkcg4gkVERESiKsvrV4mFCRYRERGJSibhHCyWCImIiIhExhEsIiIiEhUnuTPBIiIiIpFxDhZLhERERESi4wgWERERiYqPymGCRURERCLjSu4sERIRERGJjiNYREREJCreRcgEi4iIiETGOVgsERIRERGJjiNYREREJCqug8UEi4iIiETGOVgsERIRERGJjiNYREREJCpOcmeCRURERCLjHCyWCImIiIhExxEsIiIiEhVHsJhgERERkcgEzsFiiZCIiIhIbBzBIiIiIlGxRMgEi4iIiETGBIslQiIiIiLRcQSLiIiIRMVH5TDBIiIiIpFxJXeWCImIiIhExxEsIiIiEhUnuTPBIiIiIpExwWKJkIiIiEh0HMEiIiIi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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Classification Report:\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "              precision    recall  f1-score     support\n",
              "negative       0.780488  0.533333  0.633663  180.000000\n",
              "positive       0.872146  0.955000  0.911695  600.000000\n",
              "accuracy       0.857692  0.857692  0.857692    0.857692\n",
              "macro avg      0.826317  0.744167  0.772679  780.000000\n",
              "weighted avg   0.850994  0.857692  0.847533  780.000000"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-06c5c51b-2000-43e9-bc17-abf691d4608c\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>precision</th>\n",
              "      <th>recall</th>\n",
              "      <th>f1-score</th>\n",
              "      <th>support</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>negative</th>\n",
              "      <td>0.780488</td>\n",
              "      <td>0.533333</td>\n",
              "      <td>0.633663</td>\n",
              "      <td>180.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>positive</th>\n",
              "      <td>0.872146</td>\n",
              "      <td>0.955000</td>\n",
              "      <td>0.911695</td>\n",
              "      <td>600.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>accuracy</th>\n",
              "      <td>0.857692</td>\n",
              "      <td>0.857692</td>\n",
              "      <td>0.857692</td>\n",
              "      <td>0.857692</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>macro avg</th>\n",
              "      <td>0.826317</td>\n",
              "      <td>0.744167</td>\n",
              "      <td>0.772679</td>\n",
              "      <td>780.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>weighted avg</th>\n",
              "      <td>0.850994</td>\n",
              "      <td>0.857692</td>\n",
              "      <td>0.847533</td>\n",
              "      <td>780.000000</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-06c5c51b-2000-43e9-bc17-abf691d4608c')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-06c5c51b-2000-43e9-bc17-abf691d4608c button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-06c5c51b-2000-43e9-bc17-abf691d4608c');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-1415f279-8607-4301-bf6a-068ad61cda48\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-1415f279-8607-4301-bf6a-068ad61cda48')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-1415f279-8607-4301-bf6a-068ad61cda48 button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"    print(f\\\"Saved vectorizer to: {os\",\n  \"rows\": 5,\n  \"fields\": [\n    {\n      \"column\": \"precision\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.03593613512368826,\n        \"min\": 0.7804878048780488,\n        \"max\": 0.8721461187214612,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.8721461187214612,\n          0.8509942001422122,\n          0.8576923076923076\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"recall\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.16152946657903328,\n        \"min\": 0.5333333333333333,\n        \"max\": 0.955,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          0.955,\n          0.7441666666666666,\n          0.5333333333333333\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"f1-score\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.10766798961497137,\n        \"min\": 0.6336633663366337,\n        \"max\": 0.9116945107398569,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.9116945107398569,\n          0.8475334774160361,\n          0.8576923076923076\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"support\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 358.2170391357995,\n        \"min\": 0.8576923076923076,\n        \"max\": 780.0,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          600.0,\n          780.0,\n          180.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Saved metrics to: /content/drive/MyDrive/NLP assignmet/outputs/metrics_summary.csv\n",
            "Saved report to: /content/drive/MyDrive/NLP assignmet/outputs/classification_report_RandomForest_(Baseline).csv\n",
            "Saved confusion matrix to: /content/drive/MyDrive/NLP assignmet/figures/confusion_matrix_RandomForest_(Baseline).png\n",
            "Saved model to: /content/drive/MyDrive/NLP assignmet/models/rf_baseline_best.joblib\n",
            "Saved vectorizer to: /content/drive/MyDrive/NLP assignmet/models/tfidf_vectorizer.joblib\n"
          ]
        }
      ],
      "source": [
        "# =========================\n",
        "# 9) Baseline: Random Forest + GridSearch (with evaluation + saving)\n",
        "# =========================\n",
        "import time\n",
        "import joblib\n",
        "\n",
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn.model_selection import GridSearchCV\n",
        "\n",
        "rf = RandomForestClassifier(random_state=42, n_jobs=-1)\n",
        "\n",
        "param_grid = {\n",
        "    \"n_estimators\": [100, 200, 300],\n",
        "    \"max_depth\": [None, 10, 20, 30],\n",
        "    \"min_samples_split\": [2, 5, 10],\n",
        "    \"min_samples_leaf\": [1, 2, 4],\n",
        "}\n",
        "\n",
        "grid = GridSearchCV(\n",
        "    estimator=rf,\n",
        "    param_grid=param_grid,\n",
        "    scoring=\"f1_weighted\",\n",
        "    cv=5,\n",
        "    n_jobs=-1,\n",
        "    verbose=1,\n",
        ")\n",
        "\n",
        "t0 = time.time()\n",
        "grid.fit(X_train_vec, y_train)\n",
        "elapsed = time.time() - t0\n",
        "\n",
        "best_rf = grid.best_estimator_\n",
        "print(f\"✅ Best params: {grid.best_params_}\")\n",
        "print(f\"✅ CV best score (f1_weighted): {grid.best_score_:.4f}\")\n",
        "print(f\"⏱️ GridSearch time: {elapsed:.1f}s\")\n",
        "\n",
        "y_pred_base = best_rf.predict(X_test_vec)\n",
        "evaluate_model(\"RandomForest (Baseline)\", y_test, y_pred_base, save_artifacts=True)\n",
        "\n",
        "model_dir = None\n",
        "if \"DIRS\" in globals() and isinstance(DIRS, dict) and \"models\" in DIRS:\n",
        "    model_dir = str(DIRS[\"models\"])\n",
        "elif os.getenv(\"NLP_PROJECT_DIR\"):\n",
        "    model_dir = os.path.join(os.getenv(\"NLP_PROJECT_DIR\"), \"models\")\n",
        "\n",
        "if model_dir:\n",
        "    os.makedirs(model_dir, exist_ok=True)\n",
        "    joblib.dump(best_rf, os.path.join(model_dir, \"rf_baseline_best.joblib\"))\n",
        "    joblib.dump(vectorizer, os.path.join(model_dir, \"tfidf_vectorizer.joblib\"))\n",
        "    print(f\"Saved model to: {os.path.join(model_dir, 'rf_baseline_best.joblib')}\")\n",
        "    print(f\"Saved vectorizer to: {os.path.join(model_dir, 'tfidf_vectorizer.joblib')}\")\n"
      ],
      "id": "nt6t2x2jcK_9"
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 4127
        },
        "id": "CTdvQOiIcK_9",
        "outputId": "98fa290d-51e6-45e9-ea45-9e942e73f573"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Train class distribution (before resampling): Counter({'positive': 1399, 'negative': 419})\n",
            "\n",
            "----------------------------------------------------------------------\n",
            "RF + RandomOverSampler\n",
            "After resampling: Counter({'positive': 1399, 'negative': 1399})\n",
            "Best params: {'max_depth': None, 'min_samples_leaf': 1, 'min_samples_split': 2, 'n_estimators': 100}\n",
            "CV best score (f1_weighted): 0.9156\n",
            "\n",
            "======================================================================\n",
            "RF + RandomOverSampler\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "                        Accuracy  Precision_weighted  Recall_weighted  \\\n",
              "Model                                                                   \n",
              "RF + RandomOverSampler  0.835897            0.843783         0.835897   \n",
              "\n",
              "                        F1_weighted  \n",
              "Model                                \n",
              "RF + RandomOverSampler     0.839091  "
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-186b6a3f-ec66-4d2f-a57c-cf043019a8ec\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Accuracy</th>\n",
              "      <th>Precision_weighted</th>\n",
              "      <th>Recall_weighted</th>\n",
              "      <th>F1_weighted</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Model</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>RF + RandomOverSampler</th>\n",
              "      <td>0.835897</td>\n",
              "      <td>0.843783</td>\n",
              "      <td>0.835897</td>\n",
              "      <td>0.839091</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-186b6a3f-ec66-4d2f-a57c-cf043019a8ec')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-186b6a3f-ec66-4d2f-a57c-cf043019a8ec button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-186b6a3f-ec66-4d2f-a57c-cf043019a8ec');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"        print(f\\\"Saved plot: {fig_path}\\\")\",\n  \"rows\": 1,\n  \"fields\": [\n    {\n      \"column\": \"Model\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 1,\n        \"samples\": [\n          \"RF + RandomOverSampler\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Accuracy\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 0.8358974358974359,\n        \"max\": 0.8358974358974359,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.8358974358974359\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Precision_weighted\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 0.8437833535815653,\n        \"max\": 0.8437833535815653,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.8437833535815653\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Recall_weighted\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 0.8358974358974359,\n        \"max\": 0.8358974358974359,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.8358974358974359\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"F1_weighted\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 0.8390905355056147,\n        \"max\": 0.8390905355056147,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.8390905355056147\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Confusion Matrix:\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "          negative  positive\n",
              "negative       127        53\n",
              "positive        75       525"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-581dcaf8-5f1f-4824-b6dd-42e757afb8d1\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>negative</th>\n",
              "      <th>positive</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>negative</th>\n",
              "      <td>127</td>\n",
              "      <td>53</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>positive</th>\n",
              "      <td>75</td>\n",
              "      <td>525</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-581dcaf8-5f1f-4824-b6dd-42e757afb8d1')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-581dcaf8-5f1f-4824-b6dd-42e757afb8d1 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-581dcaf8-5f1f-4824-b6dd-42e757afb8d1');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-eed053d4-f683-4d2a-b2ac-6e36d52d976d\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-eed053d4-f683-4d2a-b2ac-6e36d52d976d')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-eed053d4-f683-4d2a-b2ac-6e36d52d976d button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"        print(f\\\"Saved plot: {fig_path}\\\")\",\n  \"rows\": 2,\n  \"fields\": [\n    {\n      \"column\": \"negative\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 36,\n        \"min\": 75,\n        \"max\": 127,\n        \"num_unique_values\": 2,\n        \"samples\": [\n          75,\n          127\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"positive\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 333,\n        \"min\": 53,\n        \"max\": 525,\n        \"num_unique_values\": 2,\n        \"samples\": [\n          525,\n          53\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 2 Axes>"
            ],
            "image/png": "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WpTp+PT5Y4JVjnbv3o3q1aujefPmZeo/dOhQTJs2Da6urli0aBE8PT0RFhZW4nyY27dvo0ePHmjXrh0WLFgAExMTDBo0SPZLsnv37li0aBGA179g169fj8WLFysU/9WrV9GpUyfk5OQgJCQECxYswJdfflnsl87bDh06BG9vb6SkpGDGjBkICgrCyZMn4eHhUewPCQD06tULL168QFhYGHr16oXw8HDMnDmzzHF2794dEolE7hfpxo0bUatWLbi6uhbrf/fuXezcuROdOnXCwoULMWnSJFy+fBmenp6yZKd27doICQkBAAwfPhzr16/H+vXr8cUXX8iO8/TpU3Ts2BEuLi5YvHgxWrduXWJ8S5Ysgbm5OQICAmR/5FatWoWoqCgsW7YMNjY2ZX6tHyI/Px///vsvTExMStz/4sULPHnyRG4rLCz8pDGVRdH3yptxZ2RkYM2aNWjVqhV+/PFHzJgxA6mpqfD29i5xrtzGjRsxb948fP3115g9ezbu37+P7t27Iy8vT9YnKioKfn5+kEgkCAsLQ9euXTF48GD8888/cscSBAFffvklFi1ahA4dOmDhwoVwcnLCpEmTEBQUVOzcx48fx4QJExAQEIAZM2bg+vXr6NSpE37++WcsXboU//vf/zBp0iTExsbiq6++kj0vPj4eN2/eRJcuXWBoaFjiezNw4EAAr+doAUDv3r2RlZWFvXv3yvUrKp/36NFDlqitX78evr6+0NfXx48//oipU6fi2rVraNGiRbGfz/z8fHh7e8PCwgLz58+Hn58fLCwsoKOjg927dxdLct6m6OcVGRmJ5cuXY/To0ZgwYQKOHj2KXr164fvvv8eBAwcwefJkDB8+HLt378bEiROLPT8+Ph69e/dGx44dERYWBg0NDfTs2RPR0dHvjPOvv/7CF198gYyMDEyfPh2hoaFIS0tDmzZtcObMmWL9e/bsiezsbISGhpZYdqf/KCWPoP1npKenCwCELl26lKn/hQsXBADC0KFD5donTpwoABD++usvWZutra0AQDh27JisLSUlRZBKpcKECRNkbffu3SuxPFZa6WP69OnCm98iixYtEgAIqamppcZddI43y2guLi6ChYWF8PTpU1nbxYsXBTU1NWHgwIHFzvfVV1/JHbNbt26CmZlZqed883Xo6ekJgiAIPXr0ENq2bSsIgiAUFBQIVlZWwsyZ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RkaCtra24ODgIAwaNEj4559/ZH1K+/nKy8sTfvnlF6Fr166yz0FXV1do2LChMG/ePLllGT728yrtvSnpe6boe//gwYNC/fr1BalUKtSqVavYc0tbyf38+fNC9+7dBTMzM0EqlQq2trZCr169hJiYGFmf0n5nEQmCIEgEoRxmdxIREZUjOzs71K1bV7b4KlF54xwsIiIiIpExwSIiIiISGRMsIiIiIpFxDhYRERGRyDiCRURERCQyJlhEREREImOCRURERCSyz3Il95aV2yo7BCICEJt6Q9khEBGA/NxH7+8korwnd0U7lmalD7slmLJxBIuIiIhIZJ/lCBYREREpUWHB+/t85phgERERkbiEQmVHoHQsERIRERGJjCNYREREJK5CjmAxwSIiIiJRCSwRskRIREREJDaOYBEREZG4WCJkgkVEREQiY4mQJUIiIiIisXEEi4iIiMTFhUaZYBEREZHIWCJkiZCIiIhIbBzBIiIiInHxKkImWERERCQuLjTKEiERERF9JmbMmAGJRCK31apVS7b/1atXCAwMhJmZGfT19eHn54fk5GS5YyQkJMDX1xe6urqwsLDApEmTkJ+fr3AsHMEiIiIicSmxRFinTh0cOnRI9lhD4/9TnfHjx2Pv3r34448/YGRkhFGjRqF79+74+++/AQAFBQXw9fWFlZUVTp48icTERAwcOBCampoIDQ1VKA4mWERERCQuJZYINTQ0YGVlVaw9PT0da9euxcaNG9GmTRsAwLp161C7dm2cOnUKzZo1Q1RUFK5du4ZDhw7B0tISLi4umDVrFiZPnowZM2ZAS0urzHGwREhERESfjfj4eNjY2KB69erw9/dHQkICACAuLg55eXnw8vKS9a1VqxaqVauG2NhYAEBsbCzq1asHS0tLWR9vb29kZGTg6tWrCsXBESwiIiISl4gLjebk5CAnJ0euTSqVQiqVFuvbtGlThIeHw8nJCYmJiZg5cyZatmyJK1euICkpCVpaWjA2NpZ7jqWlJZKSkgAASUlJcslV0f6ifYrgCBYRERGJSygUbQsLC4ORkZHcFhYWVuJpO3bsiJ49e6J+/frw9vbGvn37kJaWht9//72c3wAmWERERKTCgoODkZ6eLrcFBweX6bnGxsaoWbMmbt++DSsrK+Tm5iItLU2uT3JysmzOlpWVVbGrCoselzSv612YYBEREZG4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IlEJHMFigkVEREQiY4LFEiERERGR2DiCRURERKJiiZAJFhEREYmNCRZLhERERERi4wgWERERiYolQiZYREREJDImWCwREhEREYmOI1hEREQkKo5gMcEiIiIisQkSZUegdCwREhEREYmMI1hEREQkKpYImWARERGRyIRClghZIiQiIiISGUewiIiISFQsETLBIiIiIpEJvIqQJUIiIiIisXEEi4iIiETFEiETLCIiIhIZryJkiZCIiIhIdBzBIiIiIlEJgrIjUD6OYBERERGJjCNYREREJCrOwWKCRURERCJjgsUSIREREZHoOIJFREREouIkdyZYREREJDKWCFkiJCIiIhIdR7CIiIhIVLzZcxkTrD///LPMB/zyyy8/OBgiIiKq+HgvwjImWF27di3TwSQSCQoKCj4mHiIiIqIKr0wJVmEhU1EiIiIqm0KWCDkHi4iIiMTFOVgfmGBlZWXh6NGjSEhIQG5urty+MWPGiBIYERERUUWlcIJ1/vx5+Pj4IDs7G1lZWTA1NcWTJ0+gq6sLCwsLJlhERET/cVwH6wPWwRo/fjw6d+6M58+fQ0dHB6dOncKDBw/g5uaG+fPnf4oYiYiIqAIRBPE2RaxYsQL169eHoaEhDA0N4e7ujv3798v2v3r1CoGBgTAzM4O+vj78/PyQnJwsd4yEhAT4+vrKBo4mTZqE/Px8hd8DhROsCxcuYMKECVBTU4O6ujpycnJQtWpVzJ07F999953CARARERGJoUqVKvjhhx8QFxeHf/75B23atEGXLl1w9epVAK8HiXbv3o0//vgDR48exePHj9G9e3fZ8wsKCuDr64vc3FycPHkSERERCA8Px7Rp0xSOReEES1NTE2pqr59mYWGBhIQEAICRkREePnyocABERET0eREKJaJtiujcuTN8fHxQo0YN1KxZE3PmzIG+vj5OnTqF9PR0rF27FgsXLkSbNm3g5uaGdevW4eTJkzh16hQAICoqCteuXcOGDRvg4uKCjh07YtasWfj555+LzTl/H4UTrIYNG+Ls2bMAAE9PT0ybNg2RkZEYN24c6tatq+jhiIiI6DNTKEhE2z5UQUEBNm/ejKysLLi7uyMuLg55eXnw8vKS9alVqxaqVauG2NhYAEBsbCzq1asHS0tLWR9vb29kZGTIRsHKSuEEKzQ0FNbW1gCAOXPmwMTEBCNHjkRqaipWr16t6OGIiIiISpWTk4OMjAy5LScnp9T+ly9fhr6+PqRSKUaMGIEdO3bA2dkZSUlJ0NLSgrGxsVx/S0tLJCUlAQCSkpLkkqui/UX7FKHwVYSNGjWSfW1hYYEDBw4oeggiIiL6jIm5DlZYWBhmzpwp1zZ9+nTMmDGjxP5OTk64cOEC0tPTsXXrVgQEBODo0aOixVNWXGiUiIiIRKXo1X/vEhwcjKCgILk2qVRaan8tLS04OjoCANzc3HD27FksWbIEvXv3Rm5uLtLS0uRGsZKTk2FlZQUAsLKywpkzZ+SOV3SVYVGfslI4wbK3t4dEUnpmevfuXUUPSURERFQiqVT6zoTqfQoLC5GTkwM3NzdoamoiJiYGfn5+AICbN28iISEB7u7uAAB3d3fMmTMHKSkpsLCwAABER0fD0NAQzs7OCp1X4QRr3Lhxco/z8vJw/vx5HDhwAJMmTVL0cERERPSZUda9CIODg9GxY0dUq1YNL168wMaNG3HkyBEcPHgQRkZGGDJkCIKCgmBqagpDQ0OMHj0a7u7uaNasGQCgffv2cHZ2xoABAzB37lwkJSXh+++/R2BgoMJJnsIJ1tixY0ts//nnn/HPP/8oejgiIiL6zCjrXoQpKSkYOHAgEhMTYWRkhPr16+PgwYNo164dAGDRokVQU1ODn58fcnJy4O3tjeXLl8uer66ujj179mDkyJFwd3eHnp4eAgICEBISonAsEkEQp1J69+5duLi4ICMjQ4zDfZSWldsqOwQiAhCbekPZIRARgPzcR+V6vvPVuoh2rIYJu0Q7VnkSbZL71q1bYWpqKtbhiIiIqIISc5J7RaVwgtWwYUO5Se6CICApKQmpqalyw2xERET036SsOViqROEEq0uXLnIJlpqaGszNzdGqVSvUqlVL1OCIiIiIKiKFE6zSFvZSJVczEpQdAhEBePn4uLJDICIlUNYkd1Wi8K1y1NXVkZKSUqz96dOnUFdXFyUoIiIiqrhU4V6EyqZwglXaRYc5OTnQ0tL66ICIiIiIKroylwiXLl0KAJBIJFizZg309fVl+woKCnDs2DHOwSIiIiLwIkIFEqxFixYBeD2CtXLlSrlyoJaWFuzs7LBy5UrxIyQiIqIKpSKX9sRS5gTr3r17AIDWrVtj+/btMDEx+WRBEREREVVkCl9FePjw4U8RBxEREX0meBXhB0xy9/Pzw48//lisfe7cuejZs6coQREREVHFVSjiVlEpnGAdO3YMPj4+xdo7duyIY8eOiRIUERERUUWmcIkwMzOzxOUYNDU1VeJGz0RERKRcAlgiVHgEq169etiyZUux9s2bN8PZ2VmUoIiIiKjiKhTE2yoqhUewpk6diu7du+POnTto06YNACAmJgYbN27E1q1bRQ+QiIiIqKJROMHq3Lkzdu7cidDQUGzduhU6Ojpo0KAB/vrrL5iamn6KGImIiKgCKWSJUPEECwB8fX3h6+sLAMjIyMCmTZswceJExMXFoaCgQNQAiYiIqGLhHKwPmINV5NixYwgICICNjQ0WLFiANm3a4NSpU2LGRkRERFQhKTSClZSUhPDwcKxduxYZGRno1asXcnJysHPnTk5wJyIiIgAVe/0qsZR5BKtz585wcnLCpUuXsHjxYjx+/BjLli37lLERERFRBSRAItpWUZV5BGv//v0YM2YMRo4ciRo1anzKmIiIiIgqtDKPYJ04cQIvXryAm5sbmjZtip9++glPnjz5lLERERFRBcRb5SiQYDVr1gy//PILEhMT8fXXX2Pz5s2wsbFBYWEhoqOj8eLFi08ZJxEREVUQTLA+4CpCPT09fPXVVzhx4gQuX76MCRMm4IcffoCFhQW+/PLLTxEjERERUYXywcs0AICTkxPmzp2Lf//9F5s2bRIrJiIiIqrAOMn9AxcafZu6ujq6du2Krl27inE4IiIiqsAKK25eJJqPGsEiIiIiouJEGcEiIiIiKsJ7ETLBIiIiIpEJyg5ABbBESERERCQyjmARERGRqCry+lViYYJFREREoiqUcA4WS4REREREIuMIFhEREYmKk9yZYBEREZHIOAeLJUIiIiIi0XEEi4iIiETFW+UwwSIiIiKRcSV3lgiJiIiIRMcRLCIiIhIVryJkgkVEREQi4xwslgiJiIiIRMcRLCIiIhIV18FigkVEREQi4xwslgiJiIiIRMcRLCIiIhIVJ7kzwSIiIiKRcQ4WS4REREREouMIFhEREYmKI1hMsIiIiEhkAudgsURIREREJDaOYBEREZGoWCJkgkVEREQiY4LFEiERERGR6DiCRURERKLirXKYYBEREZHIuJI7S4REREREouMIFhEREYmKk9yZYBEREZHImGCxREhEREQkOo5gERERkah4FSETLCIiIhIZryJkiZCIiIhIdBzBIiIi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J1y+fBk//vijiO8aEZHimGAR/Qfs2bMH+vr6yMvLQ2FhIfr164cZM2YgMDAQ9erVk5t3dfHiRdy+fRsGBgZyx3j16hXu3LmD9PR0JCYmomnTprJ9GhoaaNSoUbEyYZELFy5AXV0dnp6eZY759u3byM7ORrt27eTac3Nz0bBhQwDA9evX5eIAIEvGiIiUiQkW0X9A69atsWLFCmhpacHGxgYaGv//o6+npyfXNzMzE25uboiMjCx2HHNz8w86v46OjsLPyczMBADs3bsXlStXltsnlUo/KA4iovLCBIvoP0BPTw+Ojo5l6uvq6ootW7bAwsIChoaGJfaxtrbG6dOn8cUXXwAA8vPzERcXB1dX1xL716tXD4WFhTh69KisRPimohG0goICWZuzszOkUikSEhJKHfmqXbs2/vzzT7m2U6dOvf9FEhF9YpzkTkRy/P39UalSJXTp0gXHjx/HvXv3cOTIEYwZMwb//vsvAGDs2LH44YcfsHPnTty4cQP/+9//3rmGlZ2dHQICAvDVV19h586dsmP+/vvvAABbW1tIJBLs2bMHqampyMzMhIGBASZOnIjx48cjIiICd+7cwblz57Bs2TJEREQAAEaMGIH4+HhMmjQJN2/exMaNGxEeHv6p3yIiovdigkVEcnR1dXHs2DFUq1YN3bt3R+3atTFkyBC8evVKNqI1YcIEDBgwAAEBAXB3d4eBgQG6dev2zuOuWLECPXr0wP/+9z/UqlULw4YNQ1ZWFgCgcuXKmDlzJr799ltYWlpi1KhRAIBZs2Zh6tSpCAsLQ+3atdGhQwfs3bsX9vb2AIBq1aph27Zt2LlzJxo0aICVK1ciNDT0E747RERlIxFKm5VKRERERB+EI1hEREREImOCRURERCQyJlhEREREImOCRURERCQyJlhEREREImOCRURERCQyJlhEREREImOCRURERCQyJlhEREREImOCRURERCQyJlhEREREImOCRURERCSy/wNDB5dupZXntgAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Classification Report:\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "              precision    recall  f1-score     support\n",
              "negative       0.628713  0.705556  0.664921  180.000000\n",
              "positive       0.908304  0.875000  0.891341  600.000000\n",
              "accuracy       0.835897  0.835897  0.835897    0.835897\n",
              "macro avg      0.768509  0.790278  0.778131  780.000000\n",
              "weighted avg   0.843783  0.835897  0.839091  780.000000"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-bfb017a5-4553-4a8a-9875-d920364cd7f2\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>precision</th>\n",
              "      <th>recall</th>\n",
              "      <th>f1-score</th>\n",
              "      <th>support</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>negative</th>\n",
              "      <td>0.628713</td>\n",
              "      <td>0.705556</td>\n",
              "      <td>0.664921</td>\n",
              "      <td>180.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>positive</th>\n",
              "      <td>0.908304</td>\n",
              "      <td>0.875000</td>\n",
              "      <td>0.891341</td>\n",
              "      <td>600.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>accuracy</th>\n",
              "      <td>0.835897</td>\n",
              "      <td>0.835897</td>\n",
              "      <td>0.835897</td>\n",
              "      <td>0.835897</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>macro avg</th>\n",
              "      <td>0.768509</td>\n",
              "      <td>0.790278</td>\n",
              "      <td>0.778131</td>\n",
              "      <td>780.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>weighted avg</th>\n",
              "      <td>0.843783</td>\n",
              "      <td>0.835897</td>\n",
              "      <td>0.839091</td>\n",
              "      <td>780.000000</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-bfb017a5-4553-4a8a-9875-d920364cd7f2')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-bfb017a5-4553-4a8a-9875-d920364cd7f2 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-bfb017a5-4553-4a8a-9875-d920364cd7f2');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-6e041b69-ba5f-4e79-820f-1184b7f2f0d1\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-6e041b69-ba5f-4e79-820f-1184b7f2f0d1')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-6e041b69-ba5f-4e79-820f-1184b7f2f0d1 button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"        print(f\\\"Saved plot: {fig_path}\\\")\",\n  \"rows\": 5,\n  \"fields\": [\n    {\n      \"column\": \"precision\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.10632813386334562,\n        \"min\": 0.6287128712871287,\n        \"max\": 0.9083044982698962,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.9083044982698962,\n          0.8437833535815653,\n          0.8358974358974359\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"recall\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.06490973294677885,\n        \"min\": 0.7055555555555556,\n        \"max\": 0.875,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          0.875,\n          0.7902777777777779,\n          0.7055555555555556\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"f1-score\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.08641001694592639,\n        \"min\": 0.6649214659685864,\n        \"max\": 0.8913412563667232,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.8913412563667232,\n          0.8390905355056147,\n          0.8358974358974359\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"support\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 358.2241473503771,\n        \"min\": 0.8358974358974359,\n        \"max\": 780.0,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          600.0,\n          780.0,\n          180.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Saved metrics to: /content/drive/MyDrive/NLP assignmet/outputs/metrics_summary.csv\n",
            "Saved report to: /content/drive/MyDrive/NLP assignmet/outputs/classification_report_RF_plus_RandomOverSampler.csv\n",
            "Saved confusion matrix to: /content/drive/MyDrive/NLP assignmet/figures/confusion_matrix_RF_plus_RandomOverSampler.png\n",
            "\n",
            "----------------------------------------------------------------------\n",
            "RF + RandomUnderSampler\n",
            "After resampling: Counter({'negative': 419, 'positive': 419})\n",
            "Best params: {'max_depth': None, 'min_samples_leaf': 2, 'min_samples_split': 2, 'n_estimators': 200}\n",
            "CV best score (f1_weighted): 0.7985\n",
            "\n",
            "======================================================================\n",
            "RF + RandomUnderSampler\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "                         Accuracy  Precision_weighted  Recall_weighted  \\\n",
              "Model                                                                    \n",
              "RF + RandomUnderSampler  0.752564            0.837891         0.752564   \n",
              "\n",
              "                         F1_weighted  \n",
              "Model                                 \n",
              "RF + RandomUnderSampler     0.770999  "
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-a15355cf-e3d6-4a25-a0ff-c2d6e7f12aee\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Accuracy</th>\n",
              "      <th>Precision_weighted</th>\n",
              "      <th>Recall_weighted</th>\n",
              "      <th>F1_weighted</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Model</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>RF + RandomUnderSampler</th>\n",
              "      <td>0.752564</td>\n",
              "      <td>0.837891</td>\n",
              "      <td>0.752564</td>\n",
              "      <td>0.770999</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-a15355cf-e3d6-4a25-a0ff-c2d6e7f12aee')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-a15355cf-e3d6-4a25-a0ff-c2d6e7f12aee button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-a15355cf-e3d6-4a25-a0ff-c2d6e7f12aee');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"        print(f\\\"Saved plot: {fig_path}\\\")\",\n  \"rows\": 1,\n  \"fields\": [\n    {\n      \"column\": \"Model\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 1,\n        \"samples\": [\n          \"RF + RandomUnderSampler\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Accuracy\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 0.7525641025641026,\n        \"max\": 0.7525641025641026,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.7525641025641026\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Precision_weighted\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 0.8378909639317063,\n        \"max\": 0.8378909639317063,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.8378909639317063\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Recall_weighted\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 0.7525641025641026,\n        \"max\": 0.7525641025641026,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.7525641025641026\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"F1_weighted\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 0.7709987798990209,\n        \"max\": 0.7709987798990209,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.7709987798990209\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Confusion Matrix:\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "          negative  positive\n",
              "negative       155        25\n",
              "positive       168       432"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-21752be0-2f29-4d31-b5eb-0c8a6add3d5c\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>negative</th>\n",
              "      <th>positive</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>negative</th>\n",
              "      <td>155</td>\n",
              "      <td>25</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>positive</th>\n",
              "      <td>168</td>\n",
              "      <td>432</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-21752be0-2f29-4d31-b5eb-0c8a6add3d5c')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-21752be0-2f29-4d31-b5eb-0c8a6add3d5c button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-21752be0-2f29-4d31-b5eb-0c8a6add3d5c');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-a7a18cca-d0d4-4b0a-88e7-27540906b8fa\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-a7a18cca-d0d4-4b0a-88e7-27540906b8fa')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-a7a18cca-d0d4-4b0a-88e7-27540906b8fa button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"        print(f\\\"Saved plot: {fig_path}\\\")\",\n  \"rows\": 2,\n  \"fields\": [\n    {\n      \"column\": \"negative\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 9,\n        \"min\": 155,\n        \"max\": 168,\n        \"num_unique_values\": 2,\n        \"samples\": [\n          168,\n          155\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"positive\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 287,\n        \"min\": 25,\n        \"max\": 432,\n        \"num_unique_values\": 2,\n        \"samples\": [\n          432,\n          25\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 2 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Classification Report:\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "              precision    recall  f1-score     support\n",
              "negative       0.479876  0.861111  0.616302  180.000000\n",
              "positive       0.945295  0.720000  0.817408  600.000000\n",
              "accuracy       0.752564  0.752564  0.752564    0.752564\n",
              "macro avg      0.712586  0.790556  0.716855  780.000000\n",
              "weighted avg   0.837891  0.752564  0.770999  780.000000"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-d45a6d82-689e-4417-9843-e4cdcd9c454f\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>precision</th>\n",
              "      <th>recall</th>\n",
              "      <th>f1-score</th>\n",
              "      <th>support</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>negative</th>\n",
              "      <td>0.479876</td>\n",
              "      <td>0.861111</td>\n",
              "      <td>0.616302</td>\n",
              "      <td>180.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>positive</th>\n",
              "      <td>0.945295</td>\n",
              "      <td>0.720000</td>\n",
              "      <td>0.817408</td>\n",
              "      <td>600.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>accuracy</th>\n",
              "      <td>0.752564</td>\n",
              "      <td>0.752564</td>\n",
              "      <td>0.752564</td>\n",
              "      <td>0.752564</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>macro avg</th>\n",
              "      <td>0.712586</td>\n",
              "      <td>0.790556</td>\n",
              "      <td>0.716855</td>\n",
              "      <td>780.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>weighted avg</th>\n",
              "      <td>0.837891</td>\n",
              "      <td>0.752564</td>\n",
              "      <td>0.770999</td>\n",
              "      <td>780.000000</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-d45a6d82-689e-4417-9843-e4cdcd9c454f')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-d45a6d82-689e-4417-9843-e4cdcd9c454f button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-d45a6d82-689e-4417-9843-e4cdcd9c454f');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-9b78adcf-044b-4661-a3ae-faca30a5c26c\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-9b78adcf-044b-4661-a3ae-faca30a5c26c')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-9b78adcf-044b-4661-a3ae-faca30a5c26c button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"        print(f\\\"Saved plot: {fig_path}\\\")\",\n  \"rows\": 5,\n  \"fields\": [\n    {\n      \"column\": \"precision\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.17330858574819402,\n        \"min\": 0.47987616099071206,\n        \"max\": 0.9452954048140044,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.9452954048140044,\n          0.8378909639317063,\n          0.7525641025641026\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"recall\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.054055974322891276,\n        \"min\": 0.72,\n        \"max\": 0.8611111111111112,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          0.72,\n          0.7905555555555556,\n          0.8611111111111112\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"f1-score\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.07552103866027113,\n        \"min\": 0.6163021868787276,\n        \"max\": 0.8174077578051088,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.8174077578051088,\n          0.7709987798990209,\n          0.7525641025641026\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"support\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 358.2513269627144,\n        \"min\": 0.7525641025641026,\n        \"max\": 780.0,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          600.0,\n          780.0,\n          180.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Saved metrics to: /content/drive/MyDrive/NLP assignmet/outputs/metrics_summary.csv\n",
            "Saved report to: /content/drive/MyDrive/NLP assignmet/outputs/classification_report_RF_plus_RandomUnderSampler.csv\n",
            "Saved confusion matrix to: /content/drive/MyDrive/NLP assignmet/figures/confusion_matrix_RF_plus_RandomUnderSampler.png\n",
            "\n",
            "----------------------------------------------------------------------\n",
            "RF + SMOTE\n",
            "After resampling: Counter({'positive': 1399, 'negative': 1399})\n",
            "Best params: {'max_depth': None, 'min_samples_leaf': 1, 'min_samples_split': 2, 'n_estimators': 200}\n",
            "CV best score (f1_weighted): 0.9019\n",
            "\n",
            "======================================================================\n",
            "RF + SMOTE\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "            Accuracy  Precision_weighted  Recall_weighted  F1_weighted\n",
              "Model                                                                 \n",
              "RF + SMOTE  0.829487            0.832611         0.829487     0.830922"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-3ab00677-b5b9-479f-8f35-8d10b6c4bab4\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Accuracy</th>\n",
              "      <th>Precision_weighted</th>\n",
              "      <th>Recall_weighted</th>\n",
              "      <th>F1_weighted</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Model</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>RF + SMOTE</th>\n",
              "      <td>0.829487</td>\n",
              "      <td>0.832611</td>\n",
              "      <td>0.829487</td>\n",
              "      <td>0.830922</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-3ab00677-b5b9-479f-8f35-8d10b6c4bab4')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-3ab00677-b5b9-479f-8f35-8d10b6c4bab4 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-3ab00677-b5b9-479f-8f35-8d10b6c4bab4');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"        print(f\\\"Saved plot: {fig_path}\\\")\",\n  \"rows\": 1,\n  \"fields\": [\n    {\n      \"column\": \"Model\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 1,\n        \"samples\": [\n          \"RF + SMOTE\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Accuracy\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 0.8294871794871795,\n        \"max\": 0.8294871794871795,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.8294871794871795\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Precision_weighted\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 0.8326112691594925,\n        \"max\": 0.8326112691594925,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.8326112691594925\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Recall_weighted\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 0.8294871794871795,\n        \"max\": 0.8294871794871795,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.8294871794871795\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"F1_weighted\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 0.8309223491382367,\n        \"max\": 0.8309223491382367,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.8309223491382367\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Confusion Matrix:\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "          negative  positive\n",
              "negative       118        62\n",
              "positive        71       529"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-210fda13-9458-4916-b9d9-8bcc7d85258a\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>negative</th>\n",
              "      <th>positive</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>negative</th>\n",
              "      <td>118</td>\n",
              "      <td>62</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>positive</th>\n",
              "      <td>71</td>\n",
              "      <td>529</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-210fda13-9458-4916-b9d9-8bcc7d85258a')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-210fda13-9458-4916-b9d9-8bcc7d85258a button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-210fda13-9458-4916-b9d9-8bcc7d85258a');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-152657df-d864-4077-9e2f-ed03ef01cc83\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-152657df-d864-4077-9e2f-ed03ef01cc83')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-152657df-d864-4077-9e2f-ed03ef01cc83 button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"        print(f\\\"Saved plot: {fig_path}\\\")\",\n  \"rows\": 2,\n  \"fields\": [\n    {\n      \"column\": \"negative\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 33,\n        \"min\": 71,\n        \"max\": 118,\n        \"num_unique_values\": 2,\n        \"samples\": [\n          71,\n          118\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"positive\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 330,\n        \"min\": 62,\n        \"max\": 529,\n        \"num_unique_values\": 2,\n        \"samples\": [\n          529,\n          62\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 2 Axes>"
            ],
            "image/png": "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SQUKFJAkTZw4UXnz5lWfPn104cIFvf/++w6ODgAA2MVJnkX4+uuvy2KxaODAgda2W7duKSoqSvny5ZOPj4/atWunc+fO2bwvNjZWzZs3t95sN2zYMN2+fduuazvFDFa1atWsPwcFBWn9etbTAACA7Nu7d6/ee+89VaxY0aZ90KBBWrt2rT7++GP5+fmpb9++atu2rb755htJd+5Mb968uUJCQrRr1y7FxcWpS5cucnNz06RJk7J8faeYwQIAAA8RB99FmJiYqM6dO2vu3LnKmzevtf3q1auaP3++pk6dqvr166tq1apasGCBdu3apd277zwrd+PGjTp69Kg+/PBDVapUSU2bNtX48eP1zjvvZNin816cYgarcuXKslgy7mNksVjk6empkiVLqmvXrqpXr54DogMAAHZx8LMIo6Ki1Lx5czVs2FATJkywtu/bt08pKSlq2LChta1s2bIqUqSIYmJiVLNmTcXExKhChQoKDg629omIiFCfPn105MgRVa5cOUsxOMUMVpMmTfTLL7/I29tb9erVU7169eTj46OTJ0+qevXqiouLU8OGDfXZZ585OlQAAPAAJSUlKSEhweb46yPy/mz58uXav3+/oqOjM5yLj4+Xu7u7/P39bdqDg4MVHx9v7fPn5Cr9fPq5rHKKBOvixYsaMmSIvv76a02ZMkVTpkzRjh07NHToUF2/fl0bN27UyJEjNX78eEeHCgAA/o6JJcLo6Gj5+fnZHJklT5J05swZDRgwQEuWLJGnp+cD/tC2nCLB+uijj9SxY8cM7c8995w++ugjSVLHjh117NixBx0aAACwk5GWZtoxYsQIXb161eYYMSLzh43v27dP58+fV5UqVeTq6ipXV1dt375dM2fOlKurq4KDg5WcnKwrV67YvO/cuXMKCQmRJIWEhGS4qzD9dXqfrHCKBMvT01O7du3K0L5r1y5rBpqWlubwbBQAADxYmT0Sz8PDI9O+DRo00OHDh3XgwAHrUa1aNXXu3Nn6s5ubm7Zs2WJ9z7FjxxQbG6vw8DublIeHh+vw4cM6f/68tc+mTZvk6+ursLCwLMftFIvc+/Xrp5deekn79u1T9erVJd25vXLevHn673//K0nasGGDKlWq5MAoAQBAljhoo9E8efJk2KDc29tb+fLls7Z3795dgwcPVkBAgHx9fdWvXz+Fh4erZs2akqTGjRsr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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Classification Report:\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "              precision    recall  f1-score     support\n",
              "negative       0.624339  0.655556  0.639566  180.000000\n",
              "positive       0.895093  0.881667  0.888329  600.000000\n",
              "accuracy       0.829487  0.829487  0.829487    0.829487\n",
              "macro avg      0.759716  0.768611  0.763948  780.000000\n",
              "weighted avg   0.832611  0.829487  0.830922  780.000000"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-3bfde2c9-f977-4578-af61-717851bcd67d\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>precision</th>\n",
              "      <th>recall</th>\n",
              "      <th>f1-score</th>\n",
              "      <th>support</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>negative</th>\n",
              "      <td>0.624339</td>\n",
              "      <td>0.655556</td>\n",
              "      <td>0.639566</td>\n",
              "      <td>180.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>positive</th>\n",
              "      <td>0.895093</td>\n",
              "      <td>0.881667</td>\n",
              "      <td>0.888329</td>\n",
              "      <td>600.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>accuracy</th>\n",
              "      <td>0.829487</td>\n",
              "      <td>0.829487</td>\n",
              "      <td>0.829487</td>\n",
              "      <td>0.829487</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>macro avg</th>\n",
              "      <td>0.759716</td>\n",
              "      <td>0.768611</td>\n",
              "      <td>0.763948</td>\n",
              "      <td>780.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>weighted avg</th>\n",
              "      <td>0.832611</td>\n",
              "      <td>0.829487</td>\n",
              "      <td>0.830922</td>\n",
              "      <td>780.000000</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-3bfde2c9-f977-4578-af61-717851bcd67d')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-3bfde2c9-f977-4578-af61-717851bcd67d button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-3bfde2c9-f977-4578-af61-717851bcd67d');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-2bf35861-400e-4a6b-81f4-e1bd6a18e46e\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-2bf35861-400e-4a6b-81f4-e1bd6a18e46e')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-2bf35861-400e-4a6b-81f4-e1bd6a18e46e button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"        print(f\\\"Saved plot: {fig_path}\\\")\",\n  \"rows\": 5,\n  \"fields\": [\n    {\n      \"column\": \"precision\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.10339850622373652,\n        \"min\": 0.6243386243386243,\n        \"max\": 0.8950930626057529,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.8950930626057529,\n          0.8326112691594925,\n          0.8294871794871795\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"recall\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.0866172501945541,\n        \"min\": 0.6555555555555556,\n        \"max\": 0.8816666666666667,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          0.8816666666666667,\n          0.7686111111111111,\n          0.6555555555555556\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"f1-score\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.09514524163643522,\n        \"min\": 0.6395663956639567,\n        \"max\": 0.8883291351805206,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          0.8883291351805206,\n          0.8309223491382367,\n          0.8294871794871795\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"support\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 358.2262380253521,\n        \"min\": 0.8294871794871795,\n        \"max\": 780.0,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          600.0,\n          780.0,\n          180.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Saved metrics to: /content/drive/MyDrive/NLP assignmet/outputs/metrics_summary.csv\n",
            "Saved report to: /content/drive/MyDrive/NLP assignmet/outputs/classification_report_RF_plus_SMOTE.csv\n",
            "Saved confusion matrix to: /content/drive/MyDrive/NLP assignmet/figures/confusion_matrix_RF_plus_SMOTE.png\n",
            "\n",
            "✅ Final comparison table:\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "                         Accuracy  Precision_weighted  Recall_weighted  \\\n",
              "Model                                                                    \n",
              "RandomForest (Baseline)  0.857692            0.850994         0.857692   \n",
              "RF + RandomOverSampler   0.835897            0.843783         0.835897   \n",
              "RF + SMOTE               0.829487            0.832611         0.829487   \n",
              "RF + RandomUnderSampler  0.752564            0.837891         0.752564   \n",
              "\n",
              "                         F1_weighted  \n",
              "Model                                 \n",
              "RandomForest (Baseline)     0.847533  \n",
              "RF + RandomOverSampler      0.839091  \n",
              "RF + SMOTE                  0.830922  \n",
              "RF + RandomUnderSampler     0.770999  "
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-c87eb5eb-f898-424e-927d-810a166134e5\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Accuracy</th>\n",
              "      <th>Precision_weighted</th>\n",
              "      <th>Recall_weighted</th>\n",
              "      <th>F1_weighted</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Model</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>RandomForest (Baseline)</th>\n",
              "      <td>0.857692</td>\n",
              "      <td>0.850994</td>\n",
              "      <td>0.857692</td>\n",
              "      <td>0.847533</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>RF + RandomOverSampler</th>\n",
              "      <td>0.835897</td>\n",
              "      <td>0.843783</td>\n",
              "      <td>0.835897</td>\n",
              "      <td>0.839091</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>RF + SMOTE</th>\n",
              "      <td>0.829487</td>\n",
              "      <td>0.832611</td>\n",
              "      <td>0.829487</td>\n",
              "      <td>0.830922</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>RF + RandomUnderSampler</th>\n",
              "      <td>0.752564</td>\n",
              "      <td>0.837891</td>\n",
              "      <td>0.752564</td>\n",
              "      <td>0.770999</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-c87eb5eb-f898-424e-927d-810a166134e5')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-c87eb5eb-f898-424e-927d-810a166134e5 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-c87eb5eb-f898-424e-927d-810a166134e5');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-72d19b9e-f6e9-4ba9-9e9b-61dbae59d3e5\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-72d19b9e-f6e9-4ba9-9e9b-61dbae59d3e5')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-72d19b9e-f6e9-4ba9-9e9b-61dbae59d3e5 button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "  <div id=\"id_242a25dd-ea74-42f8-b22b-0abaab6132d3\">\n",
              "    <style>\n",
              "      .colab-df-generate {\n",
              "        background-color: #E8F0FE;\n",
              "        border: none;\n",
              "        border-radius: 50%;\n",
              "        cursor: pointer;\n",
              "        display: none;\n",
              "        fill: #1967D2;\n",
              "        height: 32px;\n",
              "        padding: 0 0 0 0;\n",
              "        width: 32px;\n",
              "      }\n",
              "\n",
              "      .colab-df-generate:hover {\n",
              "        background-color: #E2EBFA;\n",
              "        box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "        fill: #174EA6;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate {\n",
              "        background-color: #3B4455;\n",
              "        fill: #D2E3FC;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate:hover {\n",
              "        background-color: #434B5C;\n",
              "        box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "        filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "        fill: #FFFFFF;\n",
              "      }\n",
              "    </style>\n",
              "    <button class=\"colab-df-generate\" onclick=\"generateWithVariable('results_table')\"\n",
              "            title=\"Generate code using this dataframe.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "    <script>\n",
              "      (() => {\n",
              "      const buttonEl =\n",
              "        document.querySelector('#id_242a25dd-ea74-42f8-b22b-0abaab6132d3 button.colab-df-generate');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      buttonEl.onclick = () => {\n",
              "        google.colab.notebook.generateWithVariable('results_table');\n",
              "      }\n",
              "      })();\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "results_table",
              "summary": "{\n  \"name\": \"results_table\",\n  \"rows\": 4,\n  \"fields\": [\n    {\n      \"column\": \"Model\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 4,\n        \"samples\": [\n          \"RF + RandomOverSampler\",\n          \"RF + RandomUnderSampler\",\n          \"RandomForest (Baseline)\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Accuracy\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.04584864665587549,\n        \"min\": 0.7525641025641026,\n        \"max\": 0.8576923076923076,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          0.8358974358974359,\n          0.7525641025641026,\n          0.8576923076923076\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Precision_weighted\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.007900602096424741,\n        \"min\": 0.8326112691594925,\n        \"max\": 0.8509942001422122,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          0.8437833535815653,\n          0.8378909639317063,\n          0.8509942001422122\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Recall_weighted\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.04584864665587549,\n        \"min\": 0.7525641025641026,\n        \"max\": 0.8576923076923076,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          0.8358974358974359,\n          0.7525641025641026,\n          0.8576923076923076\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"F1_weighted\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.03475966697106564,\n        \"min\": 0.7709987798990209,\n        \"max\": 0.8475334774160361,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          0.8390905355056147,\n          0.7709987798990209,\n          0.8475334774160361\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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OZKSkr79RRARERH9ApSWwLm5uSk87t69+w9tz8vLC25ubqhevTrs7e0REBCA+Ph4uLu7AwB69OgBS0tL+Pr6AvjUn6169eooWbIkkpKSsG/fPqxfvx7Lli37oTiIiIiIlE1pCdyaNWt+6vZcXV0RHR2NSZMmITIyEra2tggJCZEGNkREREBD439d/OLj4zFw4EA8e/YM+vr6KFeuHDZs2ABXV9efGhcRERFRdlNaApcdPD09v3jJ9PPBCdOnT8f06dOVEBURERFR9spVo1CJiIiIcgImcERERERqhgkcERERkZphAkdERESkZpjAEREREakZJnBEREREaoYJHBEREZGaYQJHREREpGaYwBERERGpGSZwRERERGqGCRwRERGRmmECR0RERKRmmMARERERqRkmcERERERqhgkcERERkZphAkdERESkZpjAEREREakZtU7glixZAmtra+jp6cHBwQFnz579Yt0//vgD9erVg7GxMYyNjeHo6PjV+kRERES/KrVN4IKDg+Hl5QUfHx9cvHgRVapUgZOTE169epVl/fDwcHTt2hWHDx/GqVOnYGVlhWbNmuH58+dKjpyIiIjox6htAufv7w8PDw+4u7vDxsYGgYGBMDAwwOrVq7Os/+eff2LgwIGwtbVFuXLlsHLlSsjlcoSFhSk5ciIiIqIfo5YJXHJyMi5cuABHR0epTENDA46Ojjh16tQ3bSMhIQEpKSkwMTH5Yp2kpCTExcUp/BERERGpmlomcDExMUhLS4O5ublCubm5OSIjI79pG2PGjEHhwoUVksDP+fr6wsjISPqzsrL6obiJiIiIfga1TOB+1KxZs7B582bs3LkTenp6X6zn7e2N2NhY6e/p06dKjJKIiIgoa1qqDuC/KFiwIDQ1NREVFaVQHhUVBQsLi6+uO3fuXMyaNQsHDx5E5cqVv1pXV1cXurq6PxwvERER0c+kli1wOjo6sLOzUxiAkD4goVatWl9cz8/PD9OmTUNISAiqV6+ujFCJiIiIfjq1bIEDAC8vL7i5uaF69eqwt7dHQEAA4uPj4e7uDgDo0aMHLC0t4evrCwCYPXs2Jk2ahI0bN8La2lrqK2doaAhDQ0OVvQ4iIiKi76W2CZyrqyuio6MxadIkREZGwtbWFiEhIdLAhoiICGho/K+BcdmyZUhOTkbHjh0VtuPj44PJkycrM3QiIiKi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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Saved plot: /content/drive/MyDrive/NLP assignmet/figures/f1_comparison_baseline_vs_resampling.png\n"
          ]
        }
      ],
      "source": [
        "# =========================\n",
        "# 10) Resampling experiments (Over / Under / SMOTE) + comparison table + plot\n",
        "# =========================\n",
        "import os\n",
        "import numpy as np\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "from collections import Counter\n",
        "from imblearn.over_sampling import RandomOverSampler, SMOTE\n",
        "from imblearn.under_sampling import RandomUnderSampler\n",
        "\n",
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn.model_selection import GridSearchCV\n",
        "\n",
        "resamplers = [\n",
        "    (\"RF + RandomOverSampler\", RandomOverSampler(random_state=42)),\n",
        "    (\"RF + RandomUnderSampler\", RandomUnderSampler(random_state=42)),\n",
        "    (\"RF + SMOTE\", SMOTE(random_state=42)),\n",
        "]\n",
        "\n",
        "fast_param_grid = {\n",
        "    \"n_estimators\": [100, 200],\n",
        "    \"max_depth\": [None, 20],\n",
        "    \"min_samples_split\": [2, 5],\n",
        "    \"min_samples_leaf\": [1, 2],\n",
        "}\n",
        "\n",
        "def _fit_rf_with_grid(X_res, y_res):\n",
        "    rf = RandomForestClassifier(random_state=42, n_jobs=-1)\n",
        "    grid = GridSearchCV(\n",
        "        rf,\n",
        "        param_grid=fast_param_grid,\n",
        "        scoring=\"f1_weighted\",\n",
        "        cv=5,\n",
        "        n_jobs=-1,\n",
        "        verbose=0,\n",
        "    )\n",
        "    grid.fit(X_res, y_res)\n",
        "    return grid\n",
        "\n",
        "print(\"Train class distribution (before resampling):\", Counter(y_train))\n",
        "\n",
        "for model_name, sampler in resamplers:\n",
        "    X_res, y_res = sampler.fit_resample(X_train_vec, y_train)\n",
        "    print(\"\\n\" + \"-\" * 70)\n",
        "    print(model_name)\n",
        "    print(\"After resampling:\", Counter(y_res))\n",
        "\n",
        "    grid_rs = _fit_rf_with_grid(X_res, y_res)\n",
        "    best_model = grid_rs.best_estimator_\n",
        "\n",
        "    print(\"Best params:\", grid_rs.best_params_)\n",
        "    print(f\"CV best score (f1_weighted): {grid_rs.best_score_:.4f}\")\n",
        "\n",
        "    y_pred = best_model.predict(X_test_vec)\n",
        "    evaluate_model(model_name, y_test, y_pred, save_artifacts=True)\n",
        "\n",
        "results_table = get_results_table()\n",
        "print(\"\\n✅ Final comparison table:\")\n",
        "display(results_table)\n",
        "\n",
        "if not results_table.empty:\n",
        "    ax = results_table[\"F1_weighted\"].plot(kind=\"bar\")\n",
        "    ax.set_title(\"F1_weighted Comparison (Baseline vs Resampling)\")\n",
        "    ax.set_xlabel(\"Model\")\n",
        "    ax.set_ylabel(\"F1_weighted\")\n",
        "    plt.xticks(rotation=45, ha=\"right\")\n",
        "    plt.tight_layout()\n",
        "    plt.show()\n",
        "\n",
        "    fig_dir = None\n",
        "    if \"DIRS\" in globals() and isinstance(DIRS, dict) and \"figures\" in DIRS:\n",
        "        fig_dir = str(DIRS[\"figures\"])\n",
        "    elif os.getenv(\"NLP_PROJECT_DIR\"):\n",
        "        fig_dir = os.path.join(os.getenv(\"NLP_PROJECT_DIR\"), \"figures\")\n",
        "\n",
        "    if fig_dir:\n",
        "        os.makedirs(fig_dir, exist_ok=True)\n",
        "        fig_path = os.path.join(fig_dir, \"f1_comparison_baseline_vs_resampling.png\")\n",
        "        plt.figure()\n",
        "        results_table[\"F1_weighted\"].plot(kind=\"bar\")\n",
        "        plt.title(\"F1_weighted Comparison (Baseline vs Resampling)\")\n",
        "        plt.xlabel(\"Model\")\n",
        "        plt.ylabel(\"F1_weighted\")\n",
        "        plt.xticks(rotation=45, ha=\"right\")\n",
        "        plt.tight_layout()\n",
        "        plt.savefig(fig_path, dpi=200)\n",
        "        plt.close()\n",
        "        print(f\"Saved plot: {fig_path}\")\n"
      ],
      "id": "CTdvQOiIcK_9"
    },
    {
      "cell_type": "markdown",
      "source": [
        "Conclusion:\n",
        "\n",
        "## Conclusion\n",
        "\n",
        "This notebook satisfies the assignment requirements by completing the full NLP classification workflow.\n",
        "\n",
        "**(1) Apply data preprocessing:** the raw text was cleaned and normalized (lowercasing, removing URLs/HTML/special characters, tokenization, stopword removal, and normalization) to generate a `clean_text` feature.\n",
        "\n",
        "**(2) Split the dataset:** the dataset was split into training and testing sets using a stratified split to preserve the original class distribution.\n",
        "\n",
        "**(3) Apply feature representation methods:** TF-IDF was used to convert the preprocessed text into numerical feature vectors.\n",
        "\n",
        "**(4) Train and evaluate models:** a Random Forest classifier was trained and optimized using 5-fold cross-validation with hyperparameter tuning, and evaluation was performed using accuracy, precision, recall, weighted F1-score, classification reports, and confusion matrices. Additionally, resampling methods (RandomOverSampler, RandomUnderSampler, and SMOTE) were applied to assess the impact of class imbalance handling on model performance.\n",
        "\n",
        "The baseline Random Forest achieved **Accuracy = 0.858** and **weighted F1 = 0.848**, but minority-class performance was weaker (**negative recall = 0.533**). After imbalance handling, RandomOverSampler improved minority detection (**negative recall = 0.706**) with a moderate trade-off in overall accuracy (**0.836**), RandomUnderSampler achieved the highest minority recall (**0.861**) but reduced overall accuracy (**0.753**), and SMOTE produced intermediate results (**Accuracy = 0.829**, **negative recall = 0.656**). All results (metrics tables, reports, and confusion matrix plots) were saved to the project folders in Google Drive, and the trained model and TF-IDF vectorizer were saved under the `models/` directory.\n"
      ],
      "metadata": {
        "id": "l17haHX0g3ML"
      },
      "id": "l17haHX0g3ML"
    },
    {
      "cell_type": "code",
      "source": [],
      "metadata": {
        "id": "fBfebDqxpqCe"
      },
      "id": "fBfebDqxpqCe",
      "execution_count": null,
      "outputs": []
    }
  ],
  "metadata": {
    "colab": {
      "provenance": [],
      "gpuType": "T4"
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "name": "python",
      "version": "3.x"
    },
    "accelerator": "GPU"
  },
  "nbformat": 4,
  "nbformat_minor": 5
}