Skip to content

Instantly share code, notes, and snippets.

@Esaslow
Last active July 9, 2018 20:48
Show Gist options
  • Save Esaslow/ab428b0b30599a4dceb9f5ba100c6970 to your computer and use it in GitHub Desktop.
Save Esaslow/ab428b0b30599a4dceb9f5ba100c6970 to your computer and use it in GitHub Desktop.
Jupyter
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##### IMPORTS"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"from collections import Counter\n",
"import numpy as np\n",
"from importlib import reload\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import functions as F"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Classifying spam emails using Naive Bayes and TF/IDF\n",
"Using bayesian updating and by vectorizing words we can classify whether or not an email that comes through is spam or not. How does this work? I'll explain the process a little it below, and then go throught the implimentation.\n",
"\n",
"#### 1. Turning the documents into vectors\n",
"##### 1.1 Matrix with one column, and each row is a complete doc\n",
"The first step to this process is taking all of the documents (emails) that you are trying to predict whether or not are spam and put them into a single matrix. This matrix would look like\n",
"\n",
"|**Document Body**|\n",
"|:--:|\n",
"|'This would be document one including all of the text'|\n",
"|'This is document 2'|\n",
"|'This is document 3... getting the idea?'|\n",
"|'This matrix for the emails contains 702 emails for my test set'|\n",
"|'I made a matrix for just the body text of each email'|\n",
"|'I also made a matrix for just the subject of each email'|\n",
"\n",
"\n",
"##### 1.2 Matrix with same number of rows, but a col that represents each unique word\n",
"\n",
"Now we are going to transform our matrix from one that only has a single col to a matrix that contains a col for every unique word. What if the word is contained twice in our document? Well, we put the number of counts in that document into this matrix:\n",
"\n",
"|**Doc Name**| word1|word2|...|word n-1|word n|\n",
"|:----------:|:----:|:---:|:-:|:------:|:----:|\n",
"|**doc1**|1|1|...|0|1|\n",
"|**doc2**|2|0|...|1|1|\n",
"|**doc1**|2|2|...|1|1|\n",
"\n",
"The structure of this matrix is crucial. Play with it in your mind for a while, the longer the better. This is what allows us to map our results back to specific words which gives us a better understanding of what is actually going on. \n",
"\n",
"##### 1.3 Normalizing the word counts\n",
"This is where things get a little difficult, but for an intuitive understand, try this out. If we have to vectors pointing in the same direction, but one has a much greater magnitude, our model will not see them as similar. To account for this, we need to normalize our matrix. Sklearn has an implimintation of this using a method TFIDF. This also has some interesting features that can process the words for you, and get rid of nonsensical words. Along with other cool features, this is a great way to vectorize your data. I will leave it up to the user to explore the available options with the sklearn package.\n",
"\n",
"### 2. Creating a pipeline that takes in emails and predicts the probability of the email being spam\n",
"\n",
"Start by creating a function that is called **extract_features.** This function takes in the directory that all of the emails are in. We take the emails, and read the body of the email. Then add the body of each document to a list of documents so that I have all the text saved as a new line. \n",
"\n",
"The structure of this matrix is 1 col, and each row is just the document. I did this for both the subjects and the bodies of each of the emails.\n",
"\n",
"Once I have this corpus _(collection of all of my documents as a list)_ I can vectorize it using the sklearn implimentation. Doing this by creating **two** different vectorizers. One for the subject and one for the body of the email. "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"::::::::::::::::::::::::::::::::::::::::::::::::::\n",
"\n",
"The size of the subject line vectors is: (702, 5385)\n",
"--------------------------------------------------\n",
"The size of the body vectors is: (702, 509782)\n",
"--------------------------------------------------\n",
"The size of the target vector is: 702 \n",
"\n",
"::::::::::::::::::::::::::::::::::::::::::::::::::\n"
]
}
],
"source": [
"from sklearn.feature_extraction.text import TfidfVectorizer \n",
"reload(F)\n",
"train_dir = 'ling-spam/train-mails'\n",
"test_dir = 'ling-spam/test-mails'\n",
"\n",
"#Create vectorizor\n",
"Body_vectorizor = TfidfVectorizer(analyzer='word', ngram_range=(1,5), min_df = 0, stop_words = 'english')\n",
"Subject_vectorizor = TfidfVectorizer(analyzer='word', ngram_range=(1,5), min_df = 0, stop_words = 'english')\n",
"\n",
"#extract a corpus for the bodys, subjects, and targets\n",
"docs,subjects, target = F.extract_features(train_dir)\n",
"\n",
"#transform into matrix format\n",
"body_matrix = Body_vectorizor.fit_transform(docs)\n",
"subject_matrix = Subject_vectorizor.fit_transform(subjects)\n",
"print(':'*50)\n",
"print('\\nThe size of the subject line vectors is: ',subject_matrix.shape)\n",
"print('-'*50)\n",
"print('The size of the body vectors is: ',body_matrix.shape)\n",
"print('-'*50)\n",
"print('The size of the target vector is: ',len(target),'\\n')\n",
"print(':'*50)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Modeling Part 1:\n",
"Since I created two different vectorized systems of the words, I will need to do one of two things to train models\n",
"1. Train a model on the seperate vector systems\n",
"2. Concatinate the vector systems and then create a model\n",
"\n",
"I am going to first train a model on the seperate vector systems to see the feature importance. This will be cool because we will get to see what is driving the classification of spam for both of the models. After this, I will impliment a system that puts both of these vectors together and then predicts off of the concatinated matricies. \n",
"\n",
"It is much harder to map back to the origin words after I have put the matricies together so that is why I am going through this process first."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.ensemble import GradientBoostingClassifier as GB\n",
"\n",
"#Initialize and train a model for the body of the email\n",
"body_model = GB(n_estimators = 10, learning_rate = .5)\n",
"body_model.fit(body_matrix,target);\n",
"\n",
"#Initialize and train a model for the subject line of the email\n",
"subject_model = GB(n_estimators = 10, learning_rate = .5)\n",
"subject_model.fit(subject_matrix,target);"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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AugUnyomdO4Bzkw57VRJDSV9H+gFzE15fjJwcZy+gaSWkhoDU4Dzk96s94351wB7bUfz3yRME/lBLK+RpJbA+8D+krrH9PqS2m5H+QB7EzrqqyUdSOjoZvNX4GVggqR6WdoI23/dCTOAAfGDc3+gBzAnS/6M98XMNhJetweAR75Dm1wt889//pPx48cza9Ys5s+fT926dRk3blyZfB988AGXXnop77zzDvvssw9PPfVU2vKKi4t57bXXeOmll7jooovYuHEjBxxwAK+88grz5s1j/PjxDB0a+m8NGzbkmWeeYd68eUybNo3//u//xiyME7z//vuce+65vP322zRv3rxMPfvttx/z5s3j4osv3qYDnGz58uW8/vrrvPjii1x77bUA9OjRg5kzww+WS5cu5d133wXg9ddfp6CgoEL3Y9KkSRx00EEsWLCAxYsXc8IJJ7Bp0yaGDBnCxIkTKSoq4vzzz+eGG24o06b58+czf/58brvtNvLz8zn66KPTtj2hvPuw9957M2fOHC677DKuuOIKAC6//HKuvPJK5s6dy1NPPcWvfvWrRPa1wDGEKYcfAQUx/SjCe13aqZQxT1fC1MQ28XErQnSuDoRfDy/JeiFBa+D4WNYt8T0sn/AZ1ZEwxTA/08k+JdA5VxG703Sa9oS51CXAJuDimP4b4K+SrgfeSjlnDmFE+lDgNjNbJimHraPsDxGmb8yLCypXAKeZ2aQ477pQ0reEzu71hPnXoyRtALonz4vPxsxWKISnfEJSg5h8o5ktiVN5RkpqSng97gXeqeA9Sa5jgaS347kfAbPKOQUz+0Os92/A2YToO9u0EVhCmJryd0nLs8yLz+YZwrqEBYR7f42Z/Z9CWM507fq2nPsyjvAhOKW8itsf3JRCDyfpgKlTp1JUVESXLl0A2LBhAwcccECZfIcddhh5eWHZRefOnSkuLk5b3llnnUWdOnVo0aIFhx9+OO+99x6HHXYYl112WWmneMmSJUCYInL99dczY8YM6tSpw9KlS/nss88AaN68OUcddVTGdp9xxhmlbXn66afT5jnttNOoU6cObdq0KS23oKCAe++9l3fffZc2bdrw1VdfsXz5cmbPns3IkSMZO3Zsufejffv2DBs2jF//+tf069ePgoICFi9ezOLFi/nRj34EwJYtW2jWrMx6fCB8Ibr66qt59dVXqV+/fsZrrMh9+NnPflb675VXXgnAP/7xj9IvJwBff/01a9asgdCJ7wF8QvjCP1jSwcBKM1srKdNUym8JU/w+Tqr6UzNLvJ8+BgwlDCRl85KZfQN8I+lz4EDCtMLEFE8kvZDpZJ8S6JyriN2mE29mkwkjsKnpM4GWadKHZyjq+8DKmKeE0Dm/Ps35dwB3pKQ9RZjOka59w5OOiwlzupOff5Uw4pN63nzCh01GZjYwU9kpzw0kDTPLSXncK+n4lqSnMrXxj4SFplnLNrMxJC00Tan36viXfO50YHrS48uSjrPdl2OBh+Mce+cqxMw477zzuP3227Pma9CgQelx3bp1006nAYjrNbZ5fM8993DggQeyYMECSkpKaNgwzFYbN24cK1asoKioiPr165OTk8PGjRsBaNy4cYXaU7duXTZv3lxumxMj/AcffDBfffUVkyZNokePHqxcuZInn3ySJk2asNdee1XofrRs2ZKioiJefvllrrvuOvr27cvpp59O27ZtmT07+5KZdevWcdZZZ/Hggw9y0EEhpkC9evUoKSkpzZO4BxW5D8n3O3FcUlLC7Nmz2XPPPVOzryGMvh8K3ACcTlhwn1hLlZhKuc1niqRelJ16mGlaZrapnJmmCTrnXJXZbabTVIX4c+YTwH3V3Ra3fSQ9A5yLv4auknr37s3EiRP5/PPPAVi5ciWffPLJdpc3YcIESkpK+PDDD/noo49o1aoVq1evplmzZtSpU4e//e1vpXPMV69ezQEHHED9+vWZNm3ad6q3Mrp37869995Ljx49KCgoYMSIERQUhJklFbkfy5Yto1GjRpxzzjkMGzaMefPm0apVK1asWFHaid+0aRPvvFP2x8NBgwYxaNCg0vogzLWfNy9EiZ03bx4ff/xxmfMySczHHz9+PN27dwegb9++3H///aV55s8vjVuwCdgPaGFmHwGvE9YMJTrxmaZSpnNoYmof8LNYFmSfypnO68CP4xTPJoTIac45t912m5H4qhB3KC0zau92H2Z2enW3we2e2rRpw29/+1v69u1LSUkJ9evX509/+lPa+dcV0apVK3r27Mlnn33GqFGjaNiwIZdccglnnnkmEyZM4LjjjisdXT777LP58Y9/TH5+Pnl5ebRunXYmWZUrKChgypQp/OAHP6B58+asXLmytFNdkfuxaNEirr76aurUqUP9+vV54IEH2GOPPZg4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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1a1bb8bac8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"_,ax = plt.subplots(1,2,figsize = (10,10))\n",
"reload(F)\n",
"F.plot_feat_importance(ax[0],subject_model,Subject_vectorizor)\n",
"F.plot_feat_importance(ax[1],body_model,Body_vectorizor);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Fitting the model for the concatenated matricies\n",
"The first thing I need to do is to concatinate the two matricies I have created into a single matrix that contains both but has a higher weight for the subject lines. \n",
"\n",
"This contains the matrix for both the subject lines and the body elements of each email.\n",
"\n",
"Here I am weighting the subject line 3x more heavily than the body words, Cool\n",
"\n",
"Below is the code to do that:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"--------------------------------------------------\n",
"The resulting size after concatenation is: (702, 515167)\n",
"--------------------------------------------------\n"
]
}
],
"source": [
"from scipy.sparse import hstack\n",
"from scipy import sparse\n",
"\n",
"#concat\n",
"sub_and_body = np.concatenate((body_matrix.todense(),3*subject_matrix.todense()),axis = 1)\n",
"\n",
"#convert back to sparse\n",
"sub_and_body = sparse.csr_matrix(sub_and_body)\n",
"\n",
"#print the resulting matrix size\n",
"print('-'*50)\n",
"print('The resulting size after concatenation is: ',\n",
" sub_and_body.shape)\n",
"print('-'*50)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Training the Final Model:\n",
"Now that we concatenated the matricies together, we can predict off of the new dataset. We need to first fit our model, then load the testing dataset and apply the same vectorization to it. Once we get this done we can predict off the test dataset.\n",
"\n",
"For this I am going to use the **GradientBoostingClassifier** from Sklearn. This is a great classifier and fairly robust. More information can be found from sklean documentation on this specific classifier."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.ensemble import GradientBoostingClassifier as GB\n",
"import pandas as pd\n",
"\n",
"#Train the final model\n",
"total_model = GB(n_estimators = 200, learning_rate = .01)\n",
"total_model.fit(sub_and_body,target);"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Total clasfication percent correct: 98.14814814814815 %\n"
]
}
],
"source": [
"print('Total clasfication percent correct: ',\n",
" sum(target == total_model.predict(sub_and_body))/len(target)*100,\n",
" '%')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wow! Thats really great prediction on the training data. Lets move on and apply this to the test dataset which was already split out:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Load in the testing dataset, vectorize, and then concatinate\n",
"**Make sure to apply the same weight as before to the subject line matrix**"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"#extract a corpus for the bodys, subjects, and targets\n",
"docs,subjects, target = F.extract_features(test_dir)\n",
"\n",
"#transform into matrix format\n",
"body_matrix = Body_vectorizor.transform(docs)\n",
"subject_matrix = Subject_vectorizor.transform(subjects)\n",
"\n",
"sub_and_body = np.concatenate((body_matrix.todense(),3*subject_matrix.todense()),axis = 1)\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Total clasfication percent correct: 91.15384615384615 %\n"
]
}
],
"source": [
"print('Total clasfication percent correct: ',\n",
" sum(target == total_model.predict(sub_and_body))/len(target)*100,\n",
" '%')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wow we are getting really great results. \n",
"\n",
"I was very careful to ensure that there was no data-leakage, and I am excited to impliment this system as my personal spam detection software.\n",
"\n",
"This is really cool though. Using this method I was able to classify whether or not something was spam to over 90% accuracy. \n",
"\n",
"If I where to use this on my own personal email list, I could classify specific senders as spam along with the application of predicting based on the subject line and text body. I would need to optimize this to do a better job by using ROC curves and using information about the number of false postitives and true negatives. Since I have such great accuracy, I could ensure that there are virtually zero false positives and using this make sure that I never miss an important email. Rad!\n",
"\n",
"### Next steps\n",
"- Look at the number of true positives and false positive\n",
"- plot roc curve\n",
"- Decide where a good cutoff is for my spam filter"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.6.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment