{"metadata":{"kernelspec":{"name":"ir","display_name":"R","language":"R"},"language_info":{"name":"R","codemirror_mode":"r","pygments_lexer":"r","mimetype":"text/x-r-source","file_extension":".r","version":"4.0.5"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# ========================================================================================================\n# Purpose:                              Predicting titanic survivors\n# DOC:                                  17-07-2022\n# Data:                                 train.csv, test.csv\n# ========================================================================================================\n\n\nlibrary(tidyverse)\nlibrary(caTools)            # Train-Test Split\nlibrary(splitstackshape)    # Stratified Train-Test Split\nlibrary(randomForest)       # Random Forest\n\n\nlist.files(path = \".../input/titanic\")","metadata":{"_uuid":"051d70d956493feee0c6d64651c6a088724dca2a","_execution_state":"idle","execution":{"iopub.status.busy":"2022-07-17T03:38:36.111784Z","iopub.execute_input":"2022-07-17T03:38:36.114518Z","iopub.status.idle":"2022-07-17T03:38:37.546852Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#load dataset\ntrain <- read.csv(\"../input/titanic/train.csv\",sep=\",\",header=TRUE)\ntest <- read.csv(\"../input/titanic/test.csv\",sep=\",\",header=TRUE)\nhead(train)\nsummary(train)\n","metadata":{"execution":{"iopub.status.busy":"2022-07-17T03:41:53.115460Z","iopub.execute_input":"2022-07-17T03:41:53.117394Z","iopub.status.idle":"2022-07-17T03:41:53.177539Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Factor categorical variables in train dataset\ntrain_dataset <- subset(train, select = -c(Ticket, Cabin))\ntrain_dataset$Embarked[train_dataset$Embarked==''] <- NA\ntrain_dataset <- na.omit(train_dataset)\ntrain_dataset$Survived <- as.factor(train_dataset$Survived)\ntrain_dataset$Pclass <- as.factor(train_dataset$Pclass)\ntrain_dataset$Sex <- as.factor(train_dataset$Sex)\ntrain_dataset$SibSp <- as.factor(train_dataset$SibSp)\ntrain_dataset$Parch <- as.factor(train_dataset$Parch)\ntrain_dataset$Embarked <- as.factor(train_dataset$Embarked)\nsummary(train_dataset)\n","metadata":{"execution":{"iopub.status.busy":"2022-07-17T03:45:47.324305Z","iopub.execute_input":"2022-07-17T03:45:47.326019Z","iopub.status.idle":"2022-07-17T03:45:47.360994Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# seperate na & non-na\ntrain_not_na <- train_dataset[!is.na(train_dataset$Age),]\ntrain_na <- train_dataset[is.na(train_dataset$Age),]\ntrain_na_male <- train_na %>% filter (Sex == \"male\")\ntrain_na_female <- train_na %>% filter (Sex == \"female\")","metadata":{"execution":{"iopub.status.busy":"2022-07-17T03:47:55.063515Z","iopub.execute_input":"2022-07-17T03:47:55.065379Z","iopub.status.idle":"2022-07-17T03:47:55.123205Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# split in to AgeCat where Age > 12 == \"Adult\" else \"Children\"\ntrain_not_na$AgeCat <- ifelse(train_not_na$Age > 12, \"Adult\", \"Children\")","metadata":{"execution":{"iopub.status.busy":"2022-07-17T03:48:29.553606Z","iopub.execute_input":"2022-07-17T03:48:29.555125Z","iopub.status.idle":"2022-07-17T03:48:29.568378Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# if sex == male and name contains \"Master\" then \"Children\" else \"Adult\"\ntrain_na_male$AgeCat <- ifelse(grepl(\"Master\", train_na_male$Name, fixed = TRUE) == \"TRUE\", \"Children\", \"Adult\")","metadata":{"execution":{"iopub.status.busy":"2022-07-17T03:49:12.958400Z","iopub.execute_input":"2022-07-17T03:49:12.959959Z","iopub.status.idle":"2022-07-17T03:49:12.977454Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# if sex == female and parch == 0 then \"Adult\" else \"Children\"\ntrain_na_female$AgeCat <- ifelse(grepl(\"Miss\", train_na_female$Name, fixed = TRUE) == \"TRUE\", ifelse(train_na_female$Parch == 0, \"Adult\", \"Children\"), \"Adult\")","metadata":{"execution":{"iopub.status.busy":"2022-07-17T03:50:22.998996Z","iopub.execute_input":"2022-07-17T03:50:23.001379Z","iopub.status.idle":"2022-07-17T03:50:23.018967Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# rbind notna, namale, nafemale\nworking_dataset = rbind(train_not_na, train_na_male, train_na_female)\nworking_dataset$AgeCat <- as.factor(working_dataset$AgeCat)\nworking_dataset <- subset(working_dataset, select = -c(Name,Age))\nsummary(working_dataset)\nhead(working_dataset)","metadata":{"execution":{"iopub.status.busy":"2022-07-17T03:51:28.347573Z","iopub.execute_input":"2022-07-17T03:51:28.349128Z","iopub.status.idle":"2022-07-17T03:51:28.399446Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# set seed and do .66-.33 stratified train-test split\nset.seed(22)\nworking_dataset <- working_dataset %>% group_by(AgeCat) %>% filter(length(AgeCat) > 1) %>% stratified(\"AgeCat\", .66, bothSets = TRUE)\ntrainset <- as.data.frame(working_dataset$SAMP1)\ntestset <- as.data.frame(working_dataset$SAMP2)\nsummary(trainset)\nsummary(testset)\n","metadata":{"execution":{"iopub.status.busy":"2022-07-17T03:52:26.356261Z","iopub.execute_input":"2022-07-17T03:52:26.357879Z","iopub.status.idle":"2022-07-17T03:52:26.444279Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# randomForest model to predict if passenger will survive \nrf.model <- randomForest(Survived ~ Pclass+Sex+Fare+AgeCat , data = trainset, ntree = 500, importance = TRUE)\nrf.model","metadata":{"execution":{"iopub.status.busy":"2022-07-17T03:53:59.401995Z","iopub.execute_input":"2022-07-17T03:53:59.403573Z","iopub.status.idle":"2022-07-17T03:53:59.603145Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# plot\nvarImpPlot(rf.model)","metadata":{"execution":{"iopub.status.busy":"2022-07-17T03:54:22.176211Z","iopub.execute_input":"2022-07-17T03:54:22.177736Z","iopub.status.idle":"2022-07-17T03:54:22.426527Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# raw score\nimportance(rf.model)","metadata":{"execution":{"iopub.status.busy":"2022-07-17T03:54:47.691431Z","iopub.execute_input":"2022-07-17T03:54:47.696636Z","iopub.status.idle":"2022-07-17T03:54:47.728802Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Confusion matrix on trainset\nrf.train.pred <- predict(rf.model, newdata = trainset, type = \"class\")\ntable1 <- table(trainset$Survived, rf.train.pred, dnn = c(\"True\", \"rf.predict\"))\ntable1\nRF.cm <- round(prop.table(table1),2)\nRF.test.acc <- round((mean(rf.train.pred == trainset$Survived)),2)\nRF.test.acc","metadata":{"execution":{"iopub.status.busy":"2022-07-17T03:55:07.736145Z","iopub.execute_input":"2022-07-17T03:55:07.737860Z","iopub.status.idle":"2022-07-17T03:55:07.787067Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Confusion matrix on testset\nrf.test.pred <- predict(rf.model, newdata = testset, type = \"class\")\ntable2 <- table(testset$Survived, rf.test.pred, dnn = c(\"True\", \"rf.predict\"))\ntable2\nRF.cm <- round(prop.table(table2),2)\nRF.test.acc <- round((mean(rf.test.pred == testset$Survived)),2)\nRF.test.acc","metadata":{"execution":{"iopub.status.busy":"2022-07-17T03:55:21.159441Z","iopub.execute_input":"2022-07-17T03:55:21.162380Z","iopub.status.idle":"2022-07-17T03:55:21.227714Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Factor categorical variables in test dataset\ntest_dataset <- subset(test, select = -c(Ticket, Cabin))\ntest_dataset$Pclass <- as.factor(test_dataset$Pclass)\ntest_dataset$Sex <- as.factor(test_dataset$Sex)\ntest_dataset$SibSp <- as.factor(test_dataset$SibSp)\ntest_dataset$Parch <- as.factor(test_dataset$Parch)\ntest_dataset$Embarked <- as.factor(test_dataset$Embarked)\nsummary(test_dataset) # 86 NA's in $Age, 1 NA's in $Fare","metadata":{"execution":{"iopub.status.busy":"2022-07-17T04:21:12.533326Z","iopub.execute_input":"2022-07-17T04:21:12.535386Z","iopub.status.idle":"2022-07-17T04:21:12.570185Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# seperate na & non-na\ntest_not_na <- test_dataset[!is.na(test_dataset$Age),]\ntest_na <- test_dataset[is.na(test_dataset$Age),]\ntest_na_male <- test_na %>% filter (Sex == \"male\")\ntest_na_female <- test_na %>% filter (Sex == \"female\")","metadata":{"execution":{"iopub.status.busy":"2022-07-17T04:21:52.534346Z","iopub.execute_input":"2022-07-17T04:21:52.535994Z","iopub.status.idle":"2022-07-17T04:21:52.568652Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# split in to AgeCat where Age > 12 == \"Adult\" else \"Children\"\ntest_not_na$AgeCat <- ifelse(test_not_na$Age > 12, \"Adult\", \"Children\")","metadata":{"execution":{"iopub.status.busy":"2022-07-17T04:22:08.434938Z","iopub.execute_input":"2022-07-17T04:22:08.436589Z","iopub.status.idle":"2022-07-17T04:22:08.452099Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# if male and name contains \"Master\" then \"Children\" else \"Adult\"\ntest_na_male$AgeCat <- ifelse(grepl(\"Master\", test_na_male$Name, fixed = TRUE) == \"TRUE\", \"Children\", \"Adult\")","metadata":{"execution":{"iopub.status.busy":"2022-07-17T04:22:20.479051Z","iopub.execute_input":"2022-07-17T04:22:20.480714Z","iopub.status.idle":"2022-07-17T04:22:20.495686Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# if female and parch == 0 then \"Adult\" else \"Children\"\ntest_na_female$AgeCat <- ifelse(grepl(\"Miss\", test_na_female$Name, fixed = TRUE) == \"TRUE\", ifelse(test_na_female$Parch == 0, \"Adult\", \"Children\"), \"Adult\")","metadata":{"execution":{"iopub.status.busy":"2022-07-17T04:22:31.628594Z","iopub.execute_input":"2022-07-17T04:22:31.631389Z","iopub.status.idle":"2022-07-17T04:22:31.649455Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# rbind notna, namale, nafemale\nworking2_dataset = rbind(test_not_na, test_na_male, test_na_female)\nworking2_dataset$AgeCat <- as.factor(working2_dataset$AgeCat)\nworking2_dataset <- subset(working2_dataset, select = -c(Name, Age))","metadata":{"execution":{"iopub.status.busy":"2022-07-17T04:22:46.473770Z","iopub.execute_input":"2022-07-17T04:22:46.475289Z","iopub.status.idle":"2022-07-17T04:22:46.493691Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Use mean fare\nworking2_dataset$Fare[is.na(working2_dataset$Fare)] <- 35.627","metadata":{"execution":{"iopub.status.busy":"2022-07-17T04:22:59.025375Z","iopub.execute_input":"2022-07-17T04:22:59.026890Z","iopub.status.idle":"2022-07-17T04:22:59.039789Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# combine level 5 and 8 together in SibSp\nlevels(working2_dataset$SibSp)[levels(working2_dataset$SibSp)%in%c(\"5\",\"8\")] <- \"5\"","metadata":{"execution":{"iopub.status.busy":"2022-07-17T04:23:13.688300Z","iopub.execute_input":"2022-07-17T04:23:13.690188Z","iopub.status.idle":"2022-07-17T04:23:13.704996Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#combine level 6 and 9 together in Parch\nlevels(working2_dataset$Parch)[levels(working2_dataset$Parch)%in%c(\"6\",\"9\")] <- \"6\"\nsummary(working2_dataset)","metadata":{"execution":{"iopub.status.busy":"2022-07-17T04:23:24.681607Z","iopub.execute_input":"2022-07-17T04:23:24.683226Z","iopub.status.idle":"2022-07-17T04:23:24.707110Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"working2_dataset$Survived <- predict(rf.model, newdata = working2_dataset, type = \"class\")\nresults <- subset(working2_dataset, select = c(PassengerId,Survived))\n#write.csv(results,\"C:/Users/Desktop/Kaggle/Titanic/results3.csv\", row.names = FALSE)","metadata":{"execution":{"iopub.status.busy":"2022-07-17T04:26:14.267623Z","iopub.execute_input":"2022-07-17T04:26:14.269213Z","iopub.status.idle":"2022-07-17T04:26:14.300843Z"},"trusted":true},"execution_count":null,"outputs":[]}]}