{ "cells": [ { "cell_type": "markdown", "id": "19423337", "metadata": {}, "source": [ "[Lien youtube de la vidéo source ](https://youtu.be/0rtlRbKPQLE?si=PZ-nbxa-z1TOUav5)" ] }, { "cell_type": "markdown", "id": "2aac4a64", "metadata": {}, "source": [ "[Code Source GITHUB](https://github.com/MamatorHack/spam-detector)" ] }, { "cell_type": "code", "execution_count": 14, "id": "8a313f24", "metadata": {}, "outputs": [], "source": [ "import pandas as pd # Manipulation de données\n", "import numpy as np # Calculs mathématiques\n", "import matplotlib.pyplot as plt # Affichage de graphiques\n", "import seaborn as sns # Visualisation de données\n", "import pickle # Sauvegarder et charger des modèles\n", "from sklearn.feature_extraction.text import CountVectorizer # Transformer le texte en nombres\n", "from sklearn.model_selection import train_test_split # Séparer les données\n", "from sklearn.naive_bayes import MultinomialNB # Modèle d'apprentissage\n", "from sklearn.metrics import accuracy_score # Vérifier la performance du modèle" ] }, { "cell_type": "code", "execution_count": 15, "id": "e530b713", "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", "
labelmessage
0hamGo until jurong point, crazy.. Available only ...
1hamOk lar... Joking wif u oni...
2spamFree entry in 2 a wkly comp to win FA Cup fina...
3hamU dun say so early hor... U c already then say...
4hamNah I don't think he goes to usf, he lives aro...
\n", "
" ], "text/plain": [ " 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..." ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Charger le fichier SMSSpamCollection from UCI ML repository\n", "df = pd.read_csv('SMSSpamCollection', sep='\\t', header=None, names=['label', 'message'])\n", "\n", "# Afficher les 5 premières lignes du dataset\n", "df.head()" ] }, { "cell_type": "markdown", "id": "15e1439e", "metadata": {}, "source": [ "### Nettoyer les données " ] }, { "cell_type": "code", "execution_count": 16, "id": "fb533887", "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", "
labelmessage
00Go until jurong point, crazy.. Available only ...
10Ok lar... Joking wif u oni...
21Free entry in 2 a wkly comp to win FA Cup fina...
30U dun say so early hor... U c already then say...
40Nah I don't think he goes to usf, he lives aro...
\n", "
" ], "text/plain": [ " label message\n", "0 0 Go until jurong point, crazy.. Available only ...\n", "1 0 Ok lar... Joking wif u oni...\n", "2 1 Free entry in 2 a wkly comp to win FA Cup fina...\n", "3 0 U dun say so early hor... U c already then say...\n", "4 0 Nah I don't think he goes to usf, he lives aro..." ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Convertir les labels en 0 (ham) et 1 (spam)\n", "df['label'] = df['label'].map({'ham': 0, 'spam': 1})\n", "\n", "# Afficher les 5 premières lignes\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 17, "id": "c4ea8a09", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((5572, 8713), (5572,))" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Convertir les messages en nombres\n", "vectorizer = CountVectorizer()\n", "X = vectorizer.fit_transform(df['message'])\n", "\n", "# Labels (0 ou 1)\n", "y = df['label']\n", "\n", "# Afficher la taille des données\n", "X.shape, y.shape" ] }, { "cell_type": "markdown", "id": "b1ccf31e", "metadata": {}, "source": [ "`5572` est le nombre de messages converties & `8713` le nombre de caractéristiques pour identifier un Spam" ] }, { "cell_type": "markdown", "id": "efd4b561", "metadata": {}, "source": [ "### Modélisation " ] }, { "cell_type": "code", "execution_count": 18, "id": "aea723b8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Précision du modèle : 98.57%\n" ] } ], "source": [ "# Séparer les données en entraînement (80%) et test (20%)\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", "\n", "# Créer et entraîner le modèle\n", "model = MultinomialNB()\n", "model.fit(X_train, y_train)\n", "\n", "# Prédire sur les données de test\n", "y_pred = model.predict(X_test)\n", "\n", "# Évaluer la précision du modèle\n", "accuracy = accuracy_score(y_test, y_pred)\n", "print(f\"Précision du modèle : {accuracy * 100:.2f}%\")" ] }, { "cell_type": "markdown", "id": "f6eda2fa", "metadata": {}, "source": [ "### Test" ] }, { "cell_type": "code", "execution_count": 19, "id": "2d01ce1c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SPAM ❌\n", "HAM ✅\n" ] } ], "source": [ "def predict_spam(message):\n", " message_transformed = vectorizer.transform([message])\n", " prediction = model.predict(message_transformed)\n", " return \"SPAM ❌\" if prediction[0] == 1 else \"HAM ✅\"\n", "\n", "# Tester avec un message\n", "\n", "print(predict_spam(\"Hey, you have winning cup. Give your account bank detail to keep your prize !\"))\n", "print(predict_spam(\"Hey, well ? Ready for competition ?\"))\n" ] }, { "cell_type": "code", "execution_count": 20, "id": "7e014dbc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SPAM ❌\n", "HAM ✅\n" ] } ], "source": [ "print(predict_spam(\"Congratulations! You've won a lottery. Claim your prize now!\"))\n", "print(predict_spam(\"Don't forget our meeting tomorrow at 10 AM.\"))" ] }, { "cell_type": "code", "execution_count": 21, "id": "c61d8311", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SPAM ❌\n" ] } ], "source": [ "print(predict_spam(\"Give me your credit card details to claim your prize!\"))" ] }, { "cell_type": "code", "execution_count": 22, "id": "ef960679", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "HAM ✅\n" ] } ], "source": [ "print(predict_spam(\"Hello friend, how are you doing today? , we are English class today, see you later!\"))" ] }, { "cell_type": "code", "execution_count": 23, "id": "58f88820", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "HAM ✅\n" ] } ], "source": [ "print(predict_spam(\"You are ugly , you need money, give your credit card details.\"))" ] }, { "cell_type": "code", "execution_count": 24, "id": "8f4f505b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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XHPFiwIAAGhPrXYN0VVXXaUf/OAHWrFiRWs9JQAAQLto1Yuq//3vf+vDDz9szacEAABocy16y2zu3Llh923bVk1NjV5++WVNmzatVRYGAADQXloURG+//XbY/auuukrJycn66U9/+qmfQAMAAOhoWhREr7/+emuvAwAAIGpaFETnnThxQgcPHpTL5dJ1112n5OTk1loXAABAu2nRRdVnzpzR3Xffrf79++umm27SjTfeKK/Xq+nTp+v9999v7TUCAAC0qRYF0dy5c1VeXq6XXnpJdXV1qqur0x/+8AeVl5dr3rx5rb1GAACANtWit8x+97vf6be//a3GjBnjbPvGN76h+Ph4TZkyRatXr26t9QEAALS5Fp0hev/99+V2uyO2p6Sk8JYZAADodFoURD6fTw8//LA++OADZ1tDQ4OWLFkin8/XaosDAABoDy16y2zlypWaNGmSBgwYoOHDh8vlcqmqqkpxcXHasmVLa68RAACgTbUoiIYNG6ZDhw5pw4YNOnDggGzb1h133KE777xT8fHxrb1GAACANtWiICosLJTb7daMGTPCtj/zzDM6ceKEFi5c2CqLAwAAaA8tuoZozZo1+uIXvxix/frrr9cvfvGLK14UAABAe2pREAUCAfXv3z9ie3Jysmpqaq54UQAAAO2pRUGUmpqqN998M2L7m2++Ka/Xe8WLAgAAaE8tuoboe9/7nvx+v86ePatbbrlFkvTaa69pwYIFfFM1AADodFoURAsWLNB7772n2bNnq6mpSZLUo0cPLVy4UIsWLWrVBQIAALS1FgWRy+XSY489poceekj79+9XfHy80tLSFBcX19rrAwAAaHMtCqLzevfura9+9auttRYAAICoaNFF1QAAAF0JQQQAAIxHEAEAAOMRRAAAwHgEEQAAMB5BBAAAjEcQAQAA4xFEAADAeAQRAAAwHkEEAACMRxABAADjEUQAAMB4BBEAADBeVIOosLBQX/3qV5WQkKCUlBRNnjxZBw8eDJuxbVuLFy+W1+tVfHy8xowZo3379oXNNDY2as6cOerXr5969eqlnJwcHT16NGwmGAwqLy9PlmXJsizl5eWprq6urQ8RAAB0AlENovLyct17772qqKhQWVmZPvzwQ2VlZenMmTPOzLJly7R8+XIVFRVp9+7d8ng8Gj9+vE6dOuXM+P1+lZSUaNOmTdq2bZtOnz6t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jx8vSXr22Wc1YMAAlZSUaMqUKXr88ceVm5vrXKidlpamJ598UqNHj9bq1avVo0ePdj0mAG2LM0QAupy3335bt912m66++molJCRozJgxkqTDhw+Hzfl8PuffSUlJGjx4sPbv3y9JqqysVHFxsXr37u3cJkyYoHPnzqm6urrdjgVA++AMEYAu5cyZM8rKylJWVpY2bNig5ORkHT58WBMmTFBTU9OnPt7lckmSzp07p1mzZik/Pz9iZuDAga2+bgDRRRAB6FIOHDigkydPaunSpUpNTZUkvfXWWxedraiocOImGAzqn//8p774xS9Kkr7yla9o3759uvbaa9tn4QCiirfMAHQpAwcOVGxsrJ566im9++672rx5s37yk59cdPaRRx7Ra6+9pr179+quu+5Sv379NHnyZEnSwoULtWPHDt17772qqqrSoUOHtHnzZs2ZM6cdjwZAeyGIAHQpycnJKi4u1m9+8xsNHTpUS5cu1RNPPHHR2aVLl+r+++9XRkaGampqtHnzZsXGxkqSbrjhBpWXl+vQoUO68cYb9eUvf1kPPfSQ+vfv356HA6CduGzbtqO9CAAAgGjiDBEAADAeQQQAAIxHEAEAAOMRRAAAwHgEEQAAMB5BBAAAjEcQAQAA4xFEAADAeAQRAAAwHkEEAACMRxABAADj/T8Foj4NDGZV/wAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.countplot(x='label', data=df)" ] }, { "cell_type": "markdown", "id": "55444fb4", "metadata": {}, "source": [ "### Sauvegarder le model " ] }, { "cell_type": "code", "execution_count": 27, "id": "faf22bf2", "metadata": {}, "outputs": [], "source": [ "# Sauvegarder le vectorizer\n", "with open('sms_vectorizer.pkl', 'wb') as file:\n", " pickle.dump(vectorizer, file)" ] }, { "cell_type": "code", "execution_count": 25, "id": "dba57e87", "metadata": {}, "outputs": [], "source": [ "\n", "# Sauvegarder le modèle \n", "\n", "with open('sms_spam_detector_model.pkl','wb') as file:\n", " pickle.dump(model,file)" ] }, { "cell_type": "markdown", "id": "f92bf821", "metadata": {}, "source": [ "### Charger le modèle " ] }, { "cell_type": "code", "execution_count": null, "id": "6ebccf7a", "metadata": {}, "outputs": [ { "ename": "FileNotFoundError", "evalue": "[Errno 2] No such file or directory: 'dht11_model.pkl'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[26], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdht11_model.pkl\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrb\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m file: \n\u001b[1;32m 2\u001b[0m model\u001b[38;5;241m=\u001b[39mpickle\u001b[38;5;241m.\u001b[39mload(file)\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/IPython/core/interactiveshell.py:324\u001b[0m, in \u001b[0;36m_modified_open\u001b[0;34m(file, *args, **kwargs)\u001b[0m\n\u001b[1;32m 317\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m file \u001b[38;5;129;01min\u001b[39;00m {\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m2\u001b[39m}:\n\u001b[1;32m 318\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 319\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIPython won\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt let you open fd=\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfile\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m by default \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 320\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mas it is likely to crash IPython. If you know what you are doing, \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 321\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124myou can use builtins\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m open.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 322\u001b[0m )\n\u001b[0;32m--> 324\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m io_open(file, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'dht11_model.pkl'" ] } ], "source": [ "with open('sms_spam_detector_model.pkl','rb') as file: \n", " model=pickle.load(file)" ] } ], "metadata": { "kernelspec": { "display_name": "base", "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 }