{"cells":[{"metadata":{"_uuid":"051d70d956493feee0c6d64651c6a088724dca2a","_execution_state":"idle","trusted":true},"cell_type":"code","source":"#Reused from https://www.kaggle.com/kailex/ac-dc\n\nlibrary(data.table)\nlibrary(fasttime)\nlibrary(lightgbm)\n\nset.seed(0)\n\n#---------------------------\ncat(\"Defining functions...\\n\")\nprep <- function(dt_fn, meta_fn, weather_fn, drops, sort_timestamp = FALSE, n_max = Inf){\n  \n  cat(\"Loading data...\\n\") \n  dt <- fread(dt_fn, nrows = n_max, verbose = FALSE)\n  weather <- fread(weather_fn, nrows = n_max, verbose = FALSE)\n  meta <- fread(meta_fn, nrows = n_max, verbose = FALSE)\n  \n  cat(\"Merging datasets...\\n\")\n  dt[meta, on = \"building_id\", names(meta) := mget(names(meta))]\n  dt[weather, on = c(\"site_id\", \"timestamp\"), names(weather) := mget(names(weather))]\n  \n  rm(meta, weather)\n  invisible(gc())  \n  \n  cat(\"Processing features...\\n\")\n  dt[, (drops) := NULL\n     ][, timestamp := fastPOSIXct(timestamp)\n       ][, `:=`(wday = wday(timestamp),\n                hour = hour(timestamp), \n                year_built = year_built - 1900,\n                square_feet = log1p(square_feet))]\n  \n  cat(\"Converting categorical columns...\\n\")\n  dt[, names(dt) := lapply(.SD, function(x) {if (is.character(x)) x <- as.integer(as.factor(x)); x})]\n  \n  if (sort_timestamp) setorder(dt, timestamp)\n  dt[, timestamp := NULL]\n}\n\n#---------------------------\ncat(\"Preparing train data...\\n\")\ncats <- c(\"building_id\", \"site_id\", \"meter\", \"primary_use\", \"hour\", \"wday\")\ndrops <- c(\"sea_level_pressure\", \"wind_direction\", \"wind_speed\")\ntr <- prep(\"../input/ashrae-energy-prediction/train.csv\",\n           \"../input/ashrae-energy-prediction/building_metadata.csv\",\n           \"../input/ashrae-energy-prediction/weather_train.csv\",\n           drops, TRUE)\ny <- log1p(tr$meter_reading)\ntr[, meter_reading := NULL]\ntr <- data.matrix(tr)\n\n#---------------------------\ncat(\"Training model...\\n\")\n\np <- list(boosting = \"gbdt\",\n          objective = \"regression_l2\",\n          metric = \"rmse\",\n          nthread = 4,\n          learning_rate = 0.05,\n          num_leaves = 40,\n          colsample_bytree = 0.85,\n          lambda = 2)\n\nN <- nrow(tr)\ntsf <- caret::createTimeSlices(y, N/2, N/2)\nmodels <- list()\nimp <- data.table()\n\nfor (i in seq_along(tsf)){\n  cat(\"\\nFold:\", i, \"\\n\")\n  idx <- tsf[[i]][[1]]\n  \n  xtrain <- lgb.Dataset(tr[-idx, ], label = y[-idx], categorical_feature = cats)\n  xval <- lgb.Dataset(tr[idx, ], label = y[idx], categorical_feature = cats)\n  models[[i]] <- lgb.train(p, xtrain, 4000, list(val = xval), eval_freq = 200, early_stopping_rounds = 200)\n  \n  imp <- rbind(imp, lgb.importance(models[[i]]))\n  \n  rm(xtrain, xval)\n  invisible(gc())\n}\n\nlgb.plot.importance(imp[, lapply(.SD, mean), by=Feature], ncol(tr), cex=1)\n\nrm(tr, y, imp, p, tsf, N, i, idx)\ninvisible(gc())\n\n#---------------------------\ncat(\"Preparing test data...\\n\")\nte <- prep(\"../input/ashrae-energy-prediction/test.csv\",\n           \"../input/ashrae-energy-prediction/building_metadata.csv\",\n           \"../input/ashrae-energy-prediction/weather_test.csv\",\n           drops)\ninvisible(gc())\nte <- as.matrix(te[, row_id := NULL])\ninvisible(gc())\n\n#---------------------------\ncat(\"Making predictions...\\n\")\npred_te <- sapply(models, function(m_lgb) expm1(predict(m_lgb, te)))\ninvisible(gc())\n\nsub <- fread(\"../input/ashrae-energy-prediction/sample_submission.csv\")\nsub[, meter_reading := round(rowMeans(pred_te), 2)\n    ][meter_reading < 0, meter_reading := 0]\n\nfwrite(sub, \"submission.csv\")\n","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"R","language":"R","name":"ir"},"language_info":{"mimetype":"text/x-r-source","name":"R","pygments_lexer":"r","version":"3.4.2","file_extension":".r","codemirror_mode":"r"}},"nbformat":4,"nbformat_minor":1}