{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "594efd0d-0c6b-4cf8-a2f5-bde0eb974174", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.svm import SVC\n", "from sklearn.metrics import accuracy_score, classification_report, confusion_matrix\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ] }, { "cell_type": "code", "execution_count": 8, "id": "6836d7f7-811f-4aa9-b31c-49b6e6b3821f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index(['num_links', 'num_words', 'has_offer', 'sender_score', 'all_caps',\n", " 'is_spam'],\n", " dtype='object')\n", " num_links num_words has_offer sender_score all_caps is_spam\n", "0 3 98 1 0.718607 0 0\n", "1 0 170 0 0.698901 1 0\n", "2 0 38 0 0.620466 0 0\n", "3 0 116 0 0.701755 0 0\n", "4 3 89 1 0.583621 1 1\n" ] } ], "source": [ "df = pd.read_csv(\"spam_detection_dataset.csv\", encoding=\"ISO-8859-1\") # Adjust path if needed\n", "\n", "# Print basic info\n", "print(df.columns)\n", "print(df.head(5))" ] }, { "cell_type": "code", "execution_count": 9, "id": "32722793-45d2-4241-97b8-317ed5a1a9d1", "metadata": {}, "outputs": [], "source": [ "if \"Email No.\" in df.columns:\n", " df = df.drop(columns=[\"Email No.\"])" ] }, { "cell_type": "code", "execution_count": 10, "id": "2835047c-966b-4168-960a-bb7796651342", "metadata": {}, "outputs": [], "source": [ "df[\"is_spam\"] = df[\"is_spam\"].astype(int)" ] }, { "cell_type": "code", "execution_count": 11, "id": "681664d5-98e6-4b1b-b064-ae4f15f762eb", "metadata": {}, "outputs": [], "source": [ "# Features & target\n", "X = df.drop(columns=[\"is_spam\"])\n", "y = df[\"is_spam\"]" ] }, { "cell_type": "code", "execution_count": 12, "id": "64fd4602-ab4e-47fb-a65c-a69a5f709814", "metadata": {}, "outputs": [], "source": [ "X_train, X_test, y_train, y_test = train_test_split(\n", " X, y, test_size=0.2, random_state=42, stratify=y\n", ")" ] }, { "cell_type": "code", "execution_count": 13, "id": "f30ca926-d4f2-4c46-b01c-30ccfa4c00ad", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "--- KNN Performance ---\n", "Accuracy: 0.9425\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " 0 0.95 0.99 0.97 3633\n", " 1 0.86 0.44 0.59 367\n", "\n", " accuracy 0.94 4000\n", " macro avg 0.90 0.72 0.78 4000\n", "weighted avg 0.94 0.94 0.93 4000\n", "\n", "Confusion Matrix:\n", " [[3607 26]\n", " [ 204 163]]\n" ] } ], "source": [ "knn = KNeighborsClassifier(n_neighbors=5)\n", "knn.fit(X_train, y_train)\n", "y_pred_knn = knn.predict(X_test)\n", "\n", "print(\"\\n--- KNN Performance ---\")\n", "print(\"Accuracy:\", accuracy_score(y_test, y_pred_knn))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred_knn))\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred_knn))" ] }, { "cell_type": "code", "execution_count": 14, "id": "f28d2fef-2655-4ebe-b820-b3c6cb37a034", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "--- SVM Performance ---\n", "Accuracy: 0.93875\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " 0 0.95 0.98 0.97 3633\n", " 1 0.75 0.50 0.60 367\n", "\n", " accuracy 0.94 4000\n", " macro avg 0.85 0.74 0.78 4000\n", "weighted avg 0.93 0.94 0.93 4000\n", "\n", "Confusion Matrix:\n", " [[3573 60]\n", " [ 185 182]]\n" ] } ], "source": [ "svm = SVC(kernel='linear', random_state=42) # Linear kernel for binary classification\n", "svm.fit(X_train, y_train)\n", "y_pred_svm = svm.predict(X_test)\n", "\n", "print(\"\\n--- SVM Performance ---\")\n", "print(\"Accuracy:\", accuracy_score(y_test, y_pred_svm))\n", "print(\"Classification Report:\\n\", classification_report(y_test, y_pred_svm))\n", "print(\"Confusion Matrix:\\n\", confusion_matrix(y_test, y_pred_svm))" ] }, { "cell_type": "code", "execution_count": 15, "id": "82c5530e-421f-4ecd-8f2b-8cc6c46d2ca9", "metadata": {}, "outputs": [ { "data": { "image/png": "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/vnnJUmfffaZdV98fLy+/PJLde3a1a4xxsbGatasWWratKlefPHFNNuUKVNGVapUsf7syBhZr149derUSZJUo0YNWSwWa0xO79KxevXq2ZTc37p1S6NHj1a5cuXk7e2tggULqkqVKpo0aZK1TXrfHRz1vcUeXbt21VdffWVTdr906VJJSvPShD/++EMvvfSSypQpozx58qhIkSJq1aqV9u7da22zceNGPf7445Kkl156yRrrU74rpox97969atKkifLnz6+GDRtaj91Zmr506VJZLBZNmTLFZhwjRoyQq6ur9ZJJILchEUeaNm/erHr16ikgIECbN2/Www8/nG7bEiVKqHfv3po9e7YOHTpkV/8jR46Uq6vrfZVer127VoGBgapZs6Zd7aOiotStWzdVrFhRX331lSZNmqRff/1V4eHh+v33323aJicnq3Xr1mrYsKG+/vprde3aVRMmTND7778vSXrssce0detWBQUF6YknntDWrVszXVKWkJCgxo0b6/Tp05o6darWrVuniRMnqnjx4mlea5/izJkzqlWrltauXat3331X33zzjRo1aqTBgwerT58+qdrf2ffixYuVkJCgFi1a2CStGXFxcVGXLl20YMECa0K7du1anThxQi+99FKar/nzzz/VsWNHLVy4UKtWrVK3bt30wQcf6JVXXrG2mTZtmp544gkFBQVZf39bt2616efjjz/Whg0b9OGHH+rbb7/VI488kuq9vLy89PnnnysuLs76xe7WrVt64YUXZBiGPvvsM7m6utp1rgDwIAkPD9f27dvVr18/bd++3Way9E4pceDnn3/WL7/8YnMsJTlPK7EuUKCAnnnmGZuJ3M8++0wuLi7q0KGDXWP84YcflJycrDZt2tjV3tExctq0aXrrrbes57p169ZMf2cZN26cRo4cqeeff16rV6/WsmXL1K1bt3teZ+7I7y32eO655+Tq6mozcTJ79mw988wzaZamnzx5Un5+fho7dqyio6M1depUubm5qUaNGjp48KCk29+XUj4jb731ljXWd+/e3drP9evX1bp1azVo0EBff/21Ro0ale74evbsqUGDBlnvI7RhwwaNHj1ab775ZqpLJoFcI7uX5JGzpJSVSTJ8fHyMuLi4dNumlKafOXPGOHv2rOHj42M8/fTT1uPplaa/+uqrhmEYxrBhwwwXFxdrWZm9peleXl5GzZo17TqfCxcuGN7e3kaLFi1s9h87dszw9PS0KcXq3LmzIcn4/PPPbdq2aNHCKFeunM2+tM4tZfxHjhyx2Z9S6v3DDz8YhmEYu3btMiQZK1asyHDsJUqUMDp37mz9+V//+leaJXK9evUyLBaLcfDgQcMwDOPIkSOGJKNy5crGjRs3rO127NhhSDI+++yzDN83Zbz//ve/jcOHDxsWi8VYtWqVYRiG8eyzzxr16tUzDOPe5eU3b940kpOTjQULFhiurq7G+fPnrcfSe23K2EuVKmVcv349zWN3l7gtW7bMkGRMnDjRePvttw0XFxdj7dq1GZ4jADzIzp49a9SuXdsa793d3Y1atWoZUVFRxuXLl23apsSBfv36WfclJycbQUFBxhNPPGHT9s44nhJL9u3bZxiGYTz++ONGly5dDMMw7CpNHzt2rCHJiI6OtuucsiJGpve95O74nKJu3bo25xUREWE8+uijGY777u8OWfW9JS0ppekpfYWFhRmGYRi//fabIcnYuHGjXeXlN27cMK5fv26UKVPGGDBggHV/Rq9NGfucOXPSPHb3d4Rr164ZoaGhRsmSJY39+/cbgYGBRt26dW3+GwK5DSviSFPr1q0VHx+v/v3721Xe6+fnpyFDhujLL7/U9u3b7XqPN954Q76+vhoyZMg/HW66tm7dqsTExFQlZMWKFVODBg30/fff2+y3WCxq1aqVzb4qVarcVwl9ekqXLq1ChQppyJAh+uSTT7R//367XrdhwwZVqFBB1atXt9nfpUsXGYaR6kYrLVu2tFkRTinfy8y5lCxZUvXq1dOcOXN07tw562x7evbs2aPWrVvLz89Prq6ucnd314svvqibN2/aXS0h3f78ubu729W2ffv26tWrl15//XVmxwHADn5+fvrpp5+0c+dOjR07Vk899ZQOHTqkoUOHqnLlyjp79qy1bcmSJVW/fn0tXrxY169flyR9++23io2NzTAe1K1bV6VKldKcOXO0d+9e7dy50+6y9PuRHTHyXqpXr65ffvlFvXv31nfffadLly7d8zXZ9b2la9eu2rVrl/bu3avZs2erVKlSqlOnTpptb9y4oTFjxqhChQry8PCQm5ubPDw89Pvvv6cqn7+Xp59+2q52np6e+vzzz3Xu3Dk99thjVL7BKZCII03Dhw/X22+/rSVLlqhTp052JeP9+/dXSEiI3njjDbveo0CBAnrrrbcUHR2tH374we6xFS9eXEeOHLGr7blz5yQpzdLxkJAQ6/EUefLkkZeXl80+T09PXbt2ze7x3YuPj482bdqkRx99VG+++aYqVqyokJAQjRgxIt3yQOn2uaR3HinH7+Tn52fzs6enpyQpMTExU+Pt1q2bVq5cqY8++kje3t565pln0mx37NgxPfnkk/r77781adIk65e8qVOnZvp9M3v32K5duyo5OVlubm7q169fpl4LAA+qsLAwDRkyRP/+97918uRJDRgwQEePHk31JJRu3brp3Llz+uabbyTdLtXOly+f2rdvn27fFotFL730khYtWqRPPvlEZcuW1ZNPPmn32IoXLy5JmYr32REjMzJ06FB9+OGH2rZtm5o3by4/Pz81bNgww8e0Ztf3ljp16qhMmTKaMWOGFi5cqK5du1rv33K3gQMHavjw4WrTpo1Wrlyp7du3a+fOnapatWqmfn958uTJ1F3ZS5curSeffFLXrl3TCy+8kG13mgcchUQc6Ro1apRGjBihpUuXqmPHjrpx40aG7b29vTVy5Ej9+OOPWr16tV3v0atXL5UsWVJDhgxJ8xmWaWnatKlOnz5t143HUgLtqVOnUh07efKk/P397XpPe6QEwrtvkHLnykKKypUra+nSpTp37pxiYmLUoUMHvfPOOxo/fny6/fv5+aV7HpIcei53ateunfLkyaOxY8fqueeek7e3d5rtVqxYoYSEBH311Vfq1KmTateurbCwMHl4eGT6PdML/mlJSEhQZGSk9Xnyd15/BgCwj7u7u0aMGCFJ2rdvn82xdu3aqVChQpozZ47OnDmjVatWqUOHDsqXL1+GfXbp0kVnz57VJ598ku69RdJTv359ubu7a8WKFXa1NzNGenl5pXkztLvjvZubmwYOHKiff/5Z58+f12effabjx4+radOmunr1app9m/m95W4vvfSSpk+frvPnz6tz587ptlu0aJFefPFFjRkzRk2bNlX16tUVFhaW5vedjGQm1kvSrFmztHr1alWvXl1TpkyxuwITyKlIxJGhkSNHatSoUfr888/tSsa7du2q8uXL61//+pfNXUrT4+HhodGjR2vnzp3697//bdeYBgwYoLx586p3795p3njMMAzr8yfDw8Pl7e2tRYsW2bQ5ceKENmzYYL1DpyOk3OHz119/tdmfsoKQFovFoqpVq2rChAkqWLCgfv7553TbNmzYUPv370/VZsGCBbJYLKpfv/79Dz4D3t7eevvtt9WqVSv16tUr3XYpATVlVUG6/d9i5syZqdp6eno6bNWhZ8+eOnbsmL766ivNnj1b33zzjSZMmOCQvgHAGaWV5EmylhWnrCKn8PLyUseOHbV27Vq9//77Sk5OtqvMvEiRInr99dfVqlWrDBO7tAQFBal79+767rvvtGDBgjTb/Pnnn9aYa2aMfOihh1LF+kOHDllvVJaWggUL6plnntGrr76q8+fPp7pLegozv7fcrXPnzmrVqpVef/11FSlSJN12FovFJtZLt59N//fff9vsc2SVwd69e9WvXz+9+OKL+umnn1SlShV16NAh3WfcA7lB6udWAHd5++235eLiouHDh1uvyUnrkSeS5OrqqjFjxqht27aSZPNYkfQ8//zz1rtj26NkyZJaunSpOnTooEcffVR9+vRRaGioJGn//v2aM2eODMNQ27ZtVbBgQQ0fPlxvvvmmXnzxRT3//PM6d+6cRo0aJS8vL+vsvyM8/vjjKleunAYPHqwbN26oUKFCWr58uTZv3mzTbtWqVZo2bZratGmjhx9+WIZhWB8bktG1zQMGDNCCBQvUsmVLvfPOOypRooRWr16tadOmqVevXipbtqzDzuVuAwcO1MCBAzNs07hxY3l4eOj555/XG2+8oWvXrmn69OlpBsnKlSvrq6++0vTp01WtWjW5uLgoLCws0+OaNWuWFi1apLlz56pixYqqWLGi+vTpoyFDhuiJJ55Ida0gAOB/jyVr1aqVHnnkEd26dUsxMTEaP3688uXLp9deey3Va1IeO/rRRx/pkUceUa1atex6r7Fjx973OD/66CMdPnxYXbp00Xfffae2bdsqMDBQZ8+e1bp16zR37lwtXbpUVapUMTVGRkZGqlOnTurdu7eefvpp/fXXXxo3bpwKFy5s065Vq1aqVKmSwsLCVLhwYf3111+aOHGiSpQooTJlyqTZt5nfW+4WEhJiVwVCRESE5s2bp0ceeURVqlTR7t279cEHH6ho0aI27UqVKiVvb28tXrxY5cuXV758+RQSEpJqoudeEhIS1L59e5UsWVLTpk2Th4eHPv/8cz322GN66aWX7K6aAHIaEnHY5a233pKLi4uGDRumW7duWZ8vmZY2bdqoVq1a2rJli119WywWvf/+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XW0JqAAA3D9iPYCcyi27BwBkp2bNmmnu3LlKTk7WTz/9pO7duyshIUHTp0+3aZecnCx3d3eHvKePj49D+gEAAPdGrAeQE7Eijgeap6engoKCVKxYMXXs2FEvvPCCVqxYYS0xmzNnjh5++GF5enrKMAzFx8fr5ZdfVkBAgAoUKKAGDRrol19+selz7NixCgwMVP78+dWtWzddu3bN5vjd5Wq3bt3S+++/r9KlS8vT01PFixfXe++9J0kqWbKkJCk0NFQWi0X16tWzvm7u3LkqX768vLy89Mgjj2jatGk277Njxw6FhobKy8tLYWFh2rNnjwN/cwAA5A7EegA5ESviwB28vb2VnJwsSfrjjz/0+eef68svv5Srq6skqWXLlvL19dWaNWvk4+OjGTNmqGHDhjp06JB8fX31+eefa8SIEZo6daqefPJJLVy4UB9//LEefvjhdN9z6NChmjlzpiZMmKDatWvr1KlT+u9//yvpdoCtXr261q9fr4oVK8rDw0OSNHPmTI0YMUJTpkxRaGio9uzZox49eihv3rzq3LmzEhISFBERoQYNGmjRokU6cuSIXnvttSz+7QEAkPMR6wHkCAbwgOrcubPx1FNPWX/evn274efnZ7Rv394YMWKE4e7ubsTFxVmPf//990aBAgWMa9eu2fRTqlQpY8aMGYZhGEZ4eLjRs2dPm+M1atQwqlatmub7Xrp0yfD09DRmzpyZ5hiPHDliSDL27Nljs79YsWLGkiVLbPa9++67Rnh4uGEYhjFjxgzD19fXSEhIsB6fPn16mn0BAOCsiPUAcipK0/FAW7VqlfLlyycvLy+Fh4erTp06mjx5siSpRIkSKly4sLXt7t27deXKFfn5+SlfvnzW7ciRI/rzzz8lSQcOHFB4eLjNe9z9850OHDigpKQkNWzY0O4xnzlzRsePH1e3bt1sxjF69GibcVStWlV58uSxaxwAADgrYj2AnIjSdDzQ6tevr+nTp8vd3V0hISE2N2nJmzevTdtbt24pODhYGzduTNVPwYIF7+v9vb29M/2aW7duSbpdslajRg2bYylldYZh3Nd4AABwNsR6ADkRiTgeaHnz5lXp0qXtavvYY48pNjZWbm5ueuihh9JsU758eW3btk0vvviidd+2bdvS7bNMmTLy9vbW999/r+7du6c6nnKd2M2bN637AgMDVaRIER0+fFgvvPBCmv1WqFBBCxcuVGJiovULQEbjAADAWRHrAeRElKYDdmrUqJHCw8PVpk0bfffddzp69Ki2bNmit956S7t27ZIkvfbaa5ozZ47mzJmjQ4cOacSIEfrtt9/S7dPLy0tDhgzRG2+8oQULFujPP//Utm3bNHv2bElSQECAvL29FR0drdOnTys+Pl6SNHLkSEVFRWnSpEk6dOiQ9u7dq7lz5+qjjz6SJHXs2FEuLi7q1q2b9u/frzVr1ujDDz/M4t8QAAC5G7EegFlIxAE7WSwWrVmzRnXq1FHXrl1VtmxZPffcczp69KgCAwMlSR06dNDbb7+tIUOGqFq1avrrr7/Uq1evDPsdPny4Bg0apLffflvly5dXhw4dFBcXJ0lyc3PTxx9/rBkzZigkJERPPfWUJKl79+6aNWuW5s2bp8qVK6tu3bqaN2+e9REo+fLl08qVK7V//36FhoZq2LBhev/997PwtwMAQO5HrAdgFovBBSYAAAAAAJiGFXEAAAAAAExEIg4AAAAAgIlIxAEAAAAAMBGJOAAAAAAAJiIRBwAAAADARCTiAAAAAACYiEQcAAAAAAATkYgDAAAAAGAiEnEAAAAAAExEIg4AAAAAgIlIxAEAAAAAMNH/AVUBoxERYYxWAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 2, figsize=(12, 5))\n", "\n", "sns.heatmap(confusion_matrix(y_test, y_pred_knn), annot=True, fmt=\"d\", cmap=\"Blues\", ax=ax[0])\n", "ax[0].set_title(\"KNN Confusion Matrix\")\n", "ax[0].set_xlabel(\"Predicted\")\n", "ax[0].set_ylabel(\"Actual\")\n", "\n", "sns.heatmap(confusion_matrix(y_test, y_pred_svm), annot=True, fmt=\"d\", cmap=\"Greens\", ax=ax[1])\n", "ax[1].set_title(\"SVM Confusion Matrix\")\n", "ax[1].set_xlabel(\"Predicted\")\n", "ax[1].set_ylabel(\"Actual\")\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "id": "badf88e8-a41f-4586-af07-e08b4bbf29b8", "metadata": {}, "outputs": [], "source": [] } ], "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.12.7" } }, "nbformat": 4, "nbformat_minor": 5 }