{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "eb9ca02b-a919-48ea-84c8-0f56b0901683",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from sklearn import svm\n",
    "\n",
    "sns.set_theme(style=\"whitegrid\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "93e9b980-edee-4f94-928e-3323be8185de",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Product_Name</th>\n",
       "      <th>Seller_Name</th>\n",
       "      <th>Overall_Rating</th>\n",
       "      <th>Overall_Review</th>\n",
       "      <th>Seller_Rating</th>\n",
       "      <th>Average_Rating</th>\n",
       "      <th>Product_Quality</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>RedmiNote6Pro</td>\n",
       "      <td>FlashstarCommerce</td>\n",
       "      <td>352708</td>\n",
       "      <td>32857</td>\n",
       "      <td>4.7</td>\n",
       "      <td>4.4</td>\n",
       "      <td>Excellent</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>RedmiNote6Pro</td>\n",
       "      <td>SuperComNet</td>\n",
       "      <td>352708</td>\n",
       "      <td>32857</td>\n",
       "      <td>4.3</td>\n",
       "      <td>4.1</td>\n",
       "      <td>Excellent</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>RedmiNote7</td>\n",
       "      <td>SuperComNet</td>\n",
       "      <td>10387</td>\n",
       "      <td>1057</td>\n",
       "      <td>4.3</td>\n",
       "      <td>4.6</td>\n",
       "      <td>Excellent</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>RedmiY1</td>\n",
       "      <td>samaymobiles</td>\n",
       "      <td>17421</td>\n",
       "      <td>1634</td>\n",
       "      <td>3.1</td>\n",
       "      <td>3.7</td>\n",
       "      <td>Good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>RedmiNote6Pro</td>\n",
       "      <td>FlashstarCommerce</td>\n",
       "      <td>72964</td>\n",
       "      <td>7073</td>\n",
       "      <td>4.3</td>\n",
       "      <td>4.3</td>\n",
       "      <td>Excellent</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     Product_Name         Seller_Name  Overall_Rating  Overall_Review  \\\n",
       "0   RedmiNote6Pro   FlashstarCommerce          352708           32857   \n",
       "1   RedmiNote6Pro         SuperComNet          352708           32857   \n",
       "2      RedmiNote7         SuperComNet           10387            1057   \n",
       "3         RedmiY1        samaymobiles           17421            1634   \n",
       "4   RedmiNote6Pro   FlashstarCommerce           72964            7073   \n",
       "\n",
       "   Seller_Rating  Average_Rating Product_Quality  \n",
       "0            4.7             4.4       Excellent  \n",
       "1            4.3             4.1       Excellent  \n",
       "2            4.3             4.6       Excellent  \n",
       "3            3.1             3.7            Good  \n",
       "4            4.3             4.3       Excellent  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_excel('data/mobile-info.xlsx') \n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "b61d5f63-19a8-443b-89cf-8530a3a3167c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj8AAAHKCAYAAADsGyoAAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAP7hJREFUeJzt3QucTPX/x/HPuq9ELi1SLlGkXCrEr5RUfr8f3aT6daFSRNFdVBTRRaXIrcgtIt0kRTfd61e51K8UKrVKwiKXZN33/3h//48zj5m1y+ya3ZnxfT0fj3nM7pkzc87MmZnzns/3+z0nJSsrK8sAAAA8USTeKwAAAFCYCD8AAMArhB8AAOAVwg8AAPAK4QcAAHiF8AMAALxC+AEAAF4h/AAAAK8QfoAElwjHIU2EdcDBuW2Sff2RnAg/wAHo1KmT1a1bN3SpV6+enXjiiXbRRRfZ5MmTbdeuXRHzt27d2u66666oH/+9996zPn367Hc+PaYeO7/Lyc3mzZutd+/etmDBgojnrEui0Gus56rX/aSTTrIvvvhir3m+/PLLiO0UbCvNf9lll9n7779foOsYq+0RbvXq1Xb99dfbypUr9zvvzp07berUqfaf//zHmjVrZieffLJ7j06YMMEyMzOtMJ7377//7l73GTNm5PreAgpLsUJbEnCQql+/vvXv39/9vXv3btu0aZN9/PHH9vDDD7sv9mHDhlmRIv//O2PkyJFWpkyZqB970qRJUc1344032lVXXWWxtmTJEnvttdesQ4cOoWnBc00Un3zyib366qvuNfjHP/7htkdu7rvvPjv++ONDFQdtKwUA3XfMmDF2xhlnWLL473//ax999NF+59Nz7Natmy1dutSuuOIK69mzp6WkpLj35lNPPeVeu2eeecaqVKlSoOublpZmL7zwglWvXj3X9xZQWAg/wAFSmGncuPFev3iPPvpoe/DBB+2NN96w888/303f1475QAQ7lMJQp04dSyQbN25016pkHHXUUftd9+zbqkmTJtaqVStXqUum8BOtAQMG2I8//mjPP/+8HXfccaHpp512ml1wwQV2+eWXW69evWzKlCkuFBWUEiVK7PXaA/FCsxdQQDp27GiVK1e26dOn59r8EQSjhg0bWvPmzd1OaM2aNe42NS3NmzfPXdRcoKaboPlGj3nmmWe6ZpvPPvtsr2avoKnjgQcesKZNm7odvJrP/vzzz302XwWPHywrqCbpOpg3+/22b99uo0aNsn/961/WoEEDa9OmjY0dO9b27NkTsay+ffu66Qoamk/NTd9+++0+X0NV0tRcc95557nXSPcdMmSIW6boeQev59lnn52v5jiF11q1atkff/wR8Rpkf41F16qeqNnolFNOsTvuuMNWrVoV8XiqsHTu3Nk1w+n+s2bNirg9e/NPIKdtOHPmTGvfvr01atTIPffHH3/cduzY4e579913u3nOOuusXJvUli9fbnPmzHGVn/DgE9DzvuWWW2z+/Pmh5kI9ttZP6xku+3tX76X777/fPccTTjjBNaf16NFjr/vl9Lxzem9pO+v29PT0iPupOqR1z/46AweC8AMUEDV1tWjRwu3gs/f9kYULF7o+DwoLanbQzkw7IO1Qg+YlVYp0UXNB0FwTNJ8pzKgZRzvZnLz55pv2/fff2+DBg928H374oXXt2tUFimhoeXp80XVOzV1qOurevbuNGzfOLrnkEnv66addCFJTX/b53377bdeHqV+/fvbEE0/YunXr7Kabbtrn+mi5aj5UsFETzZVXXmnPPfeca6bSsnV9ww03hF6T/DTJKUxox5y9epb9NVYQufbaa61q1apu/bW9vv76a9ePZv369e4+Cq4KvX/99Zc99thjLlgorAWBNi8UBrR8bQeti/r3qDqjQKsgFP689TrkJOjLpNcvN23btnUVH22baOm1V6BSGFRgHz9+vGtO+/zzz6PaBjm9txRwS5Ys6cJOOL3u+hzpdQdihWYvoABVqlTJVWDUNKO/s4efUqVKuZ2amgTksMMOs0WLFrmdi5pogv5B2ZsLVH1QyNiX8uXLu51S6dKlQ//rl7n6I+nX+v5o2UETl65zau7SY6nvicJAu3bt3LRTTz3VPa8nn3zS/ao/5phj3HQFQK1P8Jz+/vtvt3NX3w9VDrJbtmyZvfzyyy4M6jUKHlt9RxQatWw1UwWhRdWBI488cp/PSdWoIIjqWp2FR48e7aoYCla5vca6n0KMmopUfQmoKqTwoOeldVIfLYU5VbgqVKgQqq5ceuml+329s6+nqmkKLQo7AXVOnj17th166KFRPe+gmrWv16VcuXLuklvFJicZGRmWmprqtp+qiqJK2G+//eaCen7fW+ecc46rlCk0KpCpU7d+EChIArFE5QcohGG8OfWlUHOUdmbnnnuu26GqA6p2rkGH1H3JqQkjOwWDIPgEzRbFihVzTRyxoiY5PWb2IBb0cdLtgfAwJ2oSlNxGGwX3DUJVQP8XLVrUNZ3k1TXXXOOqDrqoKUnBRdUKVaNOP/30XF9jNcWsXbvWbatwCiCqCgXrqkCroBoEH9FyjjjiiDytp5anapLCQLjrrrvONRsVL17cYl2lDG+m3B9tO/WRUvOfQpMqQKpKffXVV66Sll8XX3yxC6TBCDBVfQ455JC9XgfgQFH5AQqQmjtUBVFFJzvtNFUhULVg4sSJ7m9Vh9SMtL++K+GhJjeHH374Xjs4VX80xDhWNJJIj6kwktOy1fwTUKUg+/pIbjtdPXb4YwUUtrTM8MeOlvqoBM2HWmdVPBRMcgqb4a9x0Kk6e/UumLZ48eLQOudUZcn+HPYnWF7FihXtQAShSwGldu3aOc6zZcsWt7y8BjRVaFTxU18cvb8VFvVePxDq96bXT6FHPw50rYCq5jAglqj8AAVEzSqqTqhpJHs4CLRs2dI1magao/4yxx57rGvm2F9H4LzsQANqjtmwYUPEDjV7f5utW7fmaRkKD3rM7I+jZhFRSMkvPbao4hJOzYhaZn4eW01Q6myti/pSVatWLaoRTkF4VT+l7LR+wbroOqd5wrdFsLx9vfZly5Z11+Ed1EXPW1WWaLdT0IFa/a3C/fzzz6GK27vvvusCaFD5CtYveyhVM2VAlRk1eam/mpof9T5XiD/Q0Vxatjp4z50717777jtXAWMoPAoC4QcoIOr7oB2jhhLn5JFHHnFf7GoaU1VE/XCCAxoGfTWC6kh+aCcZ3tFaO0D9r74ZoiYo9akIp2abcLmFtoBG+Ogx33rrrYjpwQgnNYvklx5b1MclnP5XcDiQx85PaFL1RqPzwq1YscL+97//uYAbVC7UCTq8g7P6Lmm+QND0Fz6PAl144NVhEhSkPvjgg4jlqTOw+j9p/mjeGzVr1nQdidWhPqhOiTqRq1lUgUVNrqqGBf3AgvULf28oLIUHOD1HhSN1WA+aL7VN1P9LomlCy+29pUMWqDqpz4eqVWo2BGKNZi/gAKnZQDvA4Etfv84//fRTF37U90W/jnOiHaWauzR8WPNph6ZRU6oy6LagAqAdjfql5PUYQQpe2jmpCU1DntVEoQ7DGjkj2tlpNJB2hKoQ6Ne8mhnCqWOtaKSYKjE6KnI4VQsUptRnRjtz3a7+L9rZ6hf8gRwTSPfVYwwfPtxVKdQMos7RGt2kZapqVlgUNG6//XY3wksdsLW9tJ21LnpdNLRdrr76atdJW31zgpFsQ4cOjeijo/nV5Kk+MjVq1HD/q//Mtm3bQk1tCga6/8CBA12lTttHVRC9FuqYrfsE1SFVbrQdcmvW0kgqBRndT524dSBIra86cGvbi9YxqPjotVXzlUYJquOxKj5abnjTrQ47IFo/BXg192l0mob5iypT+zuYZ27vLTW/aR31GdJIMqAgEH6AA6Rf1BruLNqBqIOmmq90cDkN/86NfnlrB6QjDAednFXN0I4w2NFoh6Xyv4aoa0elkU7R0o5O/WI0wkujyVQBuPPOO0M7Oe20NDpHR/jVMW0ULrSTC69UaaSWOvlqx6YjKWevfOixdGRk3U9VBDXTqM+GgkIQCA6EDhKpgPDKK6+4QKXnrxFkGtp9IFWx/FBFQttWz1evqXbuCmB6rkGfHlVrdDBBrbdCrebv0qWLO9ZOOAWLQYMGudCox1FHX237l156KTSPtr3CkJpFFaR1BGa9D3QJQopCgio3CsfqM5ZbyNC20WMr3OqxFNJ1QEgFLAVKraNeVwU7haoRI0a4x9XzVNOg3p/hwVjL1hB1hXdV/dTvSdMUBnUfVRD3d8DIfb23NJRfz0kHYQQKQkoWZ5UDAK8pfPzyyy+ucpUIFMbUyVnD/YGCQPgBACQEhR0176kKNG3atFBfKiDWaPYCACQE9UFTU6wOGEnwQUGi8gMAALzCUHcAAOAVwg8AAPAK4QcAAHiFDs/Z6IByGv0f6xMHAgCAgqMDxerYYzqI6P4QfrJR8OHQRwAAJJe87LsJP9kEFR+d+BAAACSHRYsWRT0vfX4AAIBXCD8AAMArhB8AAOAVwg8AAPAK4QcAAHiF8AMAALxC+AEAAF4h/AAAAK8QfgAAgFcIPwAAwCuEHwAA4BXCDwAA8ArhBwAAeIXwAwAAvEL4AQAAXiH8AAAArxB+YmTPnqxYPRQOENsCALAvxSyBjBkzxj799FObMmVKaFpGRoYNHjzYPv74YytatKiddtpp1rdvX6tQoUJonqlTp9qECRNs7dq1dsIJJ1i/fv2sfv36hbruRYqk2KjnP7OVGZsKdbmIVC2tnPW4/FReFgBA4ocfBZhhw4ZZkyZNQtN27Nhh1157rZUpU8YmT55sO3futHvuucf69OljzzzzjJvn1VdftUcffdQGDRrkAs/YsWOtc+fO9uabb0YEpMKg4LN85YZCXSYAAEiyZq81a9ZY9+7dbciQIVazZs2I29544w1buXKljRw50gWbRo0a2V133WXp6em2ZcsWN8/TTz9tHTt2tPPPP9/q1KljDz30kKWmptpLL70Up2cEAAASWdzDz/fff2/Fixe3WbNmuXATTk1gzZs3t0qVKoWmtWzZ0ubOneuqQevXr7fly5dbixYtQrcXK1bMVY/mz59fqM8DAAAkh7g3e7Vu3dpdcqIKj4LMqFGjbObMmbZr1y7X5+fOO++0smXL2urVq918VatWjbhfWlqaLV26NN/rlJWVZVu3bo16/pSUFFdtQuLIzMx02xEA4IesrCy3P06K8LMvatpS6FFl5/HHH7dNmzbZww8/bDfeeKPrFK0dnJQoUSLifiVLlrTt27fne7nqW7RkyZKo51fwKewO1tg3Befg/QEA8EOJbHkgKcOPmrBKly7tgo+axqRcuXJ2ySWX2KJFi6xUqVKhjtHhFHwOpBKjZan/ULSiTZooPLVq1aLyAwAeWbZsWdTzJnT4qVKlituBBcFHjjnmGHf9+++/2ymnnBIaDl+7du3QPPq/cuXK+V6uwoxCF5IXzZAA4JeUPBQi4t7heV+aNm3q+u5s27YtNO3HH3901zVq1LCKFSu6X/hffvll6Hb1C1qwYIG7LwAAQFKFn8suu8wd2PCOO+6wn376yRYuXOgOYKiKz/HHH+/m0XGAJk6c6I73o5KXjgOksHTxxRfHe/UBAEACSuhmLx2kUAc/VCdn9fNRR6azzz7bHesncOmll9pff/3lDpC4ceNGd4RnhaHCPsAhAABIDilZjAeOoI7U0qBBgzy/mPc8OYcjPMdZzWrl7aFb2sZ7NQAACbz/TuhmLwAAgFgj/AAAAK8QfgAAgFcIPwAAwCuEHwAA4BXCDwAA8ArhBwAAeIXwAwAAvEL4AQAAXiH8AAAArxB+AACAVwg/AADAK4QfAADgFcIPAADwCuEHAAB4hfADAAC8QvgBAABeIfwAAACvEH4AAIBXCD8AAMArhB8AAOAVwg8AAPAK4QcAAHiF8AMAALxC+AEAAF4h/AAAAK8QfgAAgFcIPwAAwCuEHwAA4BXCDwAA8ArhBwAAeCWhws+YMWOsU6dOud7er18/a926dcS0PXv22PDhw61ly5bWuHFj69q1q61YsaIQ1hYAACSjhAk/U6dOtWHDhuV6+9y5c+2ll17aa/ro0aNt2rRpNmjQIJs+fboLQ126dLEdO3YU8BoDAIBkFPfws2bNGuvevbsNGTLEatasmeM8GRkZdu+991qzZs0ipivgTJgwwW6++WZr1aqV1atXz4YOHWqrV6+2d955p5CeAQAASCZxDz/ff/+9FS9e3GbNmmWNGjXa6/asrCy766677IILLtgr/CxdutT+/vtva9GiRWha2bJlrX79+jZ//vxCWX8AAJBc4h5+1IdnxIgRdtRRR+V4+6RJk2zt2rV2++2373WbKjxStWrViOlpaWmh2wAAAMIVswSmys7IkSNdf6ASJUrsdXtmZqa7zn5byZIlbdOmTflerqpNW7dujXr+lJQUS01NzffyEHt6b2g7AgD8kJWV5fbHSR1+tm/fbr169bIbbrjB9eXJSalSpUJ9f4K/g/seSBjZuXOnLVmyJOr5tSw1tSFxpKenh8IxAMAPJXIolCRV+Pnmm2/sp59+cpWfUaNGhULJrl277MQTT7Rnnnkm1NylDtHVq1cP3Vf/161bN9/LVh+kOnXqRD1/tEkThadWrVpUfgDAI8uWLYt63oQNPw0bNtxrxNaUKVPcNF1XrlzZihQpYmXKlLEvv/wyFH42b95sixcvto4dO+Z72QozpUuXPuDngPihGRIA/JKSh0JEwoYfNWPVqFEjYlq5cuWsWLFiEdMVcjRMvkKFClatWjV77LHHrEqVKtamTZs4rDUAAEh0CRt+oqVj/KgpTEd/3rZtmzVt2tTGjx/vmq4AAACyS8liSEyERYsWuesGDRpYXt3z5BxbvnJDnu+H2KlZrbw9dEtbXlIA8MyiPOy/436cHwAAgMJE+AEAAF4h/AAAAK8QfgAAgFcIPwAAwCuEHwAA4BXCDwAA8ArhBwAAeIXwAwAAvEL4AQAAXiH8AAAArxB+AACAVwg/AADAK4QfAADgFcIPAADwCuEHyIc9e7J43RIE2wJAXhXL8z0AWJEiKTbq+c9sZcYmXo04qpZWznpcfirbAECeEH6AfFLwWb5yA68fACQZmr0AAIBXCD8AAMArhB8AAOAVwg8AAPAK4QcAAHiF8AMAALxC+AEAAF4h/AAAAK8QfgAAgFcIPwAAwCuEHwAA4BXCDwAA8ArhBwAAeCWhws+YMWOsU6dOEdPef/9969Chg5144onWunVre+SRR2zbtm2h27dv327333+/tWjRws1zxx132J9//hmHtQcAAMkgYcLP1KlTbdiwYRHTFixYYD179rRzzjnHXn31Vevfv7/NmTPHhZ3AgAED7NNPP7URI0bYs88+a7/88ovdfPPNcXgGAAAgGcQ9/KxZs8a6d+9uQ4YMsZo1a0bcNn36dDvllFPc7brtjDPOsNtuu81ef/1127Fjh7vvzJkzrV+/ftakSRNr2LChPfHEEzZ//nz7+uuv4/acAABA4op7+Pn++++tePHiNmvWLGvUqFHEbddee6316dMnYlqRIkVs586dtmXLFlu4cKGb1rx589DttWrVssqVK7sABAAAkF0xizP149ElJ/Xr14/4X6Fn0qRJdsIJJ1iFChVc5ad8+fJWsmTJiPnS0tJs9erVBbreAAAgOcU9/ERr165d1rt3b/vpp59c/yDJzMy0EiVK7DWvwpA6QudXVlaWbd26Ner5U1JSLDU1Nd/LQ+zpvaHtWBDY3n5tbwDJQd8B+n4+aMKPmrhuvfVWmzdvno0cOdL17ZFSpUq5vj/ZKfgcSBhRhWnJkiVRz69lZa9SIb7S09PdDrEgsL392t4AkkdOBZGkDD8ZGRnWtWtXW7lypY0fP96aNm0auq1KlSq2ceNGF4DCn7Duo34/+aU+SHXq1Il6/miTJgqP+n4VZOUH/mxvAMlh2bJlUc+b0OFn06ZNdvXVV7vKj5q66tatG3H7ySefbHv27HEdn3Wcn+AXoPoChYek/OzcSpcufcDrj/ihGdIvbG8AKXn4YZrQ4efhhx+2FStW2Lhx41wH57Vr14Zu0/+q7rRr184NdX/ooYfcF6COBdSsWTNr3LhxXNcdAAAkpoQNP7t373YHNFT/G1V/snvvvffsyCOPtEGDBrngo4Mhyumnn+7CEAAAQMKHn8GDB4f+Llq0qH377bf7vY+apx544AF3AQAASPiDHAIAABQmwg8AAPAK4QcAAHiF8AMAALxC+AEAAF4h/AAAAK8QfgAAgFcIPwAAwCuEHwAA4BXCDwAA8ArhBwAAeIXwAwAAvEL4AQAAXiH8AAAArxB+AACAVwg/AADAK4QfAADgFcIPAADwCuEHAAB4hfADAAC8QvgBAABeIfwAAACvEH4AAIBXCD8AAMArhB8AAOAVwg8AAPAK4QcA9mPPnixeowTBtkAsFIvJowDAQaxIkRQb9fxntjJjU7xXxWvV0spZj8tPjfdq4CBA+AGAKCj4LF+5gdcKOAjQ7AUAALxC+AEAAF4h/AAAAK8kVPgZM2aMderUKWLakiVLrGPHjta4cWNr3bq1TZ48OeL2PXv22PDhw61ly5Zunq5du9qKFSsKec0BAECySJjwM3XqVBs2bFjEtA0bNljnzp2tevXq9sorr1iPHj1syJAh7u/A6NGjbdq0aTZo0CCbPn26C0NdunSxHTt2xOFZAACARBf30V5r1qyx/v3725dffmk1a9aMuO3FF1+04sWL28CBA61YsWJWu3Zt+/XXX23s2LHWoUMHF3AmTJhgvXr1slatWrn7DB061FWB3nnnHTv33HPj9KwAAECiinvl5/vvv3cBZ9asWdaoUaOI2xYsWGDNmjVzwSfQvHlzW758ua1bt86WLl1qf//9t7Vo0SJ0e9myZa1+/fo2f/78Qn0eAAAgOcS98qN+PLrkZPXq1XbsscdGTEtLS3PXq1atcrdL1apV95onuC0/srKybOvWrVHPn5KSYqmpqfleHmIvMzPTbceCwPZOPGxvvxTk9kby0ntC389JEX72Zdu2bVaiRImIaSVLlnTX27dvdx8AyWmeTZvyfyTWnTt3uo7W0VLwUbUJiSM9PT30/og1tnfiYXv7pSC3N5Jb9jyQlOGnVKlSe3VcVuiR0qVLu9tF8wR/B/McSCVGzXB16tSJev5okyYKT61atQq08oPEwvb2S0FubySvZcuWRT1vQoefKlWqWEZGRsS04P/KlSvbrl27QtM0Iix8nrp16x7Qzk3hCsmLZki/sL39wvbGgf4wjXuH531p2rSpLVy40Hbv3h2a9sUXX7jUX7FiRatXr56VKVPGjRQLbN682RYvXuzuCwAAkFThR8PZt2zZYn379nXlrBkzZtikSZOsW7duobY9HQBRx/5577333Oiv2267zVWM2rRpE+/VBwAACSihm71U3Rk3bpw9+OCD1r59ezv88MOtd+/e7u/AzTff7Jq/+vXr5zpIq+Izfvx4128HAAAgocPP4MGD95rWsGFDe+GFF3K9T9GiRe3OO+90FwAAgKRu9gIAAIg1wg8AAPAK4QcAAHiF8AMAALxC+AEAAF4h/AAAAK/kK/zMnz/f/v777xxv0xGWZ8+efaDrBQAAkDjh56qrrrKff/45x9t0aom77777QNcLAAAgvgc57NOnj61atcr9rbPpDhgwwJ1XK7vly5dbpUqVYruWAAAUkj17sqxIkehPkonk2xZRh59//vOfNnHixIhpCkHZj7bcuHFju/LKK2O3hgAAFCLtbEc9/5mtzNjE6x5H1dLKWY/LTy2Qx446/LRu3dpdpFOnTq7yU7t27QJZKQAA4knBZ/nKDWyEg1S+zu01ZcqU2K8JAABAooYfnT39qaeesg8++MAyMzNtz549EbenpKTY3LlzY7WOAAAA8Q0/Dz74oL388svWrFkzO+6446xIEQ4XBAAADuLw884779htt91m119/fezXCAAAoADlq2Szc+dOa9iwYezXBgAAIBHDz2mnnWYff/xx7NcGAAAgEZu92rZta/3797c///zTGjVqZKmpqXvNc+GFF8Zi/QAAAOIffm699VZ3PXPmTHfJTqO9CD8AAOCgCT/vvfde7NcEAAAgUcNPtWrVYr8mAAAAiRp+Ro4cud95evbsmZ+HBgAASK7wozO9p6WlEX4AAMDBE36WLl2617StW7faggUL3AlP77333lisGwAAQMzF7LwUpUuXttNPP9169Ohhjz76aKweFgAAIKZiflKuI444wn7++edYPywAAED8mr1ykpWVZatXr7Zx48YxGgwAABxc4adevXruQIa5hSCavQAAwEEVftSvJ6fwo5FerVq1spo1a8Zi3QAAABIj/Nx0002xXxMAAIBE7vOjk5pOmDDB5s2bZ5s3b7by5ctbkyZN7JprrrGKFSvGdi0BAADiOdpLHZvbt29vzz77rJUsWdLq169vxYoVs4kTJ7oTmq5Zs8ZiadeuXfbkk0/amWeeaSeeeKJdeeWV9r///S90+5IlS6xjx47WuHFja926tU2ePDmmywcAAJ5Xfh577DEXdubMmWNHHXVUaPqKFSvs2muvtaFDh9rgwYNjtpJPPfWUvfTSS+4xtbxnnnnGunTp4pZfvHhx69y5sws9999/vwtFuj7kkEOsQ4cOMVsHAADgcfj59NNP7Z577okIPqL/C+Igh3PnzrVzzz3XTjvtNPf/XXfd5cKQgk56eroLQAMHDnSBrHbt2vbrr7/a2LFjCT8AACA2zV67d+92fXxyUqFCBduyZYvFkvoQffDBB/b777+7Zb/wwgtWokQJN+Rep9Ro1qyZCz6B5s2b2/Lly23dunUxXQ8AAOBp5adu3br2+uuvu9NZZPfaa6/Zsccea7HUt29fu+WWW+yss86yokWLWpEiRWzEiBFWvXp11/8o+/J0YlVZtWqVVapUKc/L07GKdK6yaGnYf2pqap6Xg4KTmZnptmNBYHsnHra3X9jefsmM8vtc8+R2DMKYhJ8bb7zRrrvuOtu0aZO1bdvWDj/8cFu7dq3Nnj3bNYkNHz7cYmnZsmV26KGH2qhRo6xy5cquyatXr1723HPP2bZt21wVKJw6Ycv27dvztbydO3e6TtTRUvBRp28kDjWH6gNTENjeiYft7Re2t1/S8/B9nj0PxDT8nHrqqa7z8ZAhQ+zjjz8OTVcIevjhh+2cc86xWFH15o477rBJkya5ofTSoEEDF4hU/SlVqpTt2LEj4j5B6NHJVvNDfYjq1KkT9fzRJk0Unlq1ahVo5QeJhe3tF7a3X2pF+X2uXFDgx/nJyMhw1Y4+ffq4CtDSpUtdGIl1f59vvvnGVWIUeMI1atTIBS+dSFXrkn3dRFWi/O7c8huckBhohvQL29svbG+/pEbZrSQvP0zz1eFZBzccNmyYO42FRleddNJJ7hg87dq1cxUhNUvFSpUqVdz1Dz/8EDH9xx9/dMtv2rSpLVy40HWEDnzxxRcuKXKwRQAAEJPwM336dLv11lvdcPdA1apVrV+/ftazZ0/XRBUrDRs2tJNPPtlVmBRqNIpLwevzzz+366+/3g1nV7VJnaJV8poxY4Zbfrdu3WK2DgAAwPPwoyM4Z2+GCm+O0pD0WNHILh3kUMPX7777brvoootcCFLA0bJU3Rk3bpzrEKWjTo8cOdJ69+7t/gYAAIhJn59q1aq5ykuLFi32um3+/PmhpqpYKVeunPXv399dcqsO6dg/AAAABRJ+Lr30UneKC3VEPvvss131RSc61YEIdX4vjc4CAAA4aMKPztyupq8pU6ZE9O/RAQivvvpqd64tAACARJTvoe7qgKyDHer8Whs3brSyZcu65qfcTnsBAACQ1OFHdNTlli1bxm5tAAAAEnG0FwAAQLIi/AAAAK8QfgAAgFcIPwAAwCuEHwAA4BXCDwAA8ArhBwAAeIXwAwAAvEL4AQAAXiH8AAAArxB+AACAVwg/AADAK4QfAADgFcIPAADwCuEHAAB4hfADAAC8QvgBAABeIfwAAACvEH4AAIBXCD8AAMArhB8AAOAVwg8AAPAK4QcAAHiF8AMAALxC+AEAAF4h/AAAAK8QfgAAgFeSJvzMnDnT2rZtaw0aNLB27drZm2++Gbrt999/t27dutlJJ51kp512mg0bNsx2794d1/UFAACJKSnCz2uvvWZ9+/a1K6+80mbPnm3nnnuu3X777fb111/bzp077brrrnPzTZ8+3QYMGGDPP/+8jRo1Kt6rDQAAElAxS3BZWVn25JNP2lVXXeXCj9xwww22YMECmzdvnq1cudL++OMPe/HFF61cuXJ27LHH2vr16+3RRx+17t27W4kSJeL9FAAAQAJJ+MpPenq6CzjnnXdexPTx48e7pi6FoOOPP94Fn0Dz5s1ty5YttmTJkjisMQAASGTFkiH8yNatW13z1uLFi+3II4901Z/WrVvb6tWrrUqVKhH3SUtLc9erVq2yRo0a5avapOVFKyUlxVJTU/O8HBSczMxMtx0LAts78bC9/cL29ktmlN/nmkffzwdF+FEFR/r06WM9e/a0Xr162dtvv2033nijTZw40bZt22Zly5aNuE/JkiXd9fbt2/O1TPUjykvVSMGnfv36+VoWCi406wNTENjeiYft7Re2t1/S8/B9Hm1Xl4QPP8WLF3fXqvq0b9/e/X3ccce5CpDCT6lSpWzHjh0R9wlCT+nSpfO9zDp16kQ9f7RJE4WnVq1aBVr5QWJhe/uF7e2XWlF+ny9btizqx0z48FO5cmV3rY7M4RROPvzwQ2vWrJn9+OOPEbdlZGRE3Dc/O7f8BickBpoh/cL29gvb2y+pUXYrycsP04Tv8KzOzIcccoh98803EdMVeKpXr25NmzZ1VaCgeUy++OILd5969erFYY0BAEAiS/jwo2atLl26uOP2vPHGG/bbb7/ZU089ZZ999pl17tzZzj77bDv88MPt1ltvtaVLl9rcuXPtiSeesGuvvZZh7gAAIPmavUSdm1X2Gjp0qK1Zs8Zq165tI0aMsFNOOcXdPm7cOLv//vvt0ksvdUPer7jiCncfAACApAw/oiqPLjmpUaOGTZgwodDXCQAAJJ+Eb/YCAACIJcIPAADwCuEHAAB4hfADAAC8QvgBAABeIfwAAACvEH4AAIBXCD8AAMArhB8AAOAVwg8AAPAK4QcAAHiF8AMAALxC+AEAAF4h/AAAAK8QfgAAgFcIPwAAwCuEHwAA4BXCDwAA8ArhBwAAeIXwAwAAvEL4AQAAXiH8AAAArxB+AACAVwg/AADAK4QfAADgFcIPAADwCuEHAAB4hfADAAC8QvgBAABeIfwAAACvEH4AAIBXkir8pKen24knnmgzZswITVuyZIl17NjRGjdubK1bt7bJkyfHdR0BAEBiS5rws3PnTuvVq5dt3bo1NG3Dhg3WuXNnq169ur3yyivWo0cPGzJkiPsbAAAgJ8UsSYwYMcLKlCkTMe3FF1+04sWL28CBA61YsWJWu3Zt+/XXX23s2LHWoUOHuK0rAABIXElR+Zk/f7698MILNnjw4IjpCxYssGbNmrngE2jevLktX77c1q1bF4c1BQAAiS7hw8/mzZutd+/e1q9fP6tatWrEbatXr7YqVapETEtLS3PXq1atKtT1BAAAySHhm70GDBjgOjmfd955e922bds2K1GiRMS0kiVLuuvt27fne5lZWVkRfYv2JyUlxVJTU/O9PMReZmam244Fge2deNjefmF7+yUzyu9zzaPv56QPPzNnznRNW6+//nqOt5cqVcp27NgRMS0IPaVLlz6gztUaRRYtBZ/69evne3komJGB+sAUBLZ34mF7+4Xt7Zf0PHyfZy+IJGX40ait9evXW6tWrSKm9+/f3+bMmeOavDIyMiJuC/6vXLlyvperTtR16tSJev5okyYKT61atQq08oPEwvb2C9vbL7Wi/D5ftmxZ1I+Z0OFHw9bVtBWuTZs2dvPNN9v5559vr732mk2fPt12795tRYsWdbd/8cUX7oWqWLHiAe3cDqRyhPijGdIvbG+/sL39khplt5K8/DBN6A7Pqt7UqFEj4iIKNrpNw9m3bNliffv2dYlPBz+cNGmSdevWLd6rDgAAElRCh5/9UQgaN26caw9s3769jRw50o0M098AAABJ1+yVkx9++CHi/4YNG7pjAAEAABz0lR8AAIC8IvwAAACvEH4AAIBXCD8AAMArhB8AAOAVwg8AAPAK4QcAAHiF8AMAALxC+AEAAF4h/AAAAK8QfgAAgFcIPwAAwCuEHwAA4BXCDwAA8ArhBwAAeIXwAwAAvEL4AQAAXiH8AAAArxB+AACAVwg/AADAK4QfAADgFcIPAADwCuEHAAB4hfADAAC8QvgBAABeIfwAAACvEH4AAIBXCD8AAMArhB8AAOAVwg8AAPAK4QcAAHglKcLPxo0b7b777rPTTz/dTjrpJLv88sttwYIFods///xzu+iii6xRo0b2r3/9y2bPnh3X9QUAAIkrKcLP7bffbl9//bU98cQT9sorr9hxxx1n1113nf3yyy/2888/W7du3axly5Y2Y8YMu+SSS6x3794uEAEAAGRXzBLcr7/+ap999plNmzbNTj75ZDft3nvvtU8++cRef/11W79+vdWtW9duu+02d1vt2rVt8eLFNm7cOGvRokWc1x4AACSahK/8lC9f3saOHWsNGjQITUtJSXGXzZs3u+av7CGnefPmtnDhQsvKyorDGgMAgESW8OGnbNmydsYZZ1iJEiVC095++21XEVJT1+rVq61KlSoR90lLS7PMzEzbsGFDHNYYAAAksoRv9sruq6++srvvvtvatGljrVq1sm3btkUEIwn+37FjR76WoYrR1q1bo55fVajU1NR8LQsFQ+G3oCp/bO/Ew/b2C9vbL5lRfp9rHn0/H3ThZ+7cudarVy834mvIkCFuWsmSJfcKOcH/+Q0kO3futCVLlkQ9v5ZTv379fC0LBSM9Pd19YAoC2zvxsL39wvb2S3oevs+zF0OSPvw899xz9uCDD7qh7I888kjoCVatWtUyMjIi5tX/pUuXtkMPPTRfyypevLjVqVMn6vmjTZooPLVq1SrQyg8SC9vbL2xvv9SK8vt82bJlUT9mUoQfjfQaNGiQderUyfr27Rux82nSpInNmzcvYv4vvvjCVYeKFMlflyY9vsITkhfNkH5he/uF7e2X1ChbcfLyw7RYMpS7HnroITvnnHPc8XzWrVsXuq1UqVIuELVv3941g+n6o48+srfeessNdQcAAEi68KORXeqD8+6777pLOIWdwYMH2+jRo+2xxx6zZ5991o488kj3N8f4AQAASRl+unfv7i77otNe6AIAAJD0x/kBAACIJcIPAADwCuEHAAB4hfADAAC8QvgBAABeIfwAAACvEH4AAIBXCD8AAMArhB8AAOAVwg8AAPAK4QcAAHiF8AMAALxC+AEAAF4h/AAAAK8QfgAAgFcIPwAAwCuEHwAA4BXCDwAA8ArhBwAAeIXwAwAAvEL4AQAAXiH8AAAArxB+AACAVwg/AADAK4QfAADgFcIPAADwCuEHAAB4hfADAAC8QvgBAABeIfwAAACvEH4AAIBXCD8AAMArB0X42bNnjw0fPtxatmxpjRs3tq5du9qKFSvivVoAACABHRThZ/To0TZt2jQbNGiQTZ8+3YWhLl262I4dO+K9agAAIMEkffhRwJkwYYLdfPPN1qpVK6tXr54NHTrUVq9ebe+88068Vw8AACSYpA8/S5cutb///ttatGgRmla2bFmrX7++zZ8/P67rBgAAEk8xS3Kq8EjVqlUjpqelpYVuy4udO3daVlaWffvtt3m6X0pKirVrdrjt3lMxz8tE7BQtUsQWLVrktmFBYnsnBra3X9jefimax+9z7b/13exF+MnMzHTXJUqUiJhesmRJ27RpU54fL3jhon0Bw5UtUyrP90HByM/2yyu2d+Jge/uF7e2XlCi/zzWfN+GnVKlSob4/wd+yfft2S01NzfPjnXjiiTFdPwAAkFiSvs9P0NyVkZERMV3/V65cOU5rBQAAElXShx+N7ipTpox9+eWXoWmbN2+2xYsXW9OmTeO6bgAAIPEkfbOX+vp07NjRhgwZYhUqVLBq1arZY489ZlWqVLE2bdrEe/UAAECCSfrwIzrGz65du6xfv362bds2V/EZP368FS9ePN6rBgAAEkxKVkGPCQYAAEggSd/nBwAAIC8IPwAAwCuEHwAA4BXCDwAA8ArhBwAAeIXwAwAAvEL4SVCdOnWyunXr5nr5888/C3T5v//+u1tOcOTsu+66y61TLP3000/24YcfxvQxfaKjVMyYMcNtl+bNm9sJJ5xg55xzjj344IO2du3aQn1/IPG+Jx555JH93l/bT/NqeyLxtG7dOmKb6owGJ510kjuw7/z58+O9ekntoDjI4cHq3//+t/Xt2zfH28qXL2/Jrlu3bta+fXtr1apVvFcl6ezZs8d69uxpCxYssO7du9t9991nhxxyiAuUTz31lHXo0MFeffVVq1ixYrxXFXH6nojmxM46kfOnn37qjo6PxHTttde6S/CDZ+PGjfbEE09Yly5d7M0337Qjjjgi3quYlAg/CUxnqT/88MPjvRpIQJMmTbKPPvrIXnzxRTv++OND0/VFeMopp1i7du3cUc579+4d1/VEYn9P6PRAfMckttKlS0dso7S0NLv//vvt9NNPt3fffdeuvvrquK5fsqLZK0l98803Vr9+fZswYUJomn4NnHzyybZixQr3/6+//mo33HCDm6Yd4u23327r168Pzf/KK6+4X40NGzZ0188++6yrKERjzZo1dtttt1mTJk3cY6v6sHz5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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Product_Name</th>\n",
       "      <th>Seller_Name</th>\n",
       "      <th>Overall_Rating</th>\n",
       "      <th>Overall_Review</th>\n",
       "      <th>Seller_Rating</th>\n",
       "      <th>Average_Rating</th>\n",
       "      <th>Product_Quality</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>11</td>\n",
       "      <td>16</td>\n",
       "      <td>96</td>\n",
       "      <td>87</td>\n",
       "      <td>29</td>\n",
       "      <td>30</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>77</td>\n",
       "      <td>7</td>\n",
       "      <td>96</td>\n",
       "      <td>87</td>\n",
       "      <td>25</td>\n",
       "      <td>27</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>78</td>\n",
       "      <td>7</td>\n",
       "      <td>62</td>\n",
       "      <td>40</td>\n",
       "      <td>25</td>\n",
       "      <td>32</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>79</td>\n",
       "      <td>14</td>\n",
       "      <td>71</td>\n",
       "      <td>45</td>\n",
       "      <td>15</td>\n",
       "      <td>24</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Product_Name  Seller_Name  Overall_Rating  Overall_Review  Seller_Rating  \\\n",
       "0            11           16              96              87             29   \n",
       "1            77            7              96              87             25   \n",
       "2            78            7              62              40             25   \n",
       "3            79           14              71              45             15   \n",
       "\n",
       "   Average_Rating  Product_Quality  \n",
       "0              30                0  \n",
       "1              27                0  \n",
       "2              32                0  \n",
       "3              24                2  "
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Visualize the target variable\n",
    "sns.countplot(x=df['Product_Quality'])\n",
    "plt.title(\"Distribution of Product Quality\")\n",
    "plt.show()\n",
    "\n",
    "# Initialize Encoder\n",
    "lab_enc = LabelEncoder()\n",
    "\n",
    "# Encoding specific columns\n",
    "df['Product_Name'] = lab_enc.fit_transform(df['Product_Name'])\n",
    "df['Seller_Name'] = lab_enc.fit_transform(df['Seller_Name'])\n",
    "df['Product_Quality'] = lab_enc.fit_transform(df['Product_Quality'])\n",
    "\n",
    "# Categorical encoding for ratings and reviews\n",
    "df['Seller_Rating'] = df['Seller_Rating'].astype('category').cat.codes\n",
    "df['Average_Rating'] = df['Average_Rating'].astype('category').cat.codes\n",
    "df['Overall_Review'] = df['Overall_Review'].astype('category').cat.codes\n",
    "df['Overall_Rating'] = df['Overall_Rating'].astype('category').cat.codes\n",
    "\n",
    "df.head(4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "6ad44434-782b-42fa-b07b-0dcc0d18e84f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training set size: 392\n",
      "Testing set size: 99\n"
     ]
    }
   ],
   "source": [
    "# Select features based on your head(2) output\n",
    "feature_cols = ['Seller_Name', 'Seller_Rating', 'Overall_Review', 'Overall_Rating', 'Average_Rating']\n",
    "\n",
    "X = df[feature_cols]\n",
    "y = df['Product_Quality']\n",
    "\n",
    "# Split data: 80% for training, 20% for testing\n",
    "x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
    "\n",
    "print(f\"Training set size: {len(x_train)}\")\n",
    "print(f\"Testing set size: {len(x_test)}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "d9f6f56d-c3b8-41d1-ac3d-c19abc033e1a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--- Model Evaluation ---\n",
      "Accuracy Score: 0.90\n",
      "\n",
      "Confusion Matrix:\n",
      "[[30  0  0  0]\n",
      " [ 2 18  0  0]\n",
      " [ 8  0 19  0]\n",
      " [ 0  0  0 22]]\n",
      "\n",
      "Classification Report:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.75      1.00      0.86        30\n",
      "           1       1.00      0.90      0.95        20\n",
      "           2       1.00      0.70      0.83        27\n",
      "           3       1.00      1.00      1.00        22\n",
      "\n",
      "    accuracy                           0.90        99\n",
      "   macro avg       0.94      0.90      0.91        99\n",
      "weighted avg       0.92      0.90      0.90        99\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Initialize the SVM Classifier\n",
    "# 'rbf' is the Radial Basis Function kernel\n",
    "clf = svm.SVC(kernel='rbf', gamma='auto')\n",
    "\n",
    "# Train the model\n",
    "clf.fit(x_train, y_train)\n",
    "\n",
    "# Make predictions on the test data\n",
    "y_pred = clf.predict(x_test)\n",
    "\n",
    "# Display Results\n",
    "print(\"--- Model Evaluation ---\")\n",
    "print(f\"Accuracy Score: {accuracy_score(y_test, y_pred):.2f}\")\n",
    "print(\"\\nConfusion Matrix:\")\n",
    "print(confusion_matrix(y_test, y_pred))\n",
    "print(\"\\nClassification Report:\")\n",
    "print(classification_report(y_test, y_pred))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.14.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
