

library(xgboost)
library(data.table)
library(lubridate)
library(dplyr)
library(readr)

set.seed(606)

train <- fread("../input/train.csv")

head(train)

train$month <- month(train$Original_Quote_Date)
train$day <- day(train$Original_Quote_Date)
train$year <- year(train$Original_Quote_Date)

train[is.na(train)]   <- -1
feat <- setdiff(names(train), c("Original_Quote_Date", "QuoteConversion_Flag", "QuoteNumber"))


cat("assuming text variables are categorical & replacing them with numeric ids\n")
for (f in feat) {
  if (class(train[[f]])=="character") {
    levels <- unique(c(train[[f]]))
    train[[f]] <- as.integer(factor(train[[f]], levels=levels))
#    test[[f]]  <- as.integer(factor(test[[f]],  levels=levels))
  }
}


# xgboost
param <- list("objective"= "binary:logistic", "eval_metric"= "auc",
              eta= 0.01, max_depth= 10, subsample= 0.8, colsample_bytree= 0.8)
xgb1 <- xgboost(params= param, data= as.matrix(train[, feat, with= FALSE]), 
                train$QuoteConversion_Flag, nrounds= 800, verbose= 0)

# importance
xgb1_imp <- xgb.importance(feat, model= xgb1)
xgb1_imp


#Removing train
rm(train)

#Inputing test
test <- fread("../input/test.csv")

head(test)

test$month <- month(test$Original_Quote_Date)
test$day <- day(test$Original_Quote_Date)
test$year <- year(test$Original_Quote_Date)

test[is.na(test)]   <- -1


cat("assuming text variables are categorical & replacing them with numeric ids\n")
for (f in feat) {
  if (class(test[[f]])=="character") {
    levels <- unique(c(test[[f]]))
    test[[f]] <- as.integer(factor(test[[f]], levels=levels))
    #    test[[f]]  <- as.integer(factor(test[[f]],  levels=levels))
  }
}


# predict on test
xgb1_val <- predict(xgb1, as.matrix(test[, feat, with= FALSE]))


summary(xgb1_val)

submission <- data.frame(Id=test$QuoteNumber, QuoteConversion_Flag=xgb1_val)
cat("saving the submission file\n")

library(dplyr)
library(readr)
write_csv(submission, "sb.csv")


