Skip to content

Instantly share code, notes, and snippets.

@codistwa
Created May 25, 2023 14:10
Show Gist options
  • Save codistwa/e651d45f6414e59c4643c114629baf51 to your computer and use it in GitHub Desktop.
Save codistwa/e651d45f6414e59c4643c114629baf51 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "legitimate-candy",
"metadata": {},
"source": [
"## Problem statement"
]
},
{
"cell_type": "markdown",
"id": "hourly-species",
"metadata": {},
"source": [
"Whether this passenger will survive or not"
]
},
{
"cell_type": "markdown",
"id": "apart-designer",
"metadata": {},
"source": [
"## 1. Importing Libraries"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "atlantic-strike",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np #for algebraic operations on arrays\n",
"import pandas as pd #for data exploration and manipulation\n",
"\n",
"# plotting libraries\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"%matplotlib inline\n",
"\n",
"from mlxtend.plotting import plot_learning_curves"
]
},
{
"cell_type": "markdown",
"id": "fixed-juvenile",
"metadata": {},
"source": [
"## 2. Loading the dataset"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "opened-replication",
"metadata": {},
"outputs": [],
"source": [
"train = './titanic/train.csv'\n",
"test = './titanic/test.csv'\n",
"df_train = pd.read_csv(train)\n",
"df_test = pd.read_csv(test)"
]
},
{
"cell_type": "markdown",
"id": "generic-artist",
"metadata": {},
"source": [
"## 3. Exploratory data analysis"
]
},
{
"cell_type": "markdown",
"id": "opening-finding",
"metadata": {},
"source": [
"**Topics** (think like a stakeholder)\n",
"\n",
"- What question(s) are you trying to solve (or prove wrong)?\n",
"- What kind of data do you have and how do you treat different types?\n",
"- What’s missing from the data and how do you deal with it?\n",
"- Where are the outliers and why should you care about them?\n",
"- How can you add, change or remove features to get more out of your data?"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "banned-union",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Name</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Braund, Mr. Owen Harris</td>\n",
" <td>male</td>\n",
" <td>22.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>A/5 21171</td>\n",
" <td>7.2500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
" <td>female</td>\n",
" <td>38.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>PC 17599</td>\n",
" <td>71.2833</td>\n",
" <td>C85</td>\n",
" <td>C</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>Heikkinen, Miss. Laina</td>\n",
" <td>female</td>\n",
" <td>26.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>7.9250</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" <td>female</td>\n",
" <td>35.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>113803</td>\n",
" <td>53.1000</td>\n",
" <td>C123</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Allen, Mr. William Henry</td>\n",
" <td>male</td>\n",
" <td>35.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>373450</td>\n",
" <td>8.0500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
"\n",
" Name Sex Age SibSp \\\n",
"0 Braund, Mr. Owen Harris male 22.0 1 \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n",
"2 Heikkinen, Miss. Laina female 26.0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n",
"4 Allen, Mr. William Henry male 35.0 0 \n",
"\n",
" Parch Ticket Fare Cabin Embarked \n",
"0 0 A/5 21171 7.2500 NaN S \n",
"1 0 PC 17599 71.2833 C85 C \n",
"2 0 STON/O2. 3101282 7.9250 NaN S \n",
"3 0 113803 53.1000 C123 S \n",
"4 0 373450 8.0500 NaN S "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# View the first five lines\n",
"df_train.head()"
]
},
{
"cell_type": "markdown",
"id": "expensive-communist",
"metadata": {},
"source": [
"Our response label here is “Survived” which represents an answer to the classification question “Whether this passenger will survive or not”"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "hazardous-playback",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(891, 12)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_train.shape"
]
},
{
"cell_type": "markdown",
"id": "intimate-knowing",
"metadata": {},
"source": [
"There are 891 rows and 12 columns"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "directed-security",
"metadata": {},
"outputs": [],
"source": [
"# View the first five lines transposed (useful when the dataset is huge)\n",
"# df_train.head().T"
]
},
{
"cell_type": "markdown",
"id": "creative-premises",
"metadata": {},
"source": [
"**Survived** is the target variable for our ML model which we want to predict (1 or 0)\n",
"\n",
"It has 2 values:\n",
"\n",
"1 - Survived.\n",
"\n",
"0 - No survived."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "accepted-christmas",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 891 entries, 0 to 890\n",
"Data columns (total 12 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 PassengerId 891 non-null int64 \n",
" 1 Survived 891 non-null int64 \n",
" 2 Pclass 891 non-null int64 \n",
" 3 Name 891 non-null object \n",
" 4 Sex 891 non-null object \n",
" 5 Age 714 non-null float64\n",
" 6 SibSp 891 non-null int64 \n",
" 7 Parch 891 non-null int64 \n",
" 8 Ticket 891 non-null object \n",
" 9 Fare 891 non-null float64\n",
" 10 Cabin 204 non-null object \n",
" 11 Embarked 889 non-null object \n",
"dtypes: float64(2), int64(5), object(5)\n",
"memory usage: 83.7+ KB\n"
]
}
],
"source": [
"# checking data information\n",
"df_train.info()"
]
},
{
"cell_type": "markdown",
"id": "ongoing-orleans",
"metadata": {},
"source": [
"**Interpreting Data Information**\n",
"\n",
"- We have 891 rows, any column that contains lesser number of rows has missing values.\n",
"- We have 12 columns.\n",
"- There are categorical features that have data type float64.\n",
"- There are numerical features that have data type object.\n",
"\n",
"We can see some columns with missing values (less than the total) : Age, Cabin"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "backed-framing",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Fare</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>714.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>446.000000</td>\n",
" <td>0.383838</td>\n",
" <td>2.308642</td>\n",
" <td>29.699118</td>\n",
" <td>0.523008</td>\n",
" <td>0.381594</td>\n",
" <td>32.204208</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>257.353842</td>\n",
" <td>0.486592</td>\n",
" <td>0.836071</td>\n",
" <td>14.526497</td>\n",
" <td>1.102743</td>\n",
" <td>0.806057</td>\n",
" <td>49.693429</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.420000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>223.500000</td>\n",
" <td>0.000000</td>\n",
" <td>2.000000</td>\n",
" <td>20.125000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>7.910400</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>446.000000</td>\n",
" <td>0.000000</td>\n",
" <td>3.000000</td>\n",
" <td>28.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>14.454200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>668.500000</td>\n",
" <td>1.000000</td>\n",
" <td>3.000000</td>\n",
" <td>38.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>31.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>891.000000</td>\n",
" <td>1.000000</td>\n",
" <td>3.000000</td>\n",
" <td>80.000000</td>\n",
" <td>8.000000</td>\n",
" <td>6.000000</td>\n",
" <td>512.329200</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass Age SibSp \\\n",
"count 891.000000 891.000000 891.000000 714.000000 891.000000 \n",
"mean 446.000000 0.383838 2.308642 29.699118 0.523008 \n",
"std 257.353842 0.486592 0.836071 14.526497 1.102743 \n",
"min 1.000000 0.000000 1.000000 0.420000 0.000000 \n",
"25% 223.500000 0.000000 2.000000 20.125000 0.000000 \n",
"50% 446.000000 0.000000 3.000000 28.000000 0.000000 \n",
"75% 668.500000 1.000000 3.000000 38.000000 1.000000 \n",
"max 891.000000 1.000000 3.000000 80.000000 8.000000 \n",
"\n",
" Parch Fare \n",
"count 891.000000 891.000000 \n",
"mean 0.381594 32.204208 \n",
"std 0.806057 49.693429 \n",
"min 0.000000 0.000000 \n",
"25% 0.000000 7.910400 \n",
"50% 0.000000 14.454200 \n",
"75% 0.000000 31.000000 \n",
"max 6.000000 512.329200 "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# statistical summary of numerical variables\n",
"df_train.describe()"
]
},
{
"cell_type": "markdown",
"id": "diverse-proxy",
"metadata": {},
"source": [
"We can compare the mean of each column with the min/max value, to check if we might have outliers as there's a considerable difference between average value and max value.\n",
"\n",
"We can compare the general mean and standard deviation to see if we need to normalize the data as there's a considerable difference between all of them."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "false-canon",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Name</th>\n",
" <th>Sex</th>\n",
" <th>Ticket</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>891</td>\n",
" <td>891</td>\n",
" <td>891</td>\n",
" <td>204</td>\n",
" <td>889</td>\n",
" </tr>\n",
" <tr>\n",
" <th>unique</th>\n",
" <td>891</td>\n",
" <td>2</td>\n",
" <td>681</td>\n",
" <td>147</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>top</th>\n",
" <td>Young, Miss. Marie Grice</td>\n",
" <td>male</td>\n",
" <td>347082</td>\n",
" <td>B96 B98</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>freq</th>\n",
" <td>1</td>\n",
" <td>577</td>\n",
" <td>7</td>\n",
" <td>4</td>\n",
" <td>644</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Name Sex Ticket Cabin Embarked\n",
"count 891 891 891 204 889\n",
"unique 891 2 681 147 3\n",
"top Young, Miss. Marie Grice male 347082 B96 B98 S\n",
"freq 1 577 7 4 644"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# summary statistics for categorical columns\n",
"df_train.describe(include=['object'])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "weekly-proposal",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"PassengerId 891\n",
"Survived 2\n",
"Pclass 3\n",
"Name 891\n",
"Sex 2\n",
"Age 88\n",
"SibSp 7\n",
"Parch 7\n",
"Ticket 681\n",
"Fare 248\n",
"Cabin 147\n",
"Embarked 3\n"
]
}
],
"source": [
"# We compute the number of unique elements one columns at a time as it's faster\n",
"for column in df_train.columns:\n",
" print(column, df_train[column].nunique())"
]
},
{
"cell_type": "markdown",
"id": "commercial-dream",
"metadata": {},
"source": [
"**The number of unique values in each columns is also relevant. Columns with less than two unique values can be discarded**"
]
},
{
"cell_type": "markdown",
"id": "corrected-reception",
"metadata": {},
"source": [
"### Univariate Analysis"
]
},
{
"cell_type": "markdown",
"id": "attempted-calculation",
"metadata": {},
"source": [
"**Analyze the target variable**\n",
"\n",
"For numerical continue variables, we can use a histogram or scatter plot, for categorical data, we commonly preferred bar plots or pie charts."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "stock-founder",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# checking for missing values\n",
"df_train['Survived'].isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "brown-accuracy",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# number of unique values\n",
"df_train['Survived'].nunique()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "emerging-adaptation",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 549\n",
"1 342\n",
"Name: Survived, dtype: int64"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# frequency distribution\n",
"df_train['Survived'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "manual-religion",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 0.616162\n",
"1 0.383838\n",
"Name: Survived, dtype: float64"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Percent breakdown of response variable (ratio of frequency distribution of values)\n",
"df_train['Survived'].value_counts(normalize=True)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "imposed-intellectual",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# visualizing the frequency distribution\n",
"f, ax = plt.subplots(figsize=(6, 8))\n",
"ax = sns.countplot(x=\"Survived\", data=df_train, palette=\"Set2\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "mathematical-sixth",
"metadata": {},
"source": [
"The dataset is a little imbalanced (60/40) but we still use the accuracy because is not a huge imbalance."
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "played-brief",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"342 passengers survived out of 891\n"
]
}
],
"source": [
"# Examining how many passengers survived\n",
"print(sum(df_train['Survived']),'passengers survived out of',len(df_train))"
]
},
{
"cell_type": "markdown",
"id": "thorough-baseball",
"metadata": {},
"source": [
"**Analyze independant variables**"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "conservative-tablet",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 NaN\n",
"1 C85\n",
"2 NaN\n",
"3 C123\n",
"4 NaN\n",
" ... \n",
"886 NaN\n",
"887 B42\n",
"888 NaN\n",
"889 C148\n",
"890 NaN\n",
"Name: Cabin, Length: 891, dtype: object"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_train['Cabin']"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "junior-plenty",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The Cabin column is missing 687 values out of 891\n"
]
}
],
"source": [
"print(\"The Cabin column is missing\", sum(df_train['Cabin'].isna()), \"values out of\",len(df_train['Cabin']))"
]
},
{
"cell_type": "markdown",
"id": "medieval-cartoon",
"metadata": {},
"source": [
"Takeaways from Univariate Analysis :\n",
"\n",
"1. We have 2 categories of values, 1 and 0.\n",
"2. We have far more negative(0) values than positive(1) values.\n",
"3. 0 appears 61.6% of time, 1 appears 38.8% of time.\n",
"4. The Cabin column is missing 687 values out of 891, we should drop it.\n",
"\n",
"61.6% is our null accuracy - the accuracy of a classification model that just guesses the most common category over and over again. Our absolute baseline for our machine learning pipeline will have to be beating the null accuracy."
]
},
{
"cell_type": "markdown",
"id": "offshore-tonight",
"metadata": {},
"source": [
"### Bivariate Analysis\n",
"\n",
"Bivariate Analysis requires you to learn about relationships between pairs of variables. We can use a scatter plot, a pair plot or a correlation matrix."
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "gothic-adjustment",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Name</th>\n",
" <th>Age</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Braund, Mr. Owen Harris</td>\n",
" <td>22.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
" <td>38.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Heikkinen, Miss. Laina</td>\n",
" <td>26.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" <td>35.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Allen, Mr. William Henry</td>\n",
" <td>35.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>886</th>\n",
" <td>Montvila, Rev. Juozas</td>\n",
" <td>27.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>887</th>\n",
" <td>Graham, Miss. Margaret Edith</td>\n",
" <td>19.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>888</th>\n",
" <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>889</th>\n",
" <td>Behr, Mr. Karl Howell</td>\n",
" <td>26.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>890</th>\n",
" <td>Dooley, Mr. Patrick</td>\n",
" <td>32.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>891 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" Name Age\n",
"0 Braund, Mr. Owen Harris 22.0\n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... 38.0\n",
"2 Heikkinen, Miss. Laina 26.0\n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) 35.0\n",
"4 Allen, Mr. William Henry 35.0\n",
".. ... ...\n",
"886 Montvila, Rev. Juozas 27.0\n",
"887 Graham, Miss. Margaret Edith 19.0\n",
"888 Johnston, Miss. Catherine Helen \"Carrie\" NaN\n",
"889 Behr, Mr. Karl Howell 26.0\n",
"890 Dooley, Mr. Patrick 32.0\n",
"\n",
"[891 rows x 2 columns]"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# One can look at several columns together\n",
"df_train[[\"Name\", \"Age\"]]"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "exciting-latvia",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"In first class 62.96296296296296 % of passengers survived\n",
"In second class 47.28260869565217 % of passengers survived\n",
"In third class 24.236252545824847 % of passengers survived\n"
]
}
],
"source": [
"class_survived = df_train[['Pclass', 'Survived']]\n",
"\n",
"first_class = class_survived[class_survived['Pclass'] == 1]\n",
"second_class = class_survived[class_survived['Pclass'] == 2]\n",
"third_class = class_survived[class_survived['Pclass'] == 3]\n",
"\n",
"print(\"In first class\", sum(first_class['Survived'])/len(first_class)*100, \"% of passengers survived\")\n",
"print(\"In second class\", sum(second_class['Survived'])/len(second_class)*100, \"% of passengers survived\")\n",
"print(\"In third class\", sum(third_class['Survived'])/len(third_class)*100, \"% of passengers survived\")"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "religious-relations",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Age by Passenger Class, Titanic')"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(8,5))\n",
"sns.boxplot(x='Pclass',y='Age',data=df_train, palette='rainbow')\n",
"plt.title(\"Age by Passenger Class, Titanic\")"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "periodic-result",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"74.2"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"female_mean = df_train[df_train.Sex == 'female'].Survived.mean()\n",
"female_mean = round(female_mean * 100, 2)\n",
"female_mean"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "south-click",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"18.89"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"male_mean = df_train[df_train.Sex == 'male'].Survived.mean()\n",
"male_mean = round(male_mean * 100, 2)\n",
"male_mean"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "collected-complaint",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"38.38"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"global_mean = df_train.Survived.mean()\n",
"global_mean = round(global_mean * 100, 2)\n",
"global_mean"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "amazing-davis",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Percent</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>female</th>\n",
" <td>74.20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>male</th>\n",
" <td>18.89</td>\n",
" </tr>\n",
" <tr>\n",
" <th>global mean</th>\n",
" <td>38.38</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Percent\n",
"female 74.20\n",
"male 18.89\n",
"global mean 38.38"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"compare_mean = pd.DataFrame(\n",
" data = [female_mean, male_mean, global_mean],\n",
" index = ['female', 'male', 'global mean'],\n",
" columns = ['Percent'],\n",
")\n",
" \n",
"compare_mean"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "dated-jason",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"ax = compare_mean.plot.bar(y='Percent', rot=0)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "gothic-illustration",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABPMAAARuCAYAAAC2mHIzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAACOXklEQVR4nOz9e5wlV3kfev8eazQgg4wkLq2JWhccZCvEMpdMQBw4zgwyGBQZKW9AgAmMiXImJ8G8OB7FEj7nxPYxeQ+T9BgDcbDHls1gc41sLJ0xdtAR6nBwgmwGsAQIR4PCeGasGyAJBtlII6/3j10tb4Ye9e77ru7v9/PZn121alXVs6qrd/V+utaqaq0FAAAAABh/37XaAQAAAAAAo5HMAwAAAICekMwDAAAAgJ6QzAMAAACAnpDMAwAAAICekMwDAAAAgJ6QzIMxUVVbqurQascBAFX1K1X1fyzDdn+uqn57qbcLAIvhuxh9I5nHqqmqL1fVX1bVkaq6q6reXVWPX+24llNVtap62mrHAUA/VdULquq/VtX9VfW1qvqjqvr7S72f1tr/2lr7haXeLgCshPX4XZP1RTKP1fajrbXHJ3l2ks1J/vdVjmdZVNWG1Y4BgH6rqu9JsjfJO5OcluSMJD+f5Fvz3E5Vlb8BAVjr1sV3TdYnf8gxFlprh5P8QZLzq2pvVd1TVfd205Mz9arqx6vq9qr6RlX9j6p6TVf+tKr6L92dCl+pqg8OrXNeVV3f3cHwZ1V12dCyd1fVL1fV73fbvKmq/vbQ8hd369xfVf+x28c/G1r+T6vq1i7W/1xVZw8ta1X1hqq6Lcltx7a5qk7q9n9vVX0hyZLfWQHAmvJ9SdJae39r7eHW2l+21j7aWrv52O6rVXVOdx3a0M1PV9W/rao/SvJAkn9dVZ8a3nhV/auquq6bfndVvaWbvrWqLh6qt6G7Tj+7m7+gu1vwvqr606raMlT3qd218xtVdX2SJy3TsQGAWQ191/yBqjqtqn6zqv6i+x72e7OtU1VXVdWXuuvXF6rqHw0tm/W7Z/fPsrdV1d1V9fWquqWqfmBFGsm6I5nHWKiqM5NclOT2JL+Z5OwkZyX5yyT/oavzuCTvSPLS1trJSf6nJJ/tNvELST6a5NQkkxnctTCzzvVJ3pfkKUleleQ/VtXTh3b/qgzubDg1yf4k/7Zb90lJrkny5iRPTPJn3T5nYr4kyc8k+f8keXKS/zfJ+49p2qVJnpvk6flOP5vkb3evH0myba7jBMC69t+TPFxVe6rqpVV16jzXf22S7UlOTvIrSb6/qs4dWv5jGVwvj/X+JK8emv+RJF9prX26qs5I8vtJ3pLB3YJXJPmdqnpyV/d9SfZlkMT7hbjWAbDChr5rfibJbyX57iR/N4Pvh287zmpfSvI/J3lCBt8Vf7uqNnXLZv3umeTFSX4og3++PSHJZUm+usTNgSSSeay+36uq+5J8Isl/SfLTrbXfaa090Fr7RgaJtX8wVP+vM/iPykmttTtaa5/vyh/KIAH4t1prf9Va+0RXfnGSL7fWfrO1drS19pkkv5PkFUPb/HBr7Y9ba0eTvDfJM7vyi5J8vrX2u92ydyS5c2i9/zXJ/9Vau7Vb/v9L8szhu/O65V9rrf3lLG2/LMm/7ZYf7LYPALNqrX09yQuStCS/luSeqrquqiZG3MS7W2uf766H9ye5Nl2SrkvqnZfkulnWe1+Sl1XVd3fzP5a/+efVP0nykdbaR1prf91auz7Jp5JcVFVnZXDX+f/RWvtWa+3jSf7v+bYbABbo2O+a/zHJS5P8r621e1trD7XW/stsK7bW/lNr7S+6a9sHM+hp9Zxu8fG+ez6UwT/MzktS3ffEO5atdaxrknmstktba6e01s5urf3LDO5O/tWqOlBVX0/y8SSnVNUJrbVvJnllBkm0O7qused12/npJJXkj6vq81X1T7vys5M8t+v6c1/3Yf6aJKcPxTCcoHsgyczAqH8rycGZBa21lmT4CUdnJ3n70Ha/1sVwxlCdgzm+v3XM8gOPUhcA0n0x+PHW2mSSH8jgWvJLI65+7DXpffmbO+5+LMnvtdYemGWf+5PcmuRHu4Tey/I3d/CdneQVx1xnX5BkUxfbvd31e4ZrHQAr5djvmmcm+Vpr7d65Vqyq11XVZ4eubT+QvxkqYtbvnq21j2XQq+yXk9xdVbtrMN4tLDnJPMbNjiTfn+S5rbXvyeA25WTwYZnW2n9urb0ogy8JX8zgzoS01u5srf0vrbW/leSfZ9CV9mkZfHH5L92H+Mzr8a21fzFCLHdkcNv0IICqGp7vtv3Pj9n2Sa21/zpUp82x/TOH5s8aISYASJK01r6Y5N0ZfMH4ZgbdhmacPtsqx8xfn+TJVfXMDJJ6s3WxnTHT1faSJF/oEnzJ4Fr4W8dcCx/XWntrBte5U7shL2a41gGwWg4mOa2qTnm0Sl1Pq19L8hNJnthaOyXJ5/I330mP990zrbV3tNb+XgbDLH1fkn+9TG1hnZPMY9ycnME4efdV1WkZjCuXJKmqiaq6pPtS8K0kRzLodpuqekX9zYMy7s3gC8tfZ/DUv++rqtdW1Ynd6+9X1d8ZIZbfz+CBHJd2A4i/Id/+5ehXkry5qv5uF8MTquoVs2zneD7UrX9qF/sb57EuAOtMDR7otGPmeteNAfTqJJ/MYAzZH6qqs6rqCRmM9/qoWmsPJflPSf59BuPdXf8o1T+QwVhA/yLfnvT77Qzu2PuRqjqhqh5bVVuqarK1diCDLrc/X1Ubq+oFSX50ns0GgCXRdXn9gwySb6d23w1/aJaqj8vg++Q9SVJVr8/gH2fp5mf97tl9z3xuVZ2YwT/Z/ird91VYapJ5jJtfSnJSkq9k8OXkD4eWfVeSn0ryFxl0af0HGXypSAZj8txUVUcyGO/nTa2127tx916cwUMu/iKDLrU7kzxmrkBaa1/JYGy9f5fBwKVPz+BLybe65R/utvWBrkvw5zIYg2FUP59Bd6P/kcEAqr81j3UBWH++kcFDlW6qqm9mcJ38XJId3Vh1H0xycwYPnNg74jbfl+SHk/ynbvzXWXVfgP5bBg+C+uBQ+cEM7tb7mQy+9BzM4C6Emb8xf6yL+WsZ/IPuPSPGBQDL4bUZjG33xSR3J/nJYyu01r6QZFcG1727kpyf5I+Gqsz63TPJ92RwR9+9GXzP+2oG/zCDJVeDYcCAuVTVd2UwZt5rWms3rnY8AAAAwPrjzjx4FF23oVOq6jEZ3HVQGdwJAQAAALDiJPPg0T0vyZcy6Pb7oxk8EekvVzckAAAAYL3SzRYAAAAAesKdeQAAAADQE5J5AAAAANATG1Y7gCR50pOe1M4555x5r/fNb34zj3vc45Y+oJ5xHAYchwHHYaCPx2Hfvn1faa09ebXjYPUs9HqY9POcXyhtXXvWSzsTbR2F6yHJ2vqOKKa5jVs8iZhGNW4xjVs8yeJiOt41cSySeeecc04+9alPzXu96enpbNmyZekD6hnHYcBxGHAcBvp4HKrqwGrHwOpa6PUw6ec5v1Dauvasl3Ym2joK10OStfUdUUxzG7d4EjGNatxiGrd4ksXFdLxrom62AAAAANATknkAAAAA0BOSeQAAAMxLVX25qm6pqs9W1ae6stOq6vqquq17P7Urr6p6R1Xtr6qbq+rZqxs9QL9J5gEAALAQW1trz2ytbe7mr0pyQ2vt3CQ3dPNJ8tIk53av7UneteKRAqwhknkAAAAshUuS7Omm9yS5dKj8PW3gk0lOqapNqxAfwJowFk+zBQAAoFdako9WVUvyq6213UkmWmt3dMvvTDLRTZ+R5ODQuoe6sjuGylJV2zO4cy8TExOZnp6ed1BHjhxZ0HrLSUxzG7d4EjGNatxiGrd4kuWJacHJvKp6bJKPJ3lMt51rWms/W1VPTfKBJE9Msi/Ja1trDy5FsAAAAIyFF7TWDlfVU5JcX1VfHF7YWmtdom9kXUJwd5Js3ry5bdmyZd5BTU9PZyHrLScxzW3c4knENKpxi2nc4kmWJ6bFdLP9VpIXttaekeSZSV5SVRck2Znkba21pyW5N8nli44SAACAsdFaO9y9353kw0mek+Sume6z3fvdXfXDSc4cWn2yKwNgARaczOvGOzjSzZ7YvVqSFya5pisfHicBAACAnquqx1XVyTPTSV6c5HNJrkuyrau2Lcm13fR1SV7XPdX2giT3D3XHBWCeFjVmXlWdkEFX2qcl+eUkX0pyX2vtaFdlZiyE2dZdkvEQ3vGOd+ahh0boxVuVtEe/y/vEEzfmB3/w/Dk3dfPNtyzZPkfd76Ptc3JyMrt27Vryfc61328zBsf3247Dcu13jI/vzH6/93uf+qi/T6tx/o683yXc51J/Poxab9TjAUvt5ptvydatW+esd/oZZ+aOQ3++AhEBsIZNJPlwVSWD75Tva639YVX9SZIPVdXlSQ4kuayr/5EkFyXZn+SBJK9f+ZABltamybNy5+GDc9Z7+9vfseTdbBeVzGutPZzkmVV1Sga3Vp83j3WXZDyEN73p/5uzr9w7Z90DOy+es96BnRenjfCFfuvWrUu2z1H3+2j73HH60bzznvOWfJ9z7ffY7a328R0+Dsu133E+vjP1brzxxkf9oFiN83fU/S7lPpf682HUeqMeD1hqDz304MjnMQAsRmvt9iTPmKX8q0kunKW8JXnDCoQGsGLuPHxwpL+/H3roi3PWma/FjJn3iNbafUluTPK8DB4zPpMkNBYCAAAAACyRBSfzqurJ3R15qaqTkrwoya0ZJPVe3lUbHicBAAAAAFiExXSz3ZRkTzdu3ncl+VBrbW9VfSHJB6rqLUk+k+TqJYgTAAAAANa9BSfzWms3J3nWLOW3Z/BYcgAAAABgCS3JmHkAAAAAwPKTzAMAAACAnpDMG3bCiamqOV+rsd/V2OeS73eMj+9aauu+ffsc36rs27dvafcJAAAAY2AxD8BYex5+KGdfuXfOagd2Xrzi+12NfS75fsf4+C75flexrRtPf9qj7nu9HN+Npx9duv0BAADAmHBnHgAAAAD0hGQeAAAAAPSEZB4AAAAA9IRkHgAAAAD0hGQeAAAAAPSEZB4AAAAA9IRkHgAAAAD0hGQeAAAAAPSEZB4AjKiqvlxVt1TVZ6vqU13ZaVV1fVXd1r2f2pVXVb2jqvZX1c1V9ezVjR4AAFgLJPMAYH62ttae2Vrb3M1fleSG1tq5SW7o5pPkpUnO7V7bk7xrxSMFAADWHMk8AFicS5Ls6ab3JLl0qPw9beCTSU6pqk2rEB8AALCGbFjtAACgR1qSj1ZVS/KrrbXdSSZaa3d0y+9MMtFNn5Hk4NC6h7qyO4bKUlXbM7hzLxMTE5menl5QYJOTk9lx+tE56z04NbXgfYyLI0eO9L4No1ovbV0v7Uy0FQBYPMk8ABjdC1prh6vqKUmur6ovDi9srbUu0TeyLiG4O0k2b97ctmzZsqDAdu3alXfec96c9Q7svCKtzSvEsTM9PZ2FHqe+WS9tXS/tTLQVAFg83WwBYESttcPd+91JPpzkOUnumuk+273f3VU/nOTModUnuzIAAIAFk8wDgBFU1eOq6uSZ6SQvTvK5JNcl2dZV25bk2m76uiSv655qe0GS+4e64wIAACyIbrYAMJqJJB+uqmRw/Xxfa+0Pq+pPknyoqi5PciDJZV39jyS5KMn+JA8kef3KhwwAAKw1knkAMILW2u1JnjFL+VeTXDhLeUvyhhUIDQAAWEd0swUAAACAnpDMAwAAAICekMwDAAAAgJ6QzAMAAACAnpDMAwAAAICekMwDAAAAgJ6QzAMAAACAnpDMAwAAAICekMwDAAAAgJ5YcDKvqs6sqhur6gtV9fmqelNX/nNVdbiqPtu9Llq6cAEAAABg/dqwiHWPJtnRWvt0VZ2cZF9VXd8te1trbWrx4QEAAAAAMxaczGut3ZHkjm76G1V1a5IzliowAAAAAODbLcmYeVV1TpJnJbmpK/qJqrq5qn6jqk5din0AAAAAwHq3mG62SZKqenyS30nyk621r1fVu5L8QpLWve9K8k9nWW97ku1JMjExkenp6Xnv+8iRI5mamsrG04/OWffBEeqNUme16j1anYmTkh3nH1212Eatt9z7HD4Oy7XfcT6+M/WOdxzGIbaVPL4TJ2VJPx9Grffg1NSCPs8AAABgFItK5lXViRkk8t7bWvvdJGmt3TW0/NeS7J1t3dba7iS7k2Tz5s1ty5Yt897/9PR0rrjiipx95ay7+DYHds5db5Q6q1Xv0ersOP9odt2yYdViG7Xecu9z+Dgs137H+fjO1HvHb//erMdhHGJbyeO74/yjS/r5MGq9AzuvSGttzm0BAPRZVZ2Q5FNJDrfWLq6qpyb5QJInJtmX5LWttQer6jFJ3pPk7yX5apJXtta+vEphA6wJi3mabSW5OsmtrbVfHCrfNFTtHyX53MLDAwAAYAy9KcmtQ/M7M3gQ4tOS3Jvk8q788iT3duVv6+oBsAiLGTPv+Ulem+SFVfXZ7nVRkn9XVbdU1c1Jtib5V0sRKAAAAKuvqiaT/MMkv97NV5IXJrmmq7InyaXd9CXdfLrlF3b1AVigxTzN9hNJZvsQ/sjCwwEAAGDM/VKSn05ycjf/xCT3tdZmBhc+lOSMbvqMJAeTpLV2tKru7+p/5diNLtW46uM2frGY5jZu8SRiGtW4xbSS8Yw6RvtTNkwueUyLfgAGAAAA60NVXZzk7tbavqraspTbXqpx1Rey3nIS09zGLZ5ETKMat5hWMp6tW7eONPb6G598KK985SuXdN+SeQAAAIzq+Ule1g2x9Ngk35Pk7UlOqaoN3d15k0kOd/UPJzkzyaGq2pDkCRk8CAOABVrMmHkAAACsI621N7fWJltr5yR5VZKPtdZek+TGJC/vqm1Lcm03fV03n275x1prbQVDBlhzJPMAAABYrCuT/FRV7c9gTLyru/KrkzyxK/+pJFetUnwAa4ZutgAAAMxba206yXQ3fXuS58xS56+SvGJFAwNY49yZBwAAAAA9IZkHAAAAAD0hmQcAAAAAPSGZBwAAAAA9IZkHAAAAAD0hmQcAAAAAPSGZBwAAAAA9IZkHAAAAAD0hmQcAAAAAPSGZBwAAAAA9IZkHAAAAAD0hmQcA81BVJ1TVZ6pqbzf/1Kq6qar2V9UHq2pjV/6Ybn5/t/ycVQ0cAABYEyTzAGB+3pTk1qH5nUne1lp7WpJ7k1zelV+e5N6u/G1dPQAAgEWRzAOAEVXVZJJ/mOTXu/lK8sIk13RV9iS5tJu+pJtPt/zCrj4AAMCCbVjtAACgR34pyU8nObmbf2KS+1prR7v5Q0nO6KbPSHIwSVprR6vq/q7+V4Y3WFXbk2xPkomJiUxPTy8osMnJyew4/eic9R6cmlrwPsbFkSNHet+GUa2Xtq6XdibaCgAsnmQeAIygqi5OcndrbV9VbVmq7bbWdifZnSSbN29uW7YsbNO7du3KO+85b856B3ZekdbagvYxLqanp7PQ49Q366Wt66WdibYCAIsnmQcAo3l+kpdV1UVJHpvke5K8PckpVbWhuztvMsnhrv7hJGcmOVRVG5I8IclXVz5sAABgLTFmHgCMoLX25tbaZGvtnCSvSvKx1tprktyY5OVdtW1Jru2mr+vm0y3/WOv7LXEAAMCqk8wDgMW5MslPVdX+DMbEu7orvzrJE7vyn0py1SrFBwAArCG62QLAPLXWppNMd9O3J3nOLHX+KskrVjQwAABgzXNnHgAAAAD0hGQeAAAAAPSEZB4AAAAA9IRkHgAAAAD0hGQeAAAAAPTEgpN5VXVmVd1YVV+oqs9X1Zu68tOq6vqquq17P3XpwgUAAACA9Wsxd+YdTbKjtfb0JBckeUNVPT3JVUluaK2dm+SGbh4AAAAAWKQFJ/Naa3e01j7dTX8jya1JzkhySZI9XbU9SS5dZIwAAAAAQJZozLyqOifJs5LclGSitXZHt+jOJBNLsQ8AAAAAWO82LHYDVfX4JL+T5Cdba1+vqkeWtdZaVbXjrLc9yfYkmZiYyPT09Lz3feTIkUxNTWXj6UfnrPvgCPVGqbNa9R6tzsRJyY7zj65abKPWW+59Dh+H5drvOB/fmXrHOw7jENtKHt+Jk7Kknw+j1ntwampBn2cAAAAwikUl86rqxAwSee9trf1uV3xXVW1qrd1RVZuS3D3buq213Ul2J8nmzZvbli1b5r3/6enpXHHFFTn7yr1z1j2wc+56o9RZrXqPVmfH+Uez65YNqxbbqPWWe5/Dx2G59jvOx3em3jt++/dmPQ7jENtKHt8d5x9d0s+HUesd2HlFWpv1fxgAAACwaIt5mm0luTrJra21XxxadF2Sbd30tiTXLjw8AAAAAGDGYu7Me36S1ya5pao+25X9TJK3JvlQVV2e5ECSyxYVIQAAAACQZBHJvNbaJ5LUcRZfuNDtAgAAAACzW5Kn2QIAAAAAy08yDwAAAAB6QjIPAAAAAHpCMg8AAAAAekIyDwAAAAB6QjIPAAAY2abJs1JVc75uvvmW1Q6VZVJVj62qP66qP62qz1fVz3flT62qm6pqf1V9sKo2duWP6eb3d8vPWdUGAPTchtUOAAAA6I87Dx/M2VfunbPeQw99cQWiYZV8K8kLW2tHqurEJJ+oqj9I8lNJ3tZa+0BV/UqSy5O8q3u/t7X2tKp6VZKdSV65WsED9J078wAAABhZGzjSzZ7YvVqSFya5pivfk+TSbvqSbj7d8gurqlYmWoC1x515AAAAzEtVnZBkX5KnJfnlJF9Kcl9r7WhX5VCSM7rpM5IcTJLW2tGquj/JE5N85Zhtbk+yPUkmJiYyPT0977iOHDmyoPWWk5jmNm7xJGIa1bjFtJLxTE1NZePpR+es95QNk0sek2QeAAAA89JaezjJM6vqlCQfTnLeEmxzd5LdSbJ58+a2ZcuWeW9jeno6C1lvOYlpbuMWTyKmUY1bTCsZz9atW0caduKNTz6UV75yaUcW0M0WAACABWmt3ZfkxiTPS3JKVc3cMDKZ5HA3fTjJmUnSLX9Ckq+ubKQAa4dkHgAAACOrqid3d+Slqk5K8qIkt2aQ1Ht5V21bkmu76eu6+XTLP9ZaaysWMMAao5stAAAA87EpyZ5u3LzvSvKh1treqvpCkg9U1VuSfCbJ1V39q5P8VlXtT/K1JK9ajaAB1grJPAAAAEbWWrs5ybNmKb89yXNmKf+rJK9YgdAA1gXdbAEAAACgJyTzAAAAAKAnJPMAAAAAoCck8wAAAACgJyTzAAAAAKAnJPMAAAAAoCck8wBgBFX12Kr646r606r6fFX9fFf+1Kq6qar2V9UHq2pjV/6Ybn5/t/ycVW0AAACwJkjmAcBovpXkha21ZyR5ZpKXVNUFSXYmeVtr7WlJ7k1yeVf/8iT3duVv6+oBAAAsimQeAIygDRzpZk/sXi3JC5Nc05XvSXJpN31JN59u+YVVVSsTLQAAsFZtWO0AAKAvquqEJPuSPC3JLyf5UpL7WmtHuyqHkpzRTZ+R5GCStNaOVtX9SZ6Y5CvHbHN7ku1JMjExkenp6QXFNjk5mR2nH52z3oNTUwvex7g4cuRI79swqvXS1vXSzmRttHVqaiobR/i8ecqGyd63FQDGkWQeAIyotfZwkmdW1SlJPpzkvCXY5u4ku5Nk8+bNbcuWLQvazq5du/LOe+YO58DOK9JaW9A+xsX09HQWepz6Zr20db20M1kbbd26dWvOvnLvnPXe+ORDeeUrX7kCEQHA+qKbLQDMU2vtviQ3JnleklOqauafY5NJDnfTh5OcmSTd8ick+erKRgoAAKw1knkAMIKqenJ3R16q6qQkL0pyawZJvZd31bYlubabvq6bT7f8Y63vt8QBAACrTjdbABjNpiR7unHzvivJh1pre6vqC0k+UFVvSfKZJFd39a9O8ltVtT/J15K8ajWCBgAA1hbJPAAYQWvt5iTPmqX89iTPmaX8r5K8YgVCAwAA1hHdbAEAAACgJyTzAAAAAKAnFpzMq6rfqKq7q+pzQ2U/V1WHq+qz3euipQkTAAAAAFjMnXnvTvKSWcrf1lp7Zvf6yCK2DwAAAAAMWXAyr7X28QyezgcAAAAArIDleJrtT1TV65J8KsmO1tq9s1Wqqu1JtifJxMREpqen572jI0eOZGpqKhtPPzpn3QdHqDdKndWq92h1Jk5Kdpx/dNViG7Xecu9z+Dgs137H+fjO1DvecRiH2Fby+E6clCX9fBi13oNTUwv6PAMAAIBRLHUy711JfiFJ6953Jfmns1Vsre1OsjtJNm/e3LZs2TLvnU1PT+eKK67I2VfunbPugZ1z1xulzmrVe7Q6O84/ml23bFi12Eatt9z7HD4Oy7XfcT6+M/Xe8du/N+txGIfYVvL47jj/6JJ+Poxa78DOK9Jam3NbAAAAsBBL+jTb1tpdrbWHW2t/neTXkjxnKbcPAAAAAOvZkibzqmrT0Ow/SvK549UFAAAAAOZnwd1sq+r9SbYkeVJVHUrys0m2VNUzM+hm++Uk/3zxIQIAAAAAySKSea21V89SfPUiYgEAAAAAHsWSdrMFAAAAAJaPZB4AAAAA9IRkHgAAAAD0hGQeAAAAAPSEZB4AAAAA9IRkHgAAAAD0hGQeAAAAAPSEZB4AAAAA9IRkHgAAAGvCzTffkqqa87Vp8qzVDhVgwTasdgAAAACwFB566MGcfeXeOesd2HnxCkQDsDzcmQcAAAAAPSGZBwAAAAA9IZkHAADASKrqzKq6saq+UFWfr6o3deWnVdX1VXVb935qV15V9Y6q2l9VN1fVs1e3BQD9J5kHAADAqI4m2dFae3qSC5K8oaqenuSqJDe01s5NckM3nyQvTXJu99qe5F0rHzLA2iKZBwAAwEhaa3e01j7dTX8jya1JzkhySZI9XbU9SS7tpi9J8p428Mkkp1TVppWNGmBtkcwDAABg3qrqnCTPSnJTkonW2h3dojuTTHTTZyQ5OLTaoa4MgAXasNoBAAAA0C9V9fgkv5PkJ1trX6+qR5a11lpVtQVsc3sGXXEzMTGR6enpecc1OTmZHacfnbPeg1NTC9r+Qhw5cmTF9jWqcYtp3OJJxDSqcYtpJeOZmprKxhE+b56yYXLJY5LMAwAAYGRVdWIGibz3ttZ+tyu+q6o2tdbu6LrR3t2VH05y5tDqk13Zd2it7U6yO0k2b97ctmzZMu/Ydu3alXfec96c9Q7svCKtzTvfuCDT09NZSFuW07jFNG7xJGIa1bjFtJLxbN26NWdfuXfOem988qG88pWvXNJ962YLAADASGpwC97VSW5trf3i0KLrkmzrprcluXao/HXdU20vSHL/UHdcABbAnXkAAACM6vlJXpvklqr6bFf2M0nemuRDVXV5kgNJLuuWfSTJRUn2J3kgyetXNFqANUgyDwAAgJG01j6RpI6z+MJZ6rckb1jWoADWGd1sAQAAAKAnJPMAAAAAoCck8wBgBFV1ZlXdWFVfqKrPV9WbuvLTqur6qrqtez+1K6+qekdV7a+qm6vq2avbAgAAYC2QzAOA0RxNsqO19vQkFyR5Q1U9PclVSW5orZ2b5IZuPklemuTc7rU9ybtWPmQAABbi5ptvSVXN+do0edZqh8o65AEYADCC1todSe7opr9RVbcmOSPJJUm2dNX2JJlOcmVX/p5u4O9PVtUpVbWp2w4AAGPsoYcezNlX7p2z3oGdF69ANPDtJPMAYJ6q6pwkz0pyU5KJoQTdnUkmuukzkhwcWu1QV/Ztybyq2p7BnXuZmJjI9PT0gmKanJzMjtOPzlnvwampBe9jXBw5cqT3bRjVemnremlnsjbaOjU1lY0jfN48ZcNk79sKAONIMg8A5qGqHp/kd5L8ZGvt61X1yLLWWquqNp/ttdZ2J9mdJJs3b25btmxZUFy7du3KO+85b856B3ZekcHNgv01PT2dhR6nvlkvbV0v7UzWRlu3bt060t0qb3zyobzyla9cgYgAYH0xZh4AjKiqTswgkffe1trvdsV3VdWmbvmmJHd35YeTnDm0+mRXBgAAsGCSeQAwghrcgnd1kltba784tOi6JNu66W1Jrh0qf133VNsLktxvvDwAAGCxFpXMq6rfqKq7q+pzQ2WnVdX1VXVb937q4sMEgFX3/CSvTfLCqvps97ooyVuTvKiqbkvyw918knwkye1J9if5tST/chViBgAA1pjFjpn37iT/Icl7hsquSnJDa+2tVXVVN3/lIvcDAKuqtfaJJHWcxRfOUr8lecOyBgUAAKw7i7ozr7X28SRfO6b4kiR7uuk9SS5dzD4AAAAAgIHleJrtxNCYQHcmmZitUlVtT7I9SSYmJhb02PojR45kamoqG08/OmfdB0eoN0qd1ar3aHUmTkp2nH901WIbtd5y73P4OCzXfsf5+M7UO95xGIfYVvL4TpyUJf18GLXeg1NTC/o8AwAAgFEsRzLvEa21VlXtOMt2J9mdJJs3b25btmyZ9/anp6dzxRVX5Owr985Z98DOueuNUme16j1anR3nH82uWzasWmyj1lvufQ4fh+Xa7zgf35l67/jt35v1OIxDbCt5fHecf3RJPx9GrXdg5xUZ9K4EAACApbccT7O9q6o2JUn3fvcy7AMAAAAA1p3lSOZdl2RbN70tybXLsA8AAAAAWHcWlcyrqvcn+W9Jvr+qDlXV5UnemuRFVXVbkh/u5gEAAACARVrUmHmttVcfZ9GFi9kuAAAAAPCdlqObLQAAAACwDCTzAAAAAKAnJPMAAAAAoCck8wAAAACgJyTzAAAAAKAnJPMAAAAAoCck8wAAAACgJyTzAAAAAKAnJPMAAAAAoCck8wAAAACgJyTzAAAAAKAnJPMAAAAAoCck8wAAAACgJyTzAAAAAKAnJPMAAAAAoCck8wAAAACgJyTzAAAAAKAnJPMAAAAAoCck8wAAAACgJyTzAAAAAKAnJPMAAAAAoCck8wAAABhZVf1GVd1dVZ8bKjutqq6vqtu691O78qqqd1TV/qq6uaqevXqRA6wNknkAAADMx7uTvOSYsquS3NBaOzfJDd18krw0ybnda3uSd61QjABrlmQeAAAAI2utfTzJ144pviTJnm56T5JLh8rf0wY+meSUqtq0IoECrFGSeQAAACzWRGvtjm76ziQT3fQZSQ4O1TvUlQGwQBtWOwAAAADWjtZaq6o23/WqansGXXEzMTGR6enpee97cnIyO04/Ome9B6emFrT9hThy5MiK7WtU4xbTuMWTOJdGNW4xrWQ8U1NT2TjCOfKUDZNLHpNkHgCMqKp+I8nFSe5urf1AV3Zakg8mOSfJl5Nc1lq7t6oqyduTXJTkgSQ/3lr79GrEDQAr4K6q2tRau6PrRnt3V344yZlD9Sa7su/QWtudZHeSbN68uW3ZsmXeQezatSvvvOe8Oesd2HlFWpt3vnFBpqens5C2LKdxi2nc4kmcS6Mat5hWMp6tW7fm7Cv3zlnvjU8+lFe+8pVLum/dbAFgdO+OAb8BYDbXJdnWTW9Lcu1Q+eu6p9pekOT+oe64ACyAZB4AjMiA3wCQVNX7k/y3JN9fVYeq6vIkb03yoqq6LckPd/NJ8pEktyfZn+TXkvzLVQgZYE3RzRYAFme+A367GwGAXmutvfo4iy6cpW5L8obljQhgfVm2ZF5VfTnJN5I8nORoa23zcu0LAMbBQgb8XorBvpPxHKR5uYzbQMvLab20db20M1kbbV3NAb8BgOW/M29ra+0ry7wPAFhNixrweykG+07Gc5Dm5TJuAy0vp/XS1vXSzmRttHU1B/wGAIyZBwCLZcBvAABgxSznnXktyUe77ka/2t158Iil6FZ05MiRkW/zf3CEeqPUWa16j1Zn4qRkx/lHVy22Uest9z6Hj8Ny7Xecj+9MveMdh3GIbSWP78RJo3cDWuo26FK0dnUDfm9J8qSqOpTkZzMY4PtD3eDfB5Jc1lX/SJKLMhjw+4Ekr1/xgAEAgDVnOZN5L2itHa6qpyS5vqq+2D0FMMnSdCuanp7OFVdcMdJt/gd2zl1vlDqrVe/R6uw4/2h23bJh1WIbtd5y73P4OCzXfsf5+M7Ue8dv/96sx2EcYlvJ47vj/KNL+vkwar210IWR4zPgNwAAsNqWrZtta+1w9353kg8nec5y7QsAAAAA1oNlSeZV1eOq6uSZ6SQvTvK55dgXAAAAAKwXy9XNdiLJh6tqZh/va6394TLtCwAAAADWhWVJ5rXWbk/yjOXYNgAAAACsV8s2Zh4AAAAAsLQk8wAAAACgJyTzAAAAAKAnJPMAAAAAoCck8wAAAACgJyTzAAAAAKAnJPMAAAAAoCck8wAAAACgJyTzAAAAAKAnJPMAAAAAoCck8wAAAACgJyTzAAAAAKAnJPMAAAAAoCck8wAAAACgJyTzAAAAAKAnJPMAAAAAoCck8wAAAACgJyTzAAAAAKAnJPMAAAAAoCck8wAAAACgJyTzAAAAAKAnJPMAAAAAoCck8wAAAACgJyTzAAAAAKAnJPMAAAAAoCck8wAAAACgJyTzAAAAAKAnJPMAAAAAoCck8wAAAACgJyTzAAAAAKAnliWZV1Uvqao/q6r9VXXVcuwDAPrANREAXA8BltKSJ/Oq6oQkv5zkpUmenuTVVfX0pd4PAIw710QAcD0EWGrLcWfec5Lsb63d3lp7MMkHklyyDPsBgHHnmggArocAS2o5knlnJDk4NH+oKwOA9cY1EQBcDwGWVLXWlnaDVS9P8pLW2j/r5l+b5LmttZ84pt72JNu72e9P8mcL2N2TknxlEeGuFY7DgOMw4DgM9PE4nN1ae/JqB8HSGeWauETXw6Sf5/xCaevas17amWjrKFwP1xjfEcU0gnGLJxHTqMYtpnGLJ1lcTLNeEzcsLp5ZHU5y5tD8ZFf2bVpru5PsXsyOqupTrbXNi9nGWuA4DDgOA47DgOPAmJjzmrgU18NkfZ3z2rr2rJd2JtrKurWuvyOKaW7jFk8iplGNW0zjFk+yPDEtRzfbP0lyblU9tao2JnlVkuuWYT8AMO5cEwHA9RBgSS35nXmttaNV9RNJ/nOSE5L8Rmvt80u9HwAYd66JAOB6CLDUlqObbVprH0nykeXY9jEW3S1pjXAcBhyHAcdhwHFgLLgmLgttXXvWSzsTbWWdWufXQzHNbdziScQ0qnGLadziSZYhpiV/AAYAAAAAsDyWY8w8AAAAAGAZ9DaZV1Uvqao/q6r9VXXVaseznKrqzKq6saq+UFWfr6o3deWnVdX1VXVb935qV15V9Y7u2NxcVc9e3RYsnao6oao+U1V7u/mnVtVNXVs/2A2om6p6TDe/v1t+zqoGvsSq6pSquqaqvlhVt1bV89bp+fCvut+Jz1XV+6vqsev1nGD9mOv6t1bO9RHa+VPddfHmqrqhqs5ejTiXwqh/01TVP66qVlVj9YS2+RilrVV12dDfPO9b6RiXygjn8Fnd33ef6c7ji1YjzsWqqt+oqrur6nPHWb5m/w5hZS3mXKuqbd3fyLdV1bYVjOk1XSy3VNV/rapnDC37clf+2ar61ArGtKWq7u/2+9mq+jdDy5b8O/YI8fzroVg+V1UPV9Vp3bLlOkazfr8+ps6KnU8jxrOi59KIMa30uTRKTCt6PtXg++cfV9WfdjH9/Cx1jvu3eVW9uSv/s6r6kXntvLXWu1cGg6Z+Kcn3JtmY5E+TPH2141rG9m5K8uxu+uQk/z3J05P8uyRXdeVXJdnZTV+U5A+SVJILkty02m1YwmPxU0nel2RvN/+hJK/qpn8lyb/opv9lkl/ppl+V5IOrHfsSH4c9Sf5ZN70xySnr7XxIckaS/5HkpKFz4cfX6znhtT5eo1z/1sK5PmI7tyb57m76X/SxnaO2tat3cpKPJ/lkks2rHfcy/lzPTfKZJKd2809Z7biXsa27h65RT0/y5dWOe4Ft/aEkz07yueMsX5N/h3it/Guh51qS05Lc3r2f2k2fukIx/U9Dn2cvHT7/k3w5yZNW4ThtSfdd6pjyZfmOPVc8x9T90SQfW4FjNOv369U6n0aMZ0XPpRFjWulzac6YVvp86s6Px3fTJya5KckFx9SZ9W/zDK79f5rkMUme2h2zE0bdd1/vzHtOkv2ttdtbaw8m+UCSS1Y5pmXTWrujtfbpbvobSW7NIJFxSQZJnXTvl3bTlyR5Txv4ZJJTqmrTyka99KpqMsk/TPLr3XwleWGSa7oqxx6DmWNzTZILu/q9V1VPyOCieHWStNYebK3dl3V2PnQ2JDmpqjYk+e4kd2QdnhOsK6Nc/9bCuT5nO1trN7bWHuhmP5lkcoVjXCqj/k3zC0l2JvmrlQxuiY3S1v8lyS+31u5Nktba3Ssc41IZpa0tyfd0009I8hcrGN+Saa19PMnXHqXKWv47hBW0iHPtR5Jc31r7WvfZcn2Sl6xETK21/zrzeZYVulaNcJyOZ1m+Y88znlcnef9i9zmXR/l+PWzFzqdR4lnpc2nEY3Q8y3UuzTemZT+fuvPjSDd7Yvc69sEUx/vb/JIkH2itfau19j+S7M/g2I2kr8m8M5IcHJo/lNFPrF7rbsl8VgYZ34nW2h3dojuTTHTTa/X4/FKSn07y1938E5Pc11o72s0Pt/ORY9Atv7+rvxY8Nck9SX6zBl1zfr2qHpd1dj601g4nmUry5xkk8e5Psi/r85xg/Rjl93ktnOvz/dy6PIP/nvfRnG3tuvac2Vr7/ZUMbBmM8nP9viTfV1V/VFWfrKol+cK9CkZp688l+SdVdSiDJ3y+cWVCW3Fr8u8QxtLxzrVxOQePvVa1JB+tqn1VtX2FY3le1y3wD6rq73Zlq3qcquq7M0iK/c5Q8bIfo2O+Xw9blfPpUeIZtqLn0hwxrcq5NNdxWsnzqQZDgX02yd0ZJHqPey4d87f5oo7ThkXEzAqrqsdncDL+ZGvt68M3WrTWWlWt2UcTV9XFSe5ure2rqi2rHM5q25DBrepvbK3dVFVvz6Bb7SPW+vmQJDUYE/CSDJKb9yX5T1mi/7IC/VFV/yTJ5iT/YLVjWQ5V9V1JfjGDYQTWgw0ZdLXdksFdBx+vqvO7O9DXmlcneXdrbVdVPS/Jb1XVD7TW/nquFYF+qaqtGSRgXjBU/ILW2uGqekqS66vqi91dbMvt00nObq0dqcFYnb+XwefuavvRJH/UWhu+i29Zj9Gx36+XarvLGc9Kn0tzxLQq59KIP7cVO59aaw8neWZVnZLkw921fNYxIpdSX+/MO5zkzKH5ya5szaqqEzM4Yd/bWvvdrviumW4K3ftMV5S1eHyen+RlVfXlDG7TfWGSt2dwu/NMUnq4nY8cg275E5J8dSUDXkaHkhwayvhfk0Fybz2dD0nyw0n+R2vtntbaQ0l+N4PzZD2eE6wfo/w+r4VzfaTPrar64ST/W5KXtda+tUKxLbW52npykh9IMt1dAy9Icl318yEYo/xcDyW5rrX2UNfl5L9nPL5kztcobb08g3Fe01r7b0kem+RJKxLdylqrf4cwfo53rq3qOVhVP5jBMEGXtNYeuR53vUxmhhP4cObRvW4xWmtfn+kW2Fr7SJITq+pJWf3f1VflmC6Ry3mMjvP9etiKnk8jxLPi59JcMa3GuTTKceqs6PnUbfe+JDfmO28wOd7f5os6Tn1N5v1JknNr8NTKjRn8oK5b5ZiWTdef+uokt7bWfnFo0XVJZp6esy3JtUPlr6uBC5LcP9T9spdaa29urU221s7J4Of9sdbaazL4ZXl5V+3YYzBzbF7e1V8Td6q11u5McrCqvr8rujDJF7KOzofOnye5oKq+u/sdmTkO6+6cYF0Z5fq3Fs71OdtZVc9K8qsZJPL6Oq5aMkdbW2v3t9ae1Fo7p7sGfjKDNi/ZU/1W0Cjn7+9lcFdeui8E35fB4OJ9M0pb/zyDa1eq6u9kkMy7Z0WjXBlr9e8Qxs/xzrX/nOTFVXVq17PjxV3ZsquqszL4h/NrW2v/faj8cVV18sx0F9Oy38nT7e/07m/nVNVzMsgJfDWr+B27BmOC/4P8zd/ty3qMHuX79bAVO59GiWelz6URY1rRc2nEn9uKnk9V9eTujrxU1UlJXpTki8dUO97f5tcleVUNnnb71Az+efnHo+67l91sW2tHq+onMvilOSHJb7TWPr/KYS2n5yd5bZJbatAXO0l+Jslbk3yoqi5PciDJZd2yj2Tw9J39SR5I8voVjXZlXZnkA1X1lgyefnd1V351Bt1V9mcw4OqrVim+5fLGJO/tPhxvz+Bn/F1ZR+dD18X4mgxu7z6awc9/d5Lfz/o8J1gHjnf9q6r/M8mnWmvXZQ2c6yO2898neXyS/9T9HfnnrbWXrVrQCzRiW9eEEds68yXpC0keTvKvh+8+6IsR27ojya9V1b/KYByfH+9h4j1V9f4MErBPqsH4fz+bwQDgaa39Stbo3yGsvIWea621r1XVL2SQYEiS//OYrnfLGdO/yWBsrP/YXauOttY2ZzC29Ye7sg1J3tda+8MViunlSf5FVR1N8pdJXtV99izLd+wR4kmSf5Tko621bw6tumzHKMf/fn3WUFwreT6NEs9Kn0ujxLSi59KIMSUrez5tSrKnqk5I9328tbZ3lL/Nu78LPpTBDSlHk7yh67I7kurh3wwAAAAAsC71tZstAAAAAKw7knkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AAAAANATknkAAAAA0BOSeQAAAADQE5J5AADrRFW9pqo+OjTfquppqxkTAPRVVf1cVf32asfB+iOZx7pQVdNVdW9VPWa1YwGA5VZVL6iq/1pV91fV16rqj6rq77fW3ttae/GI29hYVbuq6lBVHamqL1fVLy1z6ACwZLpr119217G7qurdVfX41Y4LFksyjzWvqs5J8j8naUletrrRAMDyqqrvSbI3yTuTnJbkjCQ/n+Rb89zUm5NsTvKcJCcn2ZLk00sWKACsjB9trT0+ybMzuK7976OuWAPyJowdJyXrweuSfDLJu5NsmymsqidW1f9dVV+vqj+pqrdU1SeGlp9XVdd3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\n",
"text/plain": [
"<Figure size 1584x1440 with 9 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# distribution \n",
"df_train.hist(figsize=(22, 20), bins=30, edgecolor=\"black\")\n",
"plt.subplots_adjust(hspace=0.7, wspace=0.4)"
]
},
{
"cell_type": "markdown",
"id": "essential-serum",
"metadata": {},
"source": [
"### Check missing values and outliers"
]
},
{
"cell_type": "markdown",
"id": "royal-seller",
"metadata": {},
"source": [
"#### Categorial Variables Analysis"
]
},
{
"cell_type": "code",
"execution_count": 707,
"id": "brilliant-newton",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Name</th>\n",
" <th>Sex</th>\n",
" <th>Ticket</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Braund, Mr. Owen Harris</td>\n",
" <td>male</td>\n",
" <td>A/5 21171</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
" <td>female</td>\n",
" <td>PC 17599</td>\n",
" <td>C85</td>\n",
" <td>C</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Heikkinen, Miss. Laina</td>\n",
" <td>female</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" <td>female</td>\n",
" <td>113803</td>\n",
" <td>C123</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Allen, Mr. William Henry</td>\n",
" <td>male</td>\n",
" <td>373450</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Name Sex \\\n",
"0 Braund, Mr. Owen Harris male \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... female \n",
"2 Heikkinen, Miss. Laina female \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female \n",
"4 Allen, Mr. William Henry male \n",
"\n",
" Ticket Cabin Embarked \n",
"0 A/5 21171 NaN S \n",
"1 PC 17599 C85 C \n",
"2 STON/O2. 3101282 NaN S \n",
"3 113803 C123 S \n",
"4 373450 NaN S "
]
},
"execution_count": 707,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# First, segregating the categorical from the dataframe.\n",
"cat_vars = ['object']\n",
"cat_df = df_train.select_dtypes(include=cat_vars)\n",
"cat_df.head()"
]
},
{
"cell_type": "markdown",
"id": "solid-writer",
"metadata": {},
"source": [
"We have 5 categorical columns out of which:\n",
"\n",
"Sex is a binary categorical features."
]
},
{
"cell_type": "markdown",
"id": "verbal-extreme",
"metadata": {},
"source": [
"Next, we need to check for the number of labels each of these variables has. The number of labels a variable has defines its cardinality. Each categorical variable consists of unique values. A categorical feature is said to possess high cardinality when there are too many of these unique values. One-Hot Encoding becomes a big problem in such a case since we have a separate column for each unique value (indicating its presence or absence) in the categorical variable."
]
},
{
"cell_type": "code",
"execution_count": 708,
"id": "swedish-shelter",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['Name', 'Sex', 'Ticket', 'Cabin', 'Embarked'], dtype='object')"
]
},
"execution_count": 708,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cat_df = df_train.select_dtypes(include=cat_vars)\n",
"cat_df.columns"
]
},
{
"cell_type": "code",
"execution_count": 709,
"id": "remarkable-james",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Name 0\n",
"Sex 0\n",
"Ticket 0\n",
"Cabin 687\n",
"Embarked 2\n",
"dtype: int64 =============\n",
"Name has 891 labels\n",
"Sex has 2 labels\n",
"Ticket has 681 labels\n",
"Cabin has 148 labels\n",
"Embarked has 4 labels\n"
]
}
],
"source": [
"# printing missing value and labels in each column\n",
"print(cat_df.isnull().sum(), \"=============\")\n",
"for var in list(cat_df.columns):\n",
" print(var, 'has', len(cat_df[var].unique()), 'labels')"
]
},
{
"cell_type": "markdown",
"id": "younger-machinery",
"metadata": {},
"source": [
"Name, Ticket and Cabin has a high cardinality."
]
},
{
"cell_type": "markdown",
"id": "elementary-overall",
"metadata": {},
"source": [
"#### Numerical Variables Analysis"
]
},
{
"cell_type": "code",
"execution_count": 710,
"id": "invisible-apache",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>PassengerId</th>\n",
" <td>1.00</td>\n",
" <td>2.0000</td>\n",
" <td>3.000</td>\n",
" <td>4.0</td>\n",
" <td>5.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Survived</th>\n",
" <td>0.00</td>\n",
" <td>1.0000</td>\n",
" <td>1.000</td>\n",
" <td>1.0</td>\n",
" <td>0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Pclass</th>\n",
" <td>3.00</td>\n",
" <td>1.0000</td>\n",
" <td>3.000</td>\n",
" <td>1.0</td>\n",
" <td>3.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Age</th>\n",
" <td>22.00</td>\n",
" <td>38.0000</td>\n",
" <td>26.000</td>\n",
" <td>35.0</td>\n",
" <td>35.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SibSp</th>\n",
" <td>1.00</td>\n",
" <td>1.0000</td>\n",
" <td>0.000</td>\n",
" <td>1.0</td>\n",
" <td>0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Parch</th>\n",
" <td>0.00</td>\n",
" <td>0.0000</td>\n",
" <td>0.000</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Fare</th>\n",
" <td>7.25</td>\n",
" <td>71.2833</td>\n",
" <td>7.925</td>\n",
" <td>53.1</td>\n",
" <td>8.05</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 0 1 2 3 4\n",
"PassengerId 1.00 2.0000 3.000 4.0 5.00\n",
"Survived 0.00 1.0000 1.000 1.0 0.00\n",
"Pclass 3.00 1.0000 3.000 1.0 3.00\n",
"Age 22.00 38.0000 26.000 35.0 35.00\n",
"SibSp 1.00 1.0000 0.000 1.0 0.00\n",
"Parch 0.00 0.0000 0.000 0.0 0.00\n",
"Fare 7.25 71.2833 7.925 53.1 8.05"
]
},
"execution_count": 710,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# isolating numerical columns in a dataframe\n",
"numerics = ['int64', 'float64']\n",
"num_df = df_train.select_dtypes(include=numerics)\n",
"num_df.head().T"
]
},
{
"cell_type": "markdown",
"id": "otherwise-vector",
"metadata": {},
"source": [
"1 numerical column has missing values"
]
},
{
"cell_type": "code",
"execution_count": 711,
"id": "checked-tooth",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"PassengerId 0\n",
"Survived 0\n",
"Pclass 0\n",
"Name 0\n",
"Sex 0\n",
"Age 177\n",
"SibSp 0\n",
"Parch 0\n",
"Ticket 0\n",
"Fare 0\n",
"Cabin 687\n",
"Embarked 2\n",
"dtype: int64"
]
},
"execution_count": 711,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# simple way to get missing data\n",
"df_train.isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 712,
"id": "proper-leadership",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Total</th>\n",
" <th>Percent</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Cabin</th>\n",
" <td>687</td>\n",
" <td>0.771044</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Age</th>\n",
" <td>177</td>\n",
" <td>0.198653</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Embarked</th>\n",
" <td>2</td>\n",
" <td>0.002245</td>\n",
" </tr>\n",
" <tr>\n",
" <th>PassengerId</th>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Survived</th>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Pclass</th>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Name</th>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Sex</th>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SibSp</th>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Parch</th>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Ticket</th>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Fare</th>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Total Percent\n",
"Cabin 687 0.771044\n",
"Age 177 0.198653\n",
"Embarked 2 0.002245\n",
"PassengerId 0 0.000000\n",
"Survived 0 0.000000\n",
"Pclass 0 0.000000\n",
"Name 0 0.000000\n",
"Sex 0 0.000000\n",
"SibSp 0 0.000000\n",
"Parch 0 0.000000\n",
"Ticket 0 0.000000\n",
"Fare 0 0.000000"
]
},
"execution_count": 712,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Make sure to get all missing data\n",
"total = df_train.isnull().sum().sort_values(ascending=False)\n",
"percent = (df_train.isnull().sum()/df_train.isnull().count()).sort_values(ascending=False)\n",
"missing_data = pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])\n",
"missing_data.head(20)"
]
},
{
"cell_type": "code",
"execution_count": 713,
"id": "accessible-earthquake",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Percent missing data by feature')"
]
},
"execution_count": 713,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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v7tPr6q9MvQEXj7JprXauvv4GZ7q4CRfPeGEk7Nly2K+VwAAgEXZvHlT9t//fEly6SRfW9m2oUNGV7lNkm939yeq6urj/dOTZAx+30lyiQyBcK22WQJhkmx7AQAAABgtMhDeI8mLN+rJ9BACAABTtKKH8MxtG1xLkqSqLpbkBklePu76ZpKLjcNBM95edNy/ozYAAAB20aKWnfjTJG/u7hOSpLuPS3JskjuO7XdM8snuPn5HbRtaMQAAwB5mUUNGD0vygFX77pPkqKp6TJIfJrnbjG0AAADsgoXNMrqBDo5ZRgEAgIna0SyjixoyCgAAwIIJhAAAABMlEAIAAEyUQAgAADBRAiEAAMBECYQAAAATtah1CJfGfvvuk732Pueiy5iL00/7eU788SmLLgMAAFhSkw+Ee+19zhz//Jctuoy5OPC+d0kiEAIAANtnyCgAAMBECYQAAAATJRACAABMlEAIAAAwUQIhAADARAmEAAAAEyUQAgAATJRACAAAMFECIQAAwEQJhAAAABMlEAIAAEyUQAgAADBRAiEAAMBECYQAAAATJRACAABMlEAIAAAwUQIhAADARAmEAAAAEyUQAgAATJRACAAAMFECIQAAwEQJhAAAABMlEAIAAEyUQAgAADBRAiEAAMBECYQAAAATJRACAABMlEAIAAAwUQIhAADARAmEAAAAEyUQAgAATJRACAAAMFECIQAAwEQJhAAAABMlEAIAAEyUQAgAADBRAiEAAMBECYQAAAATJRACAABMlEAIAAAwUQIhAADARAmEAAAAEyUQAgAATJRACAAAMFECIQAAwEQJhAAAABMlEAIAAEyUQAgAADBRAiEAAMBECYQAAAATJRACAABMlEAIAAAwUQIhAADARAmEAAAAEyUQAgAATJRACAAAMFECIQAAwEQJhAAAABMlEAIAAEyUQAgAADBRAiEAAMBECYQAAAATJRACAABMlEAIAAAwUQIhAADARAmEAAAAEyUQAgAATJRACAAAMFECIQAAwEQJhAAAABMlEAIAAEyUQAgAADBRAiEAAMBEnWOjn7Cq9knyzCQ3SXJKko90972q6pAkRyXZP8kJSe7W3V8aH7NmGwAAALtmET2ET80QBA/p7qskefS4/wVJntvdhyR5bpIjVjxmR20AAADsgg3tIayq8yW5W5KLd/fWJOnu71fVQUkOTXLT8dBXJHlOVR2YZNNabd19/EbWDwAAsCfZ6CGjl80w5POxVXWjJCcneVSS/0vy7e4+PUm6+/Sq+k6SS2QIhGu1CYQAAAC7aKMD4V5JLpPkk9394Kq6dpL/SHL7eT/x/vufb95PsZQOPPD8iy4BAABYUhsdCL+R5BcZhn2mu/+zqn6QoYfwYlW119gDuFeSiyb5ZoYewrXaZnbCCSdny5atZ9q/pwem448/adElAAAAC7R586Y1O8g2dFKZ7v5BkvdkvB5wnD30oCRfTHJskjuOh94xQy/i8d193FptG1c5AADAnmcRs4zeJ8kjqup/krwyyV27+0fj/vtX1ReT3H/cXvmYtdoAAADYBRu+DmF3fyXJDbez/wtJrr3GY9ZsAwAAYNcsoocQAACAJSAQAgAATJRACAAAMFECIQAAwEQJhAAAABMlEAIAAEyUQAgAADBRAiEAAMBECYQAAAATJRACAABMlEAIAAAwUQIhAADARAmEAAAAEyUQAgAATJRACAAAMFECIQAAwEQJhAAAABMlEAIAAEyUQAgAADBRAiEAAMBECYQAAAATJRACAABMlEAIAAAwUQIhAADARAmEAAAAEyUQAgAATJRACAAAMFECIQAAwEQJhAAAABMlEAIAAEyUQAgAADBRAiEAAMBECYQAAAATJRACAABMlEAIAAAwUQIhAADARAmEAAAAEyUQAgAATJRACAAAMFECIQAAwEQJhAAAABMlEAIAAEyUQAgAADBRAiEAAMBECYQAAAATJRACAABMlEAIAAAwUQIhAADARAmEAAAAEyUQAgAATJRACAAAMFECIQAAwEQJhAAAABMlEAIAAEyUQAgAADBRAiEAAMBECYQAAAATJRACAABMlEAIAAAwUQIhAADARAmEAAAAEyUQAgAATJRACAAAMFECIQAAwEQJhAAAABMlEAIAAEyUQAgAADBRAiEAAMBECYQAAAATJRACAABMlEAIAAAwUQIhAADARAmEAAAAEyUQAgAATJRACAAAMFECIQAAwEQJhAAAABMlEAIAAEyUQAgAADBRAiEAAMBECYQAAAATdY6NfsKq+lqSU8avJHlod7+9qq6T5Igk507ytSR36e7jxses2QYAAMCuWVQP4R9191XHr7dX1eYkL0tyv+4+JMn7kzwlSXbUBgAAwK5bliGjV09ySnd/cNx+QZI/nqENAACAXbSoQPjy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\n",
"text/plain": [
"<Figure size 1080x864 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plot missing values\n",
"\n",
"f, ax = plt.subplots(figsize=(15, 12))\n",
"plt.xticks(rotation='90')\n",
"sns.barplot(x=total.index, y=total)\n",
"plt.xlabel('Features', fontsize=15)\n",
"plt.ylabel('Percent of missing values', fontsize=15)\n",
"plt.title('Percent missing data by feature', fontsize=15)"
]
},
{
"cell_type": "markdown",
"id": "permanent-density",
"metadata": {},
"source": [
"- Cabin has 77% of missing data\n",
"- Age has 20% of missing data"
]
},
{
"cell_type": "markdown",
"id": "discrete-latex",
"metadata": {},
"source": [
"### Outlier Analysis"
]
},
{
"cell_type": "code",
"execution_count": 714,
"id": "modern-hydrogen",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>count</th>\n",
" <th>mean</th>\n",
" <th>std</th>\n",
" <th>min</th>\n",
" <th>25%</th>\n",
" <th>50%</th>\n",
" <th>75%</th>\n",
" <th>max</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>PassengerId</th>\n",
" <td>891.0</td>\n",
" <td>446.000000</td>\n",
" <td>257.353842</td>\n",
" <td>1.00</td>\n",
" <td>223.5000</td>\n",
" <td>446.0000</td>\n",
" <td>668.5</td>\n",
" <td>891.0000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Survived</th>\n",
" <td>891.0</td>\n",
" <td>0.383838</td>\n",
" <td>0.486592</td>\n",
" <td>0.00</td>\n",
" <td>0.0000</td>\n",
" <td>0.0000</td>\n",
" <td>1.0</td>\n",
" <td>1.0000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Pclass</th>\n",
" <td>891.0</td>\n",
" <td>2.308642</td>\n",
" <td>0.836071</td>\n",
" <td>1.00</td>\n",
" <td>2.0000</td>\n",
" <td>3.0000</td>\n",
" <td>3.0</td>\n",
" <td>3.0000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Age</th>\n",
" <td>714.0</td>\n",
" <td>29.699118</td>\n",
" <td>14.526497</td>\n",
" <td>0.42</td>\n",
" <td>20.1250</td>\n",
" <td>28.0000</td>\n",
" <td>38.0</td>\n",
" <td>80.0000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SibSp</th>\n",
" <td>891.0</td>\n",
" <td>0.523008</td>\n",
" <td>1.102743</td>\n",
" <td>0.00</td>\n",
" <td>0.0000</td>\n",
" <td>0.0000</td>\n",
" <td>1.0</td>\n",
" <td>8.0000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Parch</th>\n",
" <td>891.0</td>\n",
" <td>0.381594</td>\n",
" <td>0.806057</td>\n",
" <td>0.00</td>\n",
" <td>0.0000</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>6.0000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Fare</th>\n",
" <td>891.0</td>\n",
" <td>32.204208</td>\n",
" <td>49.693429</td>\n",
" <td>0.00</td>\n",
" <td>7.9104</td>\n",
" <td>14.4542</td>\n",
" <td>31.0</td>\n",
" <td>512.3292</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" count mean std min 25% 50% 75% \\\n",
"PassengerId 891.0 446.000000 257.353842 1.00 223.5000 446.0000 668.5 \n",
"Survived 891.0 0.383838 0.486592 0.00 0.0000 0.0000 1.0 \n",
"Pclass 891.0 2.308642 0.836071 1.00 2.0000 3.0000 3.0 \n",
"Age 714.0 29.699118 14.526497 0.42 20.1250 28.0000 38.0 \n",
"SibSp 891.0 0.523008 1.102743 0.00 0.0000 0.0000 1.0 \n",
"Parch 891.0 0.381594 0.806057 0.00 0.0000 0.0000 0.0 \n",
"Fare 891.0 32.204208 49.693429 0.00 7.9104 14.4542 31.0 \n",
"\n",
" max \n",
"PassengerId 891.0000 \n",
"Survived 1.0000 \n",
"Pclass 3.0000 \n",
"Age 80.0000 \n",
"SibSp 8.0000 \n",
"Parch 6.0000 \n",
"Fare 512.3292 "
]
},
"execution_count": 714,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# summary statistics of all the columns\n",
"num_df.describe().T"
]
},
{
"cell_type": "markdown",
"id": "willing-interview",
"metadata": {},
"source": [
"We check the mean column in relation to the min and the max."
]
},
{
"cell_type": "code",
"execution_count": 715,
"id": "measured-corps",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(15,10))\n",
"\n",
"plt.subplot(2, 2, 1)\n",
"ax = sns.boxplot(y=df_train[\"SibSp\"])\n",
"ax.set_xlabel(\"SibSp\")\n",
"sns.set(style=\"darkgrid\")"
]
},
{
"cell_type": "code",
"execution_count": 716,
"id": "affecting-pierce",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x720 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(15,10))\n",
"\n",
"plt.subplot(2, 2, 1)\n",
"ax = sns.boxplot(y=df_train[\"Age\"])\n",
"ax.set_xlabel(\"Age\")\n",
"sns.set(style=\"darkgrid\")"
]
},
{
"cell_type": "code",
"execution_count": 717,
"id": "fatty-university",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x720 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(15,10))\n",
"\n",
"plt.subplot(2, 2, 1)\n",
"ax = sns.boxplot(y=df_train[\"Fare\"])\n",
"ax.set_xlabel(\"Fare\")\n",
"sns.set(style=\"darkgrid\")"
]
},
{
"cell_type": "code",
"execution_count": 718,
"id": "loved-mountain",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Outliers for the Fare are < -61.358399999999996 or > 100.2688\n"
]
}
],
"source": [
"# calculating outlier space for stays_in_weekend_nights\n",
"\n",
"IQR = df_train[\"Fare\"].quantile(0.75) - df_train[\"Fare\"].quantile(0.25)\n",
"lf = df_train[\"Fare\"].quantile(0.25) - (IQR * 3)\n",
"uf = df_train[\"Fare\"].quantile(0.75) + (IQR * 3)\n",
"print('Outliers for the Fare are < {lbound} or > {ubound}'.format(\n",
" lbound=lf, \n",
" ubound=uf)\n",
" )"
]
},
{
"cell_type": "markdown",
"id": "burning-fever",
"metadata": {},
"source": [
"## Baseline model"
]
},
{
"cell_type": "code",
"execution_count": 719,
"id": "existing-young",
"metadata": {},
"outputs": [],
"source": [
"# Remove the target variable\n",
"X = df_train.drop([\"Survived\"], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 720,
"id": "fuzzy-favor",
"metadata": {},
"outputs": [],
"source": [
"# Get the target variable\n",
"y = df_train[\"Survived\"]"
]
},
{
"cell_type": "markdown",
"id": "acknowledged-promotion",
"metadata": {},
"source": [
"On va utiliser Fare, SibSp et Parch car ce sont des valeurs numériques continues et utiliser la Logistic regression. Validation avec la cross-validation"
]
},
{
"cell_type": "code",
"execution_count": 721,
"id": "domestic-blocking",
"metadata": {},
"outputs": [],
"source": [
"base = ['Fare', 'SibSp', 'Parch']"
]
},
{
"cell_type": "code",
"execution_count": 722,
"id": "occasional-candy",
"metadata": {},
"outputs": [],
"source": [
"# isolate the target and filter the features we want to use\n",
"def baseline_model(X):\n",
" target = X[\"Survived\"]\n",
" X = X[base]\n",
" return X, target"
]
},
{
"cell_type": "code",
"execution_count": 723,
"id": "continuous-cocktail",
"metadata": {},
"outputs": [],
"source": [
"X, y = baseline_model(df_train.copy())"
]
},
{
"cell_type": "markdown",
"id": "brown-executive",
"metadata": {},
"source": [
" works by taking an estimator (machine learning model) along with data and labels. It then evaluates the machine learning model on the data and labels using cross-validation and a defined scoring parameter."
]
},
{
"cell_type": "code",
"execution_count": 724,
"id": "complete-rescue",
"metadata": {},
"outputs": [],
"source": [
"# cross_validation\n",
"def compute_score(clf, X, y):\n",
" from sklearn.model_selection import cross_val_score\n",
" xval = cross_val_score(clf, X, y, cv=5)\n",
" return np.mean(xval)"
]
},
{
"cell_type": "code",
"execution_count": 725,
"id": "postal-brush",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.6746092524009792\n"
]
}
],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"\n",
"lr_model = LogisticRegression(max_iter=1000)\n",
"lr_model.fit(X, y)\n",
"\n",
"print(compute_score(lr_model, X, y))"
]
},
{
"cell_type": "markdown",
"id": "corrected-vessel",
"metadata": {},
"source": [
"Nous avons un premier benchmark de 67% qui bat la null accuracy de 61.6%. "
]
},
{
"cell_type": "code",
"execution_count": 726,
"id": "thorough-subject",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[0.7374049 , 0.2625951 ],\n",
" [0.49607529, 0.50392471],\n",
" [0.68499508, 0.31500492],\n",
" ...,\n",
" [0.61158623, 0.38841377],\n",
" [0.60239549, 0.39760451],\n",
" [0.6856129 , 0.3143871 ]])"
]
},
"execution_count": 726,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# make predictions on training data \n",
"lr_predicted_labels = lr_model.predict_proba(X)\n",
"lr_predicted_labels"
]
},
{
"cell_type": "markdown",
"id": "complicated-milton",
"metadata": {},
"source": [
"## 4. Feature engineering"
]
},
{
"cell_type": "markdown",
"id": "spatial-amazon",
"metadata": {},
"source": [
"### Feature Improvement"
]
},
{
"cell_type": "markdown",
"id": "meaning-organizer",
"metadata": {},
"source": [
"Using mathematical formulas to augment the predictiveness of a particular feature"
]
},
{
"cell_type": "markdown",
"id": "imported-sunrise",
"metadata": {},
"source": [
"### Imputing"
]
},
{
"cell_type": "code",
"execution_count": 729,
"id": "threatened-whole",
"metadata": {},
"outputs": [],
"source": [
"# Imputing Missing Quantitative Data\n",
"from sklearn.impute import SimpleImputer # sklearn class to impute missing data\n",
"\n",
"# could be mean or median for numerical values\n",
"numerical_imputer = SimpleImputer(strategy='median')\n",
"\n",
"df_train['Age'] = numerical_imputer.fit_transform(df_train[['Age']])"
]
},
{
"cell_type": "code",
"execution_count": 730,
"id": "early-plaza",
"metadata": {},
"outputs": [],
"source": [
"# Imputing Missing Qualititative Data\n",
"categorical_imputer = SimpleImputer(strategy='most_frequent')\n",
"\n",
"df_train['Embarked'] = categorical_imputer.fit_transform(df_train[['Embarked']])"
]
},
{
"cell_type": "markdown",
"id": "failing-origin",
"metadata": {},
"source": [
"### Normalize"
]
},
{
"cell_type": "code",
"execution_count": 731,
"id": "martial-tablet",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>count</th>\n",
" <th>mean</th>\n",
" <th>std</th>\n",
" <th>min</th>\n",
" <th>25%</th>\n",
" <th>50%</th>\n",
" <th>75%</th>\n",
" <th>max</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>PassengerId</th>\n",
" <td>891.0</td>\n",
" <td>0.500000</td>\n",
" <td>0.289162</td>\n",
" <td>0.0</td>\n",
" <td>0.250000</td>\n",
" <td>0.500000</td>\n",
" <td>0.750000</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Survived</th>\n",
" <td>891.0</td>\n",
" <td>0.383838</td>\n",
" <td>0.486592</td>\n",
" <td>0.0</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Pclass</th>\n",
" <td>891.0</td>\n",
" <td>0.654321</td>\n",
" <td>0.418036</td>\n",
" <td>0.0</td>\n",
" <td>0.500000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Age</th>\n",
" <td>891.0</td>\n",
" <td>0.363679</td>\n",
" <td>0.163605</td>\n",
" <td>0.0</td>\n",
" <td>0.271174</td>\n",
" <td>0.346569</td>\n",
" <td>0.434531</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SibSp</th>\n",
" <td>891.0</td>\n",
" <td>0.065376</td>\n",
" <td>0.137843</td>\n",
" <td>0.0</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.125000</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Parch</th>\n",
" <td>891.0</td>\n",
" <td>0.063599</td>\n",
" <td>0.134343</td>\n",
" <td>0.0</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Fare</th>\n",
" <td>891.0</td>\n",
" <td>0.062858</td>\n",
" <td>0.096995</td>\n",
" <td>0.0</td>\n",
" <td>0.015440</td>\n",
" <td>0.028213</td>\n",
" <td>0.060508</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" count mean std min 25% 50% 75% max\n",
"PassengerId 891.0 0.500000 0.289162 0.0 0.250000 0.500000 0.750000 1.0\n",
"Survived 891.0 0.383838 0.486592 0.0 0.000000 0.000000 1.000000 1.0\n",
"Pclass 891.0 0.654321 0.418036 0.0 0.500000 1.000000 1.000000 1.0\n",
"Age 891.0 0.363679 0.163605 0.0 0.271174 0.346569 0.434531 1.0\n",
"SibSp 891.0 0.065376 0.137843 0.0 0.000000 0.000000 0.125000 1.0\n",
"Parch 891.0 0.063599 0.134343 0.0 0.000000 0.000000 0.000000 1.0\n",
"Fare 891.0 0.062858 0.096995 0.0 0.015440 0.028213 0.060508 1.0"
]
},
"execution_count": 731,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.preprocessing import MinMaxScaler\n",
"\n",
"numeric_types = ['float16', 'float32', 'float64', 'int16', 'int32', 'int64'] # the numeric types in Pandas\n",
"\n",
"numerical_columns = df_train.select_dtypes(include=numeric_types).columns.tolist()\n",
"\n",
"pd.DataFrame( \n",
" MinMaxScaler().fit_transform(df_train[numerical_columns]),\n",
" columns=numerical_columns\n",
").describe().T"
]
},
{
"cell_type": "markdown",
"id": "superior-employment",
"metadata": {},
"source": [
"### Feature Selection"
]
},
{
"cell_type": "markdown",
"id": "personal-stake",
"metadata": {},
"source": [
"Eliminating a subset of existing features to isolate the most useful subset of features(Hypothesis testing, Recursive feature elimination)"
]
},
{
"cell_type": "markdown",
"id": "initial-millennium",
"metadata": {},
"source": [
"### Feature extraction"
]
},
{
"cell_type": "markdown",
"id": "comparative-brown",
"metadata": {},
"source": [
"Applying parametric mathematical transformations to a subset of features to create a new set of features(Principal component analysis, Singular value decomposition)"
]
},
{
"cell_type": "markdown",
"id": "italic-label",
"metadata": {},
"source": [
"### Feature Construction"
]
},
{
"cell_type": "markdown",
"id": "wired-romania",
"metadata": {},
"source": [
"Creating new features from existing features or a new data source(Multiplying/dividing features together, Joining with a new dataset)"
]
},
{
"cell_type": "code",
"execution_count": 732,
"id": "matched-thunder",
"metadata": {},
"outputs": [],
"source": [
"# Adding Family_Size\n",
"df_train['Family_Size'] = df_train['Parch'] + df_train['SibSp']\n",
"df_test['Family_Size'] = df_test['Parch'] + df_test['SibSp']"
]
},
{
"cell_type": "markdown",
"id": "endless-platinum",
"metadata": {},
"source": [
"### Binning"
]
},
{
"cell_type": "markdown",
"id": "regular-tunisia",
"metadata": {},
"source": [
"\n",
"\n",
" Binning refers to the act of creating a new categorical (usually ordinal) feature from a numerical or categorical feature. The most common way to bin data is to group numerical data into bins based on threshold cutoffs, similar to how a histogram is created.\n",
"\n",
" The main goal of binning is to decrease our model’s chance of overfitting the data. Usually, this will come at the cost of performance, as we are losing granularity in the feature that we are binning."
]
},
{
"cell_type": "code",
"execution_count": 733,
"id": "cleared-huntington",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Name</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" <th>Family_Size</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Braund, Mr. Owen Harris</td>\n",
" <td>male</td>\n",
" <td>22.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>A/5 21171</td>\n",
" <td>7.2500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
" <td>female</td>\n",
" <td>38.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>PC 17599</td>\n",
" <td>71.2833</td>\n",
" <td>C85</td>\n",
" <td>C</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>Heikkinen, Miss. Laina</td>\n",
" <td>female</td>\n",
" <td>26.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>7.9250</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" <td>female</td>\n",
" <td>35.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>113803</td>\n",
" <td>53.1000</td>\n",
" <td>C123</td>\n",
" <td>S</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Allen, Mr. William Henry</td>\n",
" <td>male</td>\n",
" <td>35.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>373450</td>\n",
" <td>8.0500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>886</th>\n",
" <td>887</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>Montvila, Rev. Juozas</td>\n",
" <td>male</td>\n",
" <td>27.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>211536</td>\n",
" <td>13.0000</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>887</th>\n",
" <td>888</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Graham, Miss. Margaret Edith</td>\n",
" <td>female</td>\n",
" <td>19.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>112053</td>\n",
" <td>30.0000</td>\n",
" <td>B42</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>888</th>\n",
" <td>889</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
" <td>female</td>\n",
" <td>28.0</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>W./C. 6607</td>\n",
" <td>23.4500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>889</th>\n",
" <td>890</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Behr, Mr. Karl Howell</td>\n",
" <td>male</td>\n",
" <td>26.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>111369</td>\n",
" <td>30.0000</td>\n",
" <td>C148</td>\n",
" <td>C</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>890</th>\n",
" <td>891</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Dooley, Mr. Patrick</td>\n",
" <td>male</td>\n",
" <td>32.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>370376</td>\n",
" <td>7.7500</td>\n",
" <td>NaN</td>\n",
" <td>Q</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>891 rows × 13 columns</p>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
".. ... ... ... \n",
"886 887 0 2 \n",
"887 888 1 1 \n",
"888 889 0 3 \n",
"889 890 1 1 \n",
"890 891 0 3 \n",
"\n",
" Name Sex Age SibSp \\\n",
"0 Braund, Mr. Owen Harris male 22.0 1 \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n",
"2 Heikkinen, Miss. Laina female 26.0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n",
"4 Allen, Mr. William Henry male 35.0 0 \n",
".. ... ... ... ... \n",
"886 Montvila, Rev. Juozas male 27.0 0 \n",
"887 Graham, Miss. Margaret Edith female 19.0 0 \n",
"888 Johnston, Miss. Catherine Helen \"Carrie\" female 28.0 1 \n",
"889 Behr, Mr. Karl Howell male 26.0 0 \n",
"890 Dooley, Mr. Patrick male 32.0 0 \n",
"\n",
" Parch Ticket Fare Cabin Embarked Family_Size \n",
"0 0 A/5 21171 7.2500 NaN S 1 \n",
"1 0 PC 17599 71.2833 C85 C 1 \n",
"2 0 STON/O2. 3101282 7.9250 NaN S 0 \n",
"3 0 113803 53.1000 C123 S 1 \n",
"4 0 373450 8.0500 NaN S 0 \n",
".. ... ... ... ... ... ... \n",
"886 0 211536 13.0000 NaN S 0 \n",
"887 0 112053 30.0000 B42 S 0 \n",
"888 2 W./C. 6607 23.4500 NaN S 3 \n",
"889 0 111369 30.0000 C148 C 0 \n",
"890 0 370376 7.7500 NaN Q 0 \n",
"\n",
"[891 rows x 13 columns]"
]
},
"execution_count": 733,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_train"
]
},
{
"cell_type": "code",
"execution_count": 734,
"id": "separate-consent",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:title={'center':'Age (Uniform Binning)'}, ylabel='Frequency'>"
]
},
"execution_count": 734,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.preprocessing import KBinsDiscretizer # we will use this module for binning our data\n",
"\n",
"# uniform will create bins of equal width\n",
"binner = KBinsDiscretizer(n_bins=8, encode='ordinal', strategy='uniform')\n",
"binned_age_data = binner.fit_transform(df_train[['Age']].dropna())\n",
"pd.Series(binned_age_data.reshape(-1,)).plot(\n",
" title='Age (Uniform Binning)', kind='hist', xlabel='Age'\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 743,
"id": "sized-album",
"metadata": {},
"outputs": [],
"source": [
"df_train['Age'] = pd.Series(binned_age_data.reshape(-1,))\n",
"df_test['Age'] = pd.Series(binned_age_data.reshape(-1,))"
]
},
{
"cell_type": "code",
"execution_count": 744,
"id": "favorite-marine",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Name</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" <th>Family_Size</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Braund, Mr. Owen Harris</td>\n",
" <td>0</td>\n",
" <td>2.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>A/5 21171</td>\n",
" <td>2.0</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
" <td>1</td>\n",
" <td>3.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>PC 17599</td>\n",
" <td>3.0</td>\n",
" <td>C85</td>\n",
" <td>C</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>Heikkinen, Miss. Laina</td>\n",
" <td>1</td>\n",
" <td>2.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>2.0</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" <td>1</td>\n",
" <td>3.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>113803</td>\n",
" <td>3.0</td>\n",
" <td>C123</td>\n",
" <td>S</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Allen, Mr. William Henry</td>\n",
" <td>0</td>\n",
" <td>3.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>373450</td>\n",
" <td>3.0</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>886</th>\n",
" <td>887</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>Montvila, Rev. Juozas</td>\n",
" <td>0</td>\n",
" <td>2.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>211536</td>\n",
" <td>2.0</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>887</th>\n",
" <td>888</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Graham, Miss. Margaret Edith</td>\n",
" <td>1</td>\n",
" <td>1.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>112053</td>\n",
" <td>1.0</td>\n",
" <td>B42</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>888</th>\n",
" <td>889</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
" <td>1</td>\n",
" <td>2.0</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>W./C. 6607</td>\n",
" <td>2.0</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>889</th>\n",
" <td>890</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Behr, Mr. Karl Howell</td>\n",
" <td>0</td>\n",
" <td>2.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>111369</td>\n",
" <td>2.0</td>\n",
" <td>C148</td>\n",
" <td>C</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>890</th>\n",
" <td>891</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Dooley, Mr. Patrick</td>\n",
" <td>0</td>\n",
" <td>3.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>370376</td>\n",
" <td>3.0</td>\n",
" <td>NaN</td>\n",
" <td>Q</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>891 rows × 13 columns</p>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
".. ... ... ... \n",
"886 887 0 2 \n",
"887 888 1 1 \n",
"888 889 0 3 \n",
"889 890 1 1 \n",
"890 891 0 3 \n",
"\n",
" Name Sex Age SibSp \\\n",
"0 Braund, Mr. Owen Harris 0 2.0 1 \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... 1 3.0 1 \n",
"2 Heikkinen, Miss. Laina 1 2.0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) 1 3.0 1 \n",
"4 Allen, Mr. William Henry 0 3.0 0 \n",
".. ... ... ... ... \n",
"886 Montvila, Rev. Juozas 0 2.0 0 \n",
"887 Graham, Miss. Margaret Edith 1 1.0 0 \n",
"888 Johnston, Miss. Catherine Helen \"Carrie\" 1 2.0 1 \n",
"889 Behr, Mr. Karl Howell 0 2.0 0 \n",
"890 Dooley, Mr. Patrick 0 3.0 0 \n",
"\n",
" Parch Ticket Fare Cabin Embarked Family_Size \n",
"0 0 A/5 21171 2.0 NaN S 1 \n",
"1 0 PC 17599 3.0 C85 C 1 \n",
"2 0 STON/O2. 3101282 2.0 NaN S 0 \n",
"3 0 113803 3.0 C123 S 1 \n",
"4 0 373450 3.0 NaN S 0 \n",
".. ... ... ... ... ... ... \n",
"886 0 211536 2.0 NaN S 0 \n",
"887 0 112053 1.0 B42 S 0 \n",
"888 2 W./C. 6607 2.0 NaN S 3 \n",
"889 0 111369 2.0 C148 C 0 \n",
"890 0 370376 3.0 NaN Q 0 \n",
"\n",
"[891 rows x 13 columns]"
]
},
"execution_count": 744,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_train"
]
},
{
"cell_type": "code",
"execution_count": 798,
"id": "convinced-bachelor",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:title={'center':'Fare (Uniform Binning)'}, ylabel='Frequency'>"
]
},
"execution_count": 798,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.preprocessing import KBinsDiscretizer # we will use this module for binning our data\n",
"\n",
"# uniform will create bins of equal width\n",
"binner = KBinsDiscretizer(n_bins=8, encode='ordinal', strategy='uniform')\n",
"binned_fare_data = binner.fit_transform(df_train[['Fare']].dropna())\n",
"pd.Series(binned_fare_data.reshape(-1,)).plot(\n",
" title='Fare (Uniform Binning)', kind='hist', xlabel='Fare'\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 746,
"id": "behind-disclaimer",
"metadata": {},
"outputs": [],
"source": [
"df_train['Fare'] = pd.Series(binned_age_data.reshape(-1,))\n",
"df_test['Fare'] = pd.Series(binned_age_data.reshape(-1,))"
]
},
{
"cell_type": "code",
"execution_count": 747,
"id": "premier-undergraduate",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Name</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" <th>Family_Size</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Braund, Mr. Owen Harris</td>\n",
" <td>0</td>\n",
" <td>2.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>A/5 21171</td>\n",
" <td>2.0</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
" <td>1</td>\n",
" <td>3.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>PC 17599</td>\n",
" <td>3.0</td>\n",
" <td>C85</td>\n",
" <td>C</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>Heikkinen, Miss. Laina</td>\n",
" <td>1</td>\n",
" <td>2.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>2.0</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" <td>1</td>\n",
" <td>3.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>113803</td>\n",
" <td>3.0</td>\n",
" <td>C123</td>\n",
" <td>S</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Allen, Mr. William Henry</td>\n",
" <td>0</td>\n",
" <td>3.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>373450</td>\n",
" <td>3.0</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>886</th>\n",
" <td>887</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>Montvila, Rev. Juozas</td>\n",
" <td>0</td>\n",
" <td>2.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>211536</td>\n",
" <td>2.0</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>887</th>\n",
" <td>888</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Graham, Miss. Margaret Edith</td>\n",
" <td>1</td>\n",
" <td>1.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>112053</td>\n",
" <td>1.0</td>\n",
" <td>B42</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>888</th>\n",
" <td>889</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
" <td>1</td>\n",
" <td>2.0</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>W./C. 6607</td>\n",
" <td>2.0</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>889</th>\n",
" <td>890</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Behr, Mr. Karl Howell</td>\n",
" <td>0</td>\n",
" <td>2.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>111369</td>\n",
" <td>2.0</td>\n",
" <td>C148</td>\n",
" <td>C</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>890</th>\n",
" <td>891</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Dooley, Mr. Patrick</td>\n",
" <td>0</td>\n",
" <td>3.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>370376</td>\n",
" <td>3.0</td>\n",
" <td>NaN</td>\n",
" <td>Q</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>891 rows × 13 columns</p>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
".. ... ... ... \n",
"886 887 0 2 \n",
"887 888 1 1 \n",
"888 889 0 3 \n",
"889 890 1 1 \n",
"890 891 0 3 \n",
"\n",
" Name Sex Age SibSp \\\n",
"0 Braund, Mr. Owen Harris 0 2.0 1 \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... 1 3.0 1 \n",
"2 Heikkinen, Miss. Laina 1 2.0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) 1 3.0 1 \n",
"4 Allen, Mr. William Henry 0 3.0 0 \n",
".. ... ... ... ... \n",
"886 Montvila, Rev. Juozas 0 2.0 0 \n",
"887 Graham, Miss. Margaret Edith 1 1.0 0 \n",
"888 Johnston, Miss. Catherine Helen \"Carrie\" 1 2.0 1 \n",
"889 Behr, Mr. Karl Howell 0 2.0 0 \n",
"890 Dooley, Mr. Patrick 0 3.0 0 \n",
"\n",
" Parch Ticket Fare Cabin Embarked Family_Size \n",
"0 0 A/5 21171 2.0 NaN S 1 \n",
"1 0 PC 17599 3.0 C85 C 1 \n",
"2 0 STON/O2. 3101282 2.0 NaN S 0 \n",
"3 0 113803 3.0 C123 S 1 \n",
"4 0 373450 3.0 NaN S 0 \n",
".. ... ... ... ... ... ... \n",
"886 0 211536 2.0 NaN S 0 \n",
"887 0 112053 1.0 B42 S 0 \n",
"888 2 W./C. 6607 2.0 NaN S 3 \n",
"889 0 111369 2.0 C148 C 0 \n",
"890 0 370376 3.0 NaN Q 0 \n",
"\n",
"[891 rows x 13 columns]"
]
},
"execution_count": 747,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_train"
]
},
{
"cell_type": "markdown",
"id": "cardiac-blackberry",
"metadata": {},
"source": [
"### One-hot encodings"
]
},
{
"cell_type": "markdown",
"id": "pregnant-december",
"metadata": {},
"source": [
"Our goal is to transform a feature on the nominal level and create a one-hot encoding matrix, where each feature represents a distinct category, and the value is either 1 or 0, representing the presence of that value in the original observation."
]
},
{
"cell_type": "code",
"execution_count": 748,
"id": "diagnostic-honey",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Name</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" <th>Family_Size</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Braund, Mr. Owen Harris</td>\n",
" <td>0</td>\n",
" <td>2.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>A/5 21171</td>\n",
" <td>2.0</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
" <td>1</td>\n",
" <td>3.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>PC 17599</td>\n",
" <td>3.0</td>\n",
" <td>C85</td>\n",
" <td>C</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>Heikkinen, Miss. Laina</td>\n",
" <td>1</td>\n",
" <td>2.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>2.0</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" <td>1</td>\n",
" <td>3.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>113803</td>\n",
" <td>3.0</td>\n",
" <td>C123</td>\n",
" <td>S</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Allen, Mr. William Henry</td>\n",
" <td>0</td>\n",
" <td>3.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>373450</td>\n",
" <td>3.0</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
"\n",
" Name Sex Age SibSp Parch \\\n",
"0 Braund, Mr. Owen Harris 0 2.0 1 0 \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... 1 3.0 1 0 \n",
"2 Heikkinen, Miss. Laina 1 2.0 0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) 1 3.0 1 0 \n",
"4 Allen, Mr. William Henry 0 3.0 0 0 \n",
"\n",
" Ticket Fare Cabin Embarked Family_Size \n",
"0 A/5 21171 2.0 NaN S 1 \n",
"1 PC 17599 3.0 C85 C 1 \n",
"2 STON/O2. 3101282 2.0 NaN S 0 \n",
"3 113803 3.0 C123 S 1 \n",
"4 373450 3.0 NaN S 0 "
]
},
"execution_count": 748,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_train.head()"
]
},
{
"cell_type": "code",
"execution_count": 749,
"id": "confidential-airplane",
"metadata": {},
"outputs": [],
"source": [
"df_train['Sex'].replace(['male','female'],[0,1],inplace=True)\n",
"df_test['Sex'].replace(['male','female'],[0,1],inplace=True)"
]
},
{
"cell_type": "markdown",
"id": "motivated-chorus",
"metadata": {},
"source": [
"The Cabin column is missing too many values to be useful (687). We have to drop it."
]
},
{
"cell_type": "markdown",
"id": "employed-viewer",
"metadata": {},
"source": [
"Drop less useful features"
]
},
{
"cell_type": "code",
"execution_count": 750,
"id": "appreciated-present",
"metadata": {},
"outputs": [],
"source": [
"df_train = df_train.drop(['PassengerId', 'Cabin', 'Embarked', 'Ticket', 'Name', 'Parch', 'SibSp'], axis=1)\n",
"df_test = df_test.drop(['PassengerId', 'Cabin', 'Embarked', 'Ticket', 'Name', 'Parch', 'SibSp'], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 751,
"id": "angry-watson",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>Fare</th>\n",
" <th>Family_Size</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>2.0</td>\n",
" <td>2.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>2.0</td>\n",
" <td>2.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Survived Pclass Sex Age Fare Family_Size\n",
"0 0 3 0 2.0 2.0 1\n",
"1 1 1 1 3.0 3.0 1\n",
"2 1 3 1 2.0 2.0 0\n",
"3 1 1 1 3.0 3.0 1\n",
"4 0 3 0 3.0 3.0 0"
]
},
"execution_count": 751,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_train.head()"
]
},
{
"cell_type": "code",
"execution_count": 752,
"id": "south-summer",
"metadata": {},
"outputs": [],
"source": [
"def update_model(X):\n",
" target = X[\"Survived\"]\n",
" X = X.drop([\"Survived\"], axis=1)\n",
" return X, target"
]
},
{
"cell_type": "code",
"execution_count": 753,
"id": "editorial-decimal",
"metadata": {},
"outputs": [],
"source": [
"X, y = update_model(df_train.copy())"
]
},
{
"cell_type": "code",
"execution_count": 754,
"id": "broke-eight",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.7901136149645346\n"
]
}
],
"source": [
"lr_model.fit(X, y)\n",
"\n",
"print(compute_score(lr_model, X, y))"
]
},
{
"cell_type": "markdown",
"id": "retired-genome",
"metadata": {},
"source": [
"Sex male and sex female are among the most important features."
]
},
{
"cell_type": "markdown",
"id": "compound-magic",
"metadata": {},
"source": [
"**Poids des variables**"
]
},
{
"cell_type": "code",
"execution_count": 755,
"id": "floral-atlanta",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Coefficients</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Pclass</th>\n",
" <td>-1.117657</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Family_Size</th>\n",
" <td>-0.189451</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Age</th>\n",
" <td>-0.168342</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Fare</th>\n",
" <td>-0.168342</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Sex</th>\n",
" <td>2.663014</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Coefficients\n",
"Pclass -1.117657\n",
"Family_Size -0.189451\n",
"Age -0.168342\n",
"Fare -0.168342\n",
"Sex 2.663014"
]
},
"execution_count": 755,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"feature_names = lr_model.feature_names_in_\n",
"feature_names\n",
"\n",
"coefficients = pd.DataFrame(\n",
" lr_model.coef_[0],\n",
" columns=[\"Coefficients\"],\n",
" index=feature_names,\n",
")\n",
"\n",
"coefficients.sort_values(by=['Coefficients'])"
]
},
{
"cell_type": "code",
"execution_count": 756,
"id": "friendly-education",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"axes = coefficients['Coefficients'].plot.bar()"
]
},
{
"cell_type": "code",
"execution_count": 757,
"id": "durable-cooperation",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.96305218603375"
]
},
"execution_count": 757,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# bias\n",
"lr_model.intercept_[0]"
]
},
{
"cell_type": "markdown",
"id": "electronic-highway",
"metadata": {},
"source": [
"\n",
"Le poids des hommes, des femmes et des enfants de moins de 10 ans sont très discriminants. Etre un homme signifie une forte proba de ne pas survivre contrairement au fait d'être une femme ou un enfant (les femmes et les enfants d'abord) \n",
"\n",
"When we train our model on all features, the bias term is 1.96.\n",
"The reason why the sign before the bias term is positive is the class balance. There are a fewer surviver in the training data than non-survivers ones, meaning the probability of non-surviving on average is a little high."
]
},
{
"cell_type": "markdown",
"id": "optional-warren",
"metadata": {},
"source": [
"## 5. Training other models"
]
},
{
"cell_type": "code",
"execution_count": 758,
"id": "occupational-intervention",
"metadata": {},
"outputs": [],
"source": [
"X = df_train.drop('Survived', 1)\n",
"y = df_train['Survived']"
]
},
{
"cell_type": "code",
"execution_count": 759,
"id": "adult-texture",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import cross_val_score"
]
},
{
"cell_type": "code",
"execution_count": 760,
"id": "answering-lesbian",
"metadata": {},
"outputs": [],
"source": [
"# clf = svm.SVC(kernel='linear', C=1, random_state=42)\n",
"# scores = cross_val_score(clf, X, y, cv=5)\n",
"# scores"
]
},
{
"cell_type": "markdown",
"id": "assured-landing",
"metadata": {},
"source": [
"**Algorithms to use**\n",
"- Decision tree\n",
"- Naive Bayes\n",
"- Support vector machine (SVM)\n",
"- Random Forest\n",
"- Gradient Boosting"
]
},
{
"cell_type": "markdown",
"id": "utility-easter",
"metadata": {},
"source": [
"**Create instances of algorithms for classification**"
]
},
{
"cell_type": "code",
"execution_count": 799,
"id": "collected-strand",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.7901136149645346"
]
},
"execution_count": 799,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lr_model = LogisticRegression(max_iter=1000)\n",
"\n",
"lr_model.fit(X, y)\n",
"\n",
"# cross-validation score\n",
"np.mean(cross_val_score(lr_model, X, y, cv=5))"
]
},
{
"cell_type": "code",
"execution_count": 800,
"id": "spoken-vessel",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.7980290000627708"
]
},
"execution_count": 800,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.tree import DecisionTreeClassifier\n",
"\n",
"dt_model = DecisionTreeClassifier()\n",
"\n",
"dt_model.fit(X, y)\n",
"\n",
"np.mean(cross_val_score(dt_model, X, y, cv=5))"
]
},
{
"cell_type": "code",
"execution_count": 801,
"id": "economic-crowd",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.7811813445483649"
]
},
"execution_count": 801,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.naive_bayes import GaussianNB\n",
"\n",
"nb_model = GaussianNB()\n",
"\n",
"nb_model.fit(X, y)\n",
"\n",
"np.mean(cross_val_score(nb_model, X, y, cv=5))"
]
},
{
"cell_type": "code",
"execution_count": 802,
"id": "departmental-restaurant",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.827154604230745"
]
},
"execution_count": 802,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.svm import SVC\n",
"\n",
"svm_model = SVC()\n",
"\n",
"svm_model.fit(X, y)\n",
"\n",
"np.mean(cross_val_score(svm_model, X, y, cv=5))"
]
},
{
"cell_type": "code",
"execution_count": 803,
"id": "quarterly-option",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8092398468394955"
]
},
"execution_count": 803,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.ensemble import RandomForestClassifier\n",
"\n",
"rf_model = RandomForestClassifier()\n",
"\n",
"rf_model.fit(X, y)\n",
"\n",
"np.mean(cross_val_score(rf_model, X, y, cv=5))"
]
},
{
"cell_type": "code",
"execution_count": 766,
"id": "defined-disability",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8204193082669011"
]
},
"execution_count": 766,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.ensemble import GradientBoostingClassifier\n",
"\n",
"gb_model = GradientBoostingClassifier()\n",
"\n",
"gb_model.fit(X, y)\n",
"\n",
"np.mean(cross_val_score(gb_model, X, y, cv=5))"
]
},
{
"cell_type": "markdown",
"id": "daily-railway",
"metadata": {},
"source": [
"Gradient Boosting is the winner"
]
},
{
"cell_type": "markdown",
"id": "second-phoenix",
"metadata": {},
"source": [
"## 8. Hyperparameter tuning"
]
},
{
"cell_type": "markdown",
"id": "favorite-still",
"metadata": {},
"source": [
"Let's create a hyperparameter grid (a dictionary of different hyperparameters) for each and then test them out."
]
},
{
"cell_type": "code",
"execution_count": 767,
"id": "vocal-funeral",
"metadata": {},
"outputs": [],
"source": [
"# LogisticRegression hyperparameters\n",
"lr_grid = {\"C\": np.logspace(-4, 4, 20),\n",
" \"solver\": [\"liblinear\"]}\n",
"\n",
"# RandomForestClassifier hyperparameters\n",
"rf_grid = {\"n_estimators\": np.arange(10, 1000, 50),\n",
" \"max_depth\": [None, 3, 5, 10],\n",
" \"min_samples_split\": np.arange(2, 20, 2),\n",
" \"min_samples_leaf\": np.arange(1, 20, 2)}"
]
},
{
"cell_type": "markdown",
"id": "considered-specification",
"metadata": {},
"source": [
"We'll pass it the different hyperparameters from log_reg_grid as well as set n_iter = 20. This means, RandomizedSearchCV will try 20 different combinations of hyperparameters from log_reg_grid and save the best ones."
]
},
{
"cell_type": "code",
"execution_count": 768,
"id": "powered-mortgage",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 5 folds for each of 20 candidates, totalling 100 fits\n"
]
},
{
"data": {
"text/html": [
"<style>#sk-container-id-4 {color: black;background-color: white;}#sk-container-id-4 pre{padding: 0;}#sk-container-id-4 div.sk-toggleable {background-color: white;}#sk-container-id-4 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-4 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-4 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-4 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-4 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-4 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-4 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-4 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-4 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-4 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-4 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-4 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-4 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-4 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-4 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-4 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-4 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-4 div.sk-item {position: relative;z-index: 1;}#sk-container-id-4 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-4 div.sk-item::before, #sk-container-id-4 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-4 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-4 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-4 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-4 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-4 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-4 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-4 div.sk-label-container {text-align: center;}#sk-container-id-4 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-4 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-4\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomizedSearchCV(cv=5, estimator=LogisticRegression(), n_iter=20,\n",
" param_distributions={&#x27;C&#x27;: array([1.00000000e-04, 2.63665090e-04, 6.95192796e-04, 1.83298071e-03,\n",
" 4.83293024e-03, 1.27427499e-02, 3.35981829e-02, 8.85866790e-02,\n",
" 2.33572147e-01, 6.15848211e-01, 1.62377674e+00, 4.28133240e+00,\n",
" 1.12883789e+01, 2.97635144e+01, 7.84759970e+01, 2.06913808e+02,\n",
" 5.45559478e+02, 1.43844989e+03, 3.79269019e+03, 1.00000000e+04]),\n",
" &#x27;solver&#x27;: [&#x27;liblinear&#x27;]},\n",
" verbose=True)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-10\" type=\"checkbox\" ><label for=\"sk-estimator-id-10\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomizedSearchCV</label><div class=\"sk-toggleable__content\"><pre>RandomizedSearchCV(cv=5, estimator=LogisticRegression(), n_iter=20,\n",
" param_distributions={&#x27;C&#x27;: array([1.00000000e-04, 2.63665090e-04, 6.95192796e-04, 1.83298071e-03,\n",
" 4.83293024e-03, 1.27427499e-02, 3.35981829e-02, 8.85866790e-02,\n",
" 2.33572147e-01, 6.15848211e-01, 1.62377674e+00, 4.28133240e+00,\n",
" 1.12883789e+01, 2.97635144e+01, 7.84759970e+01, 2.06913808e+02,\n",
" 5.45559478e+02, 1.43844989e+03, 3.79269019e+03, 1.00000000e+04]),\n",
" &#x27;solver&#x27;: [&#x27;liblinear&#x27;]},\n",
" verbose=True)</pre></div></div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-11\" type=\"checkbox\" ><label for=\"sk-estimator-id-11\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">estimator: LogisticRegression</label><div class=\"sk-toggleable__content\"><pre>LogisticRegression()</pre></div></div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-12\" type=\"checkbox\" ><label for=\"sk-estimator-id-12\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">LogisticRegression</label><div class=\"sk-toggleable__content\"><pre>LogisticRegression()</pre></div></div></div></div></div></div></div></div></div></div>"
],
"text/plain": [
"RandomizedSearchCV(cv=5, estimator=LogisticRegression(), n_iter=20,\n",
" param_distributions={'C': array([1.00000000e-04, 2.63665090e-04, 6.95192796e-04, 1.83298071e-03,\n",
" 4.83293024e-03, 1.27427499e-02, 3.35981829e-02, 8.85866790e-02,\n",
" 2.33572147e-01, 6.15848211e-01, 1.62377674e+00, 4.28133240e+00,\n",
" 1.12883789e+01, 2.97635144e+01, 7.84759970e+01, 2.06913808e+02,\n",
" 5.45559478e+02, 1.43844989e+03, 3.79269019e+03, 1.00000000e+04]),\n",
" 'solver': ['liblinear']},\n",
" verbose=True)"
]
},
"execution_count": 768,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.model_selection import RandomizedSearchCV\n",
"\n",
"# Setup random seed\n",
"np.random.seed(42)\n",
"\n",
"# Setup random hyperparameter search for LogisticRegression\n",
"rs_lr = RandomizedSearchCV(LogisticRegression(),\n",
" param_distributions=lr_grid,\n",
" cv=5,\n",
" n_iter=20,\n",
" verbose=True)\n",
"\n",
"# Fit random hyperparameter search model\n",
"rs_lr.fit(X, y)"
]
},
{
"cell_type": "code",
"execution_count": 769,
"id": "bright-mercy",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'solver': 'liblinear', 'C': 0.08858667904100823}"
]
},
"execution_count": 769,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rs_lr.best_params_"
]
},
{
"cell_type": "code",
"execution_count": 770,
"id": "pediatric-ethernet",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8024691358024691"
]
},
"execution_count": 770,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rs_lr.score(X, y)\n"
]
},
{
"cell_type": "code",
"execution_count": 771,
"id": "arranged-northern",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 5 folds for each of 20 candidates, totalling 100 fits\n"
]
},
{
"data": {
"text/html": [
"<style>#sk-container-id-5 {color: black;background-color: white;}#sk-container-id-5 pre{padding: 0;}#sk-container-id-5 div.sk-toggleable {background-color: white;}#sk-container-id-5 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-5 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-5 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-5 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-5 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-5 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-5 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-5 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-5 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-5 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-5 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-5 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-5 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-5 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-5 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-5 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-5 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-5 div.sk-item {position: relative;z-index: 1;}#sk-container-id-5 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-5 div.sk-item::before, #sk-container-id-5 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-5 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-5 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-5 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-5 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-5 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-5 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-5 div.sk-label-container {text-align: center;}#sk-container-id-5 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-5 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-5\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomizedSearchCV(cv=5, estimator=RandomForestClassifier(), n_iter=20,\n",
" param_distributions={&#x27;max_depth&#x27;: [None, 3, 5, 10],\n",
" &#x27;min_samples_leaf&#x27;: array([ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]),\n",
" &#x27;min_samples_split&#x27;: array([ 2, 4, 6, 8, 10, 12, 14, 16, 18]),\n",
" &#x27;n_estimators&#x27;: array([ 10, 60, 110, 160, 210, 260, 310, 360, 410, 460, 510, 560, 610,\n",
" 660, 710, 760, 810, 860, 910, 960])},\n",
" verbose=True)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-13\" type=\"checkbox\" ><label for=\"sk-estimator-id-13\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomizedSearchCV</label><div class=\"sk-toggleable__content\"><pre>RandomizedSearchCV(cv=5, estimator=RandomForestClassifier(), n_iter=20,\n",
" param_distributions={&#x27;max_depth&#x27;: [None, 3, 5, 10],\n",
" &#x27;min_samples_leaf&#x27;: array([ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]),\n",
" &#x27;min_samples_split&#x27;: array([ 2, 4, 6, 8, 10, 12, 14, 16, 18]),\n",
" &#x27;n_estimators&#x27;: array([ 10, 60, 110, 160, 210, 260, 310, 360, 410, 460, 510, 560, 610,\n",
" 660, 710, 760, 810, 860, 910, 960])},\n",
" verbose=True)</pre></div></div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-14\" type=\"checkbox\" ><label for=\"sk-estimator-id-14\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">estimator: RandomForestClassifier</label><div class=\"sk-toggleable__content\"><pre>RandomForestClassifier()</pre></div></div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-15\" type=\"checkbox\" ><label for=\"sk-estimator-id-15\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomForestClassifier</label><div class=\"sk-toggleable__content\"><pre>RandomForestClassifier()</pre></div></div></div></div></div></div></div></div></div></div>"
],
"text/plain": [
"RandomizedSearchCV(cv=5, estimator=RandomForestClassifier(), n_iter=20,\n",
" param_distributions={'max_depth': [None, 3, 5, 10],\n",
" 'min_samples_leaf': array([ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]),\n",
" 'min_samples_split': array([ 2, 4, 6, 8, 10, 12, 14, 16, 18]),\n",
" 'n_estimators': array([ 10, 60, 110, 160, 210, 260, 310, 360, 410, 460, 510, 560, 610,\n",
" 660, 710, 760, 810, 860, 910, 960])},\n",
" verbose=True)"
]
},
"execution_count": 771,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Setup random seed\n",
"np.random.seed(42)\n",
"\n",
"# Setup random hyperparameter search for RandomForestClassifier\n",
"rs_rf = RandomizedSearchCV(RandomForestClassifier(),\n",
" param_distributions=rf_grid,\n",
" cv=5,\n",
" n_iter=20,\n",
" verbose=True)\n",
"\n",
"# Fit random hyperparameter search model\n",
"rs_rf.fit(X, y)"
]
},
{
"cell_type": "code",
"execution_count": 772,
"id": "conditional-fitting",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'n_estimators': 610,\n",
" 'min_samples_split': 18,\n",
" 'min_samples_leaf': 1,\n",
" 'max_depth': 5}"
]
},
"execution_count": 772,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Find the best parameters\n",
"rs_rf.best_params_"
]
},
{
"cell_type": "code",
"execution_count": 773,
"id": "personalized-superior",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8361391694725028"
]
},
"execution_count": 773,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Evaluate the randomized search random forest model\n",
"rs_rf.score(X, y)"
]
},
{
"cell_type": "markdown",
"id": "confirmed-audience",
"metadata": {},
"source": [
"Tha'ts way better!"
]
},
{
"cell_type": "code",
"execution_count": 774,
"id": "nasty-mixture",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 5 folds for each of 20 candidates, totalling 100 fits\n"
]
},
{
"data": {
"text/html": [
"<style>#sk-container-id-6 {color: black;background-color: white;}#sk-container-id-6 pre{padding: 0;}#sk-container-id-6 div.sk-toggleable {background-color: white;}#sk-container-id-6 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-6 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-6 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-6 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-6 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-6 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-6 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-6 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-6 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-6 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-6 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-6 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-6 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-6 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-6 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-6 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-6 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-6 div.sk-item {position: relative;z-index: 1;}#sk-container-id-6 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-6 div.sk-item::before, #sk-container-id-6 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-6 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-6 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-6 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-6 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-6 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-6 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-6 div.sk-label-container {text-align: center;}#sk-container-id-6 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-6 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-6\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomizedSearchCV(cv=5, estimator=GradientBoostingClassifier(), n_iter=20,\n",
" param_distributions={&#x27;max_depth&#x27;: [None, 3, 5, 10],\n",
" &#x27;min_samples_leaf&#x27;: array([ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]),\n",
" &#x27;min_samples_split&#x27;: array([ 2, 4, 6, 8, 10, 12, 14, 16, 18]),\n",
" &#x27;n_estimators&#x27;: array([ 10, 60, 110, 160, 210, 260, 310, 360, 410, 460, 510, 560, 610,\n",
" 660, 710, 760, 810, 860, 910, 960])},\n",
" verbose=True)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-16\" type=\"checkbox\" ><label for=\"sk-estimator-id-16\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomizedSearchCV</label><div class=\"sk-toggleable__content\"><pre>RandomizedSearchCV(cv=5, estimator=GradientBoostingClassifier(), n_iter=20,\n",
" param_distributions={&#x27;max_depth&#x27;: [None, 3, 5, 10],\n",
" &#x27;min_samples_leaf&#x27;: array([ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]),\n",
" &#x27;min_samples_split&#x27;: array([ 2, 4, 6, 8, 10, 12, 14, 16, 18]),\n",
" &#x27;n_estimators&#x27;: array([ 10, 60, 110, 160, 210, 260, 310, 360, 410, 460, 510, 560, 610,\n",
" 660, 710, 760, 810, 860, 910, 960])},\n",
" verbose=True)</pre></div></div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-17\" type=\"checkbox\" ><label for=\"sk-estimator-id-17\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">estimator: GradientBoostingClassifier</label><div class=\"sk-toggleable__content\"><pre>GradientBoostingClassifier()</pre></div></div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-18\" type=\"checkbox\" ><label for=\"sk-estimator-id-18\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">GradientBoostingClassifier</label><div class=\"sk-toggleable__content\"><pre>GradientBoostingClassifier()</pre></div></div></div></div></div></div></div></div></div></div>"
],
"text/plain": [
"RandomizedSearchCV(cv=5, estimator=GradientBoostingClassifier(), n_iter=20,\n",
" param_distributions={'max_depth': [None, 3, 5, 10],\n",
" 'min_samples_leaf': array([ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]),\n",
" 'min_samples_split': array([ 2, 4, 6, 8, 10, 12, 14, 16, 18]),\n",
" 'n_estimators': array([ 10, 60, 110, 160, 210, 260, 310, 360, 410, 460, 510, 560, 610,\n",
" 660, 710, 760, 810, 860, 910, 960])},\n",
" verbose=True)"
]
},
"execution_count": 774,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Setup random seed\n",
"np.random.seed(42)\n",
"\n",
"# Setup random hyperparameter search for RandomForestClassifier\n",
"rs_gb = RandomizedSearchCV(GradientBoostingClassifier(),\n",
" param_distributions=rf_grid,\n",
" cv=5,\n",
" n_iter=20,\n",
" verbose=True)\n",
"\n",
"# Fit random hyperparameter search model\n",
"rs_gb.fit(X, y)"
]
},
{
"cell_type": "code",
"execution_count": 775,
"id": "demographic-assessment",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'n_estimators': 210,\n",
" 'min_samples_split': 4,\n",
" 'min_samples_leaf': 19,\n",
" 'max_depth': 3}"
]
},
"execution_count": 775,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Find the best parameters\n",
"rs_gb.best_params_"
]
},
{
"cell_type": "code",
"execution_count": 776,
"id": "disabled-stream",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8428731762065096"
]
},
"execution_count": 776,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Evaluate the randomized search random forest model\n",
"rs_gb.score(X, y)"
]
},
{
"cell_type": "markdown",
"id": "located-palestine",
"metadata": {},
"source": [
"Still the best"
]
},
{
"cell_type": "markdown",
"id": "allied-produce",
"metadata": {},
"source": [
"## 7. Testing the model"
]
},
{
"cell_type": "markdown",
"id": "distinguished-florence",
"metadata": {},
"source": [
"**Use the model**"
]
},
{
"cell_type": "code",
"execution_count": 779,
"id": "diagnostic-associate",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Pclass</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>Fare</th>\n",
" <th>Family_Size</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>2.0</td>\n",
" <td>2.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>2.0</td>\n",
" <td>2.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Pclass Sex Age Fare Family_Size\n",
"0 3 0 2.0 2.0 0\n",
"1 3 1 3.0 3.0 1\n",
"2 2 0 2.0 2.0 0\n",
"3 3 0 3.0 3.0 0\n",
"4 3 1 3.0 3.0 2"
]
},
"execution_count": 779,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_test.head()"
]
},
{
"cell_type": "code",
"execution_count": 797,
"id": "configured-conditioning",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'Pclass': 3.0, 'Sex': 0.0, 'Age': 0.0, 'Fare': 0.0, 'Family_Size': 0.0}"
]
},
"execution_count": 797,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"passenger = df_test.iloc[10]\n",
"passenger_dict = passenger.to_dict()\n",
"passenger_dict"
]
},
{
"cell_type": "code",
"execution_count": 788,
"id": "provincial-bride",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/assitan/.local/lib/python3.8/site-packages/sklearn/base.py:420: UserWarning: X does not have valid feature names, but GradientBoostingClassifier was fitted with feature names\n",
" warnings.warn(\n"
]
},
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 788,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rs_gb.predict([passenger])[0]"
]
},
{
"cell_type": "markdown",
"id": "junior-accommodation",
"metadata": {},
"source": [
"This passenger should survive."
]
},
{
"cell_type": "markdown",
"id": "incorrect-adult",
"metadata": {},
"source": [
"Let's try another one."
]
},
{
"cell_type": "code",
"execution_count": 795,
"id": "designed-harris",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Pclass 1.0\n",
"Sex 0.0\n",
"Age 5.0\n",
"Fare 5.0\n",
"Family_Size 0.0\n",
"Name: 11, dtype: float64"
]
},
"execution_count": 795,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"passenger_2 = df_test.iloc[11]\n",
"passenger_2.T"
]
},
{
"cell_type": "code",
"execution_count": 796,
"id": "juvenile-pathology",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/assitan/.local/lib/python3.8/site-packages/sklearn/base.py:420: UserWarning: X does not have valid feature names, but GradientBoostingClassifier was fitted with feature names\n",
" warnings.warn(\n"
]
},
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 796,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rs_gb.predict([passenger_2])[0]"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "settled-audience",
"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.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment