{"cells":[{"metadata":{},"cell_type":"markdown","source":"# ***Simple R Notebook***"},{"metadata":{},"cell_type":"markdown","source":"***Loading Libraries and Data***"},{"metadata":{"_uuid":"051d70d956493feee0c6d64651c6a088724dca2a","_execution_state":"idle","trusted":true},"cell_type":"code","source":"# Loading Libraries\n\nload_quietly <- function(package) { # Quietly load package\n  suppressWarnings(suppressMessages(library(deparse(substitute(package)), character.only=TRUE))) \n}\n\nload_quietly(data.table)\nload_quietly(Matrix)\nload_quietly(lightgbm)\nload_quietly(pROC)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Loading Data\n\nread_rows <- 1000  # Inf \ntrain <- data.table::fread(\"../input/riiid-test-answer-prediction/train.csv\",nrows = read_rows)\n\ntrain <- na.omit(train)\n\ntrain$prior_question_had_explanation <- as.integer(train$prior_question_had_explanation)\n\n# head(train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Filtering by content_type_id - only answers\ntrain <- train[content_type_id == 0,]\n\n# Filtering by answered_correctly - only answers\ntrain <- train[answered_correctly != -1,]\n\n# Sorting by timestamp\ntrain <- train[order(train$timestamp),]\n\ntrain <- train[,!c(\"content_type_id\")]","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"***Feature Engineering***"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Answer Mean\n\ntrain.content_id <- train[,c('content_id','answered_correctly')]\nresults_c <- train.content_id[, by = .(content_id), mean(answered_correctly)]\nresults_c <- results_c[order(results_c$content_id),]\nrm(train.content_id)\nnames(results_c)[names(results_c)==\"V1\"] <- \"answered_correctly_content\"\n# head(results_c)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# User Mean and Sum\n\ntrain.user_id <- train[,c('user_id','answered_correctly')]\n# nrow(train.user_id)\nresults_u <- train.user_id[, by = .(user_id), list(mean(answered_correctly),sum(answered_correctly))]\nnames(results_u)[names(results_u)==\"V1\"] <- \"answered_correctly_user\"\nnames(results_u)[names(results_u)==\"V2\"] <- \"sum\"\nresults_u <- results_u[order(results_u$user_id),]\nrm(train.user_id)\n\n# head(results_u)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Merging Features\n\ntrain <- train[order(train$user_id),]\ntrain <- merge(train,results_u, by.x=\"user_id\", by.y=\"user_id\")\ntrain <- train[order(train$content_id),]\ntrain <- merge(train,results_c)\ntrain <- train[order(train$row_id),]\n\nrm(results_c,results_u)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"***Dividing data***"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Dividing data into train and label\n\ny <- train[,\"answered_correctly\"]\ntrain$answered_correctly <- NULL\ntrain <- train[,c('answered_correctly_user', 'answered_correctly_content', 'sum','prior_question_elapsed_time','prior_question_had_explanation')]\n\nhead(train, 3)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Dividing data into train and test\n\nset.seed(007) \n\nindex <- sample(2, nrow(train), replace = T, prob = c(0.7,0.31))\n\ntest <- train[index==2,]\ntest_label <- y[index==2,]\ntrain <- train[index==1,]\ny <- y[index==1,]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Dividing data into train and validation\n\nindex <- sample(2, nrow(train), replace = T, prob = c(0.99,0.01))\n\nxt <- train[index==1,]\nxv <- y[index==1,]\nyt <- train[index==2,]\nyv <- y[index==2,]\n\n# head(xt)\n# head(xv)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"***Training and plotting importance ***"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Training the model with lightgbm\n\nvarnames = setdiff(colnames(xt), c(\"id\", \"target\"))\n\n# varnames\n\nlgb_train = lgb.Dataset(data=Matrix(as.matrix(xt[, varnames, with=F]), sparse=TRUE), label=xv$answered_correctly)\n\nlgb_eval = lgb.Dataset(data=Matrix(as.matrix(yt[, varnames, with=F]), sparse=TRUE), label=yv$answered_correctly)\n\nbst <- lightgbm(\n    data =  lgb_train\n#     ,valids = list(\"train\" = lgb_train,\"validation\"=lgb_eval) \n    ,num_boost_round=10000\n    ,objective = \"binary\"\n#     ,early_stopping_rounds=12\n    ,verbose=-1\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Ploting importance\nimp <- lgb.importance(bst)\nlgb.plot.importance(imp,20,cex = 1.3) ","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"***Predicting and calculating AUC***"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Predicting Test labels\n\ntarget_probabilites=predict(bst,as.matrix(test))\n\ntarget_predictions = as.integer(ifelse(target_probabilites <= 0.5, 0, 1))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Calculating the AUC\nsuppressMessages(auc(test_label$answered_correctly,target_predictions))","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}