################
library(h2o) # R API is just a library
library(ggplot2) # Data visualization
library(readr) # CSV file I/O, e.g. the read_csv function
library(data.table)
library(Metrics)
## start a cluster; default is 2 cores for CRAN reasons; -1 = all
h2o.init(nthreads=-1,max_mem_size='7G')  

train_h2o <- h2o.uploadFile("../input/train.csv",destination_frame = "train.hex")

train_h2o <- train_h2o[ ,c("Semana", "Agencia_ID", "Canal_ID", "Ruta_SAK", "Cliente_ID", "Producto_ID", "Demanda_uni_equil")]

train_h2o$target <- log(train_h2o$Demanda_uni_equil+1)

train_h2o <- h2o.splitFrame(data = train_h2o , ratios = 0.7)

sample_h2o <- train_h2o[[1]]
model_h2o <- train_h2o[[2]]


model_h2o <- h2o.splitFrame(data = model_h2o , ratios = 0.8)

print("Started to Group")

groups <- h2o.group_by(data=sample_h2o,by="Producto_ID",mean("target"))

print("Grouped")

joined_train <- h2o.merge(x=model_h2o[[1]],y=groups,all.x = T)
joined_train$mean_target[is.na(joined_train$mean_target)] <- 0.6

joined_train

joined_test <- h2o.merge(x=model_h2o[[2]],y=groups,all.x = T)
joined_test$mean_target[is.na(joined_test$mean_target)] <- 0.6

joined_test

gbm_model <- h2o.gbm(y=8, x=c(1:6), training_frame = joined_train, validation_frame = joined_test , ntrees = 500, learn_rate = 0.05)

summary(gbm_model)

test<-h2o.uploadFile("../input/test.csv",destination_frame = "test.hex")

predict_data<-h2o.merge(x=test,y=groups,all.x = T)
predict_data$mean_target[is.na(predict_data$mean_target)] <- 0.6

p<-h2o.predict(gbm_model,predict_data)

p<-exp(p)-1

#summary(p)
#print("Performance: ")
#print("Acuracy: ")
#h2o.auc(h2o.performance(gbm_model))

submission <- h2o.cbind(test$id,p)
colnames(submission) <- c("id","Demanda_uni_equil")
h2o.exportFile(submission,path="submission.csv") 
