{ "cells": [ { "cell_type": "markdown", "id": "50e63748", "metadata": {}, "source": [ "# an experimental notebook to understand the naive bayes algorithm" ] }, { "cell_type": "markdown", "id": "a474361a", "metadata": {}, "source": [ "# dummy weather example" ] }, { "cell_type": "code", "execution_count": 2, "id": "aaf35499-4b6b-4bae-ae24-b82c430edce9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Prediction: spam\n", "Scores: {'spam': -7.722341355829247, 'ham': -10.690580345938601}\n" ] } ], "source": [ "import math\n", "from collections import defaultdict, Counter\n", "\n", "data = [\n", " ('spam', 'Free money now'),\n", " ('ham', 'Let’s have lunch tomorrow'),\n", " ('spam', 'Win big money prizes'),\n", " ('ham', 'Are we still meeting tomorrow'),\n", " ('spam', 'Claim your free prize now'),\n", "]\n", "\n", "# Step 1: Tokenize and Count\n", "def tokenize(text):\n", " return text.lower().split()\n", "\n", "# Build vocab and count word frequencies\n", "class_counts = Counter()\n", "word_counts = defaultdict(Counter) # word_counts[class][word]\n", "\n", "for label, message in data:\n", " class_counts[label] += 1\n", " for word in tokenize(message):\n", " word_counts[label][word] += 1\n", "\n", "# Total words in each class\n", "total_words = {label: sum(words.values()) for label, words in word_counts.items()}\n", "vocab = set(word for words in word_counts.values() for word in words)\n", "\n", "# Step 2: Prediction function with Laplace smoothing\n", "def predict(text):\n", " words = tokenize(text)\n", " scores = {}\n", " total_messages = sum(class_counts.values())\n", "\n", " for label in class_counts:\n", " # Start with log prior\n", " log_prob = math.log(class_counts[label] / total_messages)\n", " for word in words:\n", " # Word likelihood with Laplace smoothing\n", " word_freq = word_counts[label][word] + 1\n", " denom = total_words[label] + len(vocab)\n", " log_prob += math.log(word_freq / denom)\n", " scores[label] = log_prob\n", "\n", " # Return best label and raw scores\n", " return max(scores, key=scores.get), scores\n", "\n", "test = \"Free prize now\"\n", "label, score = predict(test)\n", "print(f\"Prediction: {label}\")\n", "print(\"Scores:\", score)\n" ] }, { "cell_type": "markdown", "id": "bc9dc014", "metadata": {}, "source": [ "# SMS Naive Bayes" ] }, { "cell_type": "code", "execution_count": 4, "id": "23903a42", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dataset shape: (5572, 2)\n", " label message\n", "0 ham Go until jurong point, crazy.. Available only ...\n", "1 ham Ok lar... Joking wif u oni...\n", "2 spam Free entry in 2 a wkly comp to win FA Cup fina...\n", "3 ham U dun say so early hor... U c already then say...\n", "4 ham Nah I don't think he goes to usf, he lives aro...\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkQAAAHHCAYAAABeLEexAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAANNRJREFUeJzt3XtYlHX+//HXgHISBxQRNEEtyyQPfVNX58pTiZJhraWl5SqmVhroKrvq1/26njrQampqqZXfwkrXQ9tRTCVS3BRPtJqHNDMN9zIOawIeAWF+f/Tj/jpBpgQM+nk+rmuui/l83nPP+zOIvLjve+6xOZ1OpwAAAAzm4e4GAAAA3I1ABAAAjEcgAgAAxiMQAQAA4xGIAACA8QhEAADAeAQiAABgPAIRAAAwHoEIAAAYj0AEANWoWbNmGjZsWJU/z/Hjx2Wz2ZSYmGiNDRs2TP7+/lX+3KVsNpumT59ebc8H/BYEIqAK7du3TwMGDFDTpk3l4+Ojm266Sb169dLChQvd3VqN1KxZM/Xt27fcuc2bN8tms+m9996r5q5+WY8ePWSz2WSz2eTh4SG73a6WLVtqyJAhSk5OrrTnWbduXY0NFjW5N+Ba1HJ3A8CNatu2bbrnnnsUHh6uJ598UqGhoTpx4oS2b9+u+fPna8yYMe5uEZWgSZMmSkhIkCSdO3dO3377rd5//329++67evTRR/Xuu++qdu3aVv3hw4fl4XFtf4uuW7dOr7766jUFj6ZNm+rChQsuz10VrtTbhQsXVKsWv2ZwfeBfKlBFnn/+eQUEBGjXrl0KDAx0mcvOznZPU6h0AQEB+sMf/uAy9uKLL2rs2LFatGiRmjVrpr/97W/WnLe3d5X2c+nSJZWUlMjLy0s+Pj5V+ly/xt3PD1wLDpkBVeTo0aO64447yoQhSWrYsKHLfZvNpri4OC1fvlwtW7aUj4+P2rdvry1btrjUff/993rmmWfUsmVL+fr6KigoSI888oiOHz/uUpeYmCibzaYvvvhCY8eOVXBwsAIDA/X000+rsLBQubm5Gjp0qOrVq6d69epp4sSJcjqdV1xP3759dfPNN5c753A41KFDB+t+cnKyunTposDAQPn7+6tly5b6y1/+csXtV4Q7X48r8fT01IIFCxQREaFXXnlFeXl51tzPzyEqKirSjBkzdOutt8rHx0dBQUHq0qWLdcht2LBhevXVVyXJOjxns9kk/d95Qi+99JJefvll3XLLLfL29tbBgwfLPYeo1HfffaeoqCjVqVNHjRs31syZM13WW3p4cvPmzS6P+/k2r9Rb6djP9xz961//Up8+fWS32+Xv76+ePXtq+/btLjWl36+tW7cqPj5ewcHBqlOnjh566CHl5OT8+jcAqAD2EAFVpGnTpkpLS9P+/fvVunXrX61PTU3VqlWrNHbsWHl7e2vRokW67777tHPnTuvxu3bt0rZt2zRo0CA1adJEx48f1+LFi9WjRw8dPHhQfn5+LtscM2aMQkNDNWPGDG3fvl2vv/66AgMDtW3bNoWHh+uFF17QunXrNHv2bLVu3VpDhw79xf4GDhyooUOHateuXerYsaM1/v3332v79u2aPXu2JOnAgQPq27ev2rZtq5kzZ8rb21vffvuttm7delWvW1FRkf7zn/+UGb88VJRy5+vxazw9PfXYY4/pr3/9q7744gtFR0eXWzd9+nQlJCRo5MiR+t3vfqf8/Hzt3r1bX375pXr16qWnn35aJ0+eVHJyst55551yt/HWW2/p4sWLeuqpp+Tt7a369eurpKSk3Nri4mLdd9996ty5s2bNmqX169dr2rRpunTpkmbOnHlNa7ya3i534MABde3aVXa7XRMnTlTt2rX12muvqUePHkpNTVWnTp1c6seMGaN69epp2rRpOn78uF5++WXFxcVp1apV19QncFWcAKrExo0bnZ6enk5PT0+nw+FwTpw40blhwwZnYWFhmVpJTknO3bt3W2Pff/+908fHx/nQQw9ZY+fPny/z2LS0NKck59tvv22NvfXWW05JzqioKGdJSYk17nA4nDabzTlq1Chr7NKlS84mTZo4u3fvfsX15OXlOb29vZ1/+tOfXMZnzZrltNlszu+//97pdDqd8+bNc0py5uTkXHF75WnatKn1WvzSbc2aNVa9O18Pp9Pp7N69u/OOO+74xfkPPvjAKck5f/58lzXGxMRY99u1a+eMjo6+4vPExsY6y/vv+tixY05JTrvd7szOzi537q233rLGYmJinJKcY8aMscZKSkqc0dHRTi8vL+t7tmnTJqck56ZNm351m7/Um9P507/radOmWff79evn9PLych49etQaO3nypLNu3brObt26WWOl36/IyEiX79f48eOdnp6eztzc3HKfD/gtOGQGVJFevXopLS1NDz74oPbu3atZs2YpKipKN910kz7++OMy9Q6HQ+3bt7fuh4eH6/e//702bNig4uJiSZKvr681X1RUpFOnTqlFixYKDAzUl19+WWabI0aMcDmE0alTJzmdTo0YMcIa8/T0VIcOHfTdd99dcT12u119+vTR6tWrXQ6vrFq1Sp07d1Z4eLgkWYcIP/roo1/cS3ElnTp1UnJycpnbSy+9VKbWna/H1Sh9i/uZM2d+sSYwMFAHDhzQkSNHKvw8/fv3V3Bw8FXXx8XFWV+XHq4tLCzUZ599VuEefk1xcbE2btyofv36uRx6bdSokR5//HF98cUXys/Pd3nMU0895fL96tq1q4qLi/X9999XWZ8wF4EIqEIdO3bU+++/r9OnT2vnzp2aPHmyzpw5owEDBujgwYMutbfeemuZx9922206f/68dd7EhQsXNHXqVIWFhcnb21sNGjRQcHCwcnNzyz2kVBpSSgUEBEiSwsLCyoyfPn36V9czcOBAnThxQmlpaZJ+Ok8qPT1dAwcOdKm5++67NXLkSIWEhGjQoEFavXr1VYejBg0aKDIysszt8rBYyt2vx685e/asJKlu3bq/WDNz5kzl5ubqtttuU5s2bTRhwgR99dVX1/Q8zZs3v+paDw+PMueC3XbbbZJU5tyrypSTk6Pz58+rZcuWZeZatWqlkpISnThxwmX859+vevXqSVKlfG+AnyMQAdXAy8tLHTt21AsvvKDFixerqKhIa9asuebtjBkzRs8//7weffRRrV69Whs3blRycrKCgoLKDRyenp7lbqe8cedVnET8wAMPyM/PT6tXr5YkrV69Wh4eHnrkkUesGl9fX23ZskWfffaZhgwZoq+++koDBw5Ur169rD1dlcXdr8ev2b9/vySpRYsWv1jTrVs3HT16VG+++aZat26tpUuX6q677tLSpUuv+nku31NWGS7fK3O5yv7+/Zpf+n5VxvcG+DlOqgaqWem7sX744QeX8fIOmXzzzTfy8/OzDoe89957iomJ0Zw5c6yaixcvKjc3t+oavkydOnXUt29frVmzRnPnztWqVavUtWtXNW7c2KXOw8NDPXv2VM+ePTV37ly98MIL+p//+R9t2rRJkZGRldaPu1+PKykuLtaKFSvk5+enLl26XLG2fv36euKJJ/TEE0/o7Nmz6tatm6ZPn66RI0dK+uWAUhElJSX67rvvrL1C0k//zqSf3gEn/d+emJ+/juUdqrra3oKDg+Xn56fDhw+XmTt06JA8PDzK7KkDqhN7iIAqsmnTpnL/kl23bp0klTl0kJaW5nLey4kTJ/TRRx+pd+/e1l/Knp6eZba5cOHCav3LfeDAgTp58qSWLl2qvXv3uhwuk6Qff/yxzGPuvPNOSVJBQUGl9lITXo/yFBcXa+zYsfr66681duxY2e32X6w9deqUy31/f3+1aNHC5bWqU6eOpLIBpaJeeeUV62un06lXXnlFtWvXVs+ePSX99A5JT0/PMpd9WLRoUZltXW1vnp6e6t27tz766COXQ3NZWVlasWKFunTpcsXXCahq7CECqsiYMWN0/vx5PfTQQ7r99ttVWFiobdu2adWqVWrWrJmeeOIJl/rWrVsrKirK5W33kjRjxgyrpm/fvnrnnXcUEBCgiIgIpaWl6bPPPlNQUFC1rev+++9X3bp19ec//1menp7q37+/y/zMmTO1ZcsWRUdHq2nTpsrOztaiRYvUpEmTX91Tcq1qwuuRl5end999V5J0/vx560rVR48e1aBBg/Tss89e8fERERHq0aOH2rdvr/r162v37t167733XE58Lj1/auzYsYqKipKnp6cGDRpUoX59fHy0fv16xcTEqFOnTvr000+VlJSkv/zlL9aeyICAAD3yyCNauHChbDabbrnlFq1du7bcC4peS2/PPfecdY2qZ555RrVq1dJrr72mgoICzZo1q0LrASoLgQioIi+99JLWrFmjdevW6fXXX1dhYaHCw8P1zDPPaMqUKWUu2Ni9e3c5HA7NmDFDGRkZioiIUGJiotq2bWvVzJ8/X56enlq+fLkuXryou+++W5999pmioqKqbV0+Pj568MEHtXz5ckVGRpa5yOSDDz6o48eP680339R//vMfNWjQQN27d9eMGTOsk5grS014Pf79739ryJAhkn7au9OoUSM5HA4tXrxYvXr1+tXHjx07Vh9//LE2btyogoICNW3aVM8995wmTJhg1Tz88MMaM2aMVq5cqXfffVdOp7PCgcjT01Pr16/X6NGjNWHCBNWtW1fTpk3T1KlTXeoWLlyooqIiLVmyRN7e3nr00Uet6zNd7lp6u+OOO/TPf/5TkydPVkJCgkpKStSpUye9++67Za5BBFQ3m5Oz0wC3s9lsio2NdTmUAQCoPpxDBAAAjEcgAgAA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li1bys/PTwMGDND58+e1bNkyNWvWTPXq1dPYsWNVXFzshtUBZnnvvffUpk0b+fr6KigoSJGRkTp37pyGDRumfv36acaMGQoODpbdbteoUaNUWFhoPXb9+vXq0qWLAgMDFRQUpL59++ro0aPW/PHjx2Wz2bR69Wp17dpVvr6+6tixo7755hvt2rVLHTp0kL+/v/r06aOcnBx3LB9ViECEG96yZctUp04d7dixQ7NmzdLMmTOVnJwsSfLw8NCCBQt04MABLVu2TJ9//rkmTpzo8vjz589rwYIFWrlypdavX6/NmzfroYce0rp167Ru3Tq98847eu211/Tee++5Y3mAMX744Qc99thjGj58uL7++mtt3rxZDz/8sEovp5eSkmKN//3vf9f777+vGTNmWI8/d+6c4uPjtXv3bqWkpMjDw0MPPfSQSkpKXJ5n2rRpmjJlir788kvVqlVLjz/+uCZOnKj58+frn//8p7799ltNnTq1WteOauAEbmDdu3d3dunSxWWsY8eOzkmTJpVbv2bNGmdQUJB1/6233nJKcn777bfW2NNPP+308/NznjlzxhqLiopyPv3005XcPYDLpaenOyU5jx8/XmYuJibGWb9+fee5c+esscWLFzv9/f2dxcXF5W4vJyfHKcm5b98+p9PpdB47dswpybl06VKr5u9//7tTkjMlJcUaS0hIcLZs2bKyloUagj1EuOG1bdvW5X6jRo2UnZ0tSfrss8/Us2dP3XTTTapbt66GDBmiU6dO6fz581a9n5+fbrnlFut+SEiImjVrJn9/f5ex0m0CqBrt2rVTz5491aZNGz3yyCN64403dPr0aZd5Pz8/677D4dDZs2d14sQJSdKRI0f02GOP6eabb5bdblezZs0kSRkZGS7Pc/n/GaWfd9mmTRuXMX7ebzwEItzwateu7XLfZrOppKREx48fV9++fdW2bVv94x//UHp6ul599VVJcjnvoLzH/9I2AVQdT09PJScn69NPP1VERIQWLlyoli1b6tixY1f1+AceeEA//vij3njjDe3YsUM7duyQ5PrzLrn+zNtstnLH+Hm/8Rj14a7A5dLT01VSUqI5c+bIw+Onvw1Wr17t5q4AXInNZtPdd9+tu+++W1OnTlXTpk31wQcfSJL27t2rCxcuyNfXV5K0fft2+fv7KywsTKdOndLhw4f1xhtvqGvXrpKkL774wm3rQM1DIIKxWrRooaKiIi1cuFAPPPCAtm7dqiVLlri7LQC/YMeOHUpJSVHv3r3VsGFD7dixQzk5OWrVqpW++uorFRYWasSIEZoyZYqOHz+uadOmKS4uTh4eHqpXr56CgoL0+uuvq1GjRsrIyNB///d/u3tJqEE4ZAZjtWvXTnPnztXf/vY3tW7dWsuXL1dCQoK72wLwC+x2u7Zs2aL7779ft912m6ZMmaI5c+aoT58+kqSePXvq1ltvVbdu3TRw4EA9+OCD1mU2PDw8tHLlSqWnp6t169YaP368Zs+e7cbVoKaxOZ3///2KAABcp4YNG6bc3Fx9+OGH7m4F1yn2EAEAAOMRiAAAgPE4ZAYAAIzHHiIAAGA8AhEAADAegQgAABiPQAQAAIxHIAJwQ+jRo4fGjRt3VbWbN2+WzWZTbm7ub3rOZs2a6eWXX/5N2wBQMxCIAACA8QhEAADAeAQiADecd955Rx06dFDdunUVGhqqxx9/XNnZ2WXqtm7dqrZt28rHx0edO3fW/v37Xea/+OILde3aVb6+vgoLC9PYsWN17ty56loGgGpEIAJwwykqKtKzzz6rvXv36sMPP9Tx48c1bNiwMnUTJkzQnDlztGvXLgUHB+uBBx5QUVGRJOno0aO677771L9/f3311VdatWqVvvjiC8XFxVXzagBUh1rubgAAKtvw4cOtr2+++WYtWLBAHTt21NmzZ+Xv72/NTZs2Tb169ZIkLVu2TE2aNNEHH3ygRx99VAkJCRo8eLB1ovatt96qBQsWqHv37lq8eLF8fHyqdU0AqhZ7iADccNLT0/XAAw8oPDxcdevWVffu3SVJGRkZLnUOh8P6un79+mrZsqW+/vprSdLevXuVmJgof39/6xYVFaWSkhIdO3as+hYDoFqwhwjADeXcuXOKiopSVFSUli9fruDgYGVkZCgqKkqFhYVXvZ2zZ8/q6aef1tixY8vMhYeHV2bLAGoAAhGAG8qhQ4d06tQpvfjiiwoLC5Mk7d69u9za7du3W+Hm9OnT+uabb9SqVStJ0l133aWDBw+qRYsW1dM4ALfikBmAG0p4eLi8vLy0cOFCfffdd/r444/17LPPlls7c+ZMpaSkaP/+/Ro2bJgaNGigfv36SZImTZqkbdu2KS4uTnv27NGRI0f00UcfcVI1cIMiEAG4oQQHBysxMVFr1qxRRESEXnzxRb300kvl1r744ov64x//qPbt2yszM1OffPKJvLy8JElt27ZVamqqvvnmG3Xt2lX/9V//palTp6px48bVuRwA1cTmdDqd7m4CAADAndhDBAAAjEcgAgAAxiMQAQAA4xGIAACA8QhEAADAeAQiAABgPAIRAAAwHoEIAAAYj0AEAACMRyACAADGIxABAADjEYgAAIDx/h8RaqbB11JOlgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[[1195 7]\n", " [ 17 174]]\n", " precision recall f1-score support\n", "\n", " ham 0.99 0.99 0.99 1202\n", " spam 0.96 0.91 0.94 191\n", "\n", " accuracy 0.98 1393\n", " macro avg 0.97 0.95 0.96 1393\n", "weighted avg 0.98 0.98 0.98 1393\n", "\n", "Top spam words:\n", " free -> log-prob: -4.5220\n", " txt -> log-prob: -4.8369\n", " ur -> log-prob: -5.0367\n", " stop -> log-prob: -5.1272\n", " mobile -> log-prob: -5.1378\n", " text -> log-prob: -5.1813\n", " claim -> log-prob: -5.2038\n", " www -> log-prob: -5.3116\n", " reply -> log-prob: -5.3906\n", " prize -> log-prob: -5.4470\n", " cash -> log-prob: -5.5540\n", " won -> log-prob: -5.5702\n", " just -> log-prob: -5.6557\n", " send -> log-prob: -5.7108\n", " uk -> log-prob: -5.7108\n", " new -> log-prob: -5.7108\n", " nokia -> log-prob: -5.7493\n", " 50 -> log-prob: -5.7893\n", " win -> log-prob: -5.7893\n", " urgent -> log-prob: -5.8099\n" ] } ], "source": [ "# 1. Imports\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.feature_extraction.text import CountVectorizer\n", "from sklearn.naive_bayes import MultinomialNB\n", "from sklearn.metrics import classification_report, confusion_matrix\n", "\n", "# 2. Load dataset\n", "df = pd.read_csv('spam.csv', encoding='latin-1')[['v1', 'v2']]\n", "df.columns = ['label', 'message']\n", "\n", "print(\"Dataset shape:\", df.shape)\n", "print(df.head())\n", "\n", "# 3. Data distribution\n", "sns.countplot(x='label', data=df)\n", "plt.title(\"Spam vs Ham Distribution\")\n", "plt.show()\n", "\n", "# 4. Split into training and test sets\n", "X_train, X_test, y_train, y_test = train_test_split(\n", " df['message'], df['label'], test_size=0.25, random_state=42\n", ")\n", "\n", "# 5. Vectorize using CountVectorizer\n", "vectorizer = CountVectorizer(stop_words='english') # Removes common English words\n", "X_train_vec = vectorizer.fit_transform(X_train)\n", "X_test_vec = vectorizer.transform(X_test)\n", "\n", "# 6. Train Naive Bayes\n", "clf = MultinomialNB()\n", "clf.fit(X_train_vec, y_train)\n", "\n", "# 7. Predict\n", "y_pred = clf.predict(X_test_vec)\n", "\n", "# 8. Evaluate\n", "print(confusion_matrix(y_test, y_pred))\n", "print(classification_report(y_test, y_pred))\n", "\n", "# 9. BONUS: Look at most \"spammy\" words\n", "import numpy as np\n", "\n", "# Get log probabilities\n", "feature_names = vectorizer.get_feature_names_out()\n", "log_prob_spam = clf.feature_log_prob_[list(clf.classes_).index('spam')]\n", "\n", "# Top spam-associated words\n", "top_spam_words = np.argsort(log_prob_spam)[-20:]\n", "print(\"Top spam words:\")\n", "for i in reversed(top_spam_words):\n", " print(f\"{feature_names[i]:>15} -> log-prob: {log_prob_spam[i]:.4f}\")\n" ] }, { "cell_type": "markdown", "id": "00b12c34", "metadata": {}, "source": [ "## ROC Curve" ] }, { "cell_type": "code", "execution_count": 5, "id": "0b89ce9d", "metadata": {}, "outputs": [ { "data": { "image/png": "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FStWhKWlJapWrYodO3bkUqXvtu5EcfTq9bcuXAQG1sCff3ZguCAqwPr37w+ZTAaZTAaFQoHSpUvju+++Q1JSUrpl//nnH3h5ecHOzg7W1taoW7cugoODM9zu33//DW9vbzg4OMDW1hbVqlXD5MmT8fz58xx+RblnzJgx+PLLL2Fnl35ifMWKFaFUKhEVFZXuOQ8PD8yZMydd+8SJE1GjRg29tqioKHz55ZcoU6YMlEol3N3d0b59e+zdu1eql5Gh7HyOLViwAJUqVYKVlRUqVKiAZcuWpVtmzpw5qFChAqysrFCqVCn88MMPeu+1cePGYerUqXj16pWkrycjRv/kW7t2LUaOHImgoCCcOXMG1atXh5+fH548eZLh8kePHkWvXr0wYMAAnD17Fp06dUKnTp1w8eLFXK5c39qIj9BnUR1duPj00xpYsoThgoiAVq1a4dGjR7h9+zZmz56N33//HUFBQXrLzJs3Dx07dkSjRo1w4sQJnD9/Hj179sSQIUMwatQovWXHjh2LHj16oG7duti5cycuXryImTNn4ty5c1i+fHmuvS6VSpVj27579y7++ecf9O/fP91zhw8fRmJiIrp27YqQkJBs7+POnTuoXbs29u3bhxkzZuDChQsIDQ1Fs2bNMHTo0A+o/t2y8zn222+/YcyYMZg4cSIuXbqESZMmYejQodi2bZtumVWrVmH06NEICgrClStXsHjxYmzatAljx47VLVOlShV4enpixYoVOfb6dISR1atXTwwdOlT3WKPRiOLFi4vp06dnuHz37t1F27Zt9drq168vPvvssyzt79WrVwKAePXqVfaLfsvOwRWEXDZBABMFMFEMHLhFaDRaybZfEKlUKrF582ahUqmMXUq+Yep9mpiYKC5fviwSExONXYoQIvV31YsXL4RGo3nncgEBAaJjx456bZ988omoWbOm7vHdu3eFQqEQI0eOTLf+r7/+KgCI48ePCyGEOHHihAAg5syZk+H+Xrx4kWkt9+7dEz179hSOjo7C2tpa1K5dW7fdjOocPny48PLy0j328vISQ4cOFcOHDxdFihQR3t7eolevXqJ79+5666lUKlGkSBEREhIihEjtq2nTpgkPDw9haWkpqlWrJtavX5+uvjf7dMaMGaJOnToZvo7+/fuL0aNHi507d4ry5cune75UqVJi9uzZ6dqDgoJE9erVdY9b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RXR0NEaMGIHx48frtv3y5UsA0K33Nrlcrjvr6e33mCHvOaOe4mBhYYHatWvrnQ6k1Wqxd+9eNGjQIMN1GjRokO70obCwsEyXJyLKS+RyOX744QeMGzdOd4ijS5cuUCgUGV6fYNGiRYiPj0evXr0AAL1790ZcXBwWLlyY4fbTPjzeVq1aNURERGR6GmvRokXx6NEjvbaIiIgsvaaGDRvC3d0da9euxcqVK9GtWzfdB1HlypWhVCpx9+5dlC1bVu/L3d09023WrFkTly9f1mv7888/0bRpU5w7dw4RERG6r5EjR+LPP//ULVehQgWcPn063TbPnDmjC3qFCxeGn58fFixYgPj4+HTLZtaPANChQwe9/Wf0VadOnUzX/5DPMYVCgRIlSsDMzAxr1qxBu3btdCEhISEhXWBIC45p80+A1ENyJUqUgJOT03v390HeOw00h61Zs0YolUoRHBwsLl++LAYPHiwKFSokoqKihBBC+Pv7i9GjR+uWP3LkiDA3Nxe//PKLuHLliggKChIKhUJcuHAhS/vLibNITH12fl7EPpWeqfdpfjqLRK1WCzc3NzFjxgxd2+zZs4VcLhc//PCDuHLlirh586aYOXOmUCqV4ptvvtFb/7vvvhNmZmbi22+/FUePHhV37twRe/bsEV27ds307JLk5GRRvnx50aRJE3H48GFx69YtsWHDBnH06FEhhBChoaFCJpOJkJAQcf36dTFhwgRhb2+f7iyS4cOHZ7j9sWPHisqVKwtzc3Nx6NChdM8VKVJEBAcHi5s3b4rTp0+LX3/9VQQHB+st92afbt26VTg7O4uUlBQhROr7t2jRouK3335Lt+/Lly8LAOLixYtCiNTPCblcLqZMmSIuX74sLly4IH744Qdhbm6u91lx69Yt4erqKipXriw2bNggrl+/Li5fvizmzp0rKlasmOHrlEJWPsdGjx4t/P39dY+vXbsmli9fLq5fvy5OnDghevToIQoXLiwiIyN1ywQFBQk7OzuxevVqcfv2bREaGipKly4tunXrprf/gIAA8emnn2Zan1RnkRg9YAghxLx580TJkiWFhYWFqFevnu60KSFS39ABAQF6y69bt06UL19eWFhYiI8++khs3749y/tiwDAN7FPpmXqf5qeAIYQQ06dPF0WLFtU7RXLLli2iSZMmwsbGRlhaWoratWuLv/76K8Ptrl27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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.metrics import roc_curve, auc\n", "\n", "# Get predicted probabilities for the positive class ('spam')\n", "y_proba = clf.predict_proba(X_test_vec)[:, list(clf.classes_).index('spam')]\n", "\n", "# Binarize labels: 'spam' = 1, 'ham' = 0\n", "y_test_binary = (y_test == 'spam').astype(int)\n", "\n", "# Compute ROC curve and AUC\n", "fpr, tpr, _ = roc_curve(y_test_binary, y_proba)\n", "roc_auc = auc(fpr, tpr)\n", "\n", "# Plot\n", "plt.figure(figsize=(6, 6))\n", "plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC curve (AUC = {roc_auc:.2f})')\n", "plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') # random guess line\n", "plt.xlabel('False Positive Rate')\n", "plt.ylabel('True Positive Rate')\n", "plt.title('SMS Spam Classifier ROC Curve')\n", "plt.legend(loc=\"lower right\")\n", "plt.grid()\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "5408e28c", "metadata": {}, "source": [ "# Email CSV Naive Bayes" ] }, { "cell_type": "code", "execution_count": 8, "id": "dfd3f77c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Email No.thetoectandforofayouhou...conneveyjayvaluedlayinfrastructuremilitaryallowingffdryPrediction
0Email 1001000200...0000000000
1Email 281324662102127...0000000100
2Email 3001000800...0000000000
3Email 4052205151210...0000000000
4Email 576171525709...0000000100
\n", "

5 rows × 3002 columns

\n", "
" ], "text/plain": [ " Email No. the to ect and for of a you hou ... connevey jay \\\n", "0 Email 1 0 0 1 0 0 0 2 0 0 ... 0 0 \n", "1 Email 2 8 13 24 6 6 2 102 1 27 ... 0 0 \n", "2 Email 3 0 0 1 0 0 0 8 0 0 ... 0 0 \n", "3 Email 4 0 5 22 0 5 1 51 2 10 ... 0 0 \n", "4 Email 5 7 6 17 1 5 2 57 0 9 ... 0 0 \n", "\n", " valued lay infrastructure military allowing ff dry Prediction \n", "0 0 0 0 0 0 0 0 0 \n", "1 0 0 0 0 0 1 0 0 \n", "2 0 0 0 0 0 0 0 0 \n", "3 0 0 0 0 0 0 0 0 \n", "4 0 0 0 0 0 1 0 0 \n", "\n", "[5 rows x 3002 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 1. Load dataset\n", "df_email = pd.read_csv('emails.csv') # rename if needed\n", "df_email.head()" ] }, { "cell_type": "code", "execution_count": 12, "id": "05c60028", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index(['Email No.', 'the', 'to', 'ect', 'and', 'for', 'of', 'a', 'you', 'hou'], dtype='object')\n", "Prediction\n", "0 3672\n", "1 1500\n", "Name: count, dtype: int64\n", "[[862 51]\n", " [ 18 362]]\n", " precision recall f1-score support\n", "\n", " 0 0.98 0.94 0.96 913\n", " 1 0.88 0.95 0.91 380\n", "\n", " accuracy 0.95 1293\n", " macro avg 0.93 0.95 0.94 1293\n", "weighted avg 0.95 0.95 0.95 1293\n", "\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pandas as pd\n", "from sklearn.naive_bayes import MultinomialNB\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.metrics import classification_report, confusion_matrix, roc_curve, auc\n", "import matplotlib.pyplot as plt\n", "\n", "# Load the dataset\n", "df = pd.read_csv('emails.csv')\n", "\n", "# Check structure\n", "print(df.columns[:10]) # Should start with: 'Email No.', 'the', 'to', ...\n", "print(df['Prediction'].value_counts()) # Check label distribution\n", "\n", "# Drop non-feature columns\n", "X = df.drop(columns=['Email No.', 'Prediction']) # features = all word counts\n", "y = df['Prediction'] # target = spam or ham (1 or 0)\n", "\n", "# Split\n", "X_train, X_test, y_train, y_test = train_test_split(\n", " X, y, test_size=0.25, random_state=42\n", ")\n", "\n", "# Train\n", "clf = MultinomialNB()\n", "clf.fit(X_train, y_train)\n", "\n", "# Predict\n", "y_pred = clf.predict(X_test)\n", "y_proba = clf.predict_proba(X_test)[:, 1] # probability of spam\n", "\n", "# Evaluate\n", "print(confusion_matrix(y_test, y_pred))\n", "print(classification_report(y_test, y_pred))\n", "\n", "# ROC Curve\n", "fpr, tpr, _ = roc_curve(y_test, y_proba)\n", "roc_auc = auc(fpr, tpr)\n", "\n", "plt.figure(figsize=(6, 6))\n", "plt.plot(fpr, tpr, label=f\"ROC curve (AUC = {roc_auc:.2f})\", color=\"darkorange\")\n", "plt.plot([0, 1], [0, 1], \"k--\")\n", "plt.xlabel(\"False Positive Rate\")\n", "plt.ylabel(\"True Positive Rate\")\n", "plt.title(\"Email Spam Classifier ROC Curve\")\n", "plt.legend(loc=\"lower right\")\n", "plt.grid()\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": null, "id": "e331b1d8", "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.9" } }, "nbformat": 4, "nbformat_minor": 5 }