{"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.4.0"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":84896,"databundleVersionId":10305135,"sourceType":"competition"}],"dockerImageVersionId":30749,"isInternetEnabled":true,"language":"r","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"library(dplyr)\nlibrary(tidyverse)\nlibrary(caret)\nlibrary(e1071)\nlibrary(ROCR)\nlibrary(partykit)\nlibrary(rsample)\nlibrary(lubridate)\nlibrary(GGally)\nlibrary(randomForest)\nlibrary(ggplot2)\nlibrary(keras)\nlibrary(tensorflow)\nlibrary(ggcorrplot)\noptions(warn = -1)","metadata":{"_uuid":"051d70d956493feee0c6d64651c6a088724dca2a","_execution_state":"idle","trusted":true,"execution":{"iopub.status.busy":"2024-12-04T09:29:04.861882Z","iopub.execute_input":"2024-12-04T09:29:04.864907Z","iopub.status.idle":"2024-12-04T09:29:09.013269Z","shell.execute_reply":"2024-12-04T09:29:09.01128Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Read Data & Data Understanding**","metadata":{}},{"cell_type":"markdown","source":" 1.1 Import Data","metadata":{}},{"cell_type":"code","source":"train <- read.csv(\"/kaggle/input/playground-series-s4e12/train.csv\")\ntest <- read.csv(\"/kaggle/input/playground-series-s4e12/test.csv\")\nsample_submission <- read.csv(\"/kaggle/input/playground-series-s4e12/sample_submission.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T09:29:12.800191Z","iopub.execute_input":"2024-12-04T09:29:12.835892Z","iopub.status.idle":"2024-12-04T09:29:46.482713Z","shell.execute_reply":"2024-12-04T09:29:46.480941Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"1.2 Inspection Data","metadata":{}},{"cell_type":"code","source":"head(train,2)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T09:30:54.487879Z","iopub.execute_input":"2024-12-04T09:30:54.489745Z","iopub.status.idle":"2024-12-04T09:30:54.532086Z","shell.execute_reply":"2024-12-04T09:30:54.530065Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"from above prompt we have 1.200.000 row and 21 column","metadata":{}},{"cell_type":"code","source":"colSums(is.na(train))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T09:30:40.081063Z","iopub.execute_input":"2024-12-04T09:30:40.083076Z","iopub.status.idle":"2024-12-04T09:30:41.091327Z","shell.execute_reply":"2024-12-04T09:30:41.088711Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"We have missing values for some column, we will check test data soon","metadata":{}},{"cell_type":"code","source":"fill_mode <- function(x) {\n  mode_val <- names(which.max(table(na.omit(x))))\n  x[is.na(x)] <- mode_val\n  return(x)\n}\n\ntrain$Number.of.Dependents <- fill_mode(train$Number.of.Dependents)\ntrain$Previous.Claims <- fill_mode(train$Previous.Claims)\ntrain$Insurance.Duration <- fill_mode(train$Insurance.Duration)\ntrain$Credit.Score <- fill_mode(train$Credit.Score)\ntrain$Credit.Score <- as.numeric(train$Credit.Score)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T09:30:44.087574Z","iopub.execute_input":"2024-12-04T09:30:44.089528Z","iopub.status.idle":"2024-12-04T09:30:51.861658Z","shell.execute_reply":"2024-12-04T09:30:51.8597Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Prompt above fill missing values use values that often appear","metadata":{}},{"cell_type":"code","source":"train$Annual.Income[is.na(train$Annual.Income)] <- median(train$Annual.Income, na.rm = TRUE)\ntrain$Health.Score[is.na(train$Health.Score)] <- median(train$Health.Score, na.rm = TRUE)\ntrain$Vehicle.Age[is.na(train$Vehicle.Age)] <- median(train$Vehicle.Age, na.rm = TRUE)\ntrain$Age[is.na(train$Age)] <- median(train$Age, na.rm = TRUE)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T09:31:18.373768Z","iopub.execute_input":"2024-12-04T09:31:18.375893Z","iopub.status.idle":"2024-12-04T09:31:18.674357Z","shell.execute_reply":"2024-12-04T09:31:18.672621Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"for numeric column, fill missing values use median","metadata":{}},{"cell_type":"code","source":"train_clean <- train %>% select(-id,-Policy.Start.Date) %>% \n  mutate_at(vars(Gender,Marital.Status,Number.of.Dependents,Education.Level,Occupation,\n                 Location,Policy.Type,Previous.Claims,Insurance.Duration,Customer.Feedback,\n                Smoking.Status,Exercise.Frequency,Property.Type), as.factor)\n\ntrain_clean$Gender <- as.numeric(train_clean$Gender)\ntrain_clean$Marital.Status <- as.numeric(train_clean$Marital.Status)\ntrain_clean$Number.of.Dependents <- as.numeric(train_clean$Number.of.Dependents)\ntrain_clean$Education.Level <- as.numeric(train_clean$Education.Level)\ntrain_clean$Occupation <- as.numeric(train_clean$Occupation)\ntrain_clean$Location <- as.numeric(train_clean$Location)\ntrain_clean$Policy.Type <- as.numeric(train_clean$Policy.Type)\ntrain_clean$Previous.Claims <- as.numeric(train_clean$Previous.Claims)\ntrain_clean$Insurance.Duration <- as.numeric(train_clean$Insurance.Duration)\ntrain_clean$Customer.Feedback <- as.numeric(train_clean$Customer.Feedback)\ntrain_clean$Smoking.Status <- as.numeric(train_clean$Smoking.Status)\ntrain_clean$Exercise.Frequency <- as.numeric(train_clean$Exercise.Frequency)\ntrain_clean$Property.Type <- as.numeric(train_clean$Property.Type)\n\nglimpse(train_clean)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T09:31:21.605343Z","iopub.execute_input":"2024-12-04T09:31:21.607238Z","iopub.status.idle":"2024-12-04T09:31:23.123003Z","shell.execute_reply":"2024-12-04T09:31:23.120761Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_finish <- train_clean %>% select(-Premium.Amount)\ntarget_finish <- train_clean$Premium.Amount","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T09:31:27.892013Z","iopub.execute_input":"2024-12-04T09:31:27.893808Z","iopub.status.idle":"2024-12-04T09:31:32.26142Z","shell.execute_reply":"2024-12-04T09:31:32.259654Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"set.seed(1111)  # Set seed untuk reprodusibilitas\ntrain_index <- sample(1:nrow(train_finish), size = 0.8 * nrow(train_finish))  # 80% untuk pelatihan\n\ntrain_cross <- train_finish[train_index, ]\nval_data_cross <- train_finish[-train_index, ]\n\ntarget_cross <- target_finish[train_index]\nval_target_cross <- target_finish[-train_index]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T09:03:18.430409Z","iopub.execute_input":"2024-12-03T09:03:18.432019Z","iopub.status.idle":"2024-12-03T09:03:19.020747Z","shell.execute_reply":"2024-12-03T09:03:19.018958Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"head(test,2)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T03:51:16.864706Z","iopub.execute_input":"2024-12-03T03:51:16.866459Z","iopub.status.idle":"2024-12-03T03:51:16.897704Z","shell.execute_reply":"2024-12-03T03:51:16.89585Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"from prompt above we have 800.000 row and 20 column","metadata":{}},{"cell_type":"code","source":"colSums(is.na(test))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T01:46:59.754967Z","iopub.execute_input":"2024-12-03T01:46:59.756588Z","iopub.status.idle":"2024-12-03T01:46:59.884179Z","shell.execute_reply":"2024-12-03T01:46:59.882493Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"We have missing values for some column","metadata":{}},{"cell_type":"code","source":"fill_mode <- function(x) {\n  mode_val <- names(which.max(table(na.omit(x))))\n  x[is.na(x)] <- mode_val\n  return(x)\n}\n\ntest$Number.of.Dependents <- fill_mode(test$Number.of.Dependents)\ntest$Previous.Claims <- fill_mode(test$Previous.Claims)\ntest$Insurance.Duration <- fill_mode(test$Insurance.Duration)\ntest$Credit.Score <- fill_mode(test$Credit.Score)\ntest$Credit.Score <- as.numeric(test$Credit.Score)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T06:52:14.553979Z","iopub.execute_input":"2024-12-03T06:52:14.555654Z","iopub.status.idle":"2024-12-03T06:52:19.763829Z","shell.execute_reply":"2024-12-03T06:52:19.761992Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Prompt above fill missing values use values that often appear","metadata":{}},{"cell_type":"code","source":"test$Annual.Income[is.na(test$Annual.Income)] <- median(test$Annual.Income, na.rm = TRUE)\ntest$Health.Score[is.na(test$Health.Score)] <- median(test$Health.Score, na.rm = TRUE)\ntest$Vehicle.Age[is.na(test$Vehicle.Age)] <- median(test$Vehicle.Age, na.rm = TRUE)\ntest$Age[is.na(test$Age)] <- median(test$Age, na.rm = TRUE)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T06:52:22.552849Z","iopub.execute_input":"2024-12-03T06:52:22.554319Z","iopub.status.idle":"2024-12-03T06:52:22.806743Z","shell.execute_reply":"2024-12-03T06:52:22.804927Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"for numeric column, fill missing values use median","metadata":{}},{"cell_type":"code","source":"test_clean <- test %>% select(-id,-Policy.Start.Date) %>% \n  mutate_at(vars(Gender,Marital.Status,Number.of.Dependents,Education.Level,Occupation,\n                 Location,Policy.Type,Previous.Claims,Insurance.Duration,Customer.Feedback,\n                Smoking.Status,Exercise.Frequency,Property.Type), as.factor)\n\ntest_clean$Gender <- as.numeric(test_clean$Gender)\ntest_clean$Marital.Status <- as.numeric(test_clean$Marital.Status)\ntest_clean$Number.of.Dependents <- as.numeric(test_clean$Number.of.Dependents)\ntest_clean$Education.Level <- as.numeric(test_clean$Education.Level)\ntest_clean$Occupation <- as.numeric(test_clean$Occupation)\ntest_clean$Location <- as.numeric(test_clean$Location)\ntest_clean$Policy.Type <- as.numeric(test_clean$Policy.Type)\ntest_clean$Previous.Claims <- as.numeric(test_clean$Previous.Claims)\ntest_clean$Insurance.Duration <- as.numeric(test_clean$Insurance.Duration)\ntest_clean$Customer.Feedback <- as.numeric(test_clean$Customer.Feedback)\ntest_clean$Smoking.Status <- as.numeric(test_clean$Smoking.Status)\ntest_clean$Exercise.Frequency <- as.numeric(test_clean$Exercise.Frequency)\ntest_clean$Property.Type <- as.numeric(test_clean$Property.Type)\n\nglimpse(test_clean)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T06:52:25.623426Z","iopub.execute_input":"2024-12-03T06:52:25.625007Z","iopub.status.idle":"2024-12-03T06:52:26.26173Z","shell.execute_reply":"2024-12-03T06:52:26.260246Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Exploratory Data Analysis**","metadata":{}},{"cell_type":"code","source":"summary(train_clean)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T04:05:53.632742Z","iopub.execute_input":"2024-12-03T04:05:53.634454Z","iopub.status.idle":"2024-12-03T04:05:54.888775Z","shell.execute_reply":"2024-12-03T04:05:54.886542Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Modeling**","metadata":{}},{"cell_type":"code","source":"rmsle <- custom_metric(\"rmsle\", function(y_true, y_pred) {\n  y_true <- tf$cast(y_true, tf$float32)\n  y_pred <- tf$cast(y_pred, tf$float32)\n  log_true <- tf$math$log(y_true + 1)\n  log_pred <- tf$math$log(y_pred + 1)\n  sqrt(tf$reduce_mean(tf$square(log_true - log_pred)))\n})","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T07:31:19.17909Z","iopub.execute_input":"2024-12-03T07:31:19.18085Z","iopub.status.idle":"2024-12-03T07:31:19.195465Z","shell.execute_reply":"2024-12-03T07:31:19.193548Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model <- keras_model_sequential() %>%\n  layer_dense(units = 64, activation = \"relu\", input_shape = c(ncol(train_cross))) %>%\n  layer_dense(units = 32, activation = \"relu\") %>%\n  layer_dropout(rate = 0.2) %>%\n  layer_dense(units = 1) \n\nmodel %>% compile(\n  loss = \"mean_squared_error\",  \n  optimizer = optimizer_adam(learning_rate = 0.001),  \n  metrics = list(rmsle)  \n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T10:07:19.982197Z","iopub.execute_input":"2024-12-03T10:07:19.983905Z","iopub.status.idle":"2024-12-03T10:07:20.077743Z","shell.execute_reply":"2024-12-03T10:07:20.075393Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"callbacks <- list(callback_early_stopping(monitor = \"rmsle\", patience = 10))","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"history <- model %>% fit(\n  x = as.matrix(train_cross),  # Data input\n  y = target_cross,  # Target\n  epochs = 50,  # Jumlah iterasi\n  batch_size = 32,  # Ukuran batch\n  validation_data = list(as.matrix(val_data_cross), val_target_cross),  # Data validasi\n  callbacks = callbacks,\n  verbose = 1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T10:07:25.095546Z","iopub.execute_input":"2024-12-03T10:07:25.097948Z","iopub.status.idle":"2024-12-03T10:29:02.595311Z","shell.execute_reply":"2024-12-03T10:29:02.593262Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plot(history, metrics = \"rmsle\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T10:00:31.983395Z","iopub.execute_input":"2024-12-03T10:00:31.985047Z","iopub.status.idle":"2024-12-03T10:00:32.343465Z","shell.execute_reply":"2024-12-03T10:00:32.340025Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Prediction","metadata":{}},{"cell_type":"code","source":"sample_submission <- sample_submission %>% select(-Premium.Amount)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T10:00:53.422929Z","iopub.execute_input":"2024-12-03T10:00:53.424598Z","iopub.status.idle":"2024-12-03T10:00:53.443116Z","shell.execute_reply":"2024-12-03T10:00:53.441248Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sample_submission$Premium.Amount <- model %>% predict(as.matrix(test_clean))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T10:00:56.648221Z","iopub.execute_input":"2024-12-03T10:00:56.650716Z","iopub.status.idle":"2024-12-03T10:01:29.065152Z","shell.execute_reply":"2024-12-03T10:01:29.062941Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission <- sample_submission %>% rename(\"Premium Amount\" = Premium.Amount)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T10:02:43.934409Z","iopub.execute_input":"2024-12-03T10:02:43.936917Z","iopub.status.idle":"2024-12-03T10:02:43.953743Z","shell.execute_reply":"2024-12-03T10:02:43.951792Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"head(submission)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T10:02:46.176558Z","iopub.execute_input":"2024-12-03T10:02:46.178092Z","iopub.status.idle":"2024-12-03T10:02:46.206785Z","shell.execute_reply":"2024-12-03T10:02:46.204628Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"write.csv(x = submission,\n          file = \"submission.csv\",\n          row.names = F)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T10:03:05.210622Z","iopub.execute_input":"2024-12-03T10:03:05.212457Z","iopub.status.idle":"2024-12-03T10:03:07.097265Z","shell.execute_reply":"2024-12-03T10:03:07.093432Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"head(submission)\nglimpse(submission)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-03T10:03:10.258593Z","iopub.execute_input":"2024-12-03T10:03:10.260073Z","iopub.status.idle":"2024-12-03T10:03:10.298104Z","shell.execute_reply":"2024-12-03T10:03:10.296409Z"}},"outputs":[],"execution_count":null}]}