{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Titanic \n", "In this competition we have data about Titanic's passengers. The data is divided into two files: train and test. In \"train\" file a column \"Survival\" shows whether the passenger survived or not.\n", "\n", "At first I explore the data, modify it and create some new features, then I select the most important of them and make a prediction using Random Forest." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "1. [Data exploration](#datex)\n", "\n", " 1.1 [Pclass](#pclass)\n", " \n", " 1.2 [Name](#name)\n", " \n", " 1.3 [Age](#age)\n", " \n", " 1.4 [Sex](#sex)\n", " \n", " 1.5 [SibSp and Parch](#family)\n", " \n", " 1.6 [Ticket](#ticket)\n", " \n", " 1.7 [Fare](#fare)\n", " \n", " 1.8 [Cabin](#cabin)\n", " \n", " 1.9 [Embarked](#em)\n", " \n", "2. [Data preparation](#datprer)\n", "\n", "3. [Model](#model)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "import pandas as pd\n", "pd.set_option('display.max_columns', None)\n", "import numpy as np\n", "\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "import seaborn as sns\n", "sns.set_style('whitegrid')\n", "\n", "import re\n", "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.model_selection import StratifiedKFold, cross_val_score, train_test_split, GridSearchCV\n", "from sklearn.feature_selection import SelectFromModel" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Data exploration" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "#Age is read as float, because later I'll need more precision for calculations.\n", "train = pd.read_csv('../input/train.csv', dtype={'Age': np.float64}, )\n", "test = pd.read_csv('../input/test.csv', dtype={'Age': np.float64}, )" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
count891.000000891.000000891.000000891891714.000000891.000000891.000000891891.000000204889
uniqueNaNNaNNaN8912NaNNaNNaN681NaN1473
topNaNNaNNaNBoulos, Miss. NourelainmaleNaNNaNNaN1601NaNG6S
freqNaNNaNNaN1577NaNNaNNaN7NaN4644
mean446.0000000.3838382.308642NaNNaN29.6991180.5230080.381594NaN32.204208NaNNaN
std257.3538420.4865920.836071NaNNaN14.5264971.1027430.806057NaN49.693429NaNNaN
min1.0000000.0000001.000000NaNNaN0.4200000.0000000.000000NaN0.000000NaNNaN
25%223.5000000.0000002.000000NaNNaN20.1250000.0000000.000000NaN7.910400NaNNaN
50%446.0000000.0000003.000000NaNNaN28.0000000.0000000.000000NaN14.454200NaNNaN
75%668.5000001.0000003.000000NaNNaN38.0000001.0000000.000000NaN31.000000NaNNaN
max891.0000001.0000003.000000NaNNaN80.0000008.0000006.000000NaN512.329200NaNNaN
\n", "
" ], "text/plain": [ " PassengerId Survived Pclass Name Sex \\\n", "count 891.000000 891.000000 891.000000 891 891 \n", "unique NaN NaN NaN 891 2 \n", "top NaN NaN NaN Boulos, Miss. Nourelain male \n", "freq NaN NaN NaN 1 577 \n", "mean 446.000000 0.383838 2.308642 NaN NaN \n", "std 257.353842 0.486592 0.836071 NaN NaN \n", "min 1.000000 0.000000 1.000000 NaN NaN \n", "25% 223.500000 0.000000 2.000000 NaN NaN \n", "50% 446.000000 0.000000 3.000000 NaN NaN \n", "75% 668.500000 1.000000 3.000000 NaN NaN \n", "max 891.000000 1.000000 3.000000 NaN NaN \n", "\n", " Age SibSp Parch Ticket Fare Cabin Embarked \n", "count 714.000000 891.000000 891.000000 891 891.000000 204 889 \n", "unique NaN NaN NaN 681 NaN 147 3 \n", "top NaN NaN NaN 1601 NaN G6 S \n", "freq NaN NaN NaN 7 NaN 4 644 \n", "mean 29.699118 0.523008 0.381594 NaN 32.204208 NaN NaN \n", "std 14.526497 1.102743 0.806057 NaN 49.693429 NaN NaN \n", "min 0.420000 0.000000 0.000000 NaN 0.000000 NaN NaN \n", "25% 20.125000 0.000000 0.000000 NaN 7.910400 NaN NaN \n", "50% 28.000000 0.000000 0.000000 NaN 14.454200 NaN NaN \n", "75% 38.000000 1.000000 0.000000 NaN 31.000000 NaN NaN \n", "max 80.000000 8.000000 6.000000 NaN 512.329200 NaN NaN " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_train.describe(include='all')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
count418.000000418.000000418418332.000000418.000000418.000000418417.00000091418
uniqueNaNNaN4182NaNNaNNaN363NaN763
topNaNNaNMallet, Mrs. Albert (Antoinette Magnin)maleNaNNaNNaNPC 17608NaNB57 B59 B63 B66S
freqNaNNaN1266NaNNaNNaN5NaN3270
mean1100.5000002.265550NaNNaN30.2725900.4473680.392344NaN35.627188NaNNaN
std120.8104580.841838NaNNaN14.1812090.8967600.981429NaN55.907576NaNNaN
min892.0000001.000000NaNNaN0.1700000.0000000.000000NaN0.000000NaNNaN
25%996.2500001.000000NaNNaN21.0000000.0000000.000000NaN7.895800NaNNaN
50%1100.5000003.000000NaNNaN27.0000000.0000000.000000NaN14.454200NaNNaN
75%1204.7500003.000000NaNNaN39.0000001.0000000.000000NaN31.500000NaNNaN
max1309.0000003.000000NaNNaN76.0000008.0000009.000000NaN512.329200NaNNaN
\n", "
" ], "text/plain": [ " PassengerId Pclass Name \\\n", "count 418.000000 418.000000 418 \n", "unique NaN NaN 418 \n", "top NaN NaN Mallet, Mrs. Albert (Antoinette Magnin) \n", "freq NaN NaN 1 \n", "mean 1100.500000 2.265550 NaN \n", "std 120.810458 0.841838 NaN \n", "min 892.000000 1.000000 NaN \n", "25% 996.250000 1.000000 NaN \n", "50% 1100.500000 3.000000 NaN \n", "75% 1204.750000 3.000000 NaN \n", "max 1309.000000 3.000000 NaN \n", "\n", " Sex Age SibSp Parch Ticket Fare \\\n", "count 418 332.000000 418.000000 418.000000 418 417.000000 \n", "unique 2 NaN NaN NaN 363 NaN \n", "top male NaN NaN NaN PC 17608 NaN \n", "freq 266 NaN NaN NaN 5 NaN \n", "mean NaN 30.272590 0.447368 0.392344 NaN 35.627188 \n", "std NaN 14.181209 0.896760 0.981429 NaN 55.907576 \n", "min NaN 0.170000 0.000000 0.000000 NaN 0.000000 \n", "25% NaN 21.000000 0.000000 0.000000 NaN 7.895800 \n", "50% NaN 27.000000 0.000000 0.000000 NaN 14.454200 \n", "75% NaN 39.000000 1.000000 0.000000 NaN 31.500000 \n", "max NaN 76.000000 8.000000 9.000000 NaN 512.329200 \n", "\n", " Cabin Embarked \n", "count 91 418 \n", "unique 76 3 \n", "top B57 B59 B63 B66 S \n", "freq 3 270 \n", "mean NaN NaN \n", "std NaN NaN \n", "min NaN NaN \n", "25% NaN NaN \n", "50% NaN NaN \n", "75% NaN NaN \n", "max NaN NaN " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_test.describe(include='all')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 891 entries, 0 to 890\n", "Data columns (total 12 columns):\n", "PassengerId 891 non-null int64\n", "Survived 891 non-null int64\n", "Pclass 891 non-null int64\n", "Name 891 non-null object\n", "Sex 891 non-null object\n", "Age 714 non-null float64\n", "SibSp 891 non-null int64\n", "Parch 891 non-null int64\n", "Ticket 891 non-null object\n", "Fare 891 non-null float64\n", "Cabin 204 non-null object\n", "Embarked 889 non-null object\n", "dtypes: float64(2), int64(5), object(5)\n", "memory usage: 83.6+ KB\n" ] } ], "source": [ "df_train.info()" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false, "deletable": true, "editable": true }, "source": [ "819 rows in train data and 418 in test.\n", "There are missing values in Age, Cabin and and Embarked columns in train and in Age and Cabin in test.\n", "Name, Sex, Ticket, Cabin and Embarked are categorical variables.\n", "Name contains a name itself and a title. Cabin and ticket consist of a letters and numbers.\n", "Let's deal with each column step by step." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Pclass" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df_train.pivot_table('PassengerId', 'Pclass', 'Survived', 'count').plot(kind='bar', stacked=True)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Pclass. It seems that Pclass is useful and requires no changes. Passengers with Pclass 3 have less chances for survival. This is reasonable, as passengers with more expensive tickets lived at higher decks and thus could get to lifeboats faster." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Name" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Names by themselves are useful. One way to use them is grouping people by family names - maybe families have better chance for survival? But it is complicated, and there is a better way to create a feature for families. Another way is extracting a title from the name and using it. Let's try." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "Mr 517\n", "Miss 182\n", "Mrs 125\n", "Master 40\n", "Dr 7\n", "Rev 6\n", "Major 2\n", "Mlle 2\n", "Col 2\n", "Mme 1\n", "Ms 1\n", "Don 1\n", "Countess 1\n", "Sir 1\n", "Lady 1\n", "Jonkheer 1\n", "Capt 1\n", "Name: Title, dtype: int64" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_train['Title'] = df_train['Name'].apply(lambda x: (re.search(' ([a-zA-Z]+)\\.', x)).group(1))\n", "df_test['Title'] = df_test['Name'].apply(lambda x: (re.search(' ([a-zA-Z]+)\\.', x)).group(1))\n", "\n", "df_train['Title'].value_counts()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There are many titles, in fact it is a bad idea to use them as they are - I tried and the accuracy got worse. A good idea is grouping them by social status or something like that. I have found several ways to group them. Here is the one I chose." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "Mr 517\n", "Miss 184\n", "Mrs 127\n", "Master 40\n", "Officer 18\n", "Royalty 5\n", "Name: Title, dtype: int64" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titles = {'Capt': 'Officer',\n", " 'Col': 'Officer',\n", " 'Major': 'Officer',\n", " 'Jonkheer': 'Royalty',\n", " 'Don': 'Royalty',\n", " 'Sir' : 'Royalty',\n", " 'Dr': 'Officer',\n", " 'Rev': 'Officer',\n", " 'Countess': 'Royalty',\n", " 'Dona': 'Royalty',\n", " 'Mme': 'Mrs',\n", " 'Mlle': 'Miss',\n", " 'Ms': 'Mrs',\n", " 'Mr' : 'Mr',\n", " 'Mrs' : 'Mrs',\n", " 'Miss' : 'Miss',\n", " 'Master' : 'Master',\n", " 'Lady' : 'Royalty'\n", " } \n", "\n", "for k,v in titles.items():\n", " df_train.loc[df_train['Title'] == k, 'Title'] = v\n", " df_test.loc[df_test['Title'] == k, 'Title'] = v\n", "\n", "#New frequencies.\n", "df_train['Title'].value_counts()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Age" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Missing values for Age should be filled. I think that simple mean/median isn't good enough. So I tried several ways to group other columns and chose median by Sex, Pclass and Title." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sex Pclass Title \n", "female 1 Miss 30.0\n", " Mrs 40.0\n", " Officer 49.0\n", " Royalty 40.5\n", " 2 Miss 24.0\n", " Mrs 31.5\n", " 3 Miss 18.0\n", " Mrs 31.0\n", "male 1 Master 4.0\n", " Mr 40.0\n", " Officer 51.0\n", " Royalty 40.0\n", " 2 Master 1.0\n", " Mr 31.0\n", " Officer 46.5\n", " 3 Master 4.0\n", " Mr 26.0\n", "Name: Age, dtype: float64\n" ] } ], "source": [ "print(df_train.groupby(['Sex', 'Pclass', 'Title', ])['Age'].median())" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "df_train['Age'] = df_train.groupby(['Sex','Pclass','Title'])['Age'].apply(lambda x: x.fillna(x.median()))\n", "df_test['Age'] = df_test.groupby(['Sex','Pclass','Title'])['Age'].apply(lambda x: x.fillna(x.median()))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Sex" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "At first I wanted to divide passengers into males, females and children, but it increased overfitting. Also I tried to replace values with 1 and 0 (instead of creating dummies), it also worked worse. So doing nothing here." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "Pclass Sex Survived\n", "1 female 1 0.968085\n", " 0 0.031915\n", " male 0 0.631148\n", " 1 0.368852\n", "2 female 1 0.921053\n", " 0 0.078947\n", " male 0 0.842593\n", " 1 0.157407\n", "3 female 0 0.500000\n", " 1 0.500000\n", " male 0 0.864553\n", " 1 0.135447\n", "Name: Survived, dtype: float64" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_train.groupby(['Pclass', 'Sex'])['Survived'].value_counts(normalize=True)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## SibSp and Parch" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Number of Siblings/Spouses and Parents/Children Aboard. Basically - amount of family members. So if we sum them, we get the size of the family. At first I created a single feature showing whether the person had family. It wasn't good enough. Then I tried several variants and stopped on four groups: 0 relatives, 1-2, 3 and 5 or more. From the table below we can see that such grouping makes sense." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "df_train['Family'] = df_train['Parch'] + df_train['SibSp']\n", "df_test['Family'] = df_test['Parch'] + df_test['SibSp']" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "Family Survived\n", "0 0 0.696462\n", " 1 0.303538\n", "1 1 0.552795\n", " 0 0.447205\n", "2 1 0.578431\n", " 0 0.421569\n", "3 1 0.724138\n", " 0 0.275862\n", "4 0 0.800000\n", " 1 0.200000\n", "5 0 0.863636\n", " 1 0.136364\n", "6 0 0.666667\n", " 1 0.333333\n", "7 0 1.000000\n", "10 0 1.000000\n", "Name: Survived, dtype: float64" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_train.groupby(['Family'])['Survived'].value_counts(normalize=True)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "def FamilySize(x):\n", " \"\"\"\n", " A function for Family size transformation\n", " \"\"\"\n", " if x == 1 or x == 2:\n", " return 'little'\n", " elif x == 3:\n", " return 'medium'\n", " elif x >= 5:\n", " return 'big'\n", " else:\n", " return 'single'\n", "\n", "df_train['Family'] = df_train['Family'].apply(lambda x : FamilySize(x))\n", "df_test['Family'] = df_test['Family'].apply(lambda x : FamilySize(x))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "Pclass Family\n", "1 big 0.500000\n", " little 0.734043\n", " medium 0.714286\n", " single 0.540541\n", "2 big 1.000000\n", " little 0.600000\n", " medium 0.769231\n", " single 0.352381\n", "3 big 0.095238\n", " little 0.384615\n", " medium 0.666667\n", " single 0.205357\n", "Name: Survived, dtype: float64" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_train.groupby(['Pclass', 'Family'])['Survived'].mean()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Ticket" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This value can't be used by itself. Ticket contains prefix and number. Using ticket number doesn't make sense, but prefix could be useful." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def Ticket_Prefix(x):\n", " \"\"\"\n", " Function for extracting prefixes. Tickets have length of 1-3.\n", " \"\"\"\n", " l = x.split()\n", " if len(x.split()) == 3:\n", " return x.split()[0] + x.split()[1]\n", " elif len(x.split()) == 2:\n", " return x.split()[0]\n", " else:\n", " return 'None'\n", "\n", "df_train['TicketPrefix'] = df_train['Ticket'].apply(lambda x: Ticket_Prefix(x))\n", "df_test['TicketPrefix'] = df_test['Ticket'].apply(lambda x: Ticket_Prefix(x))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array(['A/5', 'PC', 'STON/O2.', 'None', 'PP', 'A/5.', 'C.A.', 'A./5.',\n", " 'SC/Paris', 'S.C./A.4.', 'A/4.', 'CA', 'S.P.', 'S.O.C.', 'SO/C',\n", " 'W./C.', 'SOTON/OQ', 'W.E.P.', 'A4.', 'C', 'SOTON/O.Q.', 'SC/PARIS',\n", " 'S.O.P.', 'A.5.', 'Fa', 'CA.', 'F.C.C.', 'W/C', 'SW/PP', 'SCO/W',\n", " 'P/PP', 'SC', 'SC/AH', 'A/S', 'SC/AHBasle', 'A/4', 'WE/P',\n", " 'S.W./PP', 'S.O./P.P.', 'F.C.', 'SOTON/O2', 'S.C./PARIS',\n", " 'C.A./SOTON'], dtype=object)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#There are many similar prefixes, but combining them doesn't yield a significantly better result.\n", "df_train.TicketPrefix.unique()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Fare" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There is only one missing value, and in test. Fill it with median for its Pclass." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax = plt.subplot()\n", "ax.set_ylabel('Average Fare')\n", "df_train.groupby('Pclass').mean()['Fare'].plot(kind='bar',figsize=(7, 4), ax=ax)\n", "df_test['Fare'] = df_test.groupby(['Pclass'])['Fare'].apply(lambda x: x.fillna(x.median()))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Cabin" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "I thought about ignoring this feature, but it turned out to be quite significant. And the most important for predicting was whether there was information about the Cabin or not.\n", "So I fill NA with 'Unknown\" value and use the first letter of the Cabin number as a feature." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "df_train.Cabin.fillna('Unknown',inplace=True)\n", "df_test.Cabin.fillna('Unknown',inplace=True)\n", "\n", "df_train['Cabin'] = df_train['Cabin'].map(lambda x: x[0])\n", "df_test['Cabin'] = df_test['Cabin'].map(lambda x: x[0])" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Now let's see. Most of the cabins aren't filled.\n", "f, ax = plt.subplots(figsize=(7, 3))\n", "sns.countplot(y='Cabin', data=df_train, color='c')" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Other cabins vary in number.\n", "sns.countplot(y='Cabin', data=df_train[df_train.Cabin != 'U'], color='c')" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAK8AAACqCAYAAADbXx/GAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEKZJREFUeJzt3X9ME/f/B/Bnyw9hAi3Mj37mdPzSiQYjKptE3OIQDSLi\nUFFsAJcQlQzjJmYiA0QURGBKsoGGjP0z2ARURDM3t9VNNBClM0ODTgREQWYc9OvEwoT+uO8f+3pf\nawUP6dG+8fX4q73rXV+tT95e7+51J+E4jgMhDJJaugBCXhSFlzCLwkuYReElzKLwEmZReAmzKLxm\npNFosHv3bixfvhwRERFYv349rl27NugyHR0dCAoKeua8TZs2obOz06w1xsTEQKVSGU1LTk5GVVWV\nWd9nJNhauoDRguM4bNy4EQEBAThx4gSkUikuXryIjRs34tSpU5DJZAMuK5FInjm9qKhIrHJHBQqv\nmVy4cAGdnZ3YsmULP23evHnYu3cv9Ho99Ho9du3ahaamJqjVanh6eqKgoAAA0NfXh48//hitra1w\nd3dHVlYWnJ2dERQUhNLSUly8eBHnz5/HgwcP0N7ejsDAQKSnpxu9v1KpREFBgdEfgqenJw4cODAy\nX4AFUHjN5I8//sDMmTNNpr/77rsAgN9++w329vYoKysDx3GIjY1FdXU1ZsyYAbVajfXr12P27NnI\ny8tDYWEhduzYYRTE+vp6nDp1ChKJBCEhIVAoFJg6dSo/Pzg4GMHBweJ/UCtC4TUTqVSKwY60+/v7\nQy6X45tvvkFrayva2trQ09MDAPDy8sLs2bMBAOHh4UhOTgYAo/XNnj0bjo6OAIDJkyfjwYMHRut/\nPPI+ycvLy2TklUpNf+ZwHDfgpos1o/Caia+vLw4fPmwyPT8/H4GBgdBoNPj888/xwQcfYNWqVbh/\n/z7/micDxXEcbG1N/1ns7e2Nnj/9hyJ05JXJZOju7jaaplarB90mt1a0t8FM/P394ebmhoKCAhgM\nBgDA+fPnUVlZiSlTpqC2thahoaF4//334ebmBpVKBb1eDwC4efMmrl+/DgA4duwY5s+fL1qdj39Q\nPn7vlpYWXL16FX5+fqK9p1ho5DWjQ4cOYe/evQgLC4OdnR1cXV3x5Zdfws3NDWvWrMG2bdtw+vRp\n2Nvbw8/PD3fu3AEAuLu7o7CwELdu3cK0adOQmJgIYOC9EMP5L37t2rVob2/HihUrIJVK4eDggP37\n90Mul7/wOi1FQqdEElaJPvKuXLkSTk5OAIBJkyYhPj4eO3bsgFQqxdSpU/ldPhUVFSgvL4ednR3i\n4+OxcOFCsUsjrONE1NfXx0VERBhNi4+P51QqFcdxHLdz507u559/5jo7O7mwsDBOq9VyDx8+5MLC\nwrj+/n4xSyOjgKgj7/Xr19Hb24u4uDjo9Xps3boV165dg7+/P4B/94HW1NRAKpVi7ty5sLW1hZOT\nEzw8PNDY2AhfX18xyyOMEzW8Dg4OiIuLQ2RkJG7duoUNGzYY7eIZO3YsNBoNenp64OzszE9/5ZVX\n8PDhQzFLI6OAqOH18PCAu7s7/1gulxudqNLT0wMXFxc4OTlBo9GYTB/MpUuXxCmaWJW5c+cOOE/U\n8B47dgw3btxAeno67t27B41Gg8DAQNTV1eHtt9/GuXPnEBAQgJkzZyI/Px/9/f3o6+vDzZs3jQ59\nDmSwD0ZGP1HDu3r1aiQnJ0OhUEAqlWLfvn2Qy+VITU2FVquFt7c3QkJCIJFIEBMTA4VCAY7jkJiY\naHJEiZCnMbuf99KlSyYjr16vR0tLi4UqMh9vb2/Y2NhYugyrN6qOsLW0tGBTylcYK/uPpUt5YT0P\nOlGUFYc333zT0qVYvVEVXgAYK/sPXNxes3QZZATQiTmEWRRewiwKL2EWhZcwi8JLmEXhJcyi8BJm\nUXgJsyi8hFkUXsIsCi9hFoWXMEv08KrVaixcuJC/xJFCoUB0dDQyMjL411RUVGDVqlWIiorC2bNn\nxS6JjBKihlen0yE9PR0ODg4AgOzsbCQmJqK0tBQGgwFKpRJdXV0oKSlBeXk5iouLsX//fmi1WjHL\nIqOEqOHNycnBunXrMH78eHAcZ9I5XFtbiytXrjyzc5iQ5xEtvJWVlXj11VcRGBjIdww/voYXQJ3D\nZPhEOxm9srISEokENTU1aGxsRFJSktGVEYfTOfzY0x3Et2/fNk/xFtbQ0EB/wP/HIt3DpaWl/OPY\n2FhkZGQgNzcXKpUKb7311rA7hwHTD+bs7Ax8f9Osn8MSfH19qQ1IgBFtA0pKSkJaWhp1DhOzGJHw\nfv311/zjkpISk/mRkZGIjIwciVLIKEIHKQizKLyEWRRewiwKL2EWhZcwi8JLmEXhJcyi8BJmUXgJ\nsyi8hFkUXsIsCi9hFoWXMIvCS5gl6imRBoMBqampaG1thVQqRUZGBuzt7enew8QsRA3vL7/8AolE\ngsOHD6Ourg4HDhzgTzj39/dHeno6lEol/Pz8UFJSguPHj+PRo0dYt24dAgMDYWdnJ2Z5hHGihjc4\nOBhBQUEAgD///BMymQy1tbV072FiFqJv80qlUuzYsQOZmZkICwujew8TsxmRNqB9+/ZBrVZj9erV\n6Ovr46ebo4OYvLwEhXfPnj1IS0szmpaUlIScnJxBlztx4gTu3buHjRs3YsyYMZBKpfD19TXbvYep\n9X30e+HW95SUFLS3t6OhoQFNTU38dJ1OJ+jLXbJkCZKTkxEdHQ2dTofU1FR4eXmZ7d7D1Pr+chv0\n3sN37txBR0cHsrKykJqayk+3sbGBt7c35HL5iBT5LM+69/CNGzeQmHuS6Ttgdv/PXRzYHk7hFWDQ\nkXfSpEmYNGkSTp48CY1Gg4cPH/I/uHp7ey0aXkIEbfMWFRWhqKjIKKwSiQRnzpwRrTBCnkdQeI8c\nOQKlUgk3Nzex6yFEMEH7eV977TXIZDKxayFkSASNvB4eHlAoFJg3b57RXoDNmzeLVhghzyMovBMm\nTMCECRPEroWQIREUXhphiTUSFF4fHx9IJBKjaePHj0d1dbUoRREihKDwXr9+nX+s1WqhVCpRX18v\nWlGECDHks8rs7OywdOlSXLhwQYx6CBFM0MhbVVXFP+Y4Dk1NTXSiOLE4QeG9ePGi0XNXV1fk5+eL\nUhAhQgkKb3Z2NrRaLVpbW6HX6zF16lTY2o7o7SwIMSEogQ0NDdiyZQvkcjkMBgO6urpQWFiIWbNm\niV0fIQMSFN7MzEzk5+fzYa2vr8eePXtw9OhRUYsjZDCCwtvb22s0yvr5+Rm18zyLTqfDp59+io6O\nDmi1WsTHx2PKlCnU9k7MRlB4ZTIZlEolgoODAQBKpfK55/KePHkSrq6uyM3NRXd3N1asWAEfHx9q\neydmI7iHbdOmTUhJSeGnlZWVDbrM0qVLERISAgDQ6/WwsbExuXE2tb0Pn16vR0tLi6XLGDZvb2/Y\n2NgMaRlB4T137hwcHR1x/PhxtLW1YevWrairq4Onp+eAyzg6OgIANBoNPvroI2zdutWoYZPa3s2j\npaUFCUXb4TSO3W5rTVc3CjflDrn1SVB4KyoqcOTIETg6OsLHxweVlZVYs2YN1q5dO+hyd+/exebN\nmxEdHY1ly5YhLy+Pn0c3zh7YULqHb9++DadxLpD911XkqsQ10Gce9o2ztVqt0TaokO3Rrq4uxMXF\nYefOnQgICAAATJ8+nW6cLcBQuoednZ2Bxqrnv9DKvUjHtKDwBgcHY/369Vi6dCkA4KeffsKiRYsG\nXaaoqAjd3d04ePAgCgsLIZFIkJKSgszMTLpxNjELQeH95JNPcPr0aahUKtja2iI2Npbf8zCQlJQU\nox94j9GNs4m5CD7GGxISwu89IMQa0MWlCbMovIRZFF7CLAovYRaFlzCLwkuYReElzKLwEmZReAmz\nKLyEWRRewiwKL2EWhZcwS/TwXr58GTExMQCAtrY2KBQKREdHIyMjg39NRUUFVq1ahaioKJw9e1bs\nksgoIWp4i4uL+XuuAf9eeScxMRGlpaUwGAxQKpXo6upCSUkJysvLUVxcjP379/OvJ2QwoobX3d0d\nhYWF/POrV68adQ/X1tbiypUrz+weJuR5RA3v4sWLjdqZ6abZxJxG9Gp5Uun//61Q9/DAhto9PBqI\n1j1sLjNmzKDuYQGoe1iYEQ1vUlIS0tLSqHuYmIXo4X399df5S0N5eHhQ9zAxGzpIQZhF4SXMovAS\nZlF4CbMovIRZFF7CLAovYRaFlzCLwkuYReElzKLwEmZReAmzKLyEWRRewiwKL2HWiJ6MPhiO47Br\n1y40NjbC3t4eWVlZmDx5sqXLIlbMakZepVKJ/v5+lJWVYdu2bcjOzrZ0ScTKWU14L126hHfeeQcA\nMGvWLDQ0NFi4ImLtrGazQaPRGLXA29rawmAwGHUcC9HzoNPcpY2oF6lf09UtQiUj50Xrl3BPXkzB\ngvbt2wc/Pz/+RoULFy4c9NJPT7e9k9FroPZ3qxl558yZg19//RUhISGor69/bhv0YP385OVgNSPv\nk3sbgH+va+bp6Wnhqog1s5rwEjJUVrO3gZChovASZlF4CbMovAJxHIf09HRERUUhNjYW7e3tli5p\nxDx5dXtrYjW7yqzdk4evL1++jOzsbBw8eNDSZYmuuLgYJ06cwNixYy1digkaeQV6WQ9fP311e2tC\n4RVooMPXo93TV7e3JhRegZycnNDT08M/f5HzLoh50bcv0Jw5c1BdXQ0Agg5fjzbWeCyLfrAJtHjx\nYtTU1CAqKgoAXrrzjSUSiaVLMEGHhwmzaLOBMIvCS5hF4SXMovASZlF4CbMovIRZFF4RnT59GitX\nrsSKFSsQHh6Or776atjrLCsrQ3l5+bDXExMTA5VKNez1WBIdpBDJvXv3kJubi6qqKri4uOCff/5B\ndHQ0vLy88N57773weh8fJCEUXtHcv38fOp0Ovb29cHFxgaOjI3JycmBvb4+goCCUlpZi4sSJqKur\nwxdffIGSkhLExMRALpejubkZy5cvh1qtRlpaGgAgJycHEyZMgEajAQDIZDLcunXLZP6aNWuwe/du\nNDU1wWAwYMOGDQgNDUV/fz9SU1Nx9epVTJw4EX///bfFvhtzoc0Gkfj4+CAoKAjBwcGIjIzEZ599\nBp1OhzfeeMPkUOuTz6dNm4YffvgBUVFROHPmDH9OwY8//oiwsDD+dcuWLYNSqTSZf+jQIfj6+uLY\nsWMoKSnBoUOHcOfOHZSWlkIikeDUqVNITU1FW1vbCHwL4qKRV0S7du3Chx9+iJqaGpw/fx5RUVHI\ny8sbdJlZs2YBANzc3ODj44MLFy7Azs4Onp6eGDduHP86Nzc3TJ8+3WR+bW0t+vr6cPToUQDAo0eP\n0NzcjLq6On6Tw93dHXPmzBHpU48cCq9Iqqur0dPTg9DQUERERCAiIgJHjhzB0aNHIZFI+BFTp9MZ\nLefg4MA/Dg8Px/fffw87OzuEh4ebvMez5hsMBuTl5WH69OkAALVaDZlMhrKyMqPzj0fD6ZzsfwIr\n5eDggPz8fHR0dAD495TC5uZmzJgxA66urmhubgYAnDlzZsB1LFq0CCqVCjU1NViyZImg+QEBAfj2\n228BAH/99RfCw8Nx9+5dzJ8/H9999x04jkNHRwd+//13c3/kEUcjr0jmzZuHhIQExMfH86PrggUL\nkJCQAD8/P2RmZqKgoAALFizgl3l6W3jMmDGYO3cu+vv74ejoaPIez5qfkJCAjIwMLF++HAaDAdu3\nb8fkyZOhUCjQ1NSE0NBQTJw4cVScj0ynRBJm0WYDYRaFlzCLwkuYReElzKLwEmZReAmzKLyEWRRe\nwqz/BSh5OMjYtr84AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Factorplot shows that most people, for whom there is no info on Cabin, didn't survive.\n", "sns.factorplot('Survived', col='Cabin', col_wrap=4, data=df_train[df_train.Cabin == 'U'], kind='count', size=2.5, aspect=.8)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkMAAAFeCAYAAACGmRtDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X9cVAW+//E3o2CIA8iNXE0vKEmmmBpUPrL1boZeMDMt\nddWLP1ZuUVfLssemNhj+AE3tkW6K5qN67D7CVrbM1Lt1q8f0Q7uFwfK4uouma0hY5HrFWwh4rwIz\n3z/8NhsBwzDOmWE4r+dfcmbOOZ9Db6e358ycCXE6nU4BAACYlCXQAwAAAAQSZQgAAJgaZQgAAJga\nZQgAAJgaZQgAAJgaZQgAAJgaZchLdXV1Wr16te69915NnTpV8+bN07Fjx9yuU1VVpXHjxrX6WFZW\nls6dO+fzOffu3atp06Zp6tSpuu+++1RQUODzfaB1wZCROXPmaMKECZo6daqmTp2qKVOm6F//9V99\nug+0FAzZkKSioiLNmTNH6enp+ud//mctXrxYZ8+e9fl+0FIwZOTHrx/33nuvHnjgAR04cMCn+/Ab\nJzrM4XA4Z82a5fzNb37jbGpqcjqdTuehQ4ecY8aMcX7//fdtrvfNN984x40b568xnYWFhc6pU6c6\nq6urnU6n01lbW+ucNm2ac/fu3X6bwayCJSMZGRnOkpISv+0PwZONkpIS55133uk8cuSIa9nOnTud\n06ZN89sMZhUsGfnp68df/vIX52233eb88ssv/TaDr3QPdBkLRocOHdK5c+f02GOPuZbdfvvtWrt2\nrZqamtTU1KSVK1fq5MmTOn/+vAYOHKitW7dKki5duqTHH39cFRUViouLU15enqxWq8aNG6edO3fq\n888/1yeffKKamhp9/fXXGjNmjHJycprt3263a+vWrQoJCXEtGzhwoJ5//vlmz3vxxRe1ceNG/cM/\n/IMkqVevXlq/fr3q6uqM+tXg/wuWjEiSw+Ew6LeA1gRLNrZv366FCxfq5ptvdi37l3/5F12+fFkN\nDQ0KDQ014tcDBU9GJMn5o/s2JyUlaeLEidq9e7eWLl3q61+LoShDXvjiiy80fPjwFsvHjh0rSfrT\nn/6ksLAwFRYWyul0au7cuTpw4ICGDh2q8+fPa968eRo1apQ2btyo/Px8LVu2rFnoDh8+rLffflsh\nISFKS0vT7NmzNXjwYNfjqampSk1NdTvjd999p7/97W/NXsgkadCgQVdz6PBQMGTkBytWrFDPnj3l\n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\nDKBT4T1DAADA1Px+ZsjpdGrlypU6ceKEwsLClJeXpwEDBvh7DAAAAEkBODNkt9t1+fJlFRYW6skn\nn9S6dev8PQIAAICL38tQaWmpfv7zn0uSRowYobKyMn+PAAAA4OL3y2R1dXWyWq1/H6B7dzkcDlks\nHe9l9TXnfDma33kzf131BQMm8S9/HQP5CE7kwzPezh/sGSEfniEfHRPidDqdPp7FrWeffVYjR45U\nWlqaJOkXv/iFPv744zafX1pa6qfJ0FkkJyd36PlkxFzIB9whH3CnrXz4/czQLbfcoo8++khpaWk6\nfPhwu/eK6GiwYT5kBO6QD7hDPiAF4MzQjz9NJknr1q3TwIED/TkCAACAi9/LEAAAQGfCTRcBAICp\nUYYAAICpUYYAAICpUYYAAICpUYYAAICpUYYAAICpUYYAAICpUYYAAICpUYYAAICpUYYAAICpUYYA\nAICpUYYAAICpUYYAAICpUYauQl1dnVavXq17771XU6dO1bx583Ts2DG361RVVWncuHGtPpaVlaVz\n584ZMaoeeOABPfLII4ZsG60LhnyMGzdOkyZN0pQpUzRp0iRlZWXpu+++8+k+0LpgyMecOXM0YcIE\nTZ06VVOmTNHUqVP1+9//3qf7QNs6e0b+8z//U1OmTNGUKVM0atQoV1YeffRRn+3Db5zwisPhcM6a\nNcv5m9/8xtnU1OR0Op3OQ4cOOceMGeP8/vvv21zvm2++cY4bN85fYzqdTqfzxIkTzpkzZzrvuusu\n59/+9je/7tusgiUf48aNc3777beun/Py8pwbN2702/7NKljykZGR4SwpKfHb/vB3wZKRH8yZMyeo\ns9I90GUsWB06dEjnzp3TY4895lp2++23a+3atWpqalJTU5NWrlypkydP6vz58xo4cKC2bt0qSbp0\n6ZIef/xxVVRUKC4uTnl5ebJarRo3bpx27typzz//XJ988olqamr09ddfa8yYMcrJyWm2f7vdrq1b\ntyokJMS1bODAgXr++edbzLpnzx6NGTNG33//vf7whz80mxnGCJZ8OJ1OORwOSZLD4VB9fb369etn\n1K8F/1+w5EOSKx/wr2DKiHTltcTpdBrwm/APypCXvvjiCw0fPrzF8rFjx0qS/vSnPyksLEyFhYVy\nOp2aO3euDhw4oKFDh+r8+fOaN2+eRo0apY0bNyo/P1/Lli1rFrrDhw/r7bffVkhIiNLS0jR79mwN\n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\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#For passengers with known Cabins survival rate varies.\n", "sns.factorplot('Survived', col='Cabin', col_wrap=4, data=df_train[df_train.Cabin != 'U'], kind='count', size=2.5, aspect=.8)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Survived
Cabin
A0.466667
B0.744681
C0.593220
D0.757576
E0.750000
F0.615385
G0.500000
T0.000000
U0.299854
\n", "
" ], "text/plain": [ " Survived\n", "Cabin \n", "A 0.466667\n", "B 0.744681\n", "C 0.593220\n", "D 0.757576\n", "E 0.750000\n", "F 0.615385\n", "G 0.500000\n", "T 0.000000\n", "U 0.299854" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_train.groupby(['Cabin']).mean()[df_train.groupby(['Cabin']).mean().columns[1:2]]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Embarked\n", "\n", "I simply fill na with most common value." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "MedEmbarked = df_train.groupby('Embarked').count()['PassengerId']\n", "df_train.Embarked.fillna(MedEmbarked, inplace=True)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Data preparation" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarkedTitleFamilyTicketPrefix
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500USMrlittleA/5
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833CCMrslittlePC
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250USMisssingleSTON/O2.
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000CSMrslittleNone
4503Allen, Mr. William Henrymale35.0003734508.0500USMrsingleNone
\n", "
" ], "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 Title Family TicketPrefix \n", "0 0 A/5 21171 7.2500 U S Mr little A/5 \n", "1 0 PC 17599 71.2833 C C Mrs little PC \n", "2 0 STON/O2. 3101282 7.9250 U S Miss single STON/O2. \n", "3 0 113803 53.1000 C S Mrs little None \n", "4 0 373450 8.0500 U S Mr single None " ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#This is how the data looks like now.\n", "df_train.head()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "For most algorithms it is better to have only numerical data, therefore categorical variables should be changed. In some cases normalizing numerical data is necessary, but in this case this caused worse results.\n", "I noticed that some columns with categorical values have different unique values in train and test. I could deal with it by combining values in subgroups. But I decided to do feature selection first (lower) and the features selected were both in train and test." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "#Drop unnecessary columns\n", "to_drop = ['Ticket', 'Name', 'SibSp', 'Parch']\n", "for i in to_drop:\n", " df_train.drop([i], axis=1, inplace=True)\n", " df_test.drop([i], axis=1, inplace=True)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "#Pclass in fact is a categorical variable, though it's type isn't object.\n", "for col in df_train.columns:\n", " if df_train[col].dtype == 'object' or col == 'Pclass':\n", " dummies = pd.get_dummies(df_train[col], drop_first=False)\n", " dummies = dummies.add_prefix('{}_'.format(col))\n", " df_train.drop(col, axis=1, inplace=True)\n", " df_train = df_train.join(dummies)\n", "for col in df_test.columns:\n", " if df_test[col].dtype == 'object' or col == 'Pclass':\n", " dummies = pd.get_dummies(df_test[col], drop_first=False)\n", " dummies = dummies.add_prefix('{}_'.format(col))\n", " df_test.drop(col, axis=1, inplace=True)\n", " df_test = df_test.join(dummies)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdSurvivedAgeFarePclass_1Pclass_2Pclass_3Sex_femaleSex_maleCabin_ACabin_BCabin_CCabin_DCabin_ECabin_FCabin_GCabin_TCabin_UEmbarked_CEmbarked_QEmbarked_STitle_MasterTitle_MissTitle_MrTitle_MrsTitle_OfficerTitle_RoyaltyFamily_bigFamily_littleFamily_mediumFamily_singleTicketPrefix_A./5.TicketPrefix_A.5.TicketPrefix_A/4TicketPrefix_A/4.TicketPrefix_A/5TicketPrefix_A/5.TicketPrefix_A/STicketPrefix_A4.TicketPrefix_CTicketPrefix_C.A.TicketPrefix_C.A./SOTONTicketPrefix_CATicketPrefix_CA.TicketPrefix_F.C.TicketPrefix_F.C.C.TicketPrefix_FaTicketPrefix_NoneTicketPrefix_P/PPTicketPrefix_PCTicketPrefix_PPTicketPrefix_S.C./A.4.TicketPrefix_S.C./PARISTicketPrefix_S.O./P.P.TicketPrefix_S.O.C.TicketPrefix_S.O.P.TicketPrefix_S.P.TicketPrefix_S.W./PPTicketPrefix_SCTicketPrefix_SC/AHTicketPrefix_SC/AHBasleTicketPrefix_SC/PARISTicketPrefix_SC/ParisTicketPrefix_SCO/WTicketPrefix_SO/CTicketPrefix_SOTON/O.Q.TicketPrefix_SOTON/O2TicketPrefix_SOTON/OQTicketPrefix_STON/O2.TicketPrefix_SW/PPTicketPrefix_W./C.TicketPrefix_W.E.P.TicketPrefix_W/CTicketPrefix_WE/P
01022.07.25000010100000000100100100001000000100000000000000000000000000000000000000
12138.071.28331001000100000010000010001000000000000000000001000000000000000000000000
23126.07.92500011000000000100101000000010000000000000000000000000000000000000100000
34135.053.10001001000100000000100010001000000000000000000100000000000000000000000000
45035.08.05000010100000000100100100000010000000000000000100000000000000000000000000
\n", "
" ], "text/plain": [ " PassengerId Survived Age Fare Pclass_1 Pclass_2 Pclass_3 \\\n", "0 1 0 22.0 7.2500 0 0 1 \n", "1 2 1 38.0 71.2833 1 0 0 \n", "2 3 1 26.0 7.9250 0 0 1 \n", "3 4 1 35.0 53.1000 1 0 0 \n", "4 5 0 35.0 8.0500 0 0 1 \n", "\n", " Sex_female Sex_male Cabin_A Cabin_B Cabin_C Cabin_D Cabin_E Cabin_F \\\n", "0 0 1 0 0 0 0 0 0 \n", "1 1 0 0 0 1 0 0 0 \n", "2 1 0 0 0 0 0 0 0 \n", "3 1 0 0 0 1 0 0 0 \n", "4 0 1 0 0 0 0 0 0 \n", "\n", " Cabin_G Cabin_T Cabin_U Embarked_C Embarked_Q Embarked_S \\\n", "0 0 0 1 0 0 1 \n", "1 0 0 0 1 0 0 \n", "2 0 0 1 0 0 1 \n", "3 0 0 0 0 0 1 \n", "4 0 0 1 0 0 1 \n", "\n", " Title_Master Title_Miss Title_Mr Title_Mrs Title_Officer \\\n", "0 0 0 1 0 0 \n", "1 0 0 0 1 0 \n", "2 0 1 0 0 0 \n", "3 0 0 0 1 0 \n", "4 0 0 1 0 0 \n", "\n", " Title_Royalty Family_big Family_little Family_medium Family_single \\\n", "0 0 0 1 0 0 \n", "1 0 0 1 0 0 \n", "2 0 0 0 0 1 \n", "3 0 0 1 0 0 \n", "4 0 0 0 0 1 \n", "\n", " TicketPrefix_A./5. TicketPrefix_A.5. TicketPrefix_A/4 TicketPrefix_A/4. \\\n", "0 0 0 0 0 \n", "1 0 0 0 0 \n", "2 0 0 0 0 \n", "3 0 0 0 0 \n", "4 0 0 0 0 \n", "\n", " TicketPrefix_A/5 TicketPrefix_A/5. TicketPrefix_A/S TicketPrefix_A4. \\\n", "0 1 0 0 0 \n", "1 0 0 0 0 \n", "2 0 0 0 0 \n", "3 0 0 0 0 \n", "4 0 0 0 0 \n", "\n", " TicketPrefix_C TicketPrefix_C.A. TicketPrefix_C.A./SOTON \\\n", "0 0 0 0 \n", "1 0 0 0 \n", "2 0 0 0 \n", "3 0 0 0 \n", "4 0 0 0 \n", "\n", " TicketPrefix_CA TicketPrefix_CA. TicketPrefix_F.C. TicketPrefix_F.C.C. \\\n", "0 0 0 0 0 \n", "1 0 0 0 0 \n", "2 0 0 0 0 \n", "3 0 0 0 0 \n", "4 0 0 0 0 \n", "\n", " TicketPrefix_Fa TicketPrefix_None TicketPrefix_P/PP TicketPrefix_PC \\\n", "0 0 0 0 0 \n", "1 0 0 0 1 \n", "2 0 0 0 0 \n", "3 0 1 0 0 \n", "4 0 1 0 0 \n", "\n", " TicketPrefix_PP TicketPrefix_S.C./A.4. TicketPrefix_S.C./PARIS \\\n", "0 0 0 0 \n", "1 0 0 0 \n", "2 0 0 0 \n", "3 0 0 0 \n", "4 0 0 0 \n", "\n", " TicketPrefix_S.O./P.P. TicketPrefix_S.O.C. TicketPrefix_S.O.P. \\\n", "0 0 0 0 \n", "1 0 0 0 \n", "2 0 0 0 \n", "3 0 0 0 \n", "4 0 0 0 \n", "\n", " TicketPrefix_S.P. TicketPrefix_S.W./PP TicketPrefix_SC \\\n", "0 0 0 0 \n", "1 0 0 0 \n", "2 0 0 0 \n", "3 0 0 0 \n", "4 0 0 0 \n", "\n", " TicketPrefix_SC/AH TicketPrefix_SC/AHBasle TicketPrefix_SC/PARIS \\\n", "0 0 0 0 \n", "1 0 0 0 \n", "2 0 0 0 \n", "3 0 0 0 \n", "4 0 0 0 \n", "\n", " TicketPrefix_SC/Paris TicketPrefix_SCO/W TicketPrefix_SO/C \\\n", "0 0 0 0 \n", "1 0 0 0 \n", "2 0 0 0 \n", "3 0 0 0 \n", "4 0 0 0 \n", "\n", " TicketPrefix_SOTON/O.Q. TicketPrefix_SOTON/O2 TicketPrefix_SOTON/OQ \\\n", "0 0 0 0 \n", "1 0 0 0 \n", "2 0 0 0 \n", "3 0 0 0 \n", "4 0 0 0 \n", "\n", " TicketPrefix_STON/O2. TicketPrefix_SW/PP TicketPrefix_W./C. \\\n", "0 0 0 0 \n", "1 0 0 0 \n", "2 1 0 0 \n", "3 0 0 0 \n", "4 0 0 0 \n", "\n", " TicketPrefix_W.E.P. TicketPrefix_W/C TicketPrefix_WE/P \n", "0 0 0 0 \n", "1 0 0 0 \n", "2 0 0 0 \n", "3 0 0 0 \n", "4 0 0 0 " ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#This is how the data looks like now.\n", "df_train.head()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "\n", "X_train = df_train.drop('Survived',axis=1)\n", "Y_train = df_train['Survived']\n", "X_test = df_test" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Now feature selection. This code ranks features by their importance for Random Forest. At first for parameters I used \"n_estimators = 200\" then I used more optimal parameters, which were found lower." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false, "deletable": true, "editable": true, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Feature ranking:\n", "1. feature 22 Title_Mr (0.172049)\n", "2. feature 6 Sex_female (0.158405)\n", "3. feature 7 Sex_male (0.125303)\n", "4. feature 5 Pclass_3 (0.076298)\n", "5. feature 21 Title_Miss (0.071074)\n", "6. feature 23 Title_Mrs (0.061872)\n", "7. feature 1 Age (0.049752)\n", "8. feature 2 Fare (0.044895)\n", "9. feature 16 Cabin_U (0.034382)\n", "10. feature 0 PassengerId (0.028074)\n", "11. feature 26 Family_big (0.023500)\n", "12. feature 3 Pclass_1 (0.021350)\n", "13. feature 19 Embarked_S (0.019117)\n", "14. feature 4 Pclass_2 (0.017256)\n", "15. feature 29 Family_single (0.017157)\n", "16. feature 9 Cabin_B (0.010840)\n", "17. feature 28 Family_medium (0.009579)\n", "18. feature 12 Cabin_E (0.008865)\n", "19. feature 48 TicketPrefix_PC (0.007778)\n", "20. feature 27 Family_little (0.007275)\n", "21. feature 20 Title_Master (0.006684)\n", "22. feature 17 Embarked_C (0.004819)\n", "23. feature 39 TicketPrefix_C.A. (0.003906)\n", "24. feature 18 Embarked_Q (0.003594)\n", "25. feature 67 TicketPrefix_STON/O2. (0.003204)\n", "26. feature 69 TicketPrefix_W./C. (0.001691)\n", "27. feature 46 TicketPrefix_None (0.001576)\n", "28. feature 13 Cabin_F (0.001224)\n", "29. feature 53 TicketPrefix_S.O.C. (0.001140)\n", "30. feature 11 Cabin_D (0.001118)\n", "31. feature 25 Title_Royalty (0.000967)\n", "32. feature 10 Cabin_C (0.000964)\n", "33. feature 41 TicketPrefix_CA (0.000885)\n", "34. feature 8 Cabin_A (0.000694)\n", "35. feature 35 TicketPrefix_A/5. (0.000618)\n", "36. feature 42 TicketPrefix_CA. (0.000530)\n", "37. feature 24 Title_Officer (0.000448)\n", "38. feature 64 TicketPrefix_SOTON/O.Q. (0.000405)\n", "39. feature 49 TicketPrefix_PP (0.000337)\n", "40. feature 70 TicketPrefix_W.E.P. (0.000218)\n", "41. feature 14 Cabin_G (0.000155)\n", "42. feature 15 Cabin_T (0.000000)\n", "43. feature 72 TicketPrefix_WE/P (0.000000)\n", "44. feature 30 TicketPrefix_A./5. (0.000000)\n", "45. feature 31 TicketPrefix_A.5. (0.000000)\n", "46. feature 68 TicketPrefix_SW/PP (0.000000)\n", "47. feature 66 TicketPrefix_SOTON/OQ (0.000000)\n", "48. feature 65 TicketPrefix_SOTON/O2 (0.000000)\n", "49. feature 63 TicketPrefix_SO/C (0.000000)\n", "50. feature 62 TicketPrefix_SCO/W (0.000000)\n", "51. feature 61 TicketPrefix_SC/Paris (0.000000)\n", "52. feature 60 TicketPrefix_SC/PARIS (0.000000)\n", "53. feature 59 TicketPrefix_SC/AHBasle (0.000000)\n", "54. feature 58 TicketPrefix_SC/AH (0.000000)\n", "55. feature 57 TicketPrefix_SC (0.000000)\n", "56. feature 56 TicketPrefix_S.W./PP (0.000000)\n", "57. feature 55 TicketPrefix_S.P. (0.000000)\n", "58. feature 54 TicketPrefix_S.O.P. (0.000000)\n", "59. feature 52 TicketPrefix_S.O./P.P. (0.000000)\n", "60. feature 51 TicketPrefix_S.C./PARIS (0.000000)\n", "61. feature 50 TicketPrefix_S.C./A.4. (0.000000)\n", "62. feature 47 TicketPrefix_P/PP (0.000000)\n", "63. feature 45 TicketPrefix_Fa (0.000000)\n", "64. feature 44 TicketPrefix_F.C.C. (0.000000)\n", "65. feature 43 TicketPrefix_F.C. (0.000000)\n", "66. feature 40 TicketPrefix_C.A./SOTON (0.000000)\n", "67. feature 38 TicketPrefix_C (0.000000)\n", "68. feature 37 TicketPrefix_A4. (0.000000)\n", "69. feature 71 TicketPrefix_W/C (0.000000)\n", "70. feature 34 TicketPrefix_A/5 (0.000000)\n", "71. feature 33 TicketPrefix_A/4. (0.000000)\n", "72. feature 32 TicketPrefix_A/4 (0.000000)\n", "73. feature 36 TicketPrefix_A/S (0.000000)\n" ] } ], "source": [ "clf = RandomForestClassifier(n_estimators = 15,\n", " criterion = 'gini',\n", " max_features = 'sqrt',\n", " max_depth = None, \n", " min_samples_split =7,\n", " min_weight_fraction_leaf = 0.0,\n", " max_leaf_nodes = 18)\n", "clf = clf.fit(X_train, Y_train)\n", "indices = np.argsort(clf.feature_importances_)[::-1]\n", "\n", "print('Feature ranking:')\n", "for f in range(X_train.shape[1]):\n", " print('%d. feature %d %s (%f)' % (f + 1, indices[f], X_train.columns[indices[f]], clf.feature_importances_[indices[f]]))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Feature selection by sklearn based on importance weights." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "(891, 15)" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = SelectFromModel(clf, prefit=True)\n", "train_new = model.transform(X_train)\n", "train_new.shape" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "Index(['Title_Mr', 'Sex_female', 'Sex_male', 'Pclass_3', 'Title_Miss',\n", " 'Title_Mrs', 'Age', 'Fare', 'Cabin_U', 'PassengerId', 'Family_big',\n", " 'Pclass_1', 'Embarked_S', 'Pclass_2', 'Family_single'],\n", " dtype='object')" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "best_features = X_train.columns[indices[0:train_new.shape[1]]]\n", "X = X_train[best_features]\n", "Xt = X_test[best_features]\n", "best_features" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Usually SelectFromModel gives 13-15 features. Sex is most important, which isn't surprising - as we know, most places in boats were given to women. Fare and Pclass prove that difference in wealth is important. Age, of course, is important. Size of family and titles are also significant, as expected. Absense of info about the Cabin is indeed significant. And for some reason PassengerId is also important. Maybe data leak?" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Model" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "X_train, X_test, y_train, y_test = train_test_split(X, Y_train, test_size=0.33, random_state=44)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "I saw the next part of code there: https://www.kaggle.com/creepykoala/titanic/study-of-tree-and-forest-algorithms\n", "This is a great way to see how parameters influence the score of Random Forest." ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\nbNq0CRsbG9RqNQMHDmTq1KnUrVu30KgfLy8v3nrrLVatWsW+ffvw9/cnLy+P7t2763s4K7sWLVoQ\nHBzM4sWL0el0LFiwgMjISAYOHEitWrUwMzN74H53f3ZmzZpVxhEbJ2dnZ1q1asXAgQNRFAUvLy+6\ndu2Kl5cXY8eOZcuWLdSoUQO1Ws3NmzdZuHAhzZs3Z8SIEahUKrp3766/56/sxo8fz19//YW1tTV+\nfn74+/ujKAre3t507dqV+Pj4+/ZRqVSMHz+et956C51Oh42NDTNnznzkeVSKjD8SQlRyhw8fJisr\niw4dOnDx4kXefPNNtm3bZuiwhBBlbN26dZw/f57Ro0fft23atGm89NJLtG3b1gCRidL0/PPP8+ef\nfxo6jHJr586dVK9enebNm7N3716WLFmin1MmDEtqgwshKj1HR0d91br8/HwmT55s6JCEEEZkxIgR\nVKtWTZI8IR6gfv36TJgwQT+MeOLEiYYOSfyX9OgJIYQQQgghRAVTOSeDCSGEEEIIIUQFJomeEEII\nIYQQQlQwkugJIYQQQgghRAUjiV4ld+XKFdzc3AgICLhvW0hICG5ubqSlpZXIedzd3enduze9e/em\nV69e9O3bl//85z9PfewRI0boY+zSpQtxcXFPfUwhxJN73PYkNjaWkSNHPvHxly1bxquvvsqrr75K\nz549mTlz5n0LSZeGdevW8c4775TY8Yp7HXc/v+joaKZPnw4UVLubN29eicUmhDEprTYlOTkZDw8P\nbt++rf/e7NmzcXNz48KFC/rvLV++nFGjRj3yWBEREXz99dePfM/+/fvp2bPnA7cdP378oQXAQkJC\n6Nixo/7e6dVXX6V3797cuHHjked7XAsXLiQ6OhqAefPmsX79+hI57qOutzh0Oh3vvvsufn5+rFmz\npsSOWxlI1U2Bubk558+f59q1a9SpUweA7OxsDh06VKJrhVlYWLBu3Tr966tXrzJ06FCsrKzw9fUt\n9nF3795dEuEJIUrA47QnzZs358svv3yi427ZsoWoqCh+/PFHNBoNubm5fPTRRyxYsKDIGzFj8jTX\ncffz69KlC126dAEKbhLvvVkVoqIpjTbFwcGBpk2bcuDAAV588UUAtm/fTpcuXYiOjmb48OEA7N27\nlx49ejzyWE+7LtyZM2dISkp66PZhw4YxbNiwpzrHw/z11180adIEgI8++qhUzlESEhMT2bNnD0eO\n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\nL1JTU8+7TRRFPPjgg9ixY8e4h4+G82weIiIiIqJAY0bvAiGRSPDTn/4UO3fudP/s448/xjXXXOP+\nXhRFPP7447jttttw44034oYbbkBVVRVEUcRdd92FX//61wCAAwcO4KqrroJOp/P6/FarFRUVFVi6\ndCluueUWrFu3DgaDAQDw97//HeXl5bj11ltxzTXX4PnnnwcA3H777QCAu+++G5WVlecd87LLLkNy\ncjKefPLJEc957NgxrFq1CosXL8Ytt9wyLNP33HPPobS0FMuXL8cnn3zi1Tr/9Kc/4eabb0ZZWRnu\nuOMONDY2en39REREREThhIHeBUIQBNxyyy3DAr33338fy5Ytc39fU1ODzs5OvP3229i1axduvvlm\nvPLKKxAEAb/+9a/x17/+FZ9++ikefvhhPPPMM0hISPD6/K+88gpkMhn+8pe/4P3330dKSgqefvpp\nAMAbb7yBp556Cjt27MD27dvx8ssvo7u7G2+++SZEUcS2bduwYMGCEa/pySefxAcffIB9+/YNu81u\nt+Pee+/FqlWrsHPnTrzyyiv47W9/i5qaGnz66afYvXs3du7cie3bt0Ov14+5zt/85jdwOByoqKjA\na6+9hnfeeQfLly/HwYMHvb5+IiIiIqJwwtLNC8icOXMgkUhw9OhRJCQkwGg0YtasWRBFEQBQXFyM\n++67D2+99RaamprwzTffQKVSAQCSk5OxadMm3Hvvvfi///f/jhh4jWXv3r3o6+vD/v37AQA2mw2J\niYkAgP/6r//C3r17sXPnTpw4cQKAs6xUrVYDgHt9I0lKSsLmzZvx8MMP469//av756dOnYLFYsG1\n114LAEhJScF1112Hzz77DD09PSgtLYVSqQQALFu2DNu2bRtznRKJBD/5yU9w2223YdGiRbj88stx\n0003+fQ7ICIiIiIKFwz0LjCLFy/GX//6VyQkJGDx4sXDbtu7dy+2bNmCn/3sZ7j22msxY8YM/O1v\nf3PffuzYMSQlJeHQoUM+n9dut+ORRx7BwoULATgDObPZDJPJhCVLlqC0tBSXXHIJbr31VuzevXvM\n4O5cV199Na6//no89NBDkMvlAACHw3He/RwOB2w2GwRBGHZ8qVTqcZ0A8NRTT+H48eM4cOAAXn31\nVezYsQMvvfSSz78LIiIiIqJQY+nmBcIV2CxevBgffvghPvjgg/MyUgcOHMA111yD8vJyzJs3D59+\n+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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(15,10))\n", "\n", "#N Estimators\n", "plt.subplot(3,3,1)\n", "feature_param = range(1,21)\n", "scores=[]\n", "for feature in feature_param:\n", " clf = RandomForestClassifier(n_estimators=feature)\n", " clf.fit(X_train,y_train)\n", " scores.append(clf.score(X_test,y_test))\n", "plt.plot(scores, '.-')\n", "plt.axis('tight')\n", "plt.title('N Estimators')\n", "plt.grid();\n", "\n", "#Criterion\n", "plt.subplot(3,3,2)\n", "feature_param = ['gini','entropy']\n", "scores=[]\n", "for feature in feature_param:\n", " clf = RandomForestClassifier(criterion=feature)\n", " clf.fit(X_train,y_train)\n", " scores.append(clf.score(X_test,y_test))\n", "plt.plot(scores, '.-')\n", "plt.title('Criterion')\n", "plt.xticks(range(len(feature_param)), feature_param)\n", "plt.grid();\n", "\n", "#Max Features\n", "plt.subplot(3,3,3)\n", "feature_param = ['auto','sqrt','log2',None]\n", "scores=[]\n", "for feature in feature_param:\n", " clf = RandomForestClassifier(max_features=feature)\n", " clf.fit(X_train,y_train)\n", " scores.append(clf.score(X_test,y_test))\n", "plt.plot(scores, '.-')\n", "plt.axis('tight')\n", "plt.title('Max Features')\n", "plt.xticks(range(len(feature_param)), feature_param)\n", "plt.grid();\n", "\n", "#Max Depth\n", "plt.subplot(3,3,4)\n", "feature_param = range(1,21)\n", "scores=[]\n", "for feature in feature_param:\n", " clf = RandomForestClassifier(max_depth=feature)\n", " clf.fit(X_train,y_train)\n", " scores.append(clf.score(X_test,y_test))\n", "plt.plot(feature_param, scores, '.-')\n", "plt.axis('tight')\n", "plt.title('Max Depth')\n", "plt.grid();\n", "\n", "#Min Samples Split\n", "plt.subplot(3,3,5)\n", "feature_param = range(1,21)\n", "scores=[]\n", "for feature in feature_param:\n", " clf = RandomForestClassifier(min_samples_split =feature)\n", " clf.fit(X_train,y_train)\n", " scores.append(clf.score(X_test,y_test))\n", "plt.plot(feature_param, scores, '.-')\n", "plt.axis('tight')\n", "plt.title('Min Samples Split')\n", "plt.grid();\n", "\n", "#Min Weight Fraction Leaf\n", "plt.subplot(3,3,6)\n", "feature_param = np.linspace(0,0.5,10)\n", "scores=[]\n", "for feature in feature_param:\n", " clf = RandomForestClassifier(min_weight_fraction_leaf =feature)\n", " clf.fit(X_train,y_train)\n", " scores.append(clf.score(X_test,y_test))\n", "plt.plot(feature_param, scores, '.-')\n", "plt.axis('tight')\n", "plt.title('Min Weight Fraction Leaf')\n", "plt.grid();\n", "\n", "#Max Leaf Nodes\n", "plt.subplot(3,3,7)\n", "feature_param = range(2,21)\n", "scores=[]\n", "for feature in feature_param:\n", " clf = RandomForestClassifier(max_leaf_nodes=feature)\n", " clf.fit(X_train,y_train)\n", " scores.append(clf.score(X_test,y_test))\n", "plt.plot(feature_param, scores, '.-')\n", "plt.axis('tight')\n", "plt.title('Max Leaf Nodes')\n", "plt.grid();" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Now based on these graphs I tune the model. Normally you input all parameters and their potential values and run GridSearchCV.\n", "My PC isn't good enough so I divide parameters in two groups and repeatedly run two GridSearchCV until I'm satisfied with the result. This gives a balance between the quality and the speed." ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best score: 0.8226711560044894\n", "Best parameters: {'max_features': None, 'criterion': 'entropy', 'n_estimators': 15}\n" ] } ], "source": [ "forest = RandomForestClassifier(max_depth = 50, \n", " min_samples_split =7,\n", " min_weight_fraction_leaf = 0.0,\n", " max_leaf_nodes = 18)\n", "\n", "parameter_grid = {'n_estimators' : [15, 100, 200],\n", " 'criterion' : ['gini', 'entropy'],\n", " 'max_features' : ['auto', 'sqrt', 'log2', None]\n", " }\n", "\n", "grid_search = GridSearchCV(forest, param_grid=parameter_grid, cv=StratifiedKFold(5))\n", "grid_search.fit(X, Y_train)\n", "print('Best score: {}'.format(grid_search.best_score_))\n", "print('Best parameters: {}'.format(grid_search.best_params_))" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best score: 0.8013468013468014\n", "Best parameters: {'max_leaf_nodes': 18, 'max_depth': None, 'min_samples_split': 7, 'min_weight_fraction_leaf': 0.0}\n" ] } ], "source": [ "forest = RandomForestClassifier(n_estimators = 200,\n", " criterion = 'entropy',\n", " max_features = None)\n", "parameter_grid = {\n", " 'max_depth' : [None, 50],\n", " 'min_samples_split' : [7, 11],\n", " 'min_weight_fraction_leaf' : [0.0, 0.2],\n", " 'max_leaf_nodes' : [18, 20],\n", " }\n", "\n", "grid_search = GridSearchCV(forest, param_grid=parameter_grid, cv=StratifiedKFold(5))\n", "grid_search.fit(X, Y_train)\n", "print('Best score: {}'.format(grid_search.best_score_))\n", "print('Best parameters: {}'.format(grid_search.best_params_))" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "0.86101694915254234" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#My optimal parameters\n", "clf = RandomForestClassifier(n_estimators = 200,\n", " criterion = 'entropy',\n", " max_features = None,\n", " max_depth = 50, \n", " min_samples_split =7,\n", " min_weight_fraction_leaf = 0.0,\n", " max_leaf_nodes = 18)\n", "\n", "clf.fit(X, Y_train)\n", "Y_pred_RF = clf.predict(Xt)\n", "\n", "clf.score(X_test,y_test)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "submission = pd.DataFrame({\n", " 'PassengerId': df_test['PassengerId'],\n", " 'Survived': Y_pred_RF\n", " })\n", "submission.to_csv('titanic.csv', index=False)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "I didn't aim for a perfect model in this project, I just wanted to use my skills. The best result I got was 0.80861. Reachable maximum accuracy is ~82-85%, so I think that my result is good enough." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 0 }