diff --git a/your-code/.ipynb_checkpoints/More Supervised Learning Models-checkpoint.ipynb b/your-code/.ipynb_checkpoints/More Supervised Learning Models-checkpoint.ipynb
new file mode 100755
index 0000000..63031c3
--- /dev/null
+++ b/your-code/.ipynb_checkpoints/More Supervised Learning Models-checkpoint.ipynb
@@ -0,0 +1,383 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# More Supervised Learning Models\n",
+ "\n",
+ "\n",
+ "**Lesson Goals**\n",
+ "\n",
+ "In this lesson we will expand our repertoire of supervised learning models by introducing naive bayes and k-nearest neighbors. These are two supervised learning models that are typically used for classification problems.\n",
+ "\n",
+ "\n",
+ "**Introduction**\n",
+ "\n",
+ "So far, we have discovered a few models for supervised learning. In this lesson, we will explore two different classification models. Naive Bayes is a probabilistic model for classification. K Nearest Neighbors is a model that makes a prediction based on the observations closest to it. Both models make certain assumptions for us to consider them.\n",
+ "\n",
+ "\n",
+ "# Naive Bayes\n",
+ "\n",
+ "You may recall Bayes Theorem for conditional probability. This theorem states that the probability of A given B is the probability of the intersection of A and B divided by the probability of B.\n",
+ "\n",
+ "We use this rule to create a general model. Say we would like to make a revenue prediction for our e-commerce site. Using Bayes Theorem, we can make a prediction of a customer making a purchase given the version of the website they see and the customer group they are in.\n",
+ "\n",
+ "It is important to note that the Naive Bayes algorithm makes a conditional independence assumption. This means that the effect of a single predictor on the outcome is independent on the values of the other predictor variables. This is a simplifying assumption that cannot always be made in some scenarios. Therefore, we should try to see if making this assumption may or may not work with our data.\n",
+ "\n",
+ "To calculate the probability of a customer making a purchase given that they are a millennial and looking at site version 1. We are using the model to compute probabilities and compare them. Therefore, we don't care about the denominator. We then get rid of the denominator and change our equation from being equal to, to being proportional to the probability of a purchase given customer group and site version."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Gaussian Naive Bayes\n",
+ "\n",
+ "Instead of looking at a probability distribution table, we can make the assumption that our likelihood comes from a Gaussian (or normal) distribution.\n",
+ "\n",
+ "To examine the code in Scikit-Learn, we will look at the famous Iris dataset. This dataset was first introduced by Ronald Fisher in 1936 and is used in many classification examples. The Iris dataset contains 4 features for Iris flowers (petal length, petal width, sepal length, and sepal width). The measurements in these variables are used to classify the type of Iris flower. We will import the dataset from Scikit-Learn and then fit the GaussianNB model to the data.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[5.1, 3.5, 1.4, 0.2],\n",
+ " [4.9, 3. , 1.4, 0.2],\n",
+ " [4.7, 3.2, 1.3, 0.2],\n",
+ " [4.6, 3.1, 1.5, 0.2],\n",
+ " [5. , 3.6, 1.4, 0.2],\n",
+ " [5.4, 3.9, 1.7, 0.4],\n",
+ " [4.6, 3.4, 1.4, 0.3],\n",
+ " [5. , 3.4, 1.5, 0.2],\n",
+ " [4.4, 2.9, 1.4, 0.2],\n",
+ " [4.9, 3.1, 1.5, 0.1]])"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn import datasets\n",
+ "from sklearn.naive_bayes import GaussianNB\n",
+ "\n",
+ "iris = datasets.load_iris()\n",
+ "iris.data[:10]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The iris dataset contains the features in the data section and the classification in the target.\n",
+ "\n",
+ "Next, we will initialize the GaussianNB model and fit the model. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "gnb = GaussianNB()\n",
+ "y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can then generate predictions and compare the predictions with the observed data.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[50, 0, 0],\n",
+ " [ 0, 47, 3],\n",
+ " [ 0, 3, 47]])"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn import metrics\n",
+ "\n",
+ "y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)\n",
+ "metrics.confusion_matrix(iris.target, y_pred)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The accuracy of a model is measured by how many observations are classified correctly. All the data correctly classified appears in a confusion matrix along the diagonal. So out of 150 observations, only 6 are incorrectly classified.\n",
+ "\n",
+ "\n",
+ "\n",
+ "# K-Nearest Neighbors\n",
+ "\n",
+ "This algorithm is based on the idea that observations in a \"neighorbood\" will have the same classification. We typically decide whether observations are considered neighbors by a distance metric of our choice. Two common choices for distance metrics are Euclidean distance (defined as the sum of squared distances) or L1 distance (defined as the sum of the absolute value of the distances). We look at the labels of all the observations in the \"neighborhood\" and assign the most common label (the mode) to the observation that we are trying to predict.\n",
+ "\n",
+ "Our choice of k is defined by us. We can test different models with multiple values of k and select the model with the highest accuracy. This is the most common way to optimize k.\n",
+ "\n",
+ "**Advantages and Disadvantages of K-Nearest Neighbors**\n",
+ "\n",
+ "The main advantage is that while we can train a model and then apply it to new data, we do not have to perform this process. We can use the k closest observations with known labels to predict the label of the new observations and make predictions on the fly. However, this means that every time we make a prediction, we have to compute the distance between the observation and all labeled data. This can be computationally intensive and a disadvantage of this algorithm."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**K-Nearest Neighbors with Scikit-Learn**\n",
+ "\n",
+ "We are able to apply a K-Nearest Neighbors model to our data using the KNeighborsClassifier in Scikit-Learn. In the example below, we will use the abalone data from the UCI dataset repository. This data contains 8 features describing different abalone observations. Using these features, we are able to predict the sex of the abalone (Male, Female, or Infant).\n",
+ "\n",
+ "We'll start by loading the data and examining it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Sex
\n",
+ "
Length
\n",
+ "
Diameter
\n",
+ "
Height
\n",
+ "
Whole_Weight
\n",
+ "
Shucked_Weight
\n",
+ "
Visecra_Weight
\n",
+ "
Shell_Weight
\n",
+ "
Rings
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
M
\n",
+ "
0.455
\n",
+ "
0.365
\n",
+ "
0.095
\n",
+ "
0.5140
\n",
+ "
0.2245
\n",
+ "
0.1010
\n",
+ "
0.150
\n",
+ "
15
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
M
\n",
+ "
0.350
\n",
+ "
0.265
\n",
+ "
0.090
\n",
+ "
0.2255
\n",
+ "
0.0995
\n",
+ "
0.0485
\n",
+ "
0.070
\n",
+ "
7
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
F
\n",
+ "
0.530
\n",
+ "
0.420
\n",
+ "
0.135
\n",
+ "
0.6770
\n",
+ "
0.2565
\n",
+ "
0.1415
\n",
+ "
0.210
\n",
+ "
9
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
M
\n",
+ "
0.440
\n",
+ "
0.365
\n",
+ "
0.125
\n",
+ "
0.5160
\n",
+ "
0.2155
\n",
+ "
0.1140
\n",
+ "
0.155
\n",
+ "
10
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
I
\n",
+ "
0.330
\n",
+ "
0.255
\n",
+ "
0.080
\n",
+ "
0.2050
\n",
+ "
0.0895
\n",
+ "
0.0395
\n",
+ "
0.055
\n",
+ "
7
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Sex Length Diameter Height Whole_Weight Shucked_Weight Visecra_Weight \\\n",
+ "0 M 0.455 0.365 0.095 0.5140 0.2245 0.1010 \n",
+ "1 M 0.350 0.265 0.090 0.2255 0.0995 0.0485 \n",
+ "2 F 0.530 0.420 0.135 0.6770 0.2565 0.1415 \n",
+ "3 M 0.440 0.365 0.125 0.5160 0.2155 0.1140 \n",
+ "4 I 0.330 0.255 0.080 0.2050 0.0895 0.0395 \n",
+ "\n",
+ " Shell_Weight Rings \n",
+ "0 0.150 15 \n",
+ "1 0.070 7 \n",
+ "2 0.210 9 \n",
+ "3 0.155 10 \n",
+ "4 0.055 7 "
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "\n",
+ "abalone_url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.data'\n",
+ "abalone_cols = ['Sex', 'Length', 'Diameter', 'Height', 'Whole_Weight', \n",
+ " 'Shucked_Weight', 'Visecra_Weight', 'Shell_Weight', 'Rings']\n",
+ "abalone = pd.read_csv(abalone_url, names=abalone_cols)\n",
+ "abalone.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Next, we will load the KNeighborsClassifier from Scikit-Learn and create a model with k=3. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n",
+ " metric_params=None, n_jobs=None, n_neighbors=5, p=2,\n",
+ " weights='uniform')"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.neighbors import KNeighborsClassifier\n",
+ "\n",
+ "# We create a list of all feature columns.\n",
+ "cols = [x for x in abalone.columns.values if x != 'Sex']\n",
+ "\n",
+ "neighbor_model = KNeighborsClassifier(n_neighbors=3)\n",
+ "neighbor_model.fit(abalone[cols], abalone['Sex']) \n",
+ "KNeighborsClassifier()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now that we have created our model, we will create a single observation and predict the sex of this observation."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "['I']\n"
+ ]
+ }
+ ],
+ "source": [
+ "import numpy as np\n",
+ "\n",
+ "obs = np.array([[0.5, 0.3, 0.05, 0.6, 0.2, 0.1, 0.1, 8]])\n",
+ "print(neighbor_model.predict(obs))"
+ ]
+ },
+ {
+ "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.8.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/your-code/.ipynb_checkpoints/Supervised Learning Guided Lesson-checkpoint.ipynb b/your-code/.ipynb_checkpoints/Supervised Learning Guided Lesson-checkpoint.ipynb
new file mode 100755
index 0000000..42d2323
--- /dev/null
+++ b/your-code/.ipynb_checkpoints/Supervised Learning Guided Lesson-checkpoint.ipynb
@@ -0,0 +1,2333 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Supervised Learning Guided Lesson\n",
+ "\n",
+ "\n",
+ "**Lesson Goals**\n",
+ "\n",
+ "In this guided lesson, we will analyze a machine learning problem from start to finish and compare the performance of a few algorithms.\n",
+ "\n",
+ "\n",
+ "**Introduction**\n",
+ "\n",
+ "Many times as a data scientist or analyst, you are asked to perform classification tasks. In this lesson, we will evaluate a Kickstarter dataset. Perhaps we would like to find out what makes a kickstarter project successful. This analysis will lead us closer to making recommendations that will improve the chances of getting funded.\n",
+ "\n",
+ "\n",
+ "**The data**\n",
+ "\n",
+ "The kickstarter dataset is provided on Kaggle. It contains 15 columns and over 300,000 rows. Let's do some exploratory data analysis to find out more about our data.\n",
+ "\n",
+ "We start with our imports:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%matplotlib inline\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import pandas as pd"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Let's also set a format for floats to improve readability."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "pd.options.display.float_format = '{:.4f}'.format"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we'll read our dataset with pandas:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "kickstarter = pd.read_csv('../ks-projects-201801.csv')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Let's start by looking at the shape of our data and the column types."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(378661, 15)"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "kickstarter.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "ID int64\n",
+ "name object\n",
+ "category object\n",
+ "main_category object\n",
+ "currency object\n",
+ "deadline object\n",
+ "goal float64\n",
+ "launched object\n",
+ "pledged float64\n",
+ "state object\n",
+ "backers int64\n",
+ "country object\n",
+ "usd pledged float64\n",
+ "usd_pledged_real float64\n",
+ "usd_goal_real float64\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "kickstarter.dtypes"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we will evaluate all columns using the head function. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
ID
\n",
+ "
name
\n",
+ "
category
\n",
+ "
main_category
\n",
+ "
currency
\n",
+ "
deadline
\n",
+ "
goal
\n",
+ "
launched
\n",
+ "
pledged
\n",
+ "
state
\n",
+ "
backers
\n",
+ "
country
\n",
+ "
usd pledged
\n",
+ "
usd_pledged_real
\n",
+ "
usd_goal_real
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
1000002330
\n",
+ "
The Songs of Adelaide & Abullah
\n",
+ "
Poetry
\n",
+ "
Publishing
\n",
+ "
GBP
\n",
+ "
2015-10-09
\n",
+ "
1000.0000
\n",
+ "
2015-08-11 12:12:28
\n",
+ "
0.0000
\n",
+ "
failed
\n",
+ "
0
\n",
+ "
GB
\n",
+ "
0.0000
\n",
+ "
0.0000
\n",
+ "
1533.9500
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
1000003930
\n",
+ "
Greeting From Earth: ZGAC Arts Capsule For ET
\n",
+ "
Narrative Film
\n",
+ "
Film & Video
\n",
+ "
USD
\n",
+ "
2017-11-01
\n",
+ "
30000.0000
\n",
+ "
2017-09-02 04:43:57
\n",
+ "
2421.0000
\n",
+ "
failed
\n",
+ "
15
\n",
+ "
US
\n",
+ "
100.0000
\n",
+ "
2421.0000
\n",
+ "
30000.0000
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
1000004038
\n",
+ "
Where is Hank?
\n",
+ "
Narrative Film
\n",
+ "
Film & Video
\n",
+ "
USD
\n",
+ "
2013-02-26
\n",
+ "
45000.0000
\n",
+ "
2013-01-12 00:20:50
\n",
+ "
220.0000
\n",
+ "
failed
\n",
+ "
3
\n",
+ "
US
\n",
+ "
220.0000
\n",
+ "
220.0000
\n",
+ "
45000.0000
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
1000007540
\n",
+ "
ToshiCapital Rekordz Needs Help to Complete Album
\n",
+ "
Music
\n",
+ "
Music
\n",
+ "
USD
\n",
+ "
2012-04-16
\n",
+ "
5000.0000
\n",
+ "
2012-03-17 03:24:11
\n",
+ "
1.0000
\n",
+ "
failed
\n",
+ "
1
\n",
+ "
US
\n",
+ "
1.0000
\n",
+ "
1.0000
\n",
+ "
5000.0000
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
1000011046
\n",
+ "
Community Film Project: The Art of Neighborhoo...
\n",
+ "
Film & Video
\n",
+ "
Film & Video
\n",
+ "
USD
\n",
+ "
2015-08-29
\n",
+ "
19500.0000
\n",
+ "
2015-07-04 08:35:03
\n",
+ "
1283.0000
\n",
+ "
canceled
\n",
+ "
14
\n",
+ "
US
\n",
+ "
1283.0000
\n",
+ "
1283.0000
\n",
+ "
19500.0000
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " ID name \\\n",
+ "0 1000002330 The Songs of Adelaide & Abullah \n",
+ "1 1000003930 Greeting From Earth: ZGAC Arts Capsule For ET \n",
+ "2 1000004038 Where is Hank? \n",
+ "3 1000007540 ToshiCapital Rekordz Needs Help to Complete Album \n",
+ "4 1000011046 Community Film Project: The Art of Neighborhoo... \n",
+ "\n",
+ " category main_category currency deadline goal \\\n",
+ "0 Poetry Publishing GBP 2015-10-09 1000.0000 \n",
+ "1 Narrative Film Film & Video USD 2017-11-01 30000.0000 \n",
+ "2 Narrative Film Film & Video USD 2013-02-26 45000.0000 \n",
+ "3 Music Music USD 2012-04-16 5000.0000 \n",
+ "4 Film & Video Film & Video USD 2015-08-29 19500.0000 \n",
+ "\n",
+ " launched pledged state backers country usd pledged \\\n",
+ "0 2015-08-11 12:12:28 0.0000 failed 0 GB 0.0000 \n",
+ "1 2017-09-02 04:43:57 2421.0000 failed 15 US 100.0000 \n",
+ "2 2013-01-12 00:20:50 220.0000 failed 3 US 220.0000 \n",
+ "3 2012-03-17 03:24:11 1.0000 failed 1 US 1.0000 \n",
+ "4 2015-07-04 08:35:03 1283.0000 canceled 14 US 1283.0000 \n",
+ "\n",
+ " usd_pledged_real usd_goal_real \n",
+ "0 0.0000 1533.9500 \n",
+ "1 2421.0000 30000.0000 \n",
+ "2 220.0000 45000.0000 \n",
+ "3 1.0000 5000.0000 \n",
+ "4 1283.0000 19500.0000 "
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "kickstarter.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We should also look at the summary statistics for all the numeric columns using the describe function. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
ID
\n",
+ "
goal
\n",
+ "
pledged
\n",
+ "
backers
\n",
+ "
usd pledged
\n",
+ "
usd_pledged_real
\n",
+ "
usd_goal_real
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
count
\n",
+ "
378661.0000
\n",
+ "
378661.0000
\n",
+ "
378661.0000
\n",
+ "
378661.0000
\n",
+ "
374864.0000
\n",
+ "
378661.0000
\n",
+ "
378661.0000
\n",
+ "
\n",
+ "
\n",
+ "
mean
\n",
+ "
1074731191.9888
\n",
+ "
49080.7915
\n",
+ "
9682.9793
\n",
+ "
105.6175
\n",
+ "
7036.7289
\n",
+ "
9058.9241
\n",
+ "
45454.4015
\n",
+ "
\n",
+ "
\n",
+ "
std
\n",
+ "
619086204.3226
\n",
+ "
1183391.2591
\n",
+ "
95636.0100
\n",
+ "
907.1850
\n",
+ "
78639.7453
\n",
+ "
90973.3431
\n",
+ "
1152950.0551
\n",
+ "
\n",
+ "
\n",
+ "
min
\n",
+ "
5971.0000
\n",
+ "
0.0100
\n",
+ "
0.0000
\n",
+ "
0.0000
\n",
+ "
0.0000
\n",
+ "
0.0000
\n",
+ "
0.0100
\n",
+ "
\n",
+ "
\n",
+ "
25%
\n",
+ "
538263516.0000
\n",
+ "
2000.0000
\n",
+ "
30.0000
\n",
+ "
2.0000
\n",
+ "
16.9800
\n",
+ "
31.0000
\n",
+ "
2000.0000
\n",
+ "
\n",
+ "
\n",
+ "
50%
\n",
+ "
1075275634.0000
\n",
+ "
5200.0000
\n",
+ "
620.0000
\n",
+ "
12.0000
\n",
+ "
394.7200
\n",
+ "
624.3300
\n",
+ "
5500.0000
\n",
+ "
\n",
+ "
\n",
+ "
75%
\n",
+ "
1610148624.0000
\n",
+ "
16000.0000
\n",
+ "
4076.0000
\n",
+ "
56.0000
\n",
+ "
3034.0900
\n",
+ "
4050.0000
\n",
+ "
15500.0000
\n",
+ "
\n",
+ "
\n",
+ "
max
\n",
+ "
2147476221.0000
\n",
+ "
100000000.0000
\n",
+ "
20338986.2700
\n",
+ "
219382.0000
\n",
+ "
20338986.2700
\n",
+ "
20338986.2700
\n",
+ "
166361390.7100
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " ID goal pledged backers usd pledged \\\n",
+ "count 378661.0000 378661.0000 378661.0000 378661.0000 374864.0000 \n",
+ "mean 1074731191.9888 49080.7915 9682.9793 105.6175 7036.7289 \n",
+ "std 619086204.3226 1183391.2591 95636.0100 907.1850 78639.7453 \n",
+ "min 5971.0000 0.0100 0.0000 0.0000 0.0000 \n",
+ "25% 538263516.0000 2000.0000 30.0000 2.0000 16.9800 \n",
+ "50% 1075275634.0000 5200.0000 620.0000 12.0000 394.7200 \n",
+ "75% 1610148624.0000 16000.0000 4076.0000 56.0000 3034.0900 \n",
+ "max 2147476221.0000 100000000.0000 20338986.2700 219382.0000 20338986.2700 \n",
+ "\n",
+ " usd_pledged_real usd_goal_real \n",
+ "count 378661.0000 378661.0000 \n",
+ "mean 9058.9241 45454.4015 \n",
+ "std 90973.3431 1152950.0551 \n",
+ "min 0.0000 0.0100 \n",
+ "25% 31.0000 2000.0000 \n",
+ "50% 624.3300 5500.0000 \n",
+ "75% 4050.0000 15500.0000 \n",
+ "max 20338986.2700 166361390.7100 "
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "kickstarter.describe()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "1-What does all this information tell us?\n",
+ "\n",
+ " We can see which columns don't contain useful information for our predictions:\n",
+ " The ID column contains a unique identifier for each row and will not be useful for prediction.\n",
+ " \n",
+ " The name column also contains a unique identifier. Since our analysis is currently a quantitative one, we will not be using the information in this column. We might be interested in the information in this column if we were to perform natural language processing on the names.\n",
+ " \n",
+ " The category column contains highly detailed classification information. To use this information, we will need to generate dummy variables from this column. We might be creating too many dummy variables by using this column. Our goal is not to create an overcomplicated model. Therefore, we will most likely not be using the information in this column (unless our model proves to be very inaccurate without this information).\n",
+ " \n",
+ " There are multiple columns containing information about the total amount pledged. These columns may prove to be highly correlated. Therefore, we should probably only keep one.\n",
+ " \n",
+ " There seems to be a close relationship between country and currency. We should consider dropping one of those columns as well.\n",
+ "\n",
+ "2-The date columns (launched and deadline) will be transformed into a column measuring the length of the campaign in days.\n",
+ "\n",
+ "3-The backers and goal columns are highly skewed. We will evaluate whether we should drop the outliers in these columns or keep them.\n",
+ "\n",
+ "\n",
+ "**Exploring the Variables**\n",
+ "\n",
+ "Since we intend to predict the state variable, we will start with this variable."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "failed 197719\n",
+ "successful 133956\n",
+ "canceled 38779\n",
+ "undefined 3562\n",
+ "live 2799\n",
+ "suspended 1846\n",
+ "Name: state, dtype: int64"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "kickstarter.state.value_counts()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can evaluate the percent of projects in each group as well by setting normalize to True in the function. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "failed 0.5222\n",
+ "successful 0.3538\n",
+ "canceled 0.1024\n",
+ "undefined 0.0094\n",
+ "live 0.0074\n",
+ "suspended 0.0049\n",
+ "Name: state, dtype: float64"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "kickstarter.state.value_counts(normalize=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "It seems that about 52% of projects while about 35% have succeeded. The rest have classifications that really aren't relevant for our analysis. Therefore, we should remove these rows from our data."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "failed 0.5961\n",
+ "successful 0.4039\n",
+ "Name: state, dtype: float64"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "kickstarter_classify = kickstarter[kickstarter.state.isin(['failed', 'successful'])]\n",
+ "kickstarter_classify.state.value_counts(normalize=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we have a split of about 40% successful and 60% failed projects. Note that we assigned the filtered data to a new variable. It is always good practice to keep the old data around and assign transformed data to a new variable while performing exploratory data analysis. This reduces the chance of losing previous iterations of our data in case we make a mistake in our code.\n",
+ "\n",
+ "Next we look at the main_category column. We use the value_counts function to evaluate how many projects are in each category. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Film & Video 56527\n",
+ "Music 45949\n",
+ "Publishing 35445\n",
+ "Games 28521\n",
+ "Technology 27050\n",
+ "Art 25641\n",
+ "Design 25364\n",
+ "Food 22054\n",
+ "Fashion 19775\n",
+ "Theater 10242\n",
+ "Comics 9878\n",
+ "Photography 9689\n",
+ "Crafts 7818\n",
+ "Journalism 4149\n",
+ "Dance 3573\n",
+ "Name: main_category, dtype: int64"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "kickstarter_classify.main_category.value_counts()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "It seems like the most popular category is Film & Video while the least popular category is Dance.\n",
+ "\n",
+ "We can use the crosstab function to see how successful projects are in each category. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ],
+ "text/plain": [
+ "state failed successful success_rate\n",
+ "currency \n",
+ "AUD 4610 2011 0.3037\n",
+ "CAD 8238 4137 0.3343\n",
+ "CHF 465 187 0.2868\n",
+ "DKK 567 362 0.3897\n",
+ "EUR 10496 3882 0.2700\n",
+ "GBP 17395 12081 0.4099\n",
+ "HKD 261 216 0.4528\n",
+ "JPY 16 7 0.3043\n",
+ "MXN 1015 396 0.2807\n",
+ "NOK 421 163 0.2791\n",
+ "NZD 826 448 0.3516\n",
+ "SEK 1001 509 0.3371\n",
+ "SGD 276 178 0.3921\n",
+ "USD 152132 109379 0.4183"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "currency_crosstab = pd.crosstab(kickstarter_classify.currency,kickstarter_classify.state)\n",
+ "currency_crosstab['success_rate'] = currency_crosstab.successful/(currency_crosstab.successful+currency_crosstab.failed)\n",
+ "currency_crosstab"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "It seems that none of the currencies seem to break the 50% success rate. However, it looks like it does make a difference which currency you use since some are more successful than others.\n",
+ "\n",
+ "\n",
+ "\n",
+ "# Visualizing the Data\n",
+ "\n",
+ "It would be useful to see the distribution of project length for both successful and failed projects. To do this, we will transform the variable and then plot a side-by-side histogram.\n",
+ "\n",
+ "First, we will transform the variable. Currently the date variables are stored as text. We saw this in the output of the dtypes function. Therefore, the first step in finding the project duration is to convert both columns to a datetime type. After this conversion, we will find the difference between the columns, round it to days, and then assign this data to a new column. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "kick_classify=kickstarter_classify.copy()\n",
+ "kick_classify['launched_date'] = pd.to_datetime(kick_classify.launched)\n",
+ "kick_classify['deadline_date'] = pd.to_datetime(kick_classify.deadline)\n",
+ "kick_classify['duration'] = (kick_classify.deadline_date - kick_classify.launched_date).dt.days"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Initially, we plot the histogram of all durations.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "kick_classify.duration.hist();"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The majority of projects last around a month.\n",
+ "\n",
+ "Let's plot the successful and failed projects side by side to see if their distributions differ."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "kick_classify.duration.hist(by=kick_classify.state);"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The majority of both failed and successful projects last about a month.\n",
+ "\n",
+ "Next up is the goal in real US Dollar."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "kick_classify.usd_goal_real.hist();"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "It seems like there is an outlier that is preventing us to see the distribution.\n",
+ "\n",
+ "Perhaps if we increase the number of bins, this should give us a better picture of the distribution."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAEJCAYAAABohnsfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAF8xJREFUeJzt3X+w3XWd3/HnSyJKdRWQ3VsGWIM1MzZIBc0A/pj2KlsIdKbBqTowdMlqatwKO7tTZiqunWJVpvoHy4yu0olLxuBQkWXXQt24mCJ37I4NvxQJ4LJcAZekCCvhx0ZHbNh3/zifi4frTe4nN+Gee+D5mDlzv+f9/Xw/3/f5esYX5/v9npNUFZIk9XjJqBuQJI0PQ0OS1M3QkCR1MzQkSd0MDUlSN0NDktTN0JAkdTM0JEndDA1JUrdlo27gQDviiCNq+fLlC9r2pz/9Ka94xSsObEOLwL4Xzzj2DPa92Max79tvv/0nVfXr8417wYXG8uXLue222xa07dTUFJOTkwe2oUVg34tnHHsG+15s49h3kh/1jPP0lCSpm6EhSepmaEiSuhkakqRuhoYkqZuhIUnqZmhIkroZGpKkboaGJKmboTFk244nWX7RX7D8or8YdSuStCQZGpKkboaGJKmboSFJ6mZoSJK6GRqSpG6GhiSpm6EhSepmaEiSuhkakqRuhoYkqZuhIUnqZmhIkroZGpKkboaGJKmboSFJ6jZvaCR5eZJbknw/yd1J/kurH5vk5iTTSb6a5OBWf1l7Pt3WLx+a66Otfm+S04fqq1ttOslFQ/U59yFJGo2eTxpPA++qqjcBJwCrk5wCfAa4rKpeDzwOrGvj1wGPt/plbRxJVgJnA8cBq4EvJDkoyUHA54EzgJXAOW0se9mHJGkE5g2NGtjVnr60PQp4F3Btq28CzmrLa9pz2vpTk6TVr66qp6vqAWAaOKk9pqvq/qr6BXA1sKZts6d9SJJGYFnPoPZp4Hbg9Qw+FfwQeKKqdrch24Gj2vJRwEMAVbU7yZPAa1p969C0w9s8NKt+cttmT/uY3d96YD3AxMQEU1NTPS/rV0wcAhceP9jdQucYhV27do1VvzPGse9x7Bnse7GNa989ukKjqp4BTkhyKPA14A3Pa1f7qKo2ABsAVq1aVZOTkwua53NXXcel2waH5MFzFzbHKExNTbHQ1zxK49j3OPYM9r3YxrXvHvt091RVPQHcBLwVODTJTOgcDexoyzuAYwDa+lcDjw3XZ22zp/pje9mHJGkEeu6e+vX2CYMkhwD/EvgBg/B4Txu2FriuLV/fntPWf6uqqtXPbndXHQusAG4BbgVWtDulDmZwsfz6ts2e9iFJGoGe01NHApvadY2XANdU1deT3ANcneRTwPeAK9r4K4AvJ5kGdjIIAarq7iTXAPcAu4Hz22kvklwA3AAcBGysqrvbXB/Zwz4kSSMwb2hU1Z3AiXPU72dw59Ps+s+B9+5hrkuAS+aobwY29+5DkjQafiNcktTN0JAkdTM0JEndDA1JUjdDQ5LUzdCQJHUzNCRJ3QwNSVI3Q0OS1M3QkCR1MzQkSd0MDUlSN0NDktTN0JAkdTM0JEndDA1JUjdDQ5LUzdCQJHUzNCRJ3QwNSVI3Q0OS1M3QkCR1mzc0khyT5KYk9yS5O8nvt/rHk+xIckd7nDm0zUeTTCe5N8npQ/XVrTad5KKh+rFJbm71ryY5uNVf1p5Pt/XLD+SLlyTtm55PGruBC6tqJXAKcH6SlW3dZVV1QntsBmjrzgaOA1YDX0hyUJKDgM8DZwArgXOG5vlMm+v1wOPAulZfBzze6pe1cZKkEZk3NKrq4ar6blv+e+AHwFF72WQNcHVVPV1VDwDTwEntMV1V91fVL4CrgTVJArwLuLZtvwk4a2iuTW35WuDUNl6SNALL9mVwOz10InAz8HbggiTnAbcx+DTyOINA2Tq02XZ+GTIPzaqfDLwGeKKqds8x/qiZbapqd5In2/ifzOprPbAeYGJigqmpqX15Wc+aOAQuPH7QxkLnGIVdu3aNVb8zxrHvcewZ7HuxjWvfPbpDI8krgT8D/qCqnkpyOfBJoNrfS4EPPC9dzqOqNgAbAFatWlWTk5MLmudzV13HpdsGh+TBcxc2xyhMTU2x0Nc8SuPY9zj2DPa92Ma17x5dd08leSmDwLiqqv4coKoeqapnquofgC8yOP0EsAM4Zmjzo1ttT/XHgEOTLJtVf85cbf2r23hJ0gj03D0V4ArgB1X1R0P1I4eGvRu4qy1fD5zd7nw6FlgB3ALcCqxod0odzOBi+fVVVcBNwHva9muB64bmWtuW3wN8q42XJI1Az+mptwO/DWxLcker/SGDu59OYHB66kHgQwBVdXeSa4B7GNx5dX5VPQOQ5ALgBuAgYGNV3d3m+whwdZJPAd9jEFK0v19OMg3sZBA0kqQRmTc0quqvgLnuWNq8l20uAS6Zo755ru2q6n5+eXpruP5z4L3z9ShJWhx+I1yS1M3QkCR1MzQkSd0MDUlSN0NDktTN0JAkdTM0JEndDA1JUjdDQ5LUzdCQJHUzNCRJ3QwNSVI3Q0OS1M3QkCR1MzQkSd0MDUlSN0NDktTN0JAkdTM0JEndDA1JUjdDQ5LUzdCQJHWbNzSSHJPkpiT3JLk7ye+3+uFJtiS5r/09rNWT5LNJppPcmeTNQ3OtbePvS7J2qP6WJNvaNp9Nkr3tQ5I0Gj2fNHYDF1bVSuAU4PwkK4GLgBuragVwY3sOcAawoj3WA5fDIACAi4GTgZOAi4dC4HLgg0PbrW71Pe1DkjQC84ZGVT1cVd9ty38P/AA4ClgDbGrDNgFnteU1wJU1sBU4NMmRwOnAlqraWVWPA1uA1W3dq6pqa1UVcOWsuebahyRpBPbpmkaS5cCJwM3ARFU93Fb9GJhoy0cBDw1ttr3V9lbfPkedvexDkjQCy3oHJnkl8GfAH1TVU+2yAwBVVUnqeeivax9J1jM4FcbExARTU1ML2sfEIXDh8bsBFjzHKOzatWus+p0xjn2PY89g34ttXPvu0RUaSV7KIDCuqqo/b+VHkhxZVQ+3U0yPtvoO4JihzY9utR3A5Kz6VKsfPcf4ve3jOapqA7ABYNWqVTU5OTnXsHl97qrruHTb4JA8eO7C5hiFqakpFvqaR2kc+x7HnsG+F9u49t2j5+6pAFcAP6iqPxpadT0wcwfUWuC6ofp57S6qU4An2ymmG4DTkhzWLoCfBtzQ1j2V5JS2r/NmzTXXPiRJI9DzSePtwG8D25Lc0Wp/CHwauCbJOuBHwPvaus3AmcA08DPg/QBVtTPJJ4Fb27hPVNXOtvxh4EvAIcA32oO97EOSNALzhkZV/RWQPaw+dY7xBZy/h7k2AhvnqN8GvHGO+mNz7UOSNBp+I1yS1M3QkCR1MzQkSd0MDUlSN0NDktTN0JAkdTM0JEndDA1JUjdDQ5LUzdCQJHUzNCRJ3QwNSVI3Q0OS1M3QkCR1MzQkSd0MDUlSN0NDktTN0JAkdTM0JEndDA1JUjdDQ5LUzdCQJHWbNzSSbEzyaJK7hmofT7IjyR3tcebQuo8mmU5yb5LTh+qrW206yUVD9WOT3NzqX01ycKu/rD2fbuuXH6gXLUlamJ5PGl8CVs9Rv6yqTmiPzQBJVgJnA8e1bb6Q5KAkBwGfB84AVgLntLEAn2lzvR54HFjX6uuAx1v9sjZOkjRC84ZGVX0b2Nk53xrg6qp6uqoeAKaBk9pjuqrur6pfAFcDa5IEeBdwbdt+E3DW0Fyb2vK1wKltvCRpRPbnmsYFSe5sp68Oa7WjgIeGxmxvtT3VXwM8UVW7Z9WfM1db/2QbL0kakWUL3O5y4JNAtb+XAh84UE3tqyTrgfUAExMTTE1NLWieiUPgwuMH+bXQOUZh165dY9XvjHHsexx7BvtebOPad48FhUZVPTKznOSLwNfb0x3AMUNDj2419lB/DDg0ybL2aWJ4/Mxc25MsA17dxs/VzwZgA8CqVatqcnJyIS+Lz111HZduGxySB89d2ByjMDU1xUJf8yiNY9/j2DPY92Ib1757LOj0VJIjh56+G5i5s+p64Ox259OxwArgFuBWYEW7U+pgBhfLr6+qAm4C3tO2XwtcNzTX2rb8HuBbbbwkaUTm/aSR5CvAJHBEku3AxcBkkhMYnJ56EPgQQFXdneQa4B5gN3B+VT3T5rkAuAE4CNhYVXe3XXwEuDrJp4DvAVe0+hXAl5NMM7gQf/Z+v1pJ0n6ZNzSq6pw5ylfMUZsZfwlwyRz1zcDmOer3M7i7anb958B75+tPkrR4/Ea4JKmboSFJ6mZoSJK6GRqSpG6GhiSpm6EhSepmaEiSuhkakqRuhoYkqZuhIUnqZmhIkroZGpKkboaGJKmboSFJ6mZoSJK6GRqSpG6GhiSpm6EhSepmaEiSuhkakqRuhoYkqZuhIUnqZmhIkrrNGxpJNiZ5NMldQ7XDk2xJcl/7e1irJ8lnk0wnuTPJm4e2WdvG35dk7VD9LUm2tW0+myR724ckaXR6Pml8CVg9q3YRcGNVrQBubM8BzgBWtMd64HIYBABwMXAycBJw8VAIXA58cGi71fPsQ5I0IvOGRlV9G9g5q7wG2NSWNwFnDdWvrIGtwKFJjgROB7ZU1c6qehzYAqxu615VVVurqoArZ8011z4kSSOybIHbTVTVw235x8BEWz4KeGho3PZW21t9+xz1ve3jVyRZz+CTDRMTE0xNTe3jy2k7PAQuPH43wILnGIVdu3aNVb8zxrHvcewZ7HuxjWvfPRYaGs+qqkpSB6KZhe6jqjYAGwBWrVpVk5OTC9rP5666jku3DQ7Jg+cubI5RmJqaYqGveZTGse9x7Bnse7GNa989Fnr31CPt1BLt76OtvgM4Zmjc0a22t/rRc9T3tg9J0ogsNDSuB2bugFoLXDdUP6/dRXUK8GQ7xXQDcFqSw9oF8NOAG9q6p5Kc0u6aOm/WXHPtQ5I0IvOenkryFWASOCLJdgZ3QX0auCbJOuBHwPva8M3AmcA08DPg/QBVtTPJJ4Fb27hPVNXMxfUPM7hD6xDgG+3BXvYhSRqReUOjqs7Zw6pT5xhbwPl7mGcjsHGO+m3AG+eoPzbXPiRJo+M3wiVJ3QwNSVI3Q0OS1M3QkCR1MzQkSd0MDUlSN0NDktTN0JAkdTM0JEndDA1JUjdDQ5LUzdCQJHUzNCRJ3QwNSVI3Q0OS1M3QkCR1MzQkSd0MDUlSN0NDktTN0JAkdTM0JEndDA1JUrf9Co0kDybZluSOJLe12uFJtiS5r/09rNWT5LNJppPcmeTNQ/OsbePvS7J2qP6WNv902zb7068kaf8ciE8a76yqE6pqVXt+EXBjVa0AbmzPAc4AVrTHeuByGIQMcDFwMnAScPFM0LQxHxzabvUB6FeStEDPx+mpNcCmtrwJOGuofmUNbAUOTXIkcDqwpap2VtXjwBZgdVv3qqraWlUFXDk0lyRpBPY3NAr4ZpLbk6xvtYmqergt/xiYaMtHAQ8Nbbu91fZW3z5HXZI0Isv2c/t3VNWOJL8BbEny18Mrq6qS1H7uY14tsNYDTExMMDU1taB5Jg6BC4/fDbDgOUZh165dY9XvjHHsexx7BvtebOPad4/9Co2q2tH+PprkawyuSTyS5MiqeridYnq0Dd8BHDO0+dGttgOYnFWfavWj5xg/Vx8bgA0Aq1atqsnJybmGzetzV13HpdsGh+TBcxc2xyhMTU2x0Nc8SuPY9zj2DPa92Ma17x4LPj2V5BVJfm1mGTgNuAu4Hpi5A2otcF1bvh44r91FdQrwZDuNdQNwWpLD2gXw04Ab2rqnkpzS7po6b2guSdII7M8njQnga+0u2GXAf6+qv0xyK3BNknXAj4D3tfGbgTOBaeBnwPsBqmpnkk8Ct7Zxn6iqnW35w8CXgEOAb7SHJGlEFhwaVXU/8KY56o8Bp85RL+D8Pcy1Edg4R/024I0L7VGSdGD5jXBJUjdDQ5LUzdCQJHUzNCRJ3QwNSVI3Q0OS1M3QkCR1MzQkSd0MDUlSN0NDktTN0JAkdTM0JEndDA1JUjdDQ5LUzdCQJHUzNCRJ3QwNSVI3Q0OS1M3QkCR1MzQkSd0MDUlSN0NDktRtyYdGktVJ7k0yneSiUfcjSS9mSzo0khwEfB44A1gJnJNk5Wi7kqQXryUdGsBJwHRV3V9VvwCuBtaMuCdJetFa6qFxFPDQ0PPtrSZJGoFlo27gQEiyHljfnu5Kcu8CpzoC+AlAPnMgOls0z/Y9Zsax73HsGex7sY1j36/tGbTUQ2MHcMzQ86Nb7TmqagOwYX93luS2qlq1v/MsNvtePOPYM9j3YhvXvnss9dNTtwIrkhyb5GDgbOD6EfckSS9aS/qTRlXtTnIBcANwELCxqu4ecVuS9KK1pEMDoKo2A5sXaXf7fYprROx78Yxjz2Dfi21c+55XqmrUPUiSxsRSv6YhSVpCXjShMd/PkSR5WZKvtvU3J1k+tO6jrX5vktOXUM//Ick9Se5McmOS1w6teybJHe2xqDcPdPT9O0n+bqi/fze0bm2S+9pj7RLr+7Khnv8myRND60ZyvJNsTPJokrv2sD5JPtte051J3jy0bpTHer6+z239bkvynSRvGlr3YKvfkeS2xeu6q+/JJE8OvRf+89C6F8ZPIlXVC/7B4CL6D4HXAQcD3wdWzhrzYeC/teWzga+25ZVt/MuAY9s8By2Rnt8J/KO2/O9nem7Pdy3hY/07wB/Pse3hwP3t72Ft+bCl0ves8b/H4MaMUR/vfw68GbhrD+vPBL4BBDgFuHnUx7qz77fN9MPgZ4RuHlr3IHDEEj3ek8DX9/f9tZQfL5ZPGj0/R7IG2NSWrwVOTZJWv7qqnq6qB4DpNt/Ie66qm6rqZ+3pVgbfYxm1/fnpl9OBLVW1s6oeB7YAq5+nPmfb177PAb6yKJ3tRVV9G9i5lyFrgCtrYCtwaJIjGe2xnrfvqvpO6wuWznu753jvyQvmJ5FeLKHR83Mkz46pqt3Ak8BrOrd9Puzrftcx+C/KGS9PcluSrUnOej4a3IPevv9NO/1wbZKZL3CO8mdjuvfdTgMeC3xrqDyq4z2fPb2ucfqJntnv7QK+meT29msQS81bk3w/yTeSHNdq43S892rJ33Kr+SX5t8Aq4F8MlV9bVTuSvA74VpJtVfXD0XT4K/4n8JWqejrJhxh8wnvXiHvaF2cD11bVM0O1pXy8x1aSdzIIjXcMld/RjvVvAFuS/HX7BLAUfJfBe2FXkjOB/wGsGHFPB9SL5ZNGz8+RPDsmyTLg1cBjnds+H7r2m+S3gI8B/7qqnp6pV9WO9vd+YAo48flsdsi8fVfVY0O9/gnwlt5tn0f7su+zmXVqaoTHez57el2jPNZdkvwzBu+PNVX12Ex96Fg/CnyNxTld3KWqnqqqXW15M/DSJEcwBse726gvqizGg8EnqvsZnFKYuQh13Kwx5/PcC+HXtOXjeO6F8PtZnAvhPT2fyODi2opZ9cOAl7XlI4D7WKSLbp19Hzm0/G5ga1s+HHig9X9YWz58qfTdxr2BwYXYLIXj3fa5nD1fmP1XPPdC+C2jPtadff8mg+uHb5tVfwXwa0PL3wFWL6G+/zG//P7bScDftmPf9f4ah8fIG1jE/6HPBP6m/Z/sx1rtEwz+Cx3g5cCftjfqLcDrhrb9WNvuXuCMJdTz/wIeAe5oj+tb/W3AtvbG3AasW2LH+r8Cd7f+bgLeMLTtB9r/BtPA+5dS3+35x4FPz9puZMebwSeeh4H/x+A8+Trgd4HfbevD4B8y+2HrbdUSOdbz9f0nwOND7+3bWv117Th/v72HPrbE+r5g6L29laHQm+v9NY4PvxEuSer2YrmmIUk6AAwNSVI3Q0OS1M3QkCR1MzQkaYzN9yOKs8b+ZpKbknyv/SLDmfu6P0NDksbbl+j/3bD/xOA7aCcy+D7aF/Z1Z4aGJI2xmuNHFJP8kyR/2X6f638necPMcOBVbfnVwP/d1/3521OS9MKzgcEXDu9LcjKDTxTvYvDl1G8m+T0G36j/rX2d2NCQpBeQJK9k8CsFfzr41x2Awc8gweAn/b9UVZcmeSvw5SRvrKp/6J3f0JCkF5aXAE9U1QlzrFtHu/5RVf8nycsZ/F7ao/syuSTpBaKqngIeSPJeePaf/J3553L/Fji11f8pg9/c+7t9md/fnpKkMZbkKwz+mdkjGPyA6cUM/oGwy4EjgZcy+NdHP5FkJfBF4JUMLor/x6r65j7tz9CQJPXy9JQkqZuhIUnqZmhIkroZGpKkboaGJKmboSFJ6mZoSJK6GRqSpG7/H4XiQSLR5Go3AAAAAElFTkSuQmCC\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "kick_classify.usd_goal_real.hist(bins=100);"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "It looks like this still isn't enough to give us a more granular view of the distribution.\n",
+ "\n",
+ "Let's try to evaluate how many outliers there are and whether they are intentional or perhaps they should be removed.\n",
+ "\n",
+ "First, let's look at the largest value."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "166361390.71"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "max(kick_classify.usd_goal_real)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The max value is about $166 million dollars.\n",
+ "\n",
+ "Let's look at the projects asking for more than a million dollars in real USD goal."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
ID
\n",
+ "
name
\n",
+ "
category
\n",
+ "
main_category
\n",
+ "
currency
\n",
+ "
deadline
\n",
+ "
goal
\n",
+ "
launched
\n",
+ "
pledged
\n",
+ "
state
\n",
+ "
backers
\n",
+ "
country
\n",
+ "
usd pledged
\n",
+ "
usd_pledged_real
\n",
+ "
usd_goal_real
\n",
+ "
launched_date
\n",
+ "
deadline_date
\n",
+ "
duration
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
340
\n",
+ "
1001542282
\n",
+ "
You in a novel
\n",
+ "
Publishing
\n",
+ "
Publishing
\n",
+ "
EUR
\n",
+ "
2015-11-09
\n",
+ "
1000000.0000
\n",
+ "
2015-09-10 23:03:21
\n",
+ "
10.0000
\n",
+ "
failed
\n",
+ "
1
\n",
+ "
IT
\n",
+ "
11.1800
\n",
+ "
10.7600
\n",
+ "
1076403.0900
\n",
+ "
2015-09-10 23:03:21
\n",
+ "
2015-11-09
\n",
+ "
59
\n",
+ "
\n",
+ "
\n",
+ "
971
\n",
+ "
1004941506
\n",
+ "
Maori MBT Awareness Centre
\n",
+ "
Web
\n",
+ "
Journalism
\n",
+ "
CAD
\n",
+ "
2017-10-18
\n",
+ "
2000000.0000
\n",
+ "
2017-08-19 22:13:55
\n",
+ "
2242.0000
\n",
+ "
failed
\n",
+ "
19
\n",
+ "
CA
\n",
+ "
1160.6700
\n",
+ "
1794.4600
\n",
+ "
1600768.3700
\n",
+ "
2017-08-19 22:13:55
\n",
+ "
2017-10-18
\n",
+ "
59
\n",
+ "
\n",
+ "
\n",
+ "
1042
\n",
+ "
1005237669
\n",
+ "
The Old Soul of a Lion
\n",
+ "
Film & Video
\n",
+ "
Film & Video
\n",
+ "
USD
\n",
+ "
2014-10-14
\n",
+ "
3000000.0000
\n",
+ "
2014-08-15 20:16:22
\n",
+ "
4.0000
\n",
+ "
failed
\n",
+ "
2
\n",
+ "
US
\n",
+ "
4.0000
\n",
+ "
4.0000
\n",
+ "
3000000.0000
\n",
+ "
2014-08-15 20:16:22
\n",
+ "
2014-10-14
\n",
+ "
59
\n",
+ "
\n",
+ "
\n",
+ "
1144
\n",
+ "
1005820080
\n",
+ "
The Million Pound Shirt
\n",
+ "
Fashion
\n",
+ "
Fashion
\n",
+ "
GBP
\n",
+ "
2015-11-25
\n",
+ "
1000000.0000
\n",
+ "
2015-10-21 22:00:04
\n",
+ "
10.0000
\n",
+ "
failed
\n",
+ "
1
\n",
+ "
GB
\n",
+ "
15.4700
\n",
+ "
15.0500
\n",
+ "
1505185.3600
\n",
+ "
2015-10-21 22:00:04
\n",
+ "
2015-11-25
\n",
+ "
34
\n",
+ "
\n",
+ "
\n",
+ "
1795
\n",
+ "
1009207145
\n",
+ "
** GOLIATH **
\n",
+ "
Product Design
\n",
+ "
Design
\n",
+ "
CAD
\n",
+ "
2014-07-21
\n",
+ "
3850000.0000
\n",
+ "
2014-06-21 22:34:21
\n",
+ "
285.0000
\n",
+ "
failed
\n",
+ "
5
\n",
+ "
CA
\n",
+ "
263.4100
\n",
+ "
264.6700
\n",
+ "
3575408.6200
\n",
+ "
2014-06-21 22:34:21
\n",
+ "
2014-07-21
\n",
+ "
29
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " ID name category main_category \\\n",
+ "340 1001542282 You in a novel Publishing Publishing \n",
+ "971 1004941506 Maori MBT Awareness Centre Web Journalism \n",
+ "1042 1005237669 The Old Soul of a Lion Film & Video Film & Video \n",
+ "1144 1005820080 The Million Pound Shirt Fashion Fashion \n",
+ "1795 1009207145 ** GOLIATH ** Product Design Design \n",
+ "\n",
+ " currency deadline goal launched pledged state \\\n",
+ "340 EUR 2015-11-09 1000000.0000 2015-09-10 23:03:21 10.0000 failed \n",
+ "971 CAD 2017-10-18 2000000.0000 2017-08-19 22:13:55 2242.0000 failed \n",
+ "1042 USD 2014-10-14 3000000.0000 2014-08-15 20:16:22 4.0000 failed \n",
+ "1144 GBP 2015-11-25 1000000.0000 2015-10-21 22:00:04 10.0000 failed \n",
+ "1795 CAD 2014-07-21 3850000.0000 2014-06-21 22:34:21 285.0000 failed \n",
+ "\n",
+ " backers country usd pledged usd_pledged_real usd_goal_real \\\n",
+ "340 1 IT 11.1800 10.7600 1076403.0900 \n",
+ "971 19 CA 1160.6700 1794.4600 1600768.3700 \n",
+ "1042 2 US 4.0000 4.0000 3000000.0000 \n",
+ "1144 1 GB 15.4700 15.0500 1505185.3600 \n",
+ "1795 5 CA 263.4100 264.6700 3575408.6200 \n",
+ "\n",
+ " launched_date deadline_date duration \n",
+ "340 2015-09-10 23:03:21 2015-11-09 59 \n",
+ "971 2017-08-19 22:13:55 2017-10-18 59 \n",
+ "1042 2014-08-15 20:16:22 2014-10-14 59 \n",
+ "1144 2015-10-21 22:00:04 2015-11-25 34 \n",
+ "1795 2014-06-21 22:34:21 2014-07-21 29 "
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "kick_classify[kick_classify.usd_goal_real > 1000000].head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "These seem to be legitimate projects.\n",
+ "\n",
+ "Let's look at the success breakdown:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "failed 829\n",
+ "successful 11\n",
+ "Name: state, dtype: int64"
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "kick_classify[kick_classify.usd_goal_real > 1000000].state.value_counts()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Only 11 projects of the 840 projects asking for more than a million dollars were successful. Since the data seems legitimate and not erroneously entered, we will keep these rows in the dataset.\n",
+ "\n",
+ "The next step is to look at the correlation between the numeric variables to determine that there are no highly correlated variables."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
ID
\n",
+ "
goal
\n",
+ "
pledged
\n",
+ "
backers
\n",
+ "
usd pledged
\n",
+ "
usd_pledged_real
\n",
+ "
usd_goal_real
\n",
+ "
duration
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
ID
\n",
+ "
1.0000
\n",
+ "
0.0019
\n",
+ "
0.0009
\n",
+ "
0.0008
\n",
+ "
-0.0003
\n",
+ "
0.0003
\n",
+ "
0.0018
\n",
+ "
0.0028
\n",
+ "
\n",
+ "
\n",
+ "
goal
\n",
+ "
0.0019
\n",
+ "
1.0000
\n",
+ "
0.0080
\n",
+ "
0.0048
\n",
+ "
0.0064
\n",
+ "
0.0060
\n",
+ "
0.9526
\n",
+ "
0.0227
\n",
+ "
\n",
+ "
\n",
+ "
pledged
\n",
+ "
0.0009
\n",
+ "
0.0080
\n",
+ "
1.0000
\n",
+ "
0.7173
\n",
+ "
0.8580
\n",
+ "
0.9536
\n",
+ "
0.0057
\n",
+ "
0.0081
\n",
+ "
\n",
+ "
\n",
+ "
backers
\n",
+ "
0.0008
\n",
+ "
0.0048
\n",
+ "
0.7173
\n",
+ "
1.0000
\n",
+ "
0.6975
\n",
+ "
0.7523
\n",
+ "
0.0052
\n",
+ "
-0.0000
\n",
+ "
\n",
+ "
\n",
+ "
usd pledged
\n",
+ "
-0.0003
\n",
+ "
0.0064
\n",
+ "
0.8580
\n",
+ "
0.6975
\n",
+ "
1.0000
\n",
+ "
0.9077
\n",
+ "
0.0070
\n",
+ "
0.0077
\n",
+ "
\n",
+ "
\n",
+ "
usd_pledged_real
\n",
+ "
0.0003
\n",
+ "
0.0060
\n",
+ "
0.9536
\n",
+ "
0.7523
\n",
+ "
0.9077
\n",
+ "
1.0000
\n",
+ "
0.0064
\n",
+ "
0.0087
\n",
+ "
\n",
+ "
\n",
+ "
usd_goal_real
\n",
+ "
0.0018
\n",
+ "
0.9526
\n",
+ "
0.0057
\n",
+ "
0.0052
\n",
+ "
0.0070
\n",
+ "
0.0064
\n",
+ "
1.0000
\n",
+ "
0.0216
\n",
+ "
\n",
+ "
\n",
+ "
duration
\n",
+ "
0.0028
\n",
+ "
0.0227
\n",
+ "
0.0081
\n",
+ "
-0.0000
\n",
+ "
0.0077
\n",
+ "
0.0087
\n",
+ "
0.0216
\n",
+ "
1.0000
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " ID goal pledged backers usd pledged \\\n",
+ "ID 1.0000 0.0019 0.0009 0.0008 -0.0003 \n",
+ "goal 0.0019 1.0000 0.0080 0.0048 0.0064 \n",
+ "pledged 0.0009 0.0080 1.0000 0.7173 0.8580 \n",
+ "backers 0.0008 0.0048 0.7173 1.0000 0.6975 \n",
+ "usd pledged -0.0003 0.0064 0.8580 0.6975 1.0000 \n",
+ "usd_pledged_real 0.0003 0.0060 0.9536 0.7523 0.9077 \n",
+ "usd_goal_real 0.0018 0.9526 0.0057 0.0052 0.0070 \n",
+ "duration 0.0028 0.0227 0.0081 -0.0000 0.0077 \n",
+ "\n",
+ " usd_pledged_real usd_goal_real duration \n",
+ "ID 0.0003 0.0018 0.0028 \n",
+ "goal 0.0060 0.9526 0.0227 \n",
+ "pledged 0.9536 0.0057 0.0081 \n",
+ "backers 0.7523 0.0052 -0.0000 \n",
+ "usd pledged 0.9077 0.0070 0.0077 \n",
+ "usd_pledged_real 1.0000 0.0064 0.0087 \n",
+ "usd_goal_real 0.0064 1.0000 0.0216 \n",
+ "duration 0.0087 0.0216 1.0000 "
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "kick_classify.corr()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The most correlated variables are USD pledged and USD pledged real and goal and USD goal real. Pledged and backers are moderately correlated with a correlation of 0.7173. Since the more backers we have, the more pledged money we have, we are better off removing that variable as well.\n",
+ "\n",
+ "Before creating our model, we should ensure that there is no missing data. Some models will not produce a meaningful result with missing data. If there is a significant amount of missing data, then we should come up with a meaningful strategy to address the missing data."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "ID 0\n",
+ "name 3\n",
+ "category 0\n",
+ "main_category 0\n",
+ "currency 0\n",
+ "deadline 0\n",
+ "goal 0\n",
+ "launched 0\n",
+ "pledged 0\n",
+ "state 0\n",
+ "backers 0\n",
+ "country 0\n",
+ "usd pledged 210\n",
+ "usd_pledged_real 0\n",
+ "usd_goal_real 0\n",
+ "launched_date 0\n",
+ "deadline_date 0\n",
+ "duration 0\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "kick_classify.isnull().sum(axis = 0)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The only variable containing missing data is the amount of pledged dollars. This confirms that we should remove this column.\n",
+ "\n",
+ "\n",
+ "\n",
+ "# Preparing the Data\n",
+ "\n",
+ "At this point we will start to prepare the data for applying ML algorithms to the data.\n",
+ "\n",
+ "The first step is to pick only the columns that we decided to keep as well as separating the data to predictor (x) and response (y) variables. We use the get dummies function on the response variables to convert them from categorical values to a variable containing zeros and ones. We use the drop_first option to ensure that we only get one column (since for n values, the drop_first option will create n-1 variable) "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "kickstarter_variables = kick_classify[['usd_goal_real', 'backers', 'main_category', 'duration', 'currency']]\n",
+ "kickstarter_y = pd.get_dummies(data=kickstarter_classify['state'], drop_first=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The next step in our data processing is to convert the categorical variables to dummy variables using the get_dummies function. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
usd_goal_real
\n",
+ "
backers
\n",
+ "
duration
\n",
+ "
main_category_Comics
\n",
+ "
main_category_Crafts
\n",
+ "
main_category_Dance
\n",
+ "
main_category_Design
\n",
+ "
main_category_Fashion
\n",
+ "
main_category_Film & Video
\n",
+ "
main_category_Food
\n",
+ "
...
\n",
+ "
currency_EUR
\n",
+ "
currency_GBP
\n",
+ "
currency_HKD
\n",
+ "
currency_JPY
\n",
+ "
currency_MXN
\n",
+ "
currency_NOK
\n",
+ "
currency_NZD
\n",
+ "
currency_SEK
\n",
+ "
currency_SGD
\n",
+ "
currency_USD
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
1533.9500
\n",
+ "
0
\n",
+ "
58
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
...
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
30000.0000
\n",
+ "
15
\n",
+ "
59
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
45000.0000
\n",
+ "
3
\n",
+ "
44
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
5000.0000
\n",
+ "
1
\n",
+ "
29
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
5
\n",
+ "
50000.0000
\n",
+ "
224
\n",
+ "
34
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 30 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " usd_goal_real backers duration main_category_Comics \\\n",
+ "0 1533.9500 0 58 0 \n",
+ "1 30000.0000 15 59 0 \n",
+ "2 45000.0000 3 44 0 \n",
+ "3 5000.0000 1 29 0 \n",
+ "5 50000.0000 224 34 0 \n",
+ "\n",
+ " main_category_Crafts main_category_Dance main_category_Design \\\n",
+ "0 0 0 0 \n",
+ "1 0 0 0 \n",
+ "2 0 0 0 \n",
+ "3 0 0 0 \n",
+ "5 0 0 0 \n",
+ "\n",
+ " main_category_Fashion main_category_Film & Video main_category_Food ... \\\n",
+ "0 0 0 0 ... \n",
+ "1 0 1 0 ... \n",
+ "2 0 1 0 ... \n",
+ "3 0 0 0 ... \n",
+ "5 0 0 1 ... \n",
+ "\n",
+ " currency_EUR currency_GBP currency_HKD currency_JPY currency_MXN \\\n",
+ "0 0 1 0 0 0 \n",
+ "1 0 0 0 0 0 \n",
+ "2 0 0 0 0 0 \n",
+ "3 0 0 0 0 0 \n",
+ "5 0 0 0 0 0 \n",
+ "\n",
+ " currency_NOK currency_NZD currency_SEK currency_SGD currency_USD \n",
+ "0 0 0 0 0 0 \n",
+ "1 0 0 0 0 1 \n",
+ "2 0 0 0 0 1 \n",
+ "3 0 0 0 0 1 \n",
+ "5 0 0 0 0 1 \n",
+ "\n",
+ "[5 rows x 30 columns]"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "kickstarter_x = pd.get_dummies(data=kickstarter_variables, columns=['main_category', 'currency'], drop_first=True)\n",
+ "kickstarter_x.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Using the head function shows us that we have increased the number of columns from the 5 that we initially selected to 30 columns total.\n",
+ "\n",
+ "The final step in the processing phase is to separate the data into test and train datasets. We do this to ensure that our model performs well even on the data that was not used for training. This is how we reduce overfitting. We randomly select 80% of the data for the training dataset and the remaining 20% is used for the test dataset."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.model_selection import train_test_split\n",
+ "\n",
+ "X_train, X_test, y_train, y_test = train_test_split(kickstarter_x, kickstarter_y.values, test_size=0.2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Creating the Model\n",
+ "\n",
+ "Since this is a classification problem, there are a number of algorithms at our disposal. Logistic regression is a good choice for our problem. Another good choice is random forest. SVM is also a suitable option for this type of problem. However, due to how SVM is implemented in scikit-learn, it is not recommended to use this algorithm on data with more than 10000 rows. Therefore, we will avoid using this algorithm for now, even though it is otherwise a good choice for this type of problem.\n",
+ "\n",
+ "\n",
+ "**Logistic Regression**\n",
+ "\n",
+ "First we generate our model and then we will proceed to evaluate it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.linear_model import LogisticRegression\n",
+ "\n",
+ "y_train=y_train.reshape(len(y_train),)\n",
+ "\n",
+ "ks_model = LogisticRegression(solver='lbfgs', max_iter=200).fit(X_train, y_train)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "One way to evaluate the model is using a confusion matrix. The confusion matrix specifies how many observations were correctly classified and how many were incorrectly classified.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[37681, 1858],\n",
+ " [ 4533, 22263]])"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.metrics import confusion_matrix\n",
+ "\n",
+ "y_pred_test = ks_model.predict(X_test)\n",
+ "confusion_matrix(y_test, y_pred_test)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The first entry in our matrix is the number of observations correctly classified as 0 (or failure). The second entry in the matrix are all entries incorrectly classified as 1 (or success). These observations are actually zeros but our algorithm classified them as 1. The third entry contains the count of all observations incorrectly classified as zero (or failure). The last entry contains the count of observations correctly classified as 1. Our goal is to maximize the first and last entries (the correctly classified observations) and minimize the incorrectly classified information. As we can see, out of 66335 observations, 60048 (or 90.5%) are correctly classified.\n",
+ "\n",
+ "We have previously looked at the ROC curve. Recall that this curve is a measure of describing how well our algorithm classifies the data. The better our classification algorithm, the larger the area under the curve (also known as AUC=Area Under the Curve).\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import warnings\n",
+ "warnings.filterwarnings(\"ignore\", category=RuntimeWarning) \n",
+ "\n",
+ "from sklearn import metrics\n",
+ "\n",
+ "y_pred_proba = ks_model.predict_proba(X_test)[::,1]\n",
+ "fpr, tpr, _ = metrics.roc_curve(y_test, y_pred_proba)\n",
+ "auc = metrics.roc_auc_score(y_test, y_pred_proba)\n",
+ "\n",
+ "plt.plot(fpr,tpr);"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.9568587216249149"
+ ]
+ },
+ "execution_count": 32,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "auc"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The area under the curve is over 0.95. This is a decent number, but perhaps we could do better with a different algorithm.\n",
+ "\n",
+ "\n",
+ "**Random Forest**\n",
+ "\n",
+ "Random forest is an ensemble algorithm. This means that it resamples the data multiple times and generates a decision tree from each sample. We then think of the trees as a group of algorithms. We base our decision on the outcome of the majority of algorithms in the ensemble."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.ensemble import RandomForestClassifier\n",
+ "\n",
+ "ks_rf = RandomForestClassifier(n_estimators=100).fit(X_train, y_train)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here is our confusion matrix:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[36889, 2650],\n",
+ " [ 2437, 24359]])"
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "y_pred_test_rf = ks_rf.predict(X_test)\n",
+ "confusion_matrix(y_test, y_pred_test_rf)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Let's plot the ROC curve for the random forest that we have generated."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "y_pred_proba_rf = ks_rf.predict_proba(X_test)[::,1]\n",
+ "fpr, tpr, _ = metrics.roc_curve(y_test, y_pred_proba_rf)\n",
+ "auc = metrics.roc_auc_score(y_test, y_pred_proba_rf)\n",
+ "\n",
+ "plt.plot(fpr,tpr);"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.9745193821360216"
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "auc"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "While our AUC was already high, we have improved the score using the random forest algorithm."
+ ]
+ },
+ {
+ "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.8.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/your-code/.ipynb_checkpoints/main-checkpoint.ipynb b/your-code/.ipynb_checkpoints/main-checkpoint.ipynb
new file mode 100755
index 0000000..ffcc919
--- /dev/null
+++ b/your-code/.ipynb_checkpoints/main-checkpoint.ipynb
@@ -0,0 +1,2154 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Before your start:\n",
+ "- Read the README.md file\n",
+ "- Comment as much as you can and use the resources in the README.md file\n",
+ "- Happy learning!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Import your libraries:\n",
+ "\n",
+ "%matplotlib inline\n",
+ "\n",
+ "import numpy as np\n",
+ "import pandas as pd"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In this lab, we will explore a dataset that describes websites with different features and labels them either benign or malicious . We will use supervised learning algorithms to figure out what feature patterns malicious websites are likely to have and use our model to predict malicious websites.\n",
+ "\n",
+ "# Challenge 1 - Explore The Dataset\n",
+ "\n",
+ "Let's start by exploring the dataset. First load the data file:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "websites = pd.read_csv('../website.csv')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Explore the data from an bird's-eye view.\n",
+ "\n",
+ "You should already been very familiar with the procedures now so we won't provide the instructions step by step. Reflect on what you did in the previous labs and explore the dataset.\n",
+ "\n",
+ "Things you'll be looking for:\n",
+ "\n",
+ "* What the dataset looks like?\n",
+ "* What are the data types?\n",
+ "* Which columns contain the features of the websites?\n",
+ "* Which column contains the feature we will predict? What is the code standing for benign vs malicious websites?\n",
+ "* Do we need to transform any of the columns from categorical to ordinal values? If so what are these columns?\n",
+ "\n",
+ "Feel free to add additional cells for your explorations. Make sure to comment what you find out."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
URL
\n",
+ "
URL_LENGTH
\n",
+ "
NUMBER_SPECIAL_CHARACTERS
\n",
+ "
CHARSET
\n",
+ "
SERVER
\n",
+ "
CONTENT_LENGTH
\n",
+ "
WHOIS_COUNTRY
\n",
+ "
WHOIS_STATEPRO
\n",
+ "
WHOIS_REGDATE
\n",
+ "
WHOIS_UPDATED_DATE
\n",
+ "
...
\n",
+ "
DIST_REMOTE_TCP_PORT
\n",
+ "
REMOTE_IPS
\n",
+ "
APP_BYTES
\n",
+ "
SOURCE_APP_PACKETS
\n",
+ "
REMOTE_APP_PACKETS
\n",
+ "
SOURCE_APP_BYTES
\n",
+ "
REMOTE_APP_BYTES
\n",
+ "
APP_PACKETS
\n",
+ "
DNS_QUERY_TIMES
\n",
+ "
Type
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
M0_109
\n",
+ "
16
\n",
+ "
7
\n",
+ "
iso-8859-1
\n",
+ "
nginx
\n",
+ "
263.0
\n",
+ "
None
\n",
+ "
None
\n",
+ "
10/10/2015 18:21
\n",
+ "
None
\n",
+ "
...
\n",
+ "
0
\n",
+ "
2
\n",
+ "
700
\n",
+ "
9
\n",
+ "
10
\n",
+ "
1153
\n",
+ "
832
\n",
+ "
9
\n",
+ "
2.0
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
B0_2314
\n",
+ "
16
\n",
+ "
6
\n",
+ "
UTF-8
\n",
+ "
Apache/2.4.10
\n",
+ "
15087.0
\n",
+ "
None
\n",
+ "
None
\n",
+ "
None
\n",
+ "
None
\n",
+ "
...
\n",
+ "
7
\n",
+ "
4
\n",
+ "
1230
\n",
+ "
17
\n",
+ "
19
\n",
+ "
1265
\n",
+ "
1230
\n",
+ "
17
\n",
+ "
0.0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
B0_911
\n",
+ "
16
\n",
+ "
6
\n",
+ "
us-ascii
\n",
+ "
Microsoft-HTTPAPI/2.0
\n",
+ "
324.0
\n",
+ "
None
\n",
+ "
None
\n",
+ "
None
\n",
+ "
None
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0.0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
B0_113
\n",
+ "
17
\n",
+ "
6
\n",
+ "
ISO-8859-1
\n",
+ "
nginx
\n",
+ "
162.0
\n",
+ "
US
\n",
+ "
AK
\n",
+ "
7/10/1997 4:00
\n",
+ "
12/09/2013 0:45
\n",
+ "
...
\n",
+ "
22
\n",
+ "
3
\n",
+ "
3812
\n",
+ "
39
\n",
+ "
37
\n",
+ "
18784
\n",
+ "
4380
\n",
+ "
39
\n",
+ "
8.0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
B0_403
\n",
+ "
17
\n",
+ "
6
\n",
+ "
UTF-8
\n",
+ "
None
\n",
+ "
124140.0
\n",
+ "
US
\n",
+ "
TX
\n",
+ "
12/05/1996 0:00
\n",
+ "
11/04/2017 0:00
\n",
+ "
...
\n",
+ "
2
\n",
+ "
5
\n",
+ "
4278
\n",
+ "
61
\n",
+ "
62
\n",
+ "
129889
\n",
+ "
4586
\n",
+ "
61
\n",
+ "
4.0
\n",
+ "
0
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 21 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " URL URL_LENGTH NUMBER_SPECIAL_CHARACTERS CHARSET \\\n",
+ "0 M0_109 16 7 iso-8859-1 \n",
+ "1 B0_2314 16 6 UTF-8 \n",
+ "2 B0_911 16 6 us-ascii \n",
+ "3 B0_113 17 6 ISO-8859-1 \n",
+ "4 B0_403 17 6 UTF-8 \n",
+ "\n",
+ " SERVER CONTENT_LENGTH WHOIS_COUNTRY WHOIS_STATEPRO \\\n",
+ "0 nginx 263.0 None None \n",
+ "1 Apache/2.4.10 15087.0 None None \n",
+ "2 Microsoft-HTTPAPI/2.0 324.0 None None \n",
+ "3 nginx 162.0 US AK \n",
+ "4 None 124140.0 US TX \n",
+ "\n",
+ " WHOIS_REGDATE WHOIS_UPDATED_DATE ... DIST_REMOTE_TCP_PORT REMOTE_IPS \\\n",
+ "0 10/10/2015 18:21 None ... 0 2 \n",
+ "1 None None ... 7 4 \n",
+ "2 None None ... 0 0 \n",
+ "3 7/10/1997 4:00 12/09/2013 0:45 ... 22 3 \n",
+ "4 12/05/1996 0:00 11/04/2017 0:00 ... 2 5 \n",
+ "\n",
+ " APP_BYTES SOURCE_APP_PACKETS REMOTE_APP_PACKETS SOURCE_APP_BYTES \\\n",
+ "0 700 9 10 1153 \n",
+ "1 1230 17 19 1265 \n",
+ "2 0 0 0 0 \n",
+ "3 3812 39 37 18784 \n",
+ "4 4278 61 62 129889 \n",
+ "\n",
+ " REMOTE_APP_BYTES APP_PACKETS DNS_QUERY_TIMES Type \n",
+ "0 832 9 2.0 1 \n",
+ "1 1230 17 0.0 0 \n",
+ "2 0 0 0.0 0 \n",
+ "3 4380 39 8.0 0 \n",
+ "4 4586 61 4.0 0 \n",
+ "\n",
+ "[5 rows x 21 columns]"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "websites.head()\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "URL object\n",
+ "URL_LENGTH int64\n",
+ "NUMBER_SPECIAL_CHARACTERS int64\n",
+ "CHARSET object\n",
+ "SERVER object\n",
+ "CONTENT_LENGTH float64\n",
+ "WHOIS_COUNTRY object\n",
+ "WHOIS_STATEPRO object\n",
+ "WHOIS_REGDATE object\n",
+ "WHOIS_UPDATED_DATE object\n",
+ "TCP_CONVERSATION_EXCHANGE int64\n",
+ "DIST_REMOTE_TCP_PORT int64\n",
+ "REMOTE_IPS int64\n",
+ "APP_BYTES int64\n",
+ "SOURCE_APP_PACKETS int64\n",
+ "REMOTE_APP_PACKETS int64\n",
+ "SOURCE_APP_BYTES int64\n",
+ "REMOTE_APP_BYTES int64\n",
+ "APP_PACKETS int64\n",
+ "DNS_QUERY_TIMES float64\n",
+ "Type int64\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "websites.dtypes"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "URL 0\n",
+ "URL_LENGTH 0\n",
+ "NUMBER_SPECIAL_CHARACTERS 0\n",
+ "CHARSET 0\n",
+ "SERVER 1\n",
+ "CONTENT_LENGTH 812\n",
+ "WHOIS_COUNTRY 0\n",
+ "WHOIS_STATEPRO 0\n",
+ "WHOIS_REGDATE 0\n",
+ "WHOIS_UPDATED_DATE 0\n",
+ "TCP_CONVERSATION_EXCHANGE 0\n",
+ "DIST_REMOTE_TCP_PORT 0\n",
+ "REMOTE_IPS 0\n",
+ "APP_BYTES 0\n",
+ "SOURCE_APP_PACKETS 0\n",
+ "REMOTE_APP_PACKETS 0\n",
+ "SOURCE_APP_BYTES 0\n",
+ "REMOTE_APP_BYTES 0\n",
+ "APP_PACKETS 0\n",
+ "DNS_QUERY_TIMES 1\n",
+ "Type 0\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "websites.isnull().sum()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "websites.CONTENT_LENGTH.fillna(websites.CONTENT_LENGTH.mean(), inplace= True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(1779, 21)"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "websites.dropna(axis=0, inplace= True)\n",
+ "websites.shape"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Parece que la columna Type es la que marca la maliciosidad (1). Los tipos de las columnas parecen estar bien**"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Next, evaluate if the columns in this dataset are strongly correlated.\n",
+ "\n",
+ "In the Mushroom supervised learning lab we did recently, we mentioned we are concerned if our dataset has strongly correlated columns because if it is the case we need to choose certain ML algorithms instead of others. We need to evaluate this for our dataset now.\n",
+ "\n",
+ "Luckily, most of the columns in this dataset are ordinal which makes things a lot easier for us. In the next cells below, evaluate the level of collinearity of the data.\n",
+ "\n",
+ "We provide some general directions for you to consult in order to complete this step:\n",
+ "\n",
+ "1. You will create a correlation matrix using the numeric columns in the dataset.\n",
+ "\n",
+ "1. Create a heatmap using `seaborn` to visualize which columns have high collinearity.\n",
+ "\n",
+ "1. Comment on which columns you might need to remove due to high collinearity."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "sns.heatmap(corr);"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Your comment here"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Challenge 2 - Remove Column Collinearity.\n",
+ "\n",
+ "From the heatmap you created, you should have seen at least 3 columns that can be removed due to high collinearity. Remove these columns from the dataset.\n",
+ "\n",
+ "Note that you should remove as few columns as you can. You don't have to remove all the columns at once. But instead, try removing one column, then produce the heatmap again to determine if additional columns should be removed. As long as the dataset no longer contains columns that are correlated for over 90%, you can stop. Also, keep in mind when two columns have high collinearity, you only need to remove one of them but not both.\n",
+ "\n",
+ "In the cells below, remove as few columns as you can to eliminate the high collinearity in the dataset. Make sure to comment on your way so that the instructional team can learn about your thinking process which allows them to give feedback. At the end, print the heatmap again."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "webmens = websites.drop(['SOURCE_APP_BYTES', 'REMOTE_APP_BYTES', 'URL_LENGTH', 'TCP_CONVERSATION_EXCHANGE', 'SOURCE_APP_PACKETS', 'REMOTE_APP_PACKETS'], axis=1)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "