Created
September 14, 2017 00:02
-
-
Save djdefi/7c764d57d99b7b0899ec93ee381ea485 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Reason Codes for Titanic Survival Black Box Model" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This notebook documents an attempt to use Spark Random Forest to determine if a passenger will survive the Titanic sinking based on Age, Gender, and Passenger Class. \n", | |
"\n", | |
"As a Random Forest is a \"black box\" model, it is generally not possible to return a reason that an observation was given an outcome. Here I used a K-Means model, again training using Spark, to build and assign reason codes for the outcomes of the random forest model." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Conclusions:\n", | |
"\n", | |
"K-Means can be used to create and assign reason codes for a black box model.\n", | |
"\n", | |
"Pros of method:\n", | |
"- Wholistic reasons codes\n", | |
"- Can be dialed into a level that is useful for application\n", | |
"\n", | |
"Cons of method:\n", | |
"- Reason codes need a lot of manual work\n", | |
"- Clearer codes likely more difficult for larger dimention models" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"---\n", | |
"#### Set up\n", | |
"##### Load packages:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 148, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"library(sparklyr)\n", | |
"library(DBI)\n", | |
"library(dplyr)\n", | |
"library(ggplot2)\n", | |
"library(broom)\n", | |
"options(scipen = 20)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"##### Set up and connect to Spark driver:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"Sys.setenv(JAVA_HOME=\"/usr/java/jre1.8.0_65\")\n", | |
"Sys.setenv(SPARK_HOME=\"/opt/cloudera/parcels/SPARK2-2.0.0.cloudera1-1.cdh5.7.0.p0.113931/lib/spark2\")\n", | |
"Sys.setenv(R_HOME=\"/projects/ndeshetler-admin/Test_MCC/envs/default/lib/R\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"config <- sparklyr::spark_config()\n", | |
"config$spark.yarn.queue <- \"root.spark.sbg.adhoc\"\n", | |
"config$spark.executor.cores <- \"4\"\n", | |
"config$spark.executor.memory <- \"32G\"\n", | |
"config$spark.driver.memory <- \"32G\"\n", | |
"config$spark.driver.maxResultSize <- \"32G\"\n", | |
"config$spark.dynamicAllocation.enabled <- \"true\"\n", | |
"config$spark.shuffle.service.enabled <- \"true\"" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"sc <- sparklyr::spark_connect( master = \"yarn-client\", app_name = 'sparklyr_connect', config = config )" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"---\n", | |
"### Load data into Spark\n", | |
"Load data from csv files previously copied into the Hadoop file system" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic <- sparklyr::spark_read_csv( sc, name = 'titanic'\n", | |
" , path = '/user/ndeshetler-admin/reasoncodes/train.csv', overwrite = TRUE )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 334, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic_test <- sparklyr::spark_read_csv( sc, name = 'titanic_test'\n", | |
" , path = '/user/ndeshetler-admin/reasoncodes/test.csv', overwrite = TRUE )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Source: query [6 x 12]\n", | |
"Database: spark connection master=yarn-client app=sparklyr_connect local=FALSE\n", | |
"\n", | |
" PassengerId Survived Pclass\n", | |
" <int> <int> <int>\n", | |
"1 1 0 3\n", | |
"2 2 1 1\n", | |
"3 3 1 3\n", | |
"4 4 1 1\n", | |
"5 5 0 3\n", | |
"6 6 0 3\n", | |
"# ... with 9 more variables: Name <chr>, Sex <chr>, Age <dbl>, SibSp <int>,\n", | |
"# Parch <int>, Ticket <chr>, Fare <dbl>, Cabin <chr>, Embarked <chr>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head(titanic)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 335, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Source: query [6 x 11]\n", | |
"Database: spark connection master=yarn-client app=sparklyr_connect local=FALSE\n", | |
"\n", | |
" PassengerId Pclass Name Sex Age\n", | |
" <int> <int> <chr> <chr> <dbl>\n", | |
"1 892 3 Kelly, Mr. James male 34.5\n", | |
"2 893 3 Wilkes, Mrs. James (Ellen Needs) female 47.0\n", | |
"3 894 2 Myles, Mr. Thomas Francis male 62.0\n", | |
"4 895 3 Wirz, Mr. Albert male 27.0\n", | |
"5 896 3 Hirvonen, Mrs. Alexander (Helga E Lindqvist) female 22.0\n", | |
"6 897 3 Svensson, Mr. Johan Cervin male 14.0\n", | |
"# ... with 6 more variables: SibSp <int>, Parch <int>, Ticket <chr>,\n", | |
"# Fare <dbl>, Cabin <chr>, Embarked <chr>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head(titanic_test)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Select variables to be used in the model. As this is an attempt to build a new procedure the model will only use three variables: Age, Gender, and ticket class" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 357, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic_train_full <- select( titanic, one_of('Survived','Age','Pclass','Sex')) " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 595, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic_test_full <- select( titanic_test, one_of('Age','Pclass','Sex')) #Outcome is not provided in test set" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 359, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Source: query [6 x 4]\n", | |
"Database: spark connection master=yarn-client app=sparklyr_connect local=FALSE\n", | |
"\n", | |
" Survived Age Pclass Sex\n", | |
" <int> <dbl> <int> <chr>\n", | |
"1 0 22 3 male\n", | |
"2 1 38 1 female\n", | |
"3 1 26 3 female\n", | |
"4 1 35 1 female\n", | |
"5 0 35 3 male\n", | |
"6 0 NaN 3 male" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head(titanic_train_full)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 596, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Source: query [6 x 3]\n", | |
"Database: spark connection master=yarn-client app=sparklyr_connect local=FALSE\n", | |
"\n", | |
" Age Pclass Sex\n", | |
" <dbl> <int> <chr>\n", | |
"1 34.5 3 male\n", | |
"2 47.0 3 female\n", | |
"3 62.0 2 male\n", | |
"4 27.0 3 male\n", | |
"5 22.0 3 female\n", | |
"6 14.0 3 male" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head(titanic_test_full)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"---\n", | |
"### Preprocess data:" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"1. Replace NA's with mean (age only)\n", | |
"2. Convert string gender to binary 1/0\n", | |
"3. Z-score transformation" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 361, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"## NOTE: it seems that basic R commands can not be called directly on the spark table, needs to be collected first\n", | |
"age_mean <- mean( sdf_read_column(titanic_train_full, 'Age'), na.rm = T )\n", | |
"age_sd <- sd( sdf_read_column( titanic_train_full, 'Age'), na.rm = T )" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Training:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 362, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic_train_full <- mutate( titanic_train_full, Age = ifelse( is.na(Age), age_mean, Age ) )\n", | |
"#titanic_train_full <- mutate( titanic_train_full, Age = ifelse( is.na(Age), mean( Age, na.rm = T ), Age ) )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 363, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic_train_full <- mutate( titanic_train_full, Sex = ifelse( Sex == 'female', 1, 0 ) )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 364, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"#age_mean <- mean( sdf_read_column( titanic_train_full, 'Age'), na.rm = T ) # use pre NA replacement \n", | |
"#age_sd <- sd( sdf_read_column( titanic_train_full, 'Age'), na.rm = T ) #use pre NA replacement \n", | |
"\n", | |
"sex_mean <- mean( as.numeric( sdf_read_column( titanic_train_full, 'Sex' ) ), na.rm = T )\n", | |
"sex_sd <- sd( as.numeric( sdf_read_column( titanic_train_full, 'Sex' ) ), na.rm = T )\n", | |
"\n", | |
"pclass_mean <- mean( sdf_read_column( titanic_train_full, 'Pclass' ), na.rm = T )\n", | |
"pclass_sd <- sd( sdf_read_column( titanic_train_full, 'Pclass' ), na.rm = T )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 57, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"## NOTE: this method does not work\n", | |
"#titanic_train_zscore <- mutate( titanic_train_full, Sex = ( mean( Sex ) - Sex / sd( Sex ) ),\n", | |
"# Age = ( mean( Age ) - Age / sd( Age ) ),\n", | |
"# Pclass = ( mean( Pclass ) - Pclass / sd( Pclass ) ) )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 365, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic_train_zscore <- mutate( titanic_train_full, Sex = ( ( Sex - sex_mean ) / sex_sd ),\n", | |
" Age = ( ( Age - age_mean ) / age_sd ),\n", | |
" Pclass = ( ( Pclass - pclass_mean ) / pclass_sd ) )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 369, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Source: query [6 x 4]\n", | |
"Database: spark connection master=yarn-client app=sparklyr_connect local=FALSE\n", | |
"\n", | |
" Survived Age Sex Pclass\n", | |
" <int> <dbl> <dbl> <dbl>\n", | |
"1 0 -0.5300051 -0.737281 0.8269128\n", | |
"2 1 0.5714304 1.354813 -1.5652278\n", | |
"3 1 -0.2546462 1.354813 0.8269128\n", | |
"4 1 0.3649113 1.354813 -1.5652278\n", | |
"5 0 0.3649113 -0.737281 0.8269128\n", | |
"6 0 0.0000000 -0.737281 0.8269128" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head(titanic_train_zscore)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Testing (using the same means/SDs as training):" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 597, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic_test_full <- mutate( titanic_test_full, Age = ifelse( is.na(Age), age_mean, Age ) )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 598, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic_test_full <- mutate( titanic_test_full, Sex = ifelse( Sex == 'female', 1, 0 ) )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 599, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic_test_zscore <- mutate( titanic_test_full, Sex = ( ( Sex - sex_mean ) / sex_sd ),\n", | |
" Age = ( ( Age - age_mean ) / age_sd ),\n", | |
" Pclass = ( ( Pclass - pclass_mean ) / pclass_sd ) )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 600, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Source: query [6 x 3]\n", | |
"Database: spark connection master=yarn-client app=sparklyr_connect local=FALSE\n", | |
"\n", | |
" Age Sex Pclass\n", | |
" <dbl> <dbl> <dbl>\n", | |
"1 0.3304914 -0.737281 0.8269128\n", | |
"2 1.1909879 1.354813 0.8269128\n", | |
"3 2.2235837 -0.737281 -0.3691575\n", | |
"4 -0.1858065 -0.737281 0.8269128\n", | |
"5 -0.5300051 1.354813 0.8269128\n", | |
"6 -1.0807229 -0.737281 0.8269128" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head(titanic_test_zscore)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"---\n", | |
"### Train Model " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"#### Train Random Forset" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 63, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"?ml_random_forest" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 371, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"* No rows dropped by 'na.omit' call\n" | |
] | |
} | |
], | |
"source": [ | |
"rf <- ml_random_forest( titanic_train_zscore, response = 'Survived'\n", | |
" , features = c( 'Age', 'Sex', 'Pclass' ), type = 'regression' )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 372, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<dl>\n", | |
"\t<dt>$features</dt>\n", | |
"\t\t<dd><ol class=list-inline>\n", | |
"\t<li>'Age'</li>\n", | |
"\t<li>'Sex'</li>\n", | |
"\t<li>'Pclass'</li>\n", | |
"</ol>\n", | |
"</dd>\n", | |
"\t<dt>$response</dt>\n", | |
"\t\t<dd>'Survived'</dd>\n", | |
"\t<dt>$max.bins</dt>\n", | |
"\t\t<dd>32</dd>\n", | |
"\t<dt>$max.depth</dt>\n", | |
"\t\t<dd>5</dd>\n", | |
"\t<dt>$num.trees</dt>\n", | |
"\t\t<dd>20</dd>\n", | |
"\t<dt>$feature.importances</dt>\n", | |
"\t\t<dd><ol class=list-inline>\n", | |
"\t<li>0.104757106358226</li>\n", | |
"\t<li>0.673563236060069</li>\n", | |
"\t<li>0.221679657581705</li>\n", | |
"</ol>\n", | |
"</dd>\n", | |
"</dl>\n" | |
], | |
"text/latex": [ | |
"\\begin{description}\n", | |
"\\item[\\$features] \\begin{enumerate*}\n", | |
"\\item 'Age'\n", | |
"\\item 'Sex'\n", | |
"\\item 'Pclass'\n", | |
"\\end{enumerate*}\n", | |
"\n", | |
"\\item[\\$response] 'Survived'\n", | |
"\\item[\\$max.bins] 32\n", | |
"\\item[\\$max.depth] 5\n", | |
"\\item[\\$num.trees] 20\n", | |
"\\item[\\$feature.importances] \\begin{enumerate*}\n", | |
"\\item 0.104757106358226\n", | |
"\\item 0.673563236060069\n", | |
"\\item 0.221679657581705\n", | |
"\\end{enumerate*}\n", | |
"\n", | |
"\\end{description}\n" | |
], | |
"text/markdown": [ | |
"$features\n", | |
": 1. 'Age'\n", | |
"2. 'Sex'\n", | |
"3. 'Pclass'\n", | |
"\n", | |
"\n", | |
"\n", | |
"$response\n", | |
": 'Survived'\n", | |
"$max.bins\n", | |
": 32\n", | |
"$max.depth\n", | |
": 5\n", | |
"$num.trees\n", | |
": 20\n", | |
"$feature.importances\n", | |
": 1. 0.104757106358226\n", | |
"2. 0.673563236060069\n", | |
"3. 0.221679657581705\n", | |
"\n", | |
"\n", | |
"\n", | |
"\n", | |
"\n" | |
], | |
"text/plain": [ | |
"$features\n", | |
"[1] \"Age\" \"Sex\" \"Pclass\"\n", | |
"\n", | |
"$response\n", | |
"[1] \"Survived\"\n", | |
"\n", | |
"$max.bins\n", | |
"[1] 32\n", | |
"\n", | |
"$max.depth\n", | |
"[1] 5\n", | |
"\n", | |
"$num.trees\n", | |
"[1] 20\n", | |
"\n", | |
"$feature.importances\n", | |
"[1] 0.1047571 0.6735632 0.2216797\n" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head(rf)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"#### Make Predictions from Random Forest Model" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Training (for use in training K-Means):" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 373, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic_predict <- sdf_predict( rf, titanic_train_zscore )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 377, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Source: query [6 x 5]\n", | |
"Database: spark connection master=yarn-client app=sparklyr_connect local=FALSE\n", | |
"\n", | |
" Survived Age Sex Pclass rf_prediction\n", | |
" <int> <dbl> <dbl> <dbl> <dbl>\n", | |
"1 0 -0.5300051 -0.737281 0.8269128 0.1617454\n", | |
"2 1 0.5714304 1.354813 -1.5652278 0.8437761\n", | |
"3 1 -0.2546462 1.354813 0.8269128 0.5487286\n", | |
"4 1 0.3649113 1.354813 -1.5652278 0.8472609\n", | |
"5 0 0.3649113 -0.737281 0.8269128 0.1854930\n", | |
"6 0 0.0000000 -0.737281 0.8269128 0.1683716" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head(titanic_predict)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 376, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic_predict <- titanic_predict %>% rename( rf_prediction = prediction )" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Testing:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 569, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic_test_zscore_alt <- titanic_test_zscore %>% mutate( Survived = as.integer( 1 ) ) %>% select( Survived, Age, Sex, Pclass)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 601, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic_predict_test <- sdf_predict( rf, newdata = titanic_test_zscore )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 605, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Source: query [6 x 4]\n", | |
"Database: spark connection master=yarn-client app=sparklyr_connect local=FALSE\n", | |
"\n", | |
" Age Sex Pclass rf_prediction\n", | |
" <dbl> <dbl> <dbl> <dbl>\n", | |
"1 0.3304914 -0.737281 0.8269128 0.1669561\n", | |
"2 1.1909879 1.354813 0.8269128 0.5165090\n", | |
"3 2.2235837 -0.737281 -0.3691575 0.1496185\n", | |
"4 -0.1858065 -0.737281 0.8269128 0.1766317\n", | |
"5 -0.5300051 1.354813 0.8269128 0.5487286\n", | |
"6 -1.0807229 -0.737281 0.8269128 0.2329443" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head(titanic_predict_test)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 604, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic_predict_test <- titanic_predict_test %>% rename( rf_prediction = prediction )" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"#### Train K-Means:" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"#### Pre-process:\n", | |
"1. Z-score transform Random Forest Prediction. This will move the prediction into the same scale as the other features\n", | |
"2. Weight each of the other variables by thier imporance to the Random Forest Model" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 382, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"predict_mean = mean( sdf_read_column( titanic_predict, 'rf_prediction' ) )\n", | |
"predict_sd = sd( sdf_read_column( titanic_predict, 'rf_prediction' ) )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 383, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic_predict <- titanic_predict %>% mutate( Age = Age * rf$feature.importances[1],\n", | |
" Sex = Sex * rf$feature.importances[2],\n", | |
" Pclass = Pclass * rf$feature.importances[3],\n", | |
" rf_prediction = ( ( rf_prediction - predict_mean ) / predict_sd ) )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 606, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"titanic_predict_test <- titanic_predict_test %>% mutate( Age = Age * rf$feature.importances[1],\n", | |
" Sex = Sex * rf$feature.importances[2],\n", | |
" Pclass = Pclass * rf$feature.importances[3],\n", | |
" rf_prediction = ( ( rf_prediction - predict_mean ) / predict_sd ) )" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"##### Recursive Model training with different number of clusters" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Other clustering options:\n", | |
"``` R\n", | |
"## Only those that survived\n", | |
"kclusts <- data.frame( k = seq( 2, 20, by = 1 ) ) %>% group_by( k ) %>% \n", | |
" do( kclust = ml_kmeans( select( filter( titanic_predict, Survived == 1 ), -Survived ) , .$k ) )\n", | |
"\n", | |
"## Only those with an elevated survival prediction\n", | |
"Psurvive_rate = mean( sdf_read_column( titanic_predict, 'rf_prediction' ) )\n", | |
"\n", | |
"kclusts <- data.frame( k = seq( 2, 20, by = 1 ) ) %>% group_by( k ) %>% \n", | |
" do( kclust = ml_kmeans( select( filter( titanic_predict, rf_prediction > Psurvive_rate ), -Survived ) , .$k ) )\n", | |
"```" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"##### Final clustering option:\n", | |
"All variables" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 385, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n", | |
"* No rows dropped by 'na.omit' call\n" | |
] | |
} | |
], | |
"source": [ | |
"kclusts <- data.frame( k = seq( 2, 20, by = 1 ) ) %>% group_by( k ) %>% \n", | |
" do( kclust = ml_kmeans( select( titanic_predict, -Survived ) , .$k ) )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 386, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"K-means clustering with 2 clusters\n", | |
"\n", | |
"Cluster centers:\n", | |
" Age Sex Pclass rf_prediction\n", | |
"1 0.008754277 -0.4966054 0.02301152 -0.691388\n", | |
"2 -0.015469515 0.8775419 -0.04066321 1.221738\n", | |
"\n", | |
"Within Set Sum of Squared Errors = 203.474" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"## Preview clusters\n", | |
"kclusts$kclust[[1]]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 387, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"Warning message:\n", | |
"\"Grouping rowwise data frame strips rowwise nature\"" | |
] | |
} | |
], | |
"source": [ | |
"## Get the Within Set Sum of Squared Errors\n", | |
"clusters <- kclusts %>% group_by( k ) %>% do( tidy( .$kclust[[1]]$cost ) )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 403, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": {}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"image/png": "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\nP39+/uXTTz8thLj66qutlw0NDZdddtnWrVsrWh+OZxhGJBLp6+tzuxAAAFBdCgW7TCaTP10n\nhOjt7RVCTB4w0dHRMTo6WrniMJVYLDY6OnrgwAG3CwEAAFWkULCLRqNbtmzJv3zmmWfmz5/f\n2tqa/87o6OjMmTMrWB2mwPgJAABwvELB7sILL3zkkUceffTRdDr9wAMP/N///d8HP/jByW/o\n7e2dN29eZQvEiRDsAADA8QoFuy996Ut+v3/VqlVer/fqq68OhUL/8i//kl86Ojr6xBNPnH/+\n+RWvEcch2AEAgOMVCnaRSOS555678sor/9//+39r1qx5/vnnJ0998tRTT51xxhmrVq2qfJE4\nFjOeAACA453kyROnnnrqL3/5yxMuWrly5cqVKytQEk6upaWlra2NM3YAAGCyQmfsTiiZTP7+\n97//6U9/unnz5koUhCLFYrG9e/fG43G3CwEAANWCR4pNVz09PaZpcjUWAADk8Uix6aq7u1sw\nfgIAAEzCI8WmK8ZPAACAY/BIsemqp6dHCMGDxQAAQB6PFJuuwuGw3+/njB0AAMjjkWLTlaqq\n8+fP37FjB+NXAACAhUeKTWOxWCyVSg0MDLhdCAAAqAo8Umwa48FiAABgMh4pNo1ZwY7xEwAA\nwMIjxaYxZjwBAACT2X6kGKpHd3e3qqpcigUAAJaTnLHLe/bZZ7/3ve/19/cfPnzYNM3Ji159\n9dXy14Ui+Hy+jo4Ogh0AALAUFex+9rOfXXvttaFQaOHChV1dXZWuCcXr6el58sknDx06NGPG\nDLdrAQAALisq2H3jG9/4h3/4hwcffDAUClW6INgSi8WefPLJ7du3E+wAAEBRwW737t0///nP\n5VLdwMDAunXrtm3bNjAwcNppp911113HvGHPnj333nvvtm3bAoHARRdddMUVV6iqWuRSdHd3\nCyG2b99+9tlnu10LAABwWVHBrr29fWJiQm4FO3bseOmllxYsWJBKpY5fOjIycvPNN7e3t99w\nww379u1bu3ZtLpdbs2ZNMUsh3nhiLLfZAQAAUWSwu+qqq+677773vve9Eis477zzrEmMb731\n1uOz3YYNGxKJxE033dTU1CSEGBsbW7du3aWXXtrQ0HDSpRDMUQwAACYpKtidffbZDz300PLl\ny6+88spwOKwoyuSly5cvL9D2mDcfo7e3d/HixVZuE0IsW7bsN7/5zdatW88666yTLoUQYsaM\n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\nAMBpRQ2euOOOO0h100JPT08ikdi7d6/bhQAAABdMecZu3bp1QoiVK1eqqmp9PZVVq1aVvy5I\nsW6z2759ezgcdrsWAADgtCmD3SWXXCKESCaTPp/P+noqPCu2enR1dQkh+vv7L7jgArdrAQAA\nTpsy2D3++ONCCGuaOutrVD9r9hnGTwAAUJ+mDHYf/OAHT/g1qlksFlMUhWAHAEB9KjR44tCh\nQ47VgbIIhUKzZ88m2AEAUJ8KBbtZs2YtXrz4C1/4wrp1644cOeJYTShFLBY7cODA8PCw24UA\nAACnFQp273//+3ft2vWd73znkksumTFjxhlnnPHFL35x/fr1hIZqxvMnAACoW4UmKP7d736X\nyWReeOGFjRs3bty4cdOmTX/+85//7d/+TdO0M84444ILLrjgggvOOeecYDDoWLk4qfyMJ0uW\nLHG7FgAA4KhCwU4I4fF4zj777LPPPvvGG288JuS98MIL3/rWtzweTzqddqZWFKO7u1twxg4A\ngLpU1JMnLFbIu/HGG//jP/7j4YcfPvfcc4UQmUymYrVBRv6MnduFAAAAp53kjF1ePB7ftGnT\nxo0bn3rqqRdffDGTybS1ta1ateq8886raH2wa+7cucFgsK+vz+1CAACA0woFu0QisXnz5qee\nemrjxo0vvPBCOp2eNWvWueeee+WVV5533nmLFi3iSfNVSFGU7u7urVu3plIpa35pAABQJwoF\nu5aWllQqNWfOnHPPPffjH//4eeedd+qppzpWGaTFYrG//OUvr776qvUgCgAAUCcK3WOXSqU8\nHs/pp5/+zne+8/TTT7du3kL1s8ZPcJsdAAD1plCwe+65577+9a9ns9k77rjj7LPPbm5uvuii\ni+66665NmzalUinHSoRdPDEWAID6VCjYvfvd777xxht///vfHzlyZPPmzTfddJMQ4q677jrn\nnHOam5svvPDCr3/96//zP//jVKkoFjOeAABQn4oaFXvC2ewef/zxr33ta0II0zQrXCTsmT9/\nvsfj4YwdAAD1ptjpTizxePzZZ5+1Jj3p7e2tUE0okWEY0Wh0+/btpmkychkAgPpx8mCXSCQm\nz2BnPWfC5/MtW7bMeqpY5YuEbbFYbOfOnQcOHGhvb3e7FgAA4JBCwe7mm2/euHHj888/b4U5\nwzDe/e53W2Hu7LPP9nq9ThUJ23p6en7/+9/39fUR7AAAqB+Fgt2dd97p8Xje9a53WWFu6dKl\n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\nYRiLFi1yusr6o+v6vHnzrDN2btcCAACK5fKl2BtvvLG7uzsSieRyuc2bN//1r3+9+uqr8zfY\nrVixYv369bfffvvq1av379/PJHZOisVi27dvHxwclL6rFwAAOMzlM3bveMc7Xnrppfvvv//+\n++9PJBJf+MIXVq9enV/a2Nh4xx13eL3ee+6559FHH129enV+wCwqraenRwjxyiuvuF0IAAAo\nlstn7K688sorr7yywBs6OzvvvPNOx+pBnjV+5ZVXXlmyZInbtQAAgKJU1+AJVA/ribGMnwAA\nYBoh2OHErEuxL7/8stuFAACAYhHscGKhUKizs/PZZ5+999573a4FAAAUhWCHKT3wwAMtLS03\n33zz5z73OYkZTQEAgMMIdpjSOeec8+KLL55++ukPP/zwihUr9u7d63ZFAACgEIIdCgmHw+vX\nr7/88su3bNnygQ98oLe31+2KAADAlAh2OAmv1/v973//q1/96sGDB1euXPnwww+7XREAADgx\ngh1OTlGUz3/+8w8++KDP5/vc5z73xS9+UeLp2gAAoNIIdijW8uXL//CHP8RisQceeOBjH/vY\n0aNH3a4IAAC8BcEONnR1df32t789//zzn3rqqfe///08cAwAgKpCsIM9LS0tDz/88Oc///ld\nu3atWLHiv/7rv9yuCAAA/B3BDrZpmvbVr371Rz/6USaTueaaa771rW+Zpul2UQAAgGAHWatX\nr/7tb387d+7cu++++5/+6Z+SyaTbFQEAUO8IdpC3ePHi3/3ud0uWLHn00UdXrFgxMDDgdkUA\nANQ1gh1K0t7e/thjj11xxRV/+9vfli9fvmnTJrcrAgCgfhHsUCrDML773e/ec889IyMjl112\n2U9+8hO3KwIAoE4R7FAeV1111UMPPRQMBm+88cZ//ud/TqfTblcEAEDdIdihbC644II//OEP\nCxcu/PnPf37RRRcdOnTI7YoAAKgvBDuU0ymnnLJhw4aLL7548+bNy5cvf+mll9yuCACAOkKw\nQ5kFg8G1a9fecccd+/btW7ly5fr1692uCACAekGwQ/kpinL99df/+Mc/Nk3zE5/4xO23357L\n5dwuCgCA2kewQ6V86EMf2rBhQzgc/s53vrNmzZqRkRG3KwIAoMYR7FBBp/3/9u48oIk77x/4\nTBImN4GACgiCihzqQiseVWkpXnhht2i1VRfaWu36uHVba/Vpvdpa7VbrWt3Wrlp7eFWxKh7V\n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\nmslk2lVTczsqKmjQIGfXEgRhtVqtVquzq86ePXvs2LHOnTtTFMWgKIO9qdVqd+/e3djYGBAQ\nwKAis83MycnJzc0NDw8XCJz+O5nZnfb27dsZGRlGo7FDhw7OriUeYujl5eVFRkYyqEgw2pvX\nr18/ePCgUChkMPQIppu5d+/eS5cude/enUFF4iGGnkKh4HjoXbt2jfuh5+/vL5VKnV3LbDMN\nBsPOnTtv374dHBzs7FqC6TTIy8vLzs4ODg7mYOg5+ufDBs77y1/+0r9/fy4rZmZmxsXFbdu2\njcuio0aNGjVqFJcVt23bFhcXl5mZyWXR/v37/+Uvf+Gy4r/+9a+4uLjz589zVrGhoSEuLu7v\nf/87ZxVtNtt7770XFxd35coVzir++uuvcXFx77//PmcVbTbba6+9FhcXp9FoOKuYl5cXFxf3\n2WefcVbRZrNNnjx54MCBXFY8dOhQXFzcjh07uCw6cuTIMWPGcFlx69atcXFxR44c4bJov379\nUlNTuay4Zs2auLi4/Px8zirW1dXFxcW98cYbnFW02WyLFy+Oi4u7du0al0Xvh6diAQAAADwE\ngh0AAACAh0CwAwAAAPAQpM35l5dCU1OTxWLx9vbmrKLJZNLr9RKJhNlLMpnR6XQEQSgUCs4q\nGo3GlpYWqVTq5eXFWVGtVisUCuVyOWcVDQaDwWCQy+VCoZCbijabrbGxUSQSMXi7BmN6vd5k\nMikUCgbvKmDGarXqdDqKoiQSCTcVCYJobm42m81KpZIkSW4qWiyWpqYmsVgsFou5qUhg6LGG\nr6HH8TTA0OMSgh0AAACAh8BTsQAAAAAeAsEOAAAAwEOI+G7AneTl5WVlZZWXl+v1+s6dO//5\nz39OSEhgu+i5c+cyMjKuX7+u1+v9/PwSEhImTJjAzYtOtFrtX//6V51Ot379+sDAQPYK/fjj\nj2vWrGl9zauvvjpmzBj2KtJsNtvBgwcPHz5869YtlUrVr1+/mTNnsldu/vz5JSUl91y5fPny\n3r17s1eUIIiTJ0/u3r37xo0bMpksJiYmNTXV39+f1YonTpzYsWNHTU2Nv79/cnJycnJyu5eo\nqqrKyMgoKyurqqrq1avX8uXL77nB9evX169fX1ZWJpfLk5KSnn/++Yd81Yvjig/sh42ibEwk\nxxVZGkdt/O2140RyXJGNifTAbWRjHDkuysZEeuBmsjGOHli03SfSAx967T5/nIJg54StW7eq\n1eoJEybI5fLTp0+vWrVKp9OxnT9u3rzZsWPHgQMHyuXyy5cv79q16/bt26+//jqrRWlbtmwR\niTi6hwiFwrlz59ovMj7zu1M2bNhw5MiRMWPGdOvWTaPRXL16ldVyU6dO1Wq19osHDx68evVq\nREQEq0ULCgpWrFiRkJAwefLk+vr67du3v//++6tXr2bvJcw///zzypUrn3766bS0tJKSki++\n+EIgELT7w+TXX38tLCyMjIw0Go33f1er1S5cuDAgIGDevHk3b97csmWL1WqdOnUqexUdf5el\nomxMJMcVWRpHbfztteNEemDFdp9ID6zIxjhyXJSNieS4IkvjyHFRNiaS44ceG/PHOXyeHdnd\n1NbWtr44f/786dOnc9zDxo0bU1JSzGYz24UqKiomTpy4f//+5OTkmzdvslorKysrJSWF1RL3\n++WXX5KTk0+fPs1xXZrFYpk6deonn3zCdqHVq1dPmzbNarXSF3Nzc5OTkysrK9mr+Oabb86Z\nM8d+8dNPP50yZUq732PtW7RkyZK33377nu/u2LFj/PjxDQ0N9MUtW7aMHz++qamJvYqOv8tS\nUTYmklMb0l7jqC1F23ciOa7IxkRyXJGlcdT2vdleE8lxRZbGkeOibEwkxw89NuaPU/AaOyd0\n6tSp9cWoqKj6+nqOe1Cr1RaLhcFn2DnFZrNt2LAhJSVFrVazWuieou17tMOxo0ePhoSEDBw4\nkC7NWV3ahQsXNBrNU089xXYhi8UilUrtZ+Kgz+PA3vbabLbKyso+ffrYr3n88ce1Wm15eXn7\nFnJ8bpH8/PyYmBiVSkVffPLJJ41GY3FxMXsVWTrXieMfy8ZEcmpD2mscPbBou0+ktmxm+04k\nxxVZGkdt35vtNZEcV2RpHDkoytJEcvzQY2P+OAXBjrmKioqQkBBuarW0tDQ2NhYWFh48eDAp\nKYntMx5lZ2ffvXv32WefZbVKa2azedKkSRMmTHjppZf27t3LQdIqKyvr0aPHhg0bJk6cmJKS\nsmjRohs3brBd1C43N9fHxyc2NpbtQsOGDauqqjp48GBjY2NVVdX27dt79erF7MO/28JqtZrN\n5tbPl9H31aqqKpYq/qHq6urWn/zduXNnkiSrq6u57IF7nE0kjscR8QhMJH7HEcHVROJ4HBFc\nTaR7Hnq8zx+8xo6hU6dOXbx4cf78+dyUmzJlislkIggiPj5+xowZrNbS6/XffPPN9OnTOTsv\nqEqleu6553r06GE2m0+ePPnVV1/p9frJkyezWrShoeH06dOBgYFz5swxm82bN29+77331q1b\nx8HLCo1G408//TRkyBAOXk4bGxs7d+7cTz75ZMOGDQRBREdHL1y4kL1yQqGwY8eOly9ftl9T\nUVFB/H7eV840NTW1PuO0SCQSi8Uc98AxLicSl+OIeDQmEo/jiOBwInE8jghOJtL9Dz3e5w+C\nHROVlZX/+te/hg0bNnjwYG4qLlu2zGAwVFRUfPfdd2vXrn3jjTfYq/Xtt98GBQXFx8ezV+Ie\nffv27du3L/314MGDV65cuWfPHrbf/Es/z7JgwYKOHTsSBBEQEDBnzpyTJ08+/fTT7BWlnTt3\nrrm5mYPnYQmCuHTp0tq1a4cOHTpw4MCGhobt27d/8MEHH3zwAXtvnhg9evRXX331ww8/xMfH\nl5aWfv/99wRrz1S2HffPtnOJ44nE5TgiHo2JxOM4IjicSNyPI4LlidTGhx7H8wfBzmm3b99+\n9913o6KiZs2axVnRqKgogiBiY2PVavUnn3zy7LPPsnT4ura29uDBg++++25TUxNBEAaDgSAI\nvV7f0tLC2cc0DR48+MSJE1VVVay+N1ahUCiVSnqMEgQRHh4ukUi4ecYwNze3U6dO9D5l25df\nfhkVFWU/b0JISMgbb7xx5swZ9v6ZTE5Orq6u/vzzz9etWycWiydMmLBt2zZfX1+Wyv0huVxO\n34FpZrPZaDRy+TlRXOJ+InE2johHZiLxOI4IDicS9+OIYHMi/beHHu/zB8HOORqNZvHixWq1\n+n//9385+8y71ujJUltby9IkvXXrltlsvufw+Ouvv963b9/FixezUfF+FouFYP8YT3Bw8P0v\neuDgudHm5ub8/PxnnnmG7UK06urqUaNG2S+GhYWRJFlbW8teRaFQ+Le//S0tLe3u3budOnUq\nKioiCCIyMpK9ive7Z+dWV1fbbLbWr3rxGPxOJLbHEfHITCS+xhHB7UTifhwRrE0kBw893ucP\ngp0T9Hr9u+++SxDEkiVLOPtj0Wq1tn54//zzz8R9b8lpR927d1+2bJn9YnFx8bfffjtnzpyu\nXbuyVJEgCIvF0vqBkZ2dLZFI2H4Y9OvXLz8/v6amhj7TaWlpaUtLC6sv46WdOXPGaDRy8zws\nQRAdO3akX1NCu3z5ss1msx8YYI9SqVQqlWazedeuXb169WL1BNf3i4uL27Vrl0ajod+Ylpub\nS1EU2yeC5h73E4njcUQ8MhOJr3FEcDuR+BpHRHtPJMcPPd7nD4KdE1auXHnlypW0tLTW71se\nOHAgq39XzZ8/PyIiIiQkhCTJ0tLS48eP9+/fn72hplAo/vSnP9kv0qevjIyMZPUf5rfffjs8\nPDwkJMRqtZ4+ffrixYtpaWlsv1B66NChGRkZS5cunThxotls3r59e9euXenTDbAqJycnNDQ0\nNDSU7UK0kSNHrl+//pNPPnniiScaGhrS09M7dOjQr18/9ioWFBTk5+eHhYXpdLqcnJza2toV\nK1a0e5WWlpb8/HyCIBoaGkwm06lTpwiC6NOnj1QqJQhi1KhRBw8eXLp06fjx42tqajIyMlJS\nUmQyGXsVHX+XpaJsTCTHFVkaRw6KsjSRHG8mGxPJcUWWxlFb7pbtO5EcV2RpHDkuysZEcvzQ\nY2P+OIX07NcUt6/U1NSGhoZ7rkxPT2f1b+Xvvvvu5MmTNTU1JEkGBAQkJiaOHj2ag/ML0E6d\nOvXRRx+x/ZFi27ZtO3369J07d6xWa0hIyNixY4cOHcpeObs7d+5s2LChsLCQJMk+ffq88sor\nfn5+rFZsaGh48cUXp06dOmHCBFYL2dlstszMzEOHDtXW1kql0p49e6alpQUEBLBXsaKiYv36\n9devXydJsnfv3mlpaV26dGn3KjU1Na+++uo9V65bt85+WOXatWsbNmygP9JnxIgRL7zwwkP+\nAea44gP7YaMoGxPJcUWWxlHbf3vtNZEcV2RjIj1wG9kYRw8s2u4TyXFFlsaR46JsTKQHPvTa\nff44BcEOAAAAwEPgBMUAAAAAHgLBDgAAAMBDINgBAAAAeAgEOwAAAAAPgWAHAAAA4CEQ7AAA\nAAA8BIIdAAAAgIdAsAMAcNrWrVtJkszKyuK7EQCA/4BgBwAAAOAhEOwAAAAAPASCHQAAAICH\nQLADAGgH//jHPwQCwf/8z/9YrVa+ewGARxeCHQDAQ7Fara+99trbb7/9/vvvr1u3TiDAXAUA\n3oj4bgAAwI0ZDIYpU6bs27fvyy+/fOmll/huBwAedQh2AAAM1dfXDx8+vKCgYN++faNHj+a7\nHQAABDsAAKamTZvW2Nh4/PjxhIQEvnsBACAIvMYOAICxiRMnCoXCpUuXNjc3890LAABBINgB\nADD2/PPPf/vttzk5OaNHj9bpdHy3AwCAYAcA8BCee+659PT006dPjxw5srGxke92AOBRh2AH\nAPBQnn322T179pw/f37EiBEajYbvdgDgkYZgBwDwsMaOHbtv374LFy4MGzasvr6e73YA4NFF\n2mw2vnsAAAAAgHaAI3YAAAAAHgLBDgAAAMBDINgBAAAAeAgEOwAAAAAPgWAHAAAA4CEQ7AAA\nAAA8BIIdAAAAgIdAsAMAAADwEP8PETra/NGeyakAAAAASUVORK5CYII=", | |
"text/plain": [ | |
"plot without title" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"## Plot the cost by number of clusters:\n", | |
"ggplot( clusters, aes( k, x ) ) + geom_line() + \n", | |
" scale_x_continuous(breaks = scales::pretty_breaks(20) ) + ylab('WithinSSError') + geom_vline(xintercept = 8, color = 'red')" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The optimal number of clusters seems to be between 4 and 10. To be more descriptive I have selected 8 clusters to use for reason codes" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Other clustering options not used:\n", | |
"```R\n", | |
"km <- ml_kmeans( select( filter( titanic_predict, Survived == 1 ), -Survived ), 7 )\n", | |
"\n", | |
"km <- ml_kmeans( select( filter( titanic_predict, rf_prediction > survive_rate ), -Survived ), 5 )\n", | |
"```" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 422, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"* No rows dropped by 'na.omit' call\n" | |
] | |
} | |
], | |
"source": [ | |
"## Final option. All features, 8 Clusters\n", | |
"km <- ml_kmeans( select( titanic_predict, -Survived ), 8 )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 423, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"K-means clustering with 8 clusters\n", | |
"\n", | |
"Cluster centers:\n", | |
" Age Sex Pclass rf_prediction\n", | |
"1 0.004495565 0.9125520 -0.08556914 1.4621272\n", | |
"2 0.003799466 -0.4966054 0.12148520 -0.8627819\n", | |
"3 -0.032569084 0.9125520 0.18330975 0.6767755\n", | |
"4 0.073574057 -0.4966054 -0.34697917 -0.2149504\n", | |
"5 -0.162631061 -0.4966054 0.16563345 -0.3491132\n", | |
"6 0.021931506 0.9125520 -0.33090981 1.8279357\n", | |
"7 -0.177215016 0.9125520 0.18330975 1.0572417\n", | |
"8 -0.197620141 -0.4966054 -0.13004279 0.9007856\n", | |
"\n", | |
"Within Set Sum of Squared Errors = 19.83663" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"km" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"---\n", | |
"### Review Clusters and assign reason codes:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 418, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"0.383838383838384" | |
], | |
"text/latex": [ | |
"0.383838383838384" | |
], | |
"text/markdown": [ | |
"0.383838383838384" | |
], | |
"text/plain": [ | |
"[1] 0.3838384" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"## Over all survival rate for reference:\n", | |
"mean( sdf_read_column( titanic_predict, 'Survived' ) )" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Raw clusters. In Z-score and importance weight form" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 424, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<thead><tr><th scope=col>Age</th><th scope=col>Sex</th><th scope=col>Pclass</th><th scope=col>rf_prediction</th></tr></thead>\n", | |
"<tbody>\n", | |
"\t<tr><td> 0.021931506</td><td> 0.9125520 </td><td>-0.33090981 </td><td> 1.8279357 </td></tr>\n", | |
"\t<tr><td> 0.004495565</td><td> 0.9125520 </td><td>-0.08556914 </td><td> 1.4621272 </td></tr>\n", | |
"\t<tr><td>-0.177215016</td><td> 0.9125520 </td><td> 0.18330975 </td><td> 1.0572417 </td></tr>\n", | |
"\t<tr><td>-0.197620141</td><td>-0.4966054 </td><td>-0.13004279 </td><td> 0.9007856 </td></tr>\n", | |
"\t<tr><td>-0.032569084</td><td> 0.9125520 </td><td> 0.18330975 </td><td> 0.6767755 </td></tr>\n", | |
"\t<tr><td> 0.073574057</td><td>-0.4966054 </td><td>-0.34697917 </td><td>-0.2149504 </td></tr>\n", | |
"\t<tr><td>-0.162631061</td><td>-0.4966054 </td><td> 0.16563345 </td><td>-0.3491132 </td></tr>\n", | |
"\t<tr><td> 0.003799466</td><td>-0.4966054 </td><td> 0.12148520 </td><td>-0.8627819 </td></tr>\n", | |
"</tbody>\n", | |
"</table>\n" | |
], | |
"text/latex": [ | |
"\\begin{tabular}{r|llll}\n", | |
" Age & Sex & Pclass & rf\\_prediction\\\\\n", | |
"\\hline\n", | |
"\t 0.021931506 & 0.9125520 & -0.33090981 & 1.8279357 \\\\\n", | |
"\t 0.004495565 & 0.9125520 & -0.08556914 & 1.4621272 \\\\\n", | |
"\t -0.177215016 & 0.9125520 & 0.18330975 & 1.0572417 \\\\\n", | |
"\t -0.197620141 & -0.4966054 & -0.13004279 & 0.9007856 \\\\\n", | |
"\t -0.032569084 & 0.9125520 & 0.18330975 & 0.6767755 \\\\\n", | |
"\t 0.073574057 & -0.4966054 & -0.34697917 & -0.2149504 \\\\\n", | |
"\t -0.162631061 & -0.4966054 & 0.16563345 & -0.3491132 \\\\\n", | |
"\t 0.003799466 & -0.4966054 & 0.12148520 & -0.8627819 \\\\\n", | |
"\\end{tabular}\n" | |
], | |
"text/markdown": [ | |
"\n", | |
"Age | Sex | Pclass | rf_prediction | \n", | |
"|---|---|---|---|---|---|---|---|\n", | |
"| 0.021931506 | 0.9125520 | -0.33090981 | 1.8279357 | \n", | |
"| 0.004495565 | 0.9125520 | -0.08556914 | 1.4621272 | \n", | |
"| -0.177215016 | 0.9125520 | 0.18330975 | 1.0572417 | \n", | |
"| -0.197620141 | -0.4966054 | -0.13004279 | 0.9007856 | \n", | |
"| -0.032569084 | 0.9125520 | 0.18330975 | 0.6767755 | \n", | |
"| 0.073574057 | -0.4966054 | -0.34697917 | -0.2149504 | \n", | |
"| -0.162631061 | -0.4966054 | 0.16563345 | -0.3491132 | \n", | |
"| 0.003799466 | -0.4966054 | 0.12148520 | -0.8627819 | \n", | |
"\n", | |
"\n" | |
], | |
"text/plain": [ | |
" Age Sex Pclass rf_prediction\n", | |
"1 0.021931506 0.9125520 -0.33090981 1.8279357 \n", | |
"2 0.004495565 0.9125520 -0.08556914 1.4621272 \n", | |
"3 -0.177215016 0.9125520 0.18330975 1.0572417 \n", | |
"4 -0.197620141 -0.4966054 -0.13004279 0.9007856 \n", | |
"5 -0.032569084 0.9125520 0.18330975 0.6767755 \n", | |
"6 0.073574057 -0.4966054 -0.34697917 -0.2149504 \n", | |
"7 -0.162631061 -0.4966054 0.16563345 -0.3491132 \n", | |
"8 0.003799466 -0.4966054 0.12148520 -0.8627819 " | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"arrange( km$centers, desc(rf_prediction ) )" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"In order to interprate the clusters and assign named reason codes we need to back transform the variables: deweight and de-Z-transform" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 425, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"center <- km$centers %>% mutate( Age = ( ( Age / rf$feature.importances[1] * age_sd ) + age_mean ),\n", | |
" Sex = ( ( Sex / rf$feature.importances[2] * sex_sd ) + sex_mean ),\n", | |
" Pclass = ( ( Pclass / rf$feature.importances[3] * pclass_sd ) + pclass_mean ),\n", | |
" rf_prediction =( ( rf_prediction * predict_sd ) + predict_mean ) )" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Clusters in original format. Note: Female = 1" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 426, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<thead><tr><th scope=col>Age</th><th scope=col>Sex</th><th scope=col>Pclass</th><th scope=col>rf_prediction</th></tr></thead>\n", | |
"<tbody>\n", | |
"\t<tr><td>30.322510 </td><td> 0.9999999999999997779554</td><td>1.985915 </td><td>0.7464618 </td></tr>\n", | |
"\t<tr><td>30.225983 </td><td> 0.0000000000000031641356</td><td>2.766827 </td><td>0.1705626 </td></tr>\n", | |
"\t<tr><td>25.182816 </td><td> 0.9999999999999995559108</td><td>3.000000 </td><td>0.5519237 </td></tr>\n", | |
"\t<tr><td>39.901512 </td><td>-0.0000000000000006106227</td><td>1.000000 </td><td>0.3310358 </td></tr>\n", | |
"\t<tr><td> 7.147333 </td><td>-0.0000000000000003885781</td><td>2.933333 </td><td>0.2978025 </td></tr>\n", | |
"\t<tr><td>32.740324 </td><td> 0.9999999999999997779554</td><td>1.060606 </td><td>0.8370756 </td></tr>\n", | |
"\t<tr><td> 5.125000 </td><td> 0.9999999999999995559108</td><td>3.000000 </td><td>0.6461683 </td></tr>\n", | |
"\t<tr><td> 2.295455 </td><td>-0.0000000000000001665335</td><td>1.818182 </td><td>0.6074128 </td></tr>\n", | |
"</tbody>\n", | |
"</table>\n" | |
], | |
"text/latex": [ | |
"\\begin{tabular}{r|llll}\n", | |
" Age & Sex & Pclass & rf\\_prediction\\\\\n", | |
"\\hline\n", | |
"\t 30.322510 & 0.9999999999999997779554 & 1.985915 & 0.7464618 \\\\\n", | |
"\t 30.225983 & 0.0000000000000031641356 & 2.766827 & 0.1705626 \\\\\n", | |
"\t 25.182816 & 0.9999999999999995559108 & 3.000000 & 0.5519237 \\\\\n", | |
"\t 39.901512 & -0.0000000000000006106227 & 1.000000 & 0.3310358 \\\\\n", | |
"\t 7.147333 & -0.0000000000000003885781 & 2.933333 & 0.2978025 \\\\\n", | |
"\t 32.740324 & 0.9999999999999997779554 & 1.060606 & 0.8370756 \\\\\n", | |
"\t 5.125000 & 0.9999999999999995559108 & 3.000000 & 0.6461683 \\\\\n", | |
"\t 2.295455 & -0.0000000000000001665335 & 1.818182 & 0.6074128 \\\\\n", | |
"\\end{tabular}\n" | |
], | |
"text/markdown": [ | |
"\n", | |
"Age | Sex | Pclass | rf_prediction | \n", | |
"|---|---|---|---|---|---|---|---|\n", | |
"| 30.322510 | 0.9999999999999997779554 | 1.985915 | 0.7464618 | \n", | |
"| 30.225983 | 0.0000000000000031641356 | 2.766827 | 0.1705626 | \n", | |
"| 25.182816 | 0.9999999999999995559108 | 3.000000 | 0.5519237 | \n", | |
"| 39.901512 | -0.0000000000000006106227 | 1.000000 | 0.3310358 | \n", | |
"| 7.147333 | -0.0000000000000003885781 | 2.933333 | 0.2978025 | \n", | |
"| 32.740324 | 0.9999999999999997779554 | 1.060606 | 0.8370756 | \n", | |
"| 5.125000 | 0.9999999999999995559108 | 3.000000 | 0.6461683 | \n", | |
"| 2.295455 | -0.0000000000000001665335 | 1.818182 | 0.6074128 | \n", | |
"\n", | |
"\n" | |
], | |
"text/plain": [ | |
" Age Sex Pclass rf_prediction\n", | |
"1 30.322510 0.9999999999999997779554 1.985915 0.7464618 \n", | |
"2 30.225983 0.0000000000000031641356 2.766827 0.1705626 \n", | |
"3 25.182816 0.9999999999999995559108 3.000000 0.5519237 \n", | |
"4 39.901512 -0.0000000000000006106227 1.000000 0.3310358 \n", | |
"5 7.147333 -0.0000000000000003885781 2.933333 0.2978025 \n", | |
"6 32.740324 0.9999999999999997779554 1.060606 0.8370756 \n", | |
"7 5.125000 0.9999999999999995559108 3.000000 0.6461683 \n", | |
"8 2.295455 -0.0000000000000001665335 1.818182 0.6074128 " | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"center" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Now that the clusters are in a more easily interpreted format we can manually assign reason codes that align with each cluster. Here I use 4 survival bins: High (75%+ predicted survival rate), Medium(74-50%), low(49-25%), very low(45%-), and included a general description of the reason why." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 505, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"reason_codes <- data.frame( cluster = 0:( nrow( center ) - 1 )\n", | |
" , code = c(\"High Survival - 2st Class Female\",\n", | |
" \"Very Low Survival - 2nd & 3rd Class Male Adult\",\n", | |
" \"Medium Survival - 3rd Class Female Adult\",\n", | |
" \"Low Survival - 1st Class Male Adult\",\n", | |
" \"Low Survival - 3rd Class Male Child\", \n", | |
" \"High Survival - 1st Class Female\", \n", | |
" \"Medium Survival - 3nd Class Female Child\",\n", | |
" \"Medium Survival - 1st & 2nd Class Male Child\"\n", | |
" ) )" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"#### Assign Reason codes:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 631, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"predicted_clus <- sdf_predict( km, titanic_predict )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 616, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Source: query [6 x 6]\n", | |
"Database: spark connection master=yarn-client app=sparklyr_connect local=FALSE\n", | |
"\n", | |
" Survived Age Sex Pclass rf_prediction prediction\n", | |
" <int> <dbl> <dbl> <dbl> <dbl> <int>\n", | |
"1 0 -0.05552180 -0.4966054 0.1833098 -0.8983769 1\n", | |
"2 1 0.05986140 0.9125520 -0.3469792 1.8549857 5\n", | |
"3 1 -0.02667600 0.9125520 0.1833098 0.6638770 2\n", | |
"4 1 0.03822705 0.9125520 -0.3469792 1.8690540 5\n", | |
"5 0 0.03822705 -0.4966054 0.1833098 -0.8025076 1\n", | |
"6 0 0.00000000 -0.4966054 0.1833098 -0.8716268 1" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head(predicted_clus)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Convert input data back into interpretable version, including converting Sex back into text and setting missing ages back to NA:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 632, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"predicted_clus <- predicted_clus %>% mutate( Age = ( ( as.numeric( Age ) / rf$feature.importances[1] * age_sd ) + age_mean ),\n", | |
" Sex = ( ( as.numeric( Sex ) / rf$feature.importances[2] * sex_sd ) + sex_mean ),\n", | |
" Pclass = ( ( as.numeric( Pclass ) / rf$feature.importances[3] * pclass_sd ) + pclass_mean ),\n", | |
" rf_prediction =( ( as.numeric( rf_prediction ) * predict_sd ) + predict_mean ) ) %>%\n", | |
" mutate( Sex = as.integer( Sex ) ) %>% mutate( Sex = ifelse( Sex == 1, 'female', 'male' ) ) %>% \n", | |
" mutate( Age = ifelse(Age == age_mean, NA, Age))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 633, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Source: query [6 x 6]\n", | |
"Database: spark connection master=yarn-client app=sparklyr_connect local=FALSE\n", | |
"\n", | |
" Survived Sex Pclass rf_prediction prediction Age\n", | |
" <int> <chr> <dbl> <dbl> <int> <dbl>\n", | |
"1 0 male 3 0.1617454 1 22\n", | |
"2 1 female 1 0.8437761 5 38\n", | |
"3 1 female 3 0.5487286 2 26\n", | |
"4 1 female 1 0.8472609 5 35\n", | |
"5 0 male 3 0.1854930 1 35\n", | |
"6 0 male 3 0.1683716 1 NaN" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head(predicted_clus)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Assign reason codes:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 634, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"results <- left_join( predicted_clus, reason_codes, by = c(\"prediction\" = \"cluster\"), copy = T) %>% select( -one_of( 'cluster', 'prediction' ) )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 635, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"Warning message in one_of(\"cluster\", \"prediction\"):\n", | |
"\"Unknown variables: `cluster`\"Warning message in one_of(\"cluster\", \"prediction\"):\n", | |
"\"Unknown variables: `cluster`\"Warning message in one_of(\"cluster\", \"prediction\"):\n", | |
"\"Unknown variables: `cluster`\"" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"Source: query [6 x 6]\n", | |
"Database: spark connection master=yarn-client app=sparklyr_connect local=FALSE\n", | |
"\n", | |
" Survived Age Sex Pclass rf_prediction\n", | |
" <int> <dbl> <chr> <dbl> <dbl>\n", | |
"1 0 22 male 3 0.1617454\n", | |
"2 1 38 female 1 0.8437761\n", | |
"3 1 26 female 3 0.5487286\n", | |
"4 1 35 female 1 0.8472609\n", | |
"5 0 35 male 3 0.1854930\n", | |
"6 0 NaN male 3 0.1683716\n", | |
"# ... with 1 more variables: code <chr>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head(results)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"In order to plot data you must collect results into local environment" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 636, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"Warning message in one_of(\"cluster\", \"prediction\"):\n", | |
"\"Unknown variables: `cluster`\"" | |
] | |
} | |
], | |
"source": [ | |
"results_local <- collect(results)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"View passengers, the prediction from the Random Forest and the reason code for that prediction:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 637, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<thead><tr><th scope=col>Survived</th><th scope=col>Age</th><th scope=col>Sex</th><th scope=col>Pclass</th><th scope=col>Survival_Likelihood</th><th scope=col>code</th></tr></thead>\n", | |
"<tbody>\n", | |
"\t<tr><td>0 </td><td> 22 </td><td><span style=white-space:pre-wrap>male </span> </td><td>3 </td><td>0.1617454 </td><td>Very Low Survival - 2nd & 3rd Class Male Adult</td></tr>\n", | |
"\t<tr><td>1 </td><td> 38 </td><td>female </td><td>1 </td><td>0.8437761 </td><td>High Survival - 1st Class Female </td></tr>\n", | |
"\t<tr><td>1 </td><td> 26 </td><td>female </td><td>3 </td><td>0.5487286 </td><td>Medium Survival - 3rd Class Female Adult </td></tr>\n", | |
"\t<tr><td>1 </td><td> 35 </td><td>female </td><td>1 </td><td>0.8472609 </td><td>High Survival - 1st Class Female </td></tr>\n", | |
"\t<tr><td>0 </td><td> 35 </td><td><span style=white-space:pre-wrap>male </span> </td><td>3 </td><td>0.1854930 </td><td>Very Low Survival - 2nd & 3rd Class Male Adult</td></tr>\n", | |
"\t<tr><td>0 </td><td>NaN </td><td><span style=white-space:pre-wrap>male </span> </td><td>3 </td><td>0.1683716 </td><td>Very Low Survival - 2nd & 3rd Class Male Adult</td></tr>\n", | |
"\t<tr><td>0 </td><td> 54 </td><td>male </td><td>1 </td><td>0.3024670 </td><td>Low Survival - 1st Class Male Adult </td></tr>\n", | |
"\t<tr><td>0 </td><td> 2 </td><td>male </td><td>3 </td><td>0.3741953 </td><td>Low Survival - 3rd Class Male Child </td></tr>\n", | |
"\t<tr><td>1 </td><td> 27 </td><td>female </td><td>3 </td><td>0.5487286 </td><td>Medium Survival - 3rd Class Female Adult </td></tr>\n", | |
"\t<tr><td>1 </td><td> 14 </td><td>female </td><td>2 </td><td>0.7770729 </td><td>High Survival - 2st Class Female </td></tr>\n", | |
"\t<tr><td>1 </td><td> 4 </td><td>female </td><td>3 </td><td>0.6461683 </td><td>Medium Survival - 3nd Class Female Child </td></tr>\n", | |
"\t<tr><td>1 </td><td> 58 </td><td>female </td><td>1 </td><td>0.8364296 </td><td>High Survival - 1st Class Female </td></tr>\n", | |
"\t<tr><td>0 </td><td> 20 </td><td><span style=white-space:pre-wrap>male </span> </td><td>3 </td><td>0.1637424 </td><td>Very Low Survival - 2nd & 3rd Class Male Adult</td></tr>\n", | |
"\t<tr><td>0 </td><td> 39 </td><td><span style=white-space:pre-wrap>male </span> </td><td>3 </td><td>0.1606420 </td><td>Very Low Survival - 2nd & 3rd Class Male Adult</td></tr>\n", | |
"\t<tr><td>0 </td><td> 14 </td><td>female </td><td>3 </td><td>0.5501575 </td><td>Medium Survival - 3rd Class Female Adult </td></tr>\n", | |
"\t<tr><td>1 </td><td> 55 </td><td>female </td><td>2 </td><td>0.7673449 </td><td>High Survival - 2st Class Female </td></tr>\n", | |
"\t<tr><td>0 </td><td> 2 </td><td>male </td><td>3 </td><td>0.3741953 </td><td>Low Survival - 3rd Class Male Child </td></tr>\n", | |
"\t<tr><td>1 </td><td>NaN </td><td><span style=white-space:pre-wrap>male </span> </td><td>2 </td><td>0.1875139 </td><td>Very Low Survival - 2nd & 3rd Class Male Adult</td></tr>\n", | |
"\t<tr><td>0 </td><td> 31 </td><td>female </td><td>3 </td><td>0.5856886 </td><td>Medium Survival - 3rd Class Female Adult </td></tr>\n", | |
"\t<tr><td>1 </td><td>NaN </td><td>female </td><td>3 </td><td>0.5487286 </td><td>Medium Survival - 3rd Class Female Adult </td></tr>\n", | |
"</tbody>\n", | |
"</table>\n" | |
], | |
"text/latex": [ | |
"\\begin{tabular}{r|llllll}\n", | |
" Survived & Age & Sex & Pclass & Survival\\_Likelihood & code\\\\\n", | |
"\\hline\n", | |
"\t 0 & 22 & male & 3 & 0.1617454 & Very Low Survival - 2nd \\& 3rd Class Male Adult\\\\\n", | |
"\t 1 & 38 & female & 1 & 0.8437761 & High Survival - 1st Class Female \\\\\n", | |
"\t 1 & 26 & female & 3 & 0.5487286 & Medium Survival - 3rd Class Female Adult \\\\\n", | |
"\t 1 & 35 & female & 1 & 0.8472609 & High Survival - 1st Class Female \\\\\n", | |
"\t 0 & 35 & male & 3 & 0.1854930 & Very Low Survival - 2nd \\& 3rd Class Male Adult\\\\\n", | |
"\t 0 & NaN & male & 3 & 0.1683716 & Very Low Survival - 2nd \\& 3rd Class Male Adult\\\\\n", | |
"\t 0 & 54 & male & 1 & 0.3024670 & Low Survival - 1st Class Male Adult \\\\\n", | |
"\t 0 & 2 & male & 3 & 0.3741953 & Low Survival - 3rd Class Male Child \\\\\n", | |
"\t 1 & 27 & female & 3 & 0.5487286 & Medium Survival - 3rd Class Female Adult \\\\\n", | |
"\t 1 & 14 & female & 2 & 0.7770729 & High Survival - 2st Class Female \\\\\n", | |
"\t 1 & 4 & female & 3 & 0.6461683 & Medium Survival - 3nd Class Female Child \\\\\n", | |
"\t 1 & 58 & female & 1 & 0.8364296 & High Survival - 1st Class Female \\\\\n", | |
"\t 0 & 20 & male & 3 & 0.1637424 & Very Low Survival - 2nd \\& 3rd Class Male Adult\\\\\n", | |
"\t 0 & 39 & male & 3 & 0.1606420 & Very Low Survival - 2nd \\& 3rd Class Male Adult\\\\\n", | |
"\t 0 & 14 & female & 3 & 0.5501575 & Medium Survival - 3rd Class Female Adult \\\\\n", | |
"\t 1 & 55 & female & 2 & 0.7673449 & High Survival - 2st Class Female \\\\\n", | |
"\t 0 & 2 & male & 3 & 0.3741953 & Low Survival - 3rd Class Male Child \\\\\n", | |
"\t 1 & NaN & male & 2 & 0.1875139 & Very Low Survival - 2nd \\& 3rd Class Male Adult\\\\\n", | |
"\t 0 & 31 & female & 3 & 0.5856886 & Medium Survival - 3rd Class Female Adult \\\\\n", | |
"\t 1 & NaN & female & 3 & 0.5487286 & Medium Survival - 3rd Class Female Adult \\\\\n", | |
"\\end{tabular}\n" | |
], | |
"text/markdown": [ | |
"\n", | |
"Survived | Age | Sex | Pclass | Survival_Likelihood | code | \n", | |
"|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", | |
"| 0 | 22 | male | 3 | 0.1617454 | Very Low Survival - 2nd & 3rd Class Male Adult | \n", | |
"| 1 | 38 | female | 1 | 0.8437761 | High Survival - 1st Class Female | \n", | |
"| 1 | 26 | female | 3 | 0.5487286 | Medium Survival - 3rd Class Female Adult | \n", | |
"| 1 | 35 | female | 1 | 0.8472609 | High Survival - 1st Class Female | \n", | |
"| 0 | 35 | male | 3 | 0.1854930 | Very Low Survival - 2nd & 3rd Class Male Adult | \n", | |
"| 0 | NaN | male | 3 | 0.1683716 | Very Low Survival - 2nd & 3rd Class Male Adult | \n", | |
"| 0 | 54 | male | 1 | 0.3024670 | Low Survival - 1st Class Male Adult | \n", | |
"| 0 | 2 | male | 3 | 0.3741953 | Low Survival - 3rd Class Male Child | \n", | |
"| 1 | 27 | female | 3 | 0.5487286 | Medium Survival - 3rd Class Female Adult | \n", | |
"| 1 | 14 | female | 2 | 0.7770729 | High Survival - 2st Class Female | \n", | |
"| 1 | 4 | female | 3 | 0.6461683 | Medium Survival - 3nd Class Female Child | \n", | |
"| 1 | 58 | female | 1 | 0.8364296 | High Survival - 1st Class Female | \n", | |
"| 0 | 20 | male | 3 | 0.1637424 | Very Low Survival - 2nd & 3rd Class Male Adult | \n", | |
"| 0 | 39 | male | 3 | 0.1606420 | Very Low Survival - 2nd & 3rd Class Male Adult | \n", | |
"| 0 | 14 | female | 3 | 0.5501575 | Medium Survival - 3rd Class Female Adult | \n", | |
"| 1 | 55 | female | 2 | 0.7673449 | High Survival - 2st Class Female | \n", | |
"| 0 | 2 | male | 3 | 0.3741953 | Low Survival - 3rd Class Male Child | \n", | |
"| 1 | NaN | male | 2 | 0.1875139 | Very Low Survival - 2nd & 3rd Class Male Adult | \n", | |
"| 0 | 31 | female | 3 | 0.5856886 | Medium Survival - 3rd Class Female Adult | \n", | |
"| 1 | NaN | female | 3 | 0.5487286 | Medium Survival - 3rd Class Female Adult | \n", | |
"\n", | |
"\n" | |
], | |
"text/plain": [ | |
" Survived Age Sex Pclass Survival_Likelihood\n", | |
"1 0 22 male 3 0.1617454 \n", | |
"2 1 38 female 1 0.8437761 \n", | |
"3 1 26 female 3 0.5487286 \n", | |
"4 1 35 female 1 0.8472609 \n", | |
"5 0 35 male 3 0.1854930 \n", | |
"6 0 NaN male 3 0.1683716 \n", | |
"7 0 54 male 1 0.3024670 \n", | |
"8 0 2 male 3 0.3741953 \n", | |
"9 1 27 female 3 0.5487286 \n", | |
"10 1 14 female 2 0.7770729 \n", | |
"11 1 4 female 3 0.6461683 \n", | |
"12 1 58 female 1 0.8364296 \n", | |
"13 0 20 male 3 0.1637424 \n", | |
"14 0 39 male 3 0.1606420 \n", | |
"15 0 14 female 3 0.5501575 \n", | |
"16 1 55 female 2 0.7673449 \n", | |
"17 0 2 male 3 0.3741953 \n", | |
"18 1 NaN male 2 0.1875139 \n", | |
"19 0 31 female 3 0.5856886 \n", | |
"20 1 NaN female 3 0.5487286 \n", | |
" code \n", | |
"1 Very Low Survival - 2nd & 3rd Class Male Adult\n", | |
"2 High Survival - 1st Class Female \n", | |
"3 Medium Survival - 3rd Class Female Adult \n", | |
"4 High Survival - 1st Class Female \n", | |
"5 Very Low Survival - 2nd & 3rd Class Male Adult\n", | |
"6 Very Low Survival - 2nd & 3rd Class Male Adult\n", | |
"7 Low Survival - 1st Class Male Adult \n", | |
"8 Low Survival - 3rd Class Male Child \n", | |
"9 Medium Survival - 3rd Class Female Adult \n", | |
"10 High Survival - 2st Class Female \n", | |
"11 Medium Survival - 3nd Class Female Child \n", | |
"12 High Survival - 1st Class Female \n", | |
"13 Very Low Survival - 2nd & 3rd Class Male Adult\n", | |
"14 Very Low Survival - 2nd & 3rd Class Male Adult\n", | |
"15 Medium Survival - 3rd Class Female Adult \n", | |
"16 High Survival - 2st Class Female \n", | |
"17 Low Survival - 3rd Class Male Child \n", | |
"18 Very Low Survival - 2nd & 3rd Class Male Adult\n", | |
"19 Medium Survival - 3rd Class Female Adult \n", | |
"20 Medium Survival - 3rd Class Female Adult " | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head( rename( results_local, Survival_Likelihood = rf_prediction ), 20)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 454, | |
"metadata": { | |
"collapsed": false, | |
"scrolled": false | |
}, | |
"outputs": [ | |
{ | |
"data": {}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAIAAAByhViMAAAACXBIWXMAABJ0AAASdAHeZh94\nAAAgAElEQVR4nOzdd1wT9/8H8M+xQhJGWBYB9wJFtEKrlloXDtwDBSmKq7a2jv5cuFrwq3W0\nVb9WW5UqKjhbS3FU9FvRKlpc1NY6gDqo4qiDKUGSkPv9cY9e05CEC8lFuLyeDx8+uMsnd+/7\nJHe8+dzn8zmKpmkCAAAAAPWfzcsOAAAAAADMA4kdAAAAgEAgsQMAAAAQCCR2AAAAAAKBxA4A\nAABAIJDYAQAAAAgEEjsAAAAAgUBiBwAAACAQVpHY+fv7UxocHR2bNm06bty4y5cvWyYAlUrF\n7FdzpaenJ0VRz58/t0wMNdIZ5EtUi3jUanXjxo0pivLy8lIqlfzFZkbcvwa///775MmTW7Vq\nJZFIJBJJs2bNunfvvnjx4rNnz1ogTp34/g5z3L7WCS4SiRo1ahQREXHixAmeAuMVRVF2dnZ8\n70VglWaKw4cPx8TEtGjRwsnJSSwWN2nSZOTIkbt371YoFGbZfl27tILgUdbw5Al/f//c3Nz2\n7ds3aNCAEFJUVJSTkyOXy+3s7FJSUqKiovgOQKVS2dvbi0SiFy9esCs9PT2fPXtWVlbm5OTE\nfVNOTk7l5eUVFRVmv0zoDPIlqkU8x44d69+/P/Pz/v37R44cWbtd81fJ1XH8GiQlJb377rsq\nlcrJyalVq1Zubm6PHz/OyclRqVSdO3c+d+4c33HqVLvvsNm3r3WCFxcX5+TklJeXE0I+/fTT\nuXPn1mLXlvwOaKEoytbWVqVS8boXPiqt3nn06NGoUaPOnDlDCHFzc2vRooVIJLp//35+fj4h\npHnz5mfPnvX29jZxL3Xt0grCR1uBNm3aEEK+/fZbds2TJ0/Cw8MJIS4uLs+ePeM7AKb1SCQS\naa7ctGnT2rVrFQqFUZuSSqWEkIqKCrMGSNN6gnyJahHP6NGjCSG+vr6EkAEDBtR61/xVcnUe\nHh6EkLKyMgNlbt++7eDgQAhZsGDB8+fP2fVlZWX79u2bN28e/2HqVrvvMHdcKofWdYIXFRUN\nHz6cEGJnZ5efn1+LXVvyO6CFEGJra8v3XviotPrl2bNnzZs3J4T4+/sfOXKkqqqKfen27dsf\nfvihg4PD77//bvqO6tqlFQTPShM7mqafPHkiEokIIbt27eI7ADOe2Ejs9Hn27JlIJKIoKjMz\n09bW1tbW9v79+7XbdV1L7NauXUsICQ4OtkA8dUqtEzuapouKipjGts2bN9di11aY2NEmV1r9\nEhkZSQhp27ZtUVGRzgIXL14sKCgwfUd17dIKgmcVfex08vT0bNWqFSHk9u3bzBq2a8vOnTu7\ndu3q4uJCURTbeF5WVrZ8+fLg4GAXFxexWNyuXbuEhISysrLqW758+fLQoUPd3d2lUmmnTp22\nbNmiL4Dq/YfKyspWrVrVuXNnmUwmFoubN28eGRl57NgxQsimTZsoimLulYjFYrZzzKNHjzTf\nbt4gdcrMzPzwww87derk5eXl4ODg6+sbGRl56dIlrWJsfX7zzTddu3Z1cnJycXHp27evzvuG\npsTD2LVrV2VlZY8ePd58882+fftWVVXt2LFDZ8laV3J+fj5FUf7+/lobfPHiBUVRWrcLOdYS\nF48fPyaENG7cuMaSRkWo8wv/66+/UhTVoEGD6p0UVSpVw4YNKYq6evUqs0bzO5yTk8P9jWas\nHH1kMhlzgv/111+a62vctRlPtD///HP69OkBAQFOTk7Ozs5NmzYdPHjw7t27ucRP0/TmzZtf\nffVViUTi4eExYsSI33//nX311q1btra2np6e1e/uKRSKBg0a2NjY5ObmcqopDfoqjePxcvxY\nuVTLnTt33n333WbNmolEIjc3t549e1avN6OuMFry8vK+/fZbQsjGjRtlMpnOMiEhIUzzP/eQ\niDGXMu6XawDjvOzM0hJ0/m1K03SzZs0IIatWrWIWCSG2trZxcXGEkDZt2vTs2dPPz6+8vJym\n6Tt37jDXOw8Pj969ew8YMIDpmBIYGKh1J/d///sf0xDYoUOHsWPH9uzZ08bGZsaMGaTaX2zV\nWyP++OOPFi1aEEKcnJz69OkzcuTI1157zdHRsXfv3jRNX7x4MT4+3t7enhCyaNGi+L+xW+Aj\nSJ2Cg4NtbW0DAwPDw8OHDBnSunVrQoi9vX1aWppmMaY+P/74Y4qiAgIC+vfv36hRI2YX2dnZ\nZoyH0bFjR0LIjh07aJr+5ptvCCGtWrWqXsyUSr5z5w7z3dDaZkVFBSFEKpXWopa4NEpt3ryZ\nECKTyW7dumW4EoyKUN8XvnPnzoQQrThpmj58+DD5d8OhVvDc32jGyqH1n+DMjTatxqcad22u\nEy0nJ8fV1ZUQ4u/vP2rUqKioqG7dujk5OXXv3t3w4TCfywcffGBra9u7d++YmJjAwEBCiFgs\n/umnn9hiAwcOJIRs375d6+07d+4khISFhZmr0rhfWLh8rFyq5fTp0y4uLoSQpk2bRkRE9OjR\ng0ngxo4dq1artSqKyxWmus8//5wQ0qJFC8PFjA2J+6WMe60CGMt6E7srV67Y2NgQQn744Qdm\nDZPpOjk5HTt2jFnDnLFVVVWdOnUihEydOpXt4fT8+XOmJT8mJobdZmlp6SuvvEIIWbNmDbvy\nxIkTzN0Nw4mdUqls164dIWTEiBGFhYVsscLCQjYeWv8dIp6C1Ombb7558OCB5prdu3fb2Ng0\naNBAMzCmPt3c3H788UdmjUKhYLrBDRkyxIzx0DT9yy+/EEKcnZ2ZRPzFixfu7u6EkNOnT2sW\nM7GSjUqbONYSl9ylqKiIqSKJRBIdHb158+aLFy9WVlZWL2lsYqfzC79p0yZCyPDhw7U2MmrU\nKELI+vXr9QXP/Y1mrBxazwl+9epVGxsbOzu7P//8U3M9x12bfqJNnTqVELJgwQLNt8vl8qys\nLMOHw34uP//8M7ty6dKlhBBfX1+5XM6sOXr0KCHk9ddf13r7G2+8QQj5/vvvDe+FY6VxP16a\nW93WWC3Pnz9nxivMnj1bpVIxK7Ozs5kvw6ZNm7QqqsYrjE5jxowhhIwZM8ZwMaNC4n4pM6pW\nAYxljYldUVHRoUOHmGab5s2bs12/mctEfHy81ttTU1OZC6hm71qapsvKyry8vGxtbdk/sBIT\nEwkhISEhWluYPn16jYndnj17CCEtW7Z88eKFgWPR9/uGpyC5i4iIIIRopkdMfWr+Oqdp+tat\nW4QQFxcX9s9cs8Qzbdo0QsikSZO03j5+/HjNYiZWslFpk07Va4lj7nLt2jWmPYzl6OjYv39/\n9s+SWkSo7wtfXFzs6Ojo4ODw9OlTdmVhYaFIJHJwcNBsTtAKnvsbdap15Wid4MXFxUePHm3T\npg1FUVpfP+67Nv1EGzFiBCHk5MmTXALQxHwu8+fP11ypVqsDAgKIRhOdWq1mmsQuXbrEFvv1\n118JIY0aNWLzD304Vhr349VHq25rrBbmgtCyZUutQ1i3bh2znl3D8QqjU1hYGCFk5syZhoM3\nKiTulzLTaxXAACvqYzdq1Cimr4ybm9vgwYNv3brVuHHjtLQ05p4LKzo6WuuNR44cIYSMGDGC\naeFjOTk5de7cuaqqKjs7m1lz6tQpQsjbb7+ttYWxY8fWGB7z9/e4ceOYlnxjWSZIlkKhOHHi\nxIYNG5YtW5aQkJCQkMB0yqnerWfo0KGai82bNxeLxaWlpWznQtPjqaysZDq7TJgwgV3J/Pzt\nt99q9mI0sZKNxb2WatS2bdtz585dunRp2bJlQ4YMadiw4YsXL44ePTpw4EDmRk+tVf/Cu7q6\nDhs2TKFQ7Nq1i125d+/eysrKwYMHM02hOhn1RjNWDoM9wWUyWf/+/fPz8w8dOsRk/FpM2TX3\nE+31118nhMycOfPw4cNMYm0UrTOCoijmk/rpp5/YNczRffnll2yxr776ihDy7rvv2tractlL\njZXG/XgZNdZtjdXCXBDGjh2rdQgTJ04khNy8efP+/fua62u8wpiOY0jcL2XG1iqAcV52ZmkJ\nzN+m7du37927N9ObYeLEidu2bWNu27GYCqneltOrVy/Ddbhnzx6mZPfu3YmuPkZPnjwhNbXY\n9ejRg+jq8qJFX0MCT0Hq9M033zDdQapbtmwZW4wQYmNjU/3vZuZuxZMnT8wVz969e4muHnUd\nOnQghGzZsoVdY2IlG3srlkstcWyUqu7KlSvM5BSEkIMHD9YiQn1feJqmmaEknTp1Ytcw7YWH\nDh3SLFY9eI5vNG/laJ7gvXr1CgwMpCiKEOLp6Zmbm6tVmOOuTT/RXrx40a9fP2alvb39q6++\nOmvWrMuXLxs+Fvrvz0VzXhtGSkoK+XfnudLSUmdnZ7FYzPQrKCkpkUqlDg4Of/31V4174Vhp\n3I+XY93WWC3MSZqSklI9ZubScf78ebaiuFxhdDLqVizHkLhfyoyqVQBj8T6/ed3x8ccfMzcF\nDLC1ta3ellNVVUUIiYiIYLpnVde2bVvTw2OuqrVmmSAJIdnZ2VFRUSKRaMOGDX379vX19WVG\nDi5cuHDFihX0v+e7ZhoDzLJfA5KSkgghJSUlb775puZ6ZjBpUlLSpEmT2Hj4CECtVmutMaqW\naqd9+/b79+9/7bXXfvnll++++27w4MFGRcjQ+YUnhISFhfn5+f3yyy+///57+/btc3Nzz58/\n7+3tzc7/rA+XN/JUOZoneF5e3qBBg/7444/o6OgLFy6w7SKm75r7iSYSiY4ePXr+/PkjR46c\nPXv23Llzly9fXrNmzUcfffSf//ynFgdY/dvr7Ow8fvz49evXJyUlzZ49e8eOHeXl5WPGjNGX\nXVVXY6VxP16OdcuxWjieqrW+wgQHB+/Zs+fChQvc32LGq4fFLtdgnawosas1ZqQVMxbdcElm\n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\nTqYn1ocffujr6ysSiYKCgr755hutAgcPHpw7d26TJk1EItGuXbsIIZWVlcuXL2/Xrp2jo6NM\nJhs0aNDly5c1t1xQUBAZGSmTyVxcXPr373/9+nXNV6v3AKusrFy5cmVQUJBYLJbJZK+//vrm\nzZsJIYsXLx41ahQhZPDgwRRFURQ1fvx49i2mxGCAUqn85JNP2rZtK5VKXV1d27VrN336dOal\nlStXUhR18+ZNzfL+/v5dunTRV2MxMTEURWk9fIEQ0rVrV29vb5VKpVUh6enpNZYvLCycP39+\nSEiIh4eHo6Ojv7//J598wrxkMZyePCESif73v/+tX79+165djx49ysvLa9269dixY2fOnIkJ\nigEAAPjwwQcf9OzZ88iRIxRFrVmzJjIyUqFQxMTEsAWmTZvWrl27DRs2yGQyd3d3pVLZv3//\nzMzMmJiYadOmlZSUfP3116GhoadPn2aGJhQXF3fr1u3+/fvvv/9+27Ztz5w507NnTzs7u4YN\nG+oMQKFQ9OnTJzMzs3///rGxsSKR6MqVK2lpae++++6kSZPs7e0TEhKWL1/etWtXQoi3tzch\nxOwxaJozZ8769esnTpw4a9YstVp969ato0ePGlWlmjXm6uqalZWVnJw8Y8YMtsAff/xx7ty5\n//u//7Oz006Q+vbt6+3tbbj87du3k5OTIyIixo8fr1arjx07tnjx4tu3b2/dutWoOE3BKbEj\nhNjb28+aNWvWrFm8RgMAAAAMDw+PlJQUZpDitm3brl279uGHH0ZERDg6OjIFvLy8mLSPWVy7\ndu1PP/20f//+kSNHMmvee++9du3azZs378SJE4SQTz/9ND8/f8+ePVFRUYSQKVOmLF68+JNP\nPtGXVK1duzYzM3Px4sVLly5lV6rVakJIs2bN2rVrRwhp3759jx492Fc3bNhg3hg0ff/994MH\nD96yZQu7ZtWqVRwq8h9aNRYTE/P5559fv36duSFJCElOTiaExMbGVn+vra1tjeUDAwPv3r3L\nJoUzZsx45513kpKSlixZ4ufnZ1SotcbpVuz48eNzcnKqrz9//jzb9AoAAABmNGHCBDYFoShq\nwoQJz549y8zM1FmAELJz585mzZoNHDjwxd8cHR0HDRqUmZlZWVlJCElLS2vatGlkZCT7lrlz\n5xroQLZ79243N7fFixdrrjTc4czsMWhydXX97bffrly5wqWwTlo1xiRkTHJGCKFpeufOnUFB\n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\nKioeP358+fLlGhoafn5+mZmZDMPI85yKUCiUfigSiUxNTcvKys6dO+fr68swjLq6uqamZlBQ\nkHiKSD7JpGCIDSKDjhTkjg5pdKQAIMX72NglJiZ+8cUXioqKQqEwIiLiu+++O3ToEEHrzosR\nmqJpG/Hq1SvxensJCQn9+vUbN27csmXLamtrIyIi0tPTOSmyjeLi4rZt21ZZWSl+6OTk5Obm\nlpOTY2dnp6+vzzBMQUGBQCAwMzOT5wkJmRQMsUFk0JGC0NEhM8wJTQFAqPfxlmKVlZU6Ojp8\nPj80NFQgEERHRysrK8+fP5/rutqH0BRxcXFlZWV+fn66urriLdIzKzExMcz/zaysXLnS3Nyc\n02Lf4vnz50+ePAkICPjyyy8dHR3FG9XV1UtLS4VCIZ/Pj46O9vLykvMJiWZTMAQGaRbpKQgd\nHTLDnNAUAIR6H2fsZs6cGRAQ4Ovrq6WltX79ejU1teLi4h49enBdV/sQmuL58+cFBQUBAQGS\nWzyRO7OycOFCgUDg7+//ww8/xMbG1tfXMwzj4uLSs2dPHx8fX19fGxubSZMmcV3mWzSbgiEw\niFhqaqq3t/e8efN++umnmpoaQlNIEDo6ZIY5oSkASMW+HwQCwblz5+Lj40UiEcuyRUVFjx49\nEj/15s2bgICA8+fPc1pgW0kHITHFo0eP5s+fn5ubu2jRou+//76urk68/fLlyytXrhQIBFVV\nVStWrEhKSuK2zjaKjo7+9ddfxQeVlixZcu/ePfH2p0+flpaWcltb27WUgiUtSHZ29vz58+/c\nufPs2bPvv//ex8fn1q1bLGkpmiJudDQ7zIlLAUCo9+Kq2KYXkOrq6oont27evLlz504LC4v/\n/ve/8r9iiEwQElP06NGjpKSktrZ2xYoVWVlZhw8fNjMz09fXNzY2zs3N/emnn06dOuXq6vrf\n//6X60rbxMzMLCYmxt3dfdSoUQYGBqGhoeJb9Oro6GhoaHBdXVu1lILH42lraxMU5Ntvv12y\nZImNjY2WltZHH31kYmISERFRUVHh7OxM0JXjqampmzdvPn78eHl5uZmZmYqKCnGjo9lhbmNj\nQ1YKAFJx3Vl2h8TExPXr1wsEAvHD/Pz8nJwc8dTduXPn7ty5w2l17dBSELJSVFRULFy4sKqq\nimXZv//+e/78+b/++qtQKGTJnFn57bff9u/fL/7z69evQ0JCvvnmm2fPnnFaVLtRkKKiosLb\n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\nT0+8kxUS9VBbW5u7u3txcfHBgweNjY1FD/DKyclpaWkhkYUoadqyCQCQWDLHjx83NzdPSkpS\nVlbW19cnOp73odPpTCYzKSlJV1f3zp07NjY2wpkhMplsZWWFSiJvpaen5+bmlpaWVlBQYGVl\nRafTiY6oP6QjCxThTWytra03b958//59KysrCkX8MiOE6qGysrL09HQvLy8XFxdVVVUGg8Hh\ncMzNzZEI/q2Q3rIJAECITGRkpLq6+vjx44cMGSLhMyv4W5eRkVFCQkJ1dbWBgYGFhYXoC1BJ\nBMMwNpvd3NwsdqRAXl6eQqGUlpbev3/fw8ODqNh6TzqykCbvmeVCy6BBg06dOqWkpKSnp4cf\nxDlz5gy6B3E6OjoiIyOXL1+O4mdOAABa/vdULIVCkfxiCDd48GAvL6+GhoYLFy5YWVmpq6uL\nPivhieANhUgkUnl5eWRkpLKyslhjjIcPH8rKyq5evVqSZyakIwvRlX2iY/k0pGmWi0QiDRs2\nbOfOnT4+PhQKRU5ObuzYsRwOZ/fu3X5+fmQymegA+4bJZNJoNAk/swIAkA6IXXfC4/HIZDKV\nSh05cqSWllZMTEx3dzcqb121tbVbtmzBMMzQ0FBTU9PBwSE9Pb2srMzGxgavLfh8fkJCgp+f\nnyRvE5SOLLD/u7KPUFuq95CyWS6xS5VJJJKJiYm3tzeKvRmQ27IJAEAXSoVdSUkJg8GwsLDA\nz/0NGTJkzJgxp0+fzsnJkfy3roqKio0bNy5YsGDs2LH4iLKyspeXV1VVVWpqqpKSEolE2rNn\nj4yMTEBAAKGRvo90ZIETXdl/+vSptbX1m5vS0CJls1zY2y5VluT5eAAAkAQkLpeLxO/K7u7u\nzMzMkydPYhi2aNEi4a11SNyU1tTUFBoaGhIS4uDg8Oaz5eXlGRkZ9fX1jo6OixcvlpOT+/IR\n9oZ0ZPGmzs7OlJSUhw8f/vLLL4aGhkSH87Hi4+MVFRVFW6mict0MvmVTW1tbdAI+Ozs7Pz9/\n69atEj4r/9brZgAA4MtD44JiHo8XEREhJyc3fvz41tbW06dPa2hoBAcHCz/HS/hbF4PB0NLS\nmjVrlnAkPz+/oKBAXl5+8uTJqBQT0pHFu1y7di0lJWXixInTpk1DcXJLiMViBQUFbd68eejQ\noUTH0gfPnj27du3a+fPn0b1U+eDBg/n5+UFBQY6OjkSHAwD4eqFR2J0/fz4vLy8qKgr/1M7l\n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", | |
"text/plain": [ | |
"plot without title" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"plot_codes <- results_local %>% group_by( code ) %>% summarise( survival_rate = mean( Survived ), predicted_survival = mean(rf_prediction) ) \n", | |
"ggplot(plot_codes, aes(x = code, y = survival_rate, fill = predicted_survival )) + geom_col() + \n", | |
" theme(axis.text.x = element_text(angle = 55, hjust = 1)) + scale_fill_gradient( low = 'red', high = 'yellow') +\n", | |
" ggtitle('Predicted and Actual Survival Rates by Reason Code') + ylab('Actual Survival Rates') + xlab('Reason Codes')" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Using these reason codes we actually identify a segment that the Random Forest model assigns a lower survival likihood than the actually survival rate for that group. " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"#### Reason Codes for test set:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 638, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"predicted_clus_test <- sdf_predict( km, titanic_predict_test )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 624, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Source: query [6 x 5]\n", | |
"Database: spark connection master=yarn-client app=sparklyr_connect local=FALSE\n", | |
"\n", | |
" Age Sex Pclass rf_prediction prediction\n", | |
" <dbl> <dbl> <dbl> <dbl> <int>\n", | |
"1 0.03462132 -0.4966054 0.18330975 -0.8773413 1\n", | |
"2 0.12476444 0.9125520 0.18330975 0.5338064 2\n", | |
"3 0.23293619 -0.4966054 -0.08183471 -0.9473332 1\n", | |
"4 -0.01946455 -0.4966054 0.18330975 -0.8382808 1\n", | |
"5 -0.05552180 0.9125520 0.18330975 0.6638770 2\n", | |
"6 -0.11321340 -0.4966054 0.18330975 -0.6109465 4" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head(predicted_clus_test)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Convert input data back into interpretable version:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 639, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"predicted_clus_test <- predicted_clus_test %>% mutate( Age = ( ( as.numeric( Age ) / rf$feature.importances[1] * age_sd ) + age_mean ),\n", | |
" Sex = ( ( as.numeric( Sex ) / rf$feature.importances[2] * sex_sd ) + sex_mean ),\n", | |
" Pclass = ( ( as.numeric( Pclass ) / rf$feature.importances[3] * pclass_sd ) + pclass_mean ),\n", | |
" rf_prediction =( ( as.numeric( rf_prediction ) * predict_sd ) + predict_mean ) ) %>%\n", | |
" mutate( Sex = as.integer( Sex ) ) %>% mutate( Sex = ifelse( Sex == 1, 'female', 'male' ) ) %>% \n", | |
" mutate( Age = ifelse(Age == age_mean, NA, Age))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 626, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Source: query [6 x 5]\n", | |
"Database: spark connection master=yarn-client app=sparklyr_connect local=FALSE\n", | |
"\n", | |
" Age Pclass rf_prediction prediction Sex\n", | |
" <dbl> <dbl> <dbl> <int> <chr>\n", | |
"1 34.5 3 0.1669561 1 male\n", | |
"2 47.0 3 0.5165090 2 female\n", | |
"3 62.0 2 0.1496185 1 male\n", | |
"4 27.0 3 0.1766317 1 male\n", | |
"5 22.0 3 0.5487286 2 female\n", | |
"6 14.0 3 0.2329443 4 male" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head(predicted_clus_test)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Assign reason codes:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 640, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"results_test <- left_join( predicted_clus_test, reason_codes, by = c(\"prediction\" = \"cluster\"), copy = T) %>% select( -one_of( 'cluster', 'prediction' ) )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 628, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"Warning message in one_of(\"cluster\", \"prediction\"):\n", | |
"\"Unknown variables: `cluster`\"Warning message in one_of(\"cluster\", \"prediction\"):\n", | |
"\"Unknown variables: `cluster`\"Warning message in one_of(\"cluster\", \"prediction\"):\n", | |
"\"Unknown variables: `cluster`\"" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"Source: query [6 x 5]\n", | |
"Database: spark connection master=yarn-client app=sparklyr_connect local=FALSE\n", | |
"\n", | |
" Age Sex Pclass rf_prediction\n", | |
" <dbl> <chr> <dbl> <dbl>\n", | |
"1 34.5 male 3 0.1669561\n", | |
"2 47.0 female 3 0.5165090\n", | |
"3 62.0 male 2 0.1496185\n", | |
"4 27.0 male 3 0.1766317\n", | |
"5 22.0 female 3 0.5487286\n", | |
"6 14.0 male 3 0.2329443\n", | |
"# ... with 1 more variables: code <chr>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head(results_test)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"In order to plot data you must collect results into local environment" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 641, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"Warning message in one_of(\"cluster\", \"prediction\"):\n", | |
"\"Unknown variables: `cluster`\"" | |
] | |
} | |
], | |
"source": [ | |
"results_test_local <- collect( results_test )" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"View passengers, the prediction from the Random Forest and the reason code for that prediction:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 642, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<thead><tr><th scope=col>Age</th><th scope=col>Sex</th><th scope=col>Pclass</th><th scope=col>Survival_Likelihood</th><th scope=col>code</th></tr></thead>\n", | |
"<tbody>\n", | |
"\t<tr><td>34.5 </td><td><span style=white-space:pre-wrap>male </span> </td><td>3 </td><td>0.1669561 </td><td>Very Low Survival - 2nd & 3rd Class Male Adult</td></tr>\n", | |
"\t<tr><td>47.0 </td><td>female </td><td>3 </td><td>0.5165090 </td><td>Medium Survival - 3rd Class Female Adult </td></tr>\n", | |
"\t<tr><td>62.0 </td><td><span style=white-space:pre-wrap>male </span> </td><td>2 </td><td>0.1496185 </td><td>Very Low Survival - 2nd & 3rd Class Male Adult</td></tr>\n", | |
"\t<tr><td>27.0 </td><td><span style=white-space:pre-wrap>male </span> </td><td>3 </td><td>0.1766317 </td><td>Very Low Survival - 2nd & 3rd Class Male Adult</td></tr>\n", | |
"\t<tr><td>22.0 </td><td>female </td><td>3 </td><td>0.5487286 </td><td>Medium Survival - 3rd Class Female Adult </td></tr>\n", | |
"\t<tr><td>14.0 </td><td>male </td><td>3 </td><td>0.2329443 </td><td>Low Survival - 3rd Class Male Child </td></tr>\n", | |
"\t<tr><td>30.0 </td><td>female </td><td>3 </td><td>0.5765441 </td><td>Medium Survival - 3rd Class Female Adult </td></tr>\n", | |
"\t<tr><td>26.0 </td><td><span style=white-space:pre-wrap>male </span> </td><td>2 </td><td>0.1868552 </td><td>Very Low Survival - 2nd & 3rd Class Male Adult</td></tr>\n", | |
"\t<tr><td>18.0 </td><td>female </td><td>3 </td><td>0.5644287 </td><td>Medium Survival - 3rd Class Female Adult </td></tr>\n", | |
"\t<tr><td>21.0 </td><td><span style=white-space:pre-wrap>male </span> </td><td>3 </td><td>0.1637424 </td><td>Very Low Survival - 2nd & 3rd Class Male Adult</td></tr>\n", | |
"\t<tr><td> NaN </td><td><span style=white-space:pre-wrap>male </span> </td><td>3 </td><td>0.1683716 </td><td>Very Low Survival - 2nd & 3rd Class Male Adult</td></tr>\n", | |
"\t<tr><td>46.0 </td><td>male </td><td>1 </td><td>0.3475900 </td><td>Low Survival - 1st Class Male Adult </td></tr>\n", | |
"\t<tr><td>23.0 </td><td>female </td><td>1 </td><td>0.8332678 </td><td>High Survival - 1st Class Female </td></tr>\n", | |
"\t<tr><td>63.0 </td><td><span style=white-space:pre-wrap>male </span> </td><td>2 </td><td>0.1496185 </td><td>Very Low Survival - 2nd & 3rd Class Male Adult</td></tr>\n", | |
"\t<tr><td>47.0 </td><td>female </td><td>1 </td><td>0.8243110 </td><td>High Survival - 1st Class Female </td></tr>\n", | |
"\t<tr><td>24.0 </td><td>female </td><td>2 </td><td>0.7353005 </td><td>High Survival - 2st Class Female </td></tr>\n", | |
"\t<tr><td>35.0 </td><td><span style=white-space:pre-wrap>male </span> </td><td>2 </td><td>0.2035136 </td><td>Very Low Survival - 2nd & 3rd Class Male Adult</td></tr>\n", | |
"\t<tr><td>21.0 </td><td><span style=white-space:pre-wrap>male </span> </td><td>3 </td><td>0.1637424 </td><td>Very Low Survival - 2nd & 3rd Class Male Adult</td></tr>\n", | |
"\t<tr><td>27.0 </td><td>female </td><td>3 </td><td>0.5487286 </td><td>Medium Survival - 3rd Class Female Adult </td></tr>\n", | |
"\t<tr><td>45.0 </td><td>female </td><td>3 </td><td>0.5165090 </td><td>Medium Survival - 3rd Class Female Adult </td></tr>\n", | |
"</tbody>\n", | |
"</table>\n" | |
], | |
"text/latex": [ | |
"\\begin{tabular}{r|lllll}\n", | |
" Age & Sex & Pclass & Survival\\_Likelihood & code\\\\\n", | |
"\\hline\n", | |
"\t 34.5 & male & 3 & 0.1669561 & Very Low Survival - 2nd \\& 3rd Class Male Adult\\\\\n", | |
"\t 47.0 & female & 3 & 0.5165090 & Medium Survival - 3rd Class Female Adult \\\\\n", | |
"\t 62.0 & male & 2 & 0.1496185 & Very Low Survival - 2nd \\& 3rd Class Male Adult\\\\\n", | |
"\t 27.0 & male & 3 & 0.1766317 & Very Low Survival - 2nd \\& 3rd Class Male Adult\\\\\n", | |
"\t 22.0 & female & 3 & 0.5487286 & Medium Survival - 3rd Class Female Adult \\\\\n", | |
"\t 14.0 & male & 3 & 0.2329443 & Low Survival - 3rd Class Male Child \\\\\n", | |
"\t 30.0 & female & 3 & 0.5765441 & Medium Survival - 3rd Class Female Adult \\\\\n", | |
"\t 26.0 & male & 2 & 0.1868552 & Very Low Survival - 2nd \\& 3rd Class Male Adult\\\\\n", | |
"\t 18.0 & female & 3 & 0.5644287 & Medium Survival - 3rd Class Female Adult \\\\\n", | |
"\t 21.0 & male & 3 & 0.1637424 & Very Low Survival - 2nd \\& 3rd Class Male Adult\\\\\n", | |
"\t NaN & male & 3 & 0.1683716 & Very Low Survival - 2nd \\& 3rd Class Male Adult\\\\\n", | |
"\t 46.0 & male & 1 & 0.3475900 & Low Survival - 1st Class Male Adult \\\\\n", | |
"\t 23.0 & female & 1 & 0.8332678 & High Survival - 1st Class Female \\\\\n", | |
"\t 63.0 & male & 2 & 0.1496185 & Very Low Survival - 2nd \\& 3rd Class Male Adult\\\\\n", | |
"\t 47.0 & female & 1 & 0.8243110 & High Survival - 1st Class Female \\\\\n", | |
"\t 24.0 & female & 2 & 0.7353005 & High Survival - 2st Class Female \\\\\n", | |
"\t 35.0 & male & 2 & 0.2035136 & Very Low Survival - 2nd \\& 3rd Class Male Adult\\\\\n", | |
"\t 21.0 & male & 3 & 0.1637424 & Very Low Survival - 2nd \\& 3rd Class Male Adult\\\\\n", | |
"\t 27.0 & female & 3 & 0.5487286 & Medium Survival - 3rd Class Female Adult \\\\\n", | |
"\t 45.0 & female & 3 & 0.5165090 & Medium Survival - 3rd Class Female Adult \\\\\n", | |
"\\end{tabular}\n" | |
], | |
"text/markdown": [ | |
"\n", | |
"Age | Sex | Pclass | Survival_Likelihood | code | \n", | |
"|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", | |
"| 34.5 | male | 3 | 0.1669561 | Very Low Survival - 2nd & 3rd Class Male Adult | \n", | |
"| 47.0 | female | 3 | 0.5165090 | Medium Survival - 3rd Class Female Adult | \n", | |
"| 62.0 | male | 2 | 0.1496185 | Very Low Survival - 2nd & 3rd Class Male Adult | \n", | |
"| 27.0 | male | 3 | 0.1766317 | Very Low Survival - 2nd & 3rd Class Male Adult | \n", | |
"| 22.0 | female | 3 | 0.5487286 | Medium Survival - 3rd Class Female Adult | \n", | |
"| 14.0 | male | 3 | 0.2329443 | Low Survival - 3rd Class Male Child | \n", | |
"| 30.0 | female | 3 | 0.5765441 | Medium Survival - 3rd Class Female Adult | \n", | |
"| 26.0 | male | 2 | 0.1868552 | Very Low Survival - 2nd & 3rd Class Male Adult | \n", | |
"| 18.0 | female | 3 | 0.5644287 | Medium Survival - 3rd Class Female Adult | \n", | |
"| 21.0 | male | 3 | 0.1637424 | Very Low Survival - 2nd & 3rd Class Male Adult | \n", | |
"| NaN | male | 3 | 0.1683716 | Very Low Survival - 2nd & 3rd Class Male Adult | \n", | |
"| 46.0 | male | 1 | 0.3475900 | Low Survival - 1st Class Male Adult | \n", | |
"| 23.0 | female | 1 | 0.8332678 | High Survival - 1st Class Female | \n", | |
"| 63.0 | male | 2 | 0.1496185 | Very Low Survival - 2nd & 3rd Class Male Adult | \n", | |
"| 47.0 | female | 1 | 0.8243110 | High Survival - 1st Class Female | \n", | |
"| 24.0 | female | 2 | 0.7353005 | High Survival - 2st Class Female | \n", | |
"| 35.0 | male | 2 | 0.2035136 | Very Low Survival - 2nd & 3rd Class Male Adult | \n", | |
"| 21.0 | male | 3 | 0.1637424 | Very Low Survival - 2nd & 3rd Class Male Adult | \n", | |
"| 27.0 | female | 3 | 0.5487286 | Medium Survival - 3rd Class Female Adult | \n", | |
"| 45.0 | female | 3 | 0.5165090 | Medium Survival - 3rd Class Female Adult | \n", | |
"\n", | |
"\n" | |
], | |
"text/plain": [ | |
" Age Sex Pclass Survival_Likelihood\n", | |
"1 34.5 male 3 0.1669561 \n", | |
"2 47.0 female 3 0.5165090 \n", | |
"3 62.0 male 2 0.1496185 \n", | |
"4 27.0 male 3 0.1766317 \n", | |
"5 22.0 female 3 0.5487286 \n", | |
"6 14.0 male 3 0.2329443 \n", | |
"7 30.0 female 3 0.5765441 \n", | |
"8 26.0 male 2 0.1868552 \n", | |
"9 18.0 female 3 0.5644287 \n", | |
"10 21.0 male 3 0.1637424 \n", | |
"11 NaN male 3 0.1683716 \n", | |
"12 46.0 male 1 0.3475900 \n", | |
"13 23.0 female 1 0.8332678 \n", | |
"14 63.0 male 2 0.1496185 \n", | |
"15 47.0 female 1 0.8243110 \n", | |
"16 24.0 female 2 0.7353005 \n", | |
"17 35.0 male 2 0.2035136 \n", | |
"18 21.0 male 3 0.1637424 \n", | |
"19 27.0 female 3 0.5487286 \n", | |
"20 45.0 female 3 0.5165090 \n", | |
" code \n", | |
"1 Very Low Survival - 2nd & 3rd Class Male Adult\n", | |
"2 Medium Survival - 3rd Class Female Adult \n", | |
"3 Very Low Survival - 2nd & 3rd Class Male Adult\n", | |
"4 Very Low Survival - 2nd & 3rd Class Male Adult\n", | |
"5 Medium Survival - 3rd Class Female Adult \n", | |
"6 Low Survival - 3rd Class Male Child \n", | |
"7 Medium Survival - 3rd Class Female Adult \n", | |
"8 Very Low Survival - 2nd & 3rd Class Male Adult\n", | |
"9 Medium Survival - 3rd Class Female Adult \n", | |
"10 Very Low Survival - 2nd & 3rd Class Male Adult\n", | |
"11 Very Low Survival - 2nd & 3rd Class Male Adult\n", | |
"12 Low Survival - 1st Class Male Adult \n", | |
"13 High Survival - 1st Class Female \n", | |
"14 Very Low Survival - 2nd & 3rd Class Male Adult\n", | |
"15 High Survival - 1st Class Female \n", | |
"16 High Survival - 2st Class Female \n", | |
"17 Very Low Survival - 2nd & 3rd Class Male Adult\n", | |
"18 Very Low Survival - 2nd & 3rd Class Male Adult\n", | |
"19 Medium Survival - 3rd Class Female Adult \n", | |
"20 Medium Survival - 3rd Class Female Adult " | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"head( rename( results_test_local, Survival_Likelihood = rf_prediction ), 20)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"anaconda-cloud": {}, | |
"kernelspec": { | |
"display_name": "R [conda env:Test_MCC-default]", | |
"language": "R", | |
"name": "conda-env-Test_MCC-default-r" | |
}, | |
"language_info": { | |
"codemirror_mode": "r", | |
"file_extension": ".r", | |
"mimetype": "text/x-r-source", | |
"name": "R", | |
"pygments_lexer": "r", | |
"version": "3.3.2" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment