{"cells":[{"metadata":{},"cell_type":"markdown","source":"# AutoML - Volcanic Eruption Prediction\n\n## Summary\n\nTo try to predict volcanic eruptions we are going to use the **AutoML(h2o)** algorithm. The data preparation and modeling process is detailed below."},{"metadata":{},"cell_type":"markdown","source":"## Feature extraction"},{"metadata":{},"cell_type":"markdown","source":"### tsfeatures\n\nFirst we will use the ***tsfeatures*** library, the R package tsfeatures provides methods for extracting various features from time series data. For the runtime I will leave the commented code, but I will not execute it."},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# train <- read.csv(\"train.csv\")\n# \n# dataSensor <- read.csv(paste0(\"train/\", train$segment_id[1], \".csv\")) %>% \n#    as.matrix() %>% ts()\n# \n# dFeat <- function(data, par = F){\n#    feat <- c(\"stl_features\", \"entropy\", \"acf_features\", \"stability\",\n#              \"crossing_points\", \"unitroot_kpss\", \"unitroot_pp\",\n#              \"pacf_features\", \"nonlinearity\", \"arch_stat\")\n#    idCol <- (data %>% is.na() %>% colSums())==0\n#    x <- (data[,idCol][,1] %>% tsfeatures(features = feat, parallel = par))[,-c(1,2)] %>% as.data.frame()\n#    xnames <- colnames(x)\n#    \n#    for (k in 1:dim(data)[2]) {\n#       if(k==1){\n#          if(idCol[k]){\n#             x <- (data[,k] %>% tsfeatures(features = feat, parallel = T))[,-c(1,2)] %>% as.data.frame()\n#             colnames(x) <- paste0(\"s_\", k, \"_\", colnames(x))\n#          }\n#          if(!idCol[k]){\n#             x <- data.frame(matrix(NA, nrow = 1, ncol = length(xnames)))\n#             colnames(x) <- paste0(\"s_\", k, \"_\", xnames)\n#          }\n#       }\n#       \n#       if(k>1){\n#          if(idCol[k]){\n#             y <- (data[,k] %>% tsfeatures(features = feat, parallel = T))[,-c(1,2)] %>% as.data.frame()\n#             colnames(y) <- paste0(\"s_\", k, \"_\", colnames(y))\n#          }\n#          if(!idCol[k]){\n#             y <- data.frame(matrix(NA, nrow = 1, ncol = length(xnames)))\n#             colnames(y) <- paste0(\"s_\", k, \"_\", xnames)\n#          }\n#          x <- cbind(x, y)\n#       }\n#    }\n#    return(x)\n# }\n# dFeatAll <- function(id, path = \"train/\", verbose = FALSE){\n#    if(verbose){pb <- txtProgressBar(min = 0, max = length(id), style = 3)}\n#    i = 1\n#    for (k in id) {\n#       data <- read.csv(paste0(path, k, \".csv\")) %>% as.matrix() %>% ts()\n#       if(k==id[1]){x <- dFeat(data)}\n#       if(k!=id[1]){x <- rbind(x, dFeat(data))}\n#       if(verbose){setTxtProgressBar(pb, i)}\n#       i = i+1\n#    }\n#    if(verbose){close(pb)}\n#    return(x)\n# }\n# \n# df <- dFeatAll(train$segment_id[1:1], path = \"train/\", verbose = F)\n# \n# r <- c(1:500)\n# \n# t1 <- Sys.time()\n# e1 <- future({ train$segment_id[(r+length(r)*(1-1))] %>% \n#       dFeatAll(path = \"train/\", verbose = F)}) %plan% multisession\n# e2 <- future({ train$segment_id[(r+length(r)*(2-1))] %>% \n#       dFeatAll(path = \"train/\", verbose = F)}) %plan% multisession\n# e3 <- future({ train$segment_id[(r+length(r)*(3-1))] %>% \n#       dFeatAll(path = \"train/\", verbose = F)}) %plan% multisession\n# e4 <- future({ train$segment_id[(r+length(r)*(4-1))] %>% \n#       dFeatAll(path = \"train/\", verbose = F)}) %plan% multisession\n# e5 <- future({ train$segment_id[(r+length(r)*(5-1))] %>% \n#       dFeatAll(path = \"train/\", verbose = F)}) %plan% multisession\n# e6 <- future({ train$segment_id[(r+length(r)*(6-1))] %>% \n#       dFeatAll(path = \"train/\", verbose = F)}) %plan% multisession\n# e7 <- future({ train$segment_id[(r+length(r)*(7-1))] %>% \n#       dFeatAll(path = \"train/\", verbose = F)}) %plan% multisession\n# e8 <- future({ train$segment_id[(r+length(r)*(8-1))] %>% \n#       dFeatAll(path = \"train/\", verbose = F)}) %plan% multisession\n# e9 <- future({ train$segment_id[c((r[1]+length(r)*(9-1)):ifelse((r[length(r)]+length(r)*(9-1))>4431, 4431, r[length(r)]+length(r)*(9-1)))] %>% \n#       dFeatAll(path = \"train/\", verbose = F)}) %plan% multisession\n# \n# df_1 <- value(e1)\n# df_2 <- value(e2)\n# df_3 <- value(e3)\n# df_4 <- value(e4)\n# df_5 <- value(e5)\n# df_6 <- value(e6)\n# df_7 <- value(e7)\n# df_8 <- value(e8)\n# df_9 <- value(e9)\n# \n# rm(e1,e2,e3,e4,e5,e6,e7,e8,e9)\n# print(Sys.time() - t1)\n# \n# df_all <- rbind(df_1, df_2, df_3, df_4, df_5, df_6, df_7, df_8, df_9) %>% data.frame()\n# colnames(df_all) <- colnames(df)\n# \n# rm(df_1, df_2, df_3, df_4, df_5, df_6, df_7, df_8, df_9, df)\n# \n# saveRDS(df_all, paste0(\"Sensor_stats_v1.rds\"))\n\n# The same procedure is repeated for the test set.","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Wavelet transform\n\nAdditionally, the wavelet transform of each time series was generated and characteristics were extracted from these.\n\nTo calculate the wavelet transform I use the **biwavelet** library."},{"metadata":{"trusted":true},"cell_type":"code","source":"# # Functions \n# tsGrafWT <- function(ks, data, info, f0 = 100, moth = \"paul\", plot = TRUE, d.j = 1/6, max.sc = NULL){\n#    if(moth == \"paul\"){adj <- 7.161972}\n#    if(moth == \"morlet\"){adj <- 9.68014}\n#    if(moth == \"dog\"){adj <- 1.25823}\n#    \n#    train_wt <- wt(cbind(c(1:dim(data)[1])/f0, data[,ks]), s0 = adj*0.2/f0,\n#                   dj = d.j, mother = moth, do.sig = F, max.scale = max.sc)\n#    \n#    pow <- t(train_wt$power.corr) %>% data.frame()\n#    colnames(pow) <- paste0(\"scale_\", c(1:length(train_wt$period)))\n#    \n#    pow <- cbind(pow, time = as.numeric(train_wt$t))\n#    if(plot) {return(pow %>% melt(id=\"time\") %>% \n#                       ggplot(aes(x = time, y = value, color = variable))+\n#                       geom_line()+\n#                       ggtitle(paste0(\"WT Sensor_\", ks , \" - segment_id: \",info$segment_id,\n#                                      \" - time_to_eruption: \", info$time_to_eruption))+\n#                       facet_wrap(variable ~ ., scale = \"free_y\", ncol = 2)\n#                    )}\n#    if(!plot) {return(pow)}\n# }\n# PCE <- function(x, vec = 1){\n#    m <- max(x)\n#    id <- which.max(x)\n#    \n#    id_i <- id - vec\n#    id_f <- id + vec\n#    \n#    if(id_i<1){id_i <- 1}\n#    if(id_f>length(x)){id_f <- length(x)}\n#    \n#    pce <- m/sum(x[id_i:id_f])\n#    return(pce)\n# }\n# wtFeatures <- function(y, f0 = 100, vec = 1, sc = 1){\n#    yNA <- y %>% is.na()\n#    \n#    if(sum(yNA)==0){\n#       s <- summary(y)\n#       sdY <- sd(y)\n#       idMaxPow <- which.max(y)/f0\n#       outlierCount <- (y > (s[[5]] + 3*(s[[5]] - s[[2]]))) %>% sum()\n#       pcePow <- PCE(x = y, vec = vec)\n#       meanCount <- (y > s[[4]]) %>% sum()\n#       meanOver <- ((y > s[[4]])*s[[4]]) %>% mean()\n#       skew <- moments::skewness(y)\n#       kurt <- moments::kurtosis(y)\n# \n#       df <- data.frame(min = s[[1]], q1 = s[[2]], median = s[[3]], mean = s[[4]], q3 = s[[5]],\n#                        max = s[[6]], idMax = idMaxPow, outCount = outlierCount, pce = pcePow[1], \n#                        sd = sdY, meanCount = meanCount, meanOver = meanOver, skew = skew, kurt = kurt)\n#    }\n#    if(sum(yNA)>0){\n#       df <- data.frame(min = NA, q1 = NA, median = NA, mean = NA, q3 = NA,\n#                        max = NA, idMax = NA, outCount = NA, pce = NA, \n#                        sd = NA, meanCount = NA, meanOver = NA, skew = NA, kurt = NA)\n#    }\n#    \n#    colnames(df) <- paste0(\"scale_\", sc, \"_\", colnames(df))\n#    \n#    return(df)\n# }\n# wtFeaturesAll <- function(data, info, fo = 100, moth = \"paul\", d_j = 1/6, maxScale = NULL){\n#    for (k in 1:10) {\n#       pow <- tsGrafWT(ks = k, moth = moth, data = data %>% ts(frequency  = fo), \n#                       info = info, f0 = fo, plot = FALSE, d.j = d_j, max.sc = maxScale)\n#       \n#       colPow <- colnames(pow)[-dim(pow)[2]] %>% \n#          sapply(function(y) gsub(pattern = \"scale_\", \"\", x = y)) %>% as.numeric()\n#       \n#       for (kk in 1:(dim(pow)[2]-1)) {\n#          if(kk==1){df <- wtFeatures(y = pow[,kk], f0 = fo, vec = ceiling(colPow[kk]), sc = ceiling(colPow[kk]))}\n#          if(kk>1){df <- cbind(df, wtFeatures(y = pow[,kk], f0 = fo, vec = ceiling(colPow[kk]), sc = ceiling(colPow[kk])))}\n#       }\n#       \n#       colnames(df) <- paste0(\"s_\",k,\"_\",colnames(df))\n#       \n#       if(k==1){df_all <- df}\n#       if(k>1){df_all <- cbind(df_all, df)}\n#    }\n#    return(df_all)\n# }\n# dfFeatWT <- function(r, path = \"train/\", segment, info,verbose = TRUE, djj = 1/12, mScale = 100, waveMoth = \"paul\"){\n#    if(verbose){pb <- txtProgressBar(min = 0, max = r[length(r)], style = 3)}\n#    for (id in r) {\n#       if(id==r[1]){df_all <- wtFeaturesAll(data = read.csv(paste0(path, segment[id], \".csv\")),\n#                                            info = info[id,], d_j = djj, maxScale = mScale, moth = waveMoth)}\n#       if(id!=r[1]){df_all <- rbind(df_all, wtFeaturesAll(data = read.csv(paste0(\"train/\", segment[id], \".csv\")),\n#                                                          info = info[id,], d_j = djj, maxScale = mScale, moth = waveMoth))}\n#       if(verbose){setTxtProgressBar(pb, id)}\n#    }\n#    if(verbose){close(pb)}\n#    return(df_all)\n# }\n# \n# r <- c(1:500)\n# \n# t1 <- Sys.time()\n# e1 <- future({ (r+length(r)*(1-1)) %>% \n#       sapply(function(z){dfFeatWT(r = z, path = \"train/\",segment = train$segment_id, verbose = F) %>% t()}) %>% t()}) %plan% multisession\n# e2 <- future({ (r+length(r)*(2-1)) %>% \n#       sapply(function(z){dfFeatWT(r = z, path = \"train/\",segment = train$segment_id, verbose = F) %>% t()}) %>% t()}) %plan% multisession\n# e3 <- future({ (r+length(r)*(3-1)) %>% \n#       sapply(function(z){dfFeatWT(r = z, path = \"train/\",segment = train$segment_id, verbose = F) %>% t()}) %>% t()}) %plan% multisession\n# e4 <- future({ (r+length(r)*(4-1)) %>% \n#       sapply(function(z){dfFeatWT(r = z, path = \"train/\",segment = train$segment_id, verbose = F) %>% t()}) %>% t()}) %plan% multisession\n# e5 <- future({ (r+length(r)*(5-1)) %>% \n#       sapply(function(z){dfFeatWT(r = z, path = \"train/\",segment = train$segment_id, verbose = F) %>% t()}) %>% t()}) %plan% multisession\n# e6 <- future({ (r+length(r)*(6-1)) %>% \n#       sapply(function(z){dfFeatWT(r = z, path = \"train/\",segment = train$segment_id, verbose = F) %>% t()}) %>% t()}) %plan% multisession\n# e7 <- future({ (r+length(r)*(7-1)) %>% \n#       sapply(function(z){dfFeatWT(r = z, path = \"train/\",segment = train$segment_id, verbose = F) %>% t()}) %>% t()}) %plan% multisession\n# e8 <- future({ (r+length(r)*(8-1)) %>% \n#       sapply(function(z){dfFeatWT(r = z, path = \"train/\",segment = train$segment_id, verbose = F) %>% t()}) %>% t()}) %plan% multisession\n# e9 <- future({ c((r[1]+length(r)*(9-1)):ifelse((r[length(r)]+length(r)*(9-1))>4431, 4431, r[length(r)]+length(r)*(9-1))) %>% \n#       sapply(function(z){dfFeatWT(r = z, path = \"train/\",segment = train$segment_id, verbose = F) %>% t()}) %>% t()}) %plan% multisession\n# \n# df_1 <- value(e1)\n# df_2 <- value(e2)\n# df_3 <- value(e3)\n# df_4 <- value(e4)\n# df_5 <- value(e5)\n# df_6 <- value(e6)\n# df_7 <- value(e7)\n# df_8 <- value(e8)\n# df_9 <- value(e9)\n# \n# rm(e1,e2,e3,e4,e5,e6,e7,e8,e9)\n# print(Sys.time() - t1)\n# \n# df_all <- rbind(df_1, df_2, df_3, df_4, df_5, df_6, df_7, df_8, df_9) %>% data.frame()\n# colnames(df_all) <- colnames(df)\n# \n# rm(df_1, df_2, df_3, df_4, df_5, df_6, df_7, df_8, df_9, df)\n# \n# saveRDS(df_all, paste0(\"Sensor_stats_WT_v4.rds\"))\n\n# The same procedure is repeated for the test set.","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Preprocessing\n\nOnce the characteristics extraction has been carried out, I proceed to impute the NAs, normalize, impute the outliers and select a variable, following the following order.\n\n- Imputation of NA the **mean** is used.\n- Imputation of outliers with the maximum / minimum value of the interval generated by the Tukey test.\n- Rescale from 0 to 1.\n- Data adjustment using **tanh** function.\n- Selection of characteristics using genetic algorithms.\n- Selection of characteristics by correlation with the target."},{"metadata":{"trusted":true},"cell_type":"code","source":"##################\n# hiperparameters\n##################\n\n# Impute NA:\nstats <- T\nstatsWT <- T\nfile_stats_train <- \"Sensor_stats_v1.rds\"\nfile_statsWT_train <- \"Sensor_stats_WT_v4.rds\"\nfile_stats_test <- \"Sensor_stats_test_v1.rds\"\nfile_statsWT_test <- \"Sensor_stats_WT_test_v4.rds\"\nmeth_Imput <- \"mean\"\n# Preprocess:\nNormPreproc <- T\nImpOut <- T\nrangeImp <- c(1.0, 3.0)\nfunOut <- tanh\n# Features selection:\nselectFile <- T & stats & statsWT\nfile_select_features <- \"selectFeature_AG_v1.rds\"\nthCorr <- 0.25","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# load library\nlibrary(tidyverse)\nlibrary(ggcorrplot)\nlibrary(ggplot2)\nlibrary(gridExtra)\nlibrary(ggExtra)\nlibrary(EBImage)\nlibrary(reshape2)\nlibrary(biwavelet)\nlibrary(future)\nlibrary(caret)\nlibrary(fftwtools)\nlibrary(GGally)\ninstall.packages(\"tsfeatures\")\nlibrary(tsfeatures)\nlibrary(scales)\nlibrary(Rtsne)\ninstall.packages(\"lle\")\nlibrary(lle)\nlibrary(DMwR)\nlibrary(h2o)\noptions(repr.plot.width=15, repr.plot.height = 10)\n# load data\ntrain <- read.csv(paste0(\"../input/\", list.files(\"../input/\")[2], \"/train.csv\"))\n# impute NA\nif(stats&!statsWT){\n    data.train <- cbind(readRDS(paste0(\"../input/ingv-features/\", file_stats_train)))\n    data.test <- cbind(readRDS(paste0(\"../input/ingv-features/\", file_stats_test)))\n}\n\nif(!stats&statsWT){\n    data.train <- cbind(readRDS(paste0(\"../input/ingv-features/\", file_statsWT_train)))\n    data.test <- cbind(readRDS(paste0(\"../input/ingv-features/\", file_statsWT_test)))\n}\n\nif(stats&statsWT){\ndata.train <- cbind(readRDS(paste0(\"../input/ingv-features/\", file_stats_train)),\n                    readRDS(paste0(\"../input/ingv-features/\", file_statsWT_train)))\ndata.test <- cbind(readRDS(paste0(\"../input/ingv-features/\", file_stats_test)),\n                   readRDS(paste0(\"../input/ingv-features/\", file_statsWT_test)))\n}\n\nimputNAmedian <- function(x, meth = \"median\"){\n   y <- x[!is.na(x)]\n   if(length(y)>0){\n      if(meth == \"median\"){x[is.na(x)] <- median(y)}\n      if(meth == \"mean\"){x[is.na(x)] <- mean(y)}\n   }\n   return(x)\n}\n\ndata <- rbind(data.train, data.test) %>% sapply(imputNAmedian, meth = meth_Imput) %>% as.data.frame()\ndata.train <- data[c(1:dim(train)[1]),]\ndata.test <- data[c(1:dim(data.test)[1]) + dim(train)[1],]\n\n# prrprocess\n\nimputOL <- function(x, r0 = 1.5, r1 = 3, q = NULL){\n   s <- x %>% summary()\n   if(!is.null(q)){s <- q}\n   IQR <- s[5] - s[2]\n   q10 <- s[2] - IQR*r0\n   q20 <- s[5] + IQR*r0\n   q11 <- s[2] - IQR*r1\n   q21 <- s[5] + IQR*r1\n   \n   Qsup <- which(x>q20)\n   Qinf <- which(x<q10)\n   \n   x[Qsup] <- q20 + (x[Qsup] - q20)*q21/(s[6] - q20)\n   x[Qinf] <- q10 + (x[Qinf] - s[1])*q11/(q10 - s[1])\n   \n   return(x)\n}\n\npreProcData <- function(dtrain, dtest, norm = T, outliers = T, fun = log1p, r_out = c(1.5, 3)){\n   q <- dtrain %>% sapply(summary) %>% t() \n   colTrain <- colnames(dtrain)\n   colTest <- colnames(dtest)\n   if(outliers){\n      dtrain <- c(1:dim(dtrain)[2]) %>% \n         sapply(function(y) imputOL(x = dtrain[,y], q = q[y,], r0 = 1.5, r1 = 3))\n      dtrain <- dtrain %>% data.frame()\n      \n      dtest <- c(1:dim(dtest)[2]) %>% \n         sapply(function(y) imputOL(x = dtest[,y], q = q[y,], r0 = 1.5, r1 = 3))\n      dtest <- dtest %>% data.frame()\n      \n      dtrain[sapply(dtrain, is.nan)] <- 0 \n      dtest[sapply(dtest, is.nan)] <- 0 \n      \n      colnames(dtrain) <- colTrain\n      colnames(dtest) <- colTest\n      \n      q <- dtrain %>% sapply(summary) %>% t()\n   }\n   if(norm){\n      dtrain <- c(1:dim(dtrain)[2]) %>% \n         sapply(function(y) rescale(x = dtrain[,y], from = q[y, c(1,6)])) %>% \n         data.frame()\n      \n      dtest <- c(1:dim(dtest)[2]) %>% \n         sapply(function(y) rescale(x = dtest[,y], from = q[y, c(1,6)])) %>% \n         data.frame()\n      \n      colnames(dtrain) <- colTrain\n      colnames(dtest) <- colTest\n      \n      q <- dtrain %>% sapply(summary) %>% t()\n   }\n   if(!is.null(fun)){dtrain <- dtrain %>% fun()}\n   if(!is.null(fun)){dtest <- dtest %>% fun()}\n   return(list(dtrain = dtrain, dtest = dtest))\n}\n\ndataList <- preProcData(dtrain = data.train, dtest = data.test, norm = NormPreproc, outliers = ImpOut,\n                        fun = funOut , r_out = rangeImp)\n\ndata.train <- dataList$dtrain\ndata.test <- dataList$dtest\nrm(dataList)\n# incorporate target a df\ndata.train <- cbind(time_to_eruption = train$time_to_eruption,\n                    data.train)\n# feature selection (genetic algorithm)\nif(selectFile){\n    modelAG <- readRDS(paste0(\"../input/ingv-features/\", file_select_features))\n    colAG <- (modelAG$population[order(modelAG$evaluations)[1],])\n\n    data.train <- data.train[,c(1, which(colAG==1)+1)]\n    data.test <- data.test[,which(colAG==1)]\n}\n# feature delection - correlation\nsuppressWarnings(\n    corSensor <- data.train %>% na.omit() %>% sapply(cor, y = (data.train %>% na.omit())[,1])\n    )","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Model\n\nFor the model, automl of h2o is used with the following hyperparameters:\n\n- n° fold: 5\n- time: 3600*7\n- ratio train/test: 0.8"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Model (automl):\nn_fold <- 5\nratioTrain <- 0.8\ntimeCalc <- 3600*7\nmetricML <- \"MAE\"\nRAM <- \"12g\"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"data.train = data.train[,which(abs(corSensor)>=thCorr)]\ndata.test = data.test[,which(abs(corSensor[-1])>=thCorr)]\n\ntiempo = timeCalc\n\n# Init cluster\nh2o.init(nthreads = -1, \n         max_mem_size = RAM)\n\ndata.test <- as.h2o(data.test)\nparticiones <- h2o.splitFrame(data = as.h2o(data.train),\n                              ratios = c(ratioTrain),\n                              seed = 123)\ndatos_train_h2o   <- h2o.assign(data = particiones[[1]], key = \"datos_train_H2O\")\ndatos_test_h2o    <- h2o.assign(data = particiones[[2]], key = \"datos_test_H2O\")\ny1  <-  \"time_to_eruption\" \nx1  <-  setdiff(names(datos_train_h2o), y1)\n\nrm(data.train)\n\naml1 <- h2o.automl(x = x1,\n                   y = y1,\n                   training_frame = datos_train_h2o,\n                   validation_frame = datos_test_h2o,\n                   leaderboard_frame = NULL,\n                   nfolds = n_fold,\n                   fold_column = NULL,\n                   weights_column = NULL, \n                   balance_classes = FALSE,\n                   class_sampling_factors = NULL,\n                   max_after_balance_size = 5,\n                   max_runtime_secs = tiempo, \n                   max_models = NULL,\n                   stopping_metric = \"MAE\",\n                   stopping_tolerance = NULL,\n                   stopping_rounds = 5, \n                   seed = 123, \n                   project_name = NULL,\n                   exclude_algos = NULL, \n                   keep_cross_validation_predictions = FALSE,\n                   keep_cross_validation_models = FALSE,\n                   keep_cross_validation_fold_assignment = FALSE,\n                   sort_metric = \"MAE\",\n                   export_checkpoints_dir = NULL)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"lb1 <-  as.data.frame(aml1@leaderboard[c(1:10),c(1,6)])\n\n# Get model ids for all models in the AutoML Leaderboard\nmodel_ids1 <- as.data.frame(aml1@leaderboard$model_id)[,1]\n# Get the \"All Models\" Stacked Ensemble model\nse1 <- h2o.getModel(grep(\"StackedEnsemble_AllModels\", model_ids1, value = TRUE)[1])\n# Get the Stacked Ensemble metalearner model\nmetalearner1 <- h2o.getModel(se1@model$metalearner$name)\n\n# Importancia de los modelos\nmodelImportV <- h2o.varimp(metalearner1)[,c(1,3)]\nnames(modelImportV) <- c(\"Models\", \"Importance\")\n\nggplot(data = modelImportV %>% arrange(-Importance) %>% head(30),\n       aes(x = reorder(Models, Importance),\n           y = Importance, fill = Importance)) +\n      geom_bar(stat = \"identity\", alpha = 0.9) +\n      geom_text(aes(label = round(Importance,3)), size = 2.5) +\n      ggtitle(\"Level of importance by model\") +\n      ylab(\"Relative importance\") + xlab(\"Models\") +\n      scale_fill_gradient(low=\"blue\", high=\"red\") + \n      coord_flip()+\n      theme_bw()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"data.frame(MAE = c(h2o.mae(metalearner1, train = TRUE),\n                     h2o.mae(metalearner1, valid = TRUE),\n                     h2o.mae(metalearner1, xval = TRUE)),\n           row.names = c(\"Train\", \"Test\", \"K-fold\"),\n           stringsAsFactors = FALSE)\n\npred <- as.data.frame(h2o.predict(aml1, datos_test_h2o))\ntest <- cbind(as.data.frame(datos_test_h2o[,1]), pred = pred)\ntest$Error = abs(test$time_to_eruption - test$predict)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"ggplot(data = test, aes(x = time_to_eruption, y = predict, color = Error)) +\n      geom_point(alpha = 0.6) + \n      ggtitle(\"Comparison between time_to_eruption and prediction (test set)\") +\n      geom_smooth(method = \"glm\", color = \"red\", size = 0.5) + \n      scale_color_gradient(low=\"blue\", high=\"red\")+\n      theme_bw()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"ggplot(data = test, aes(x = time_to_eruption, y = Error, color = Error)) +\n            geom_point(alpha = 0.6) + \n            ggtitle(\"Error (test set)\") +\n            scale_color_gradient(low=\"blue\", high=\"red\")+\n      theme_bw()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"predTest <- as.data.frame(h2o.predict(aml1, data.test))\n\nsub <- read.csv(paste0(\"../input/\", list.files(\"../input/\")[2], \"/sample_submission.csv\"))\nsub$time_to_eruption <- predTest[,1]\n\nwrite.csv(sub, \"submission.csv\", row.names = F)","execution_count":null,"outputs":[]}],"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":"3.6.3"}},"nbformat":4,"nbformat_minor":4}