{"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":"4.4.0"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":96164,"databundleVersionId":11418275,"sourceType":"competition"}],"dockerImageVersionId":30749,"isInternetEnabled":true,"language":"r","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# Install required packages\n#install.packages(\"tidymodels\")\n#install.packages(\"arrow\")\n#install.packages(\"xgboost\")\n\n# Load libraries\nlibrary(tidymodels)\nlibrary(arrow)\nlibrary(dplyr)\nlibrary(readr)\nlibrary(xgboost)\n\n# --- 1. Load Data ---\ntrain_df <- read_parquet(\"/kaggle/input/drw-crypto-market-prediction/train.parquet\")\ntest_df <- read_parquet(\"/kaggle/input/drw-crypto-market-prediction/test.parquet\")\nsample_submission <- read_csv(\"/kaggle/input/drw-crypto-market-prediction/sample_submission.csv\")\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-28T15:51:22.739697Z","iopub.execute_input":"2025-05-28T15:51:22.742349Z","iopub.status.idle":"2025-05-28T15:52:03.134057Z","shell.execute_reply":"2025-05-28T15:52:03.132811Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\n# --- 2. Downcast numerics to save memory ---\ntrain_df <- train_df %>%\n  mutate(across(where(is.double), ~ as.numeric(.)))\ntest_df <- test_df %>%\n  mutate(across(where(is.double), ~ as.numeric(.)))\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-28T15:52:03.136112Z","iopub.execute_input":"2025-05-28T15:52:03.158109Z","iopub.status.idle":"2025-05-28T15:52:03.385099Z","shell.execute_reply":"2025-05-28T15:52:03.383562Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_df %>% head","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-28T15:52:03.387083Z","iopub.execute_input":"2025-05-28T15:52:03.388078Z","iopub.status.idle":"2025-05-28T15:52:03.802881Z","shell.execute_reply":"2025-05-28T15:52:03.801494Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Drop timestamp (non-predictive for shuffled test)\ntrain_df <- train_df %>% select(-timestamp)\ntest_df <- test_df %>% select(-ID)\n\n# Re-split the cleaned training data\nset.seed(123)\ntrain_split <- initial_split(train_df, prop = 0.8)\ntrain_data <- training(train_split)\nval_data <- testing(train_split)\n\n\n\n# Model, workflow, train, predict — as before\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-28T15:52:03.804982Z","iopub.execute_input":"2025-05-28T15:52:03.806036Z","iopub.status.idle":"2025-05-28T15:52:03.864024Z","shell.execute_reply":"2025-05-28T15:52:03.852763Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# --- 6. Preprocessing recipe ---\ncrypto_rec <- recipe(label ~ ., data = train_data) %>%\n  step_nzv(all_predictors()) %>%\n  step_medianimpute(all_predictors())\n","metadata":{"trusted":true,"execution":{"execution_failed":"2025-05-29T05:40:47.188Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# --- 7. XGBoost model spec ---\nxgb_spec <- boost_tree(\n  trees = 500,\n  learn_rate = 0.02,\n  tree_depth = 6\n) %>%\n  set_engine(\"xgboost\") %>%\n  set_mode(\"regression\")\n\n","metadata":{"trusted":true,"execution":{"execution_failed":"2025-05-29T05:40:47.189Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# --- 8. Workflow ---\ncrypto_wf <- workflow() %>%\n  add_recipe(crypto_rec) %>%\n  add_model(xgb_spec)\n\n\n\n","metadata":{"trusted":true,"execution":{"execution_failed":"2025-05-29T05:40:47.189Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# --- 9. Train the model ---\ncrypto_fit <- fit(crypto_wf, data = train_data)\n\n# --- 10. Evaluate on validation set ---\nval_preds <- predict(crypto_fit, val_data) %>%\n  bind_cols(val_data)\n\ncat(\"Validation Pearson correlation: \",\n    cor(val_preds$.pred, val_preds$label), \"\\n\")","metadata":{"trusted":true,"execution":{"execution_failed":"2025-05-29T05:40:47.189Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# --- 11. Prepare test data ---\n# Add lag features to test set\nfor (var in lag_vars) {\n  test_df <- test_df %>%\n    mutate(\n      !!paste0(var, \"_lag1\") := lag(.data[[var]], 1),\n      !!paste0(var, \"_lag2\") := lag(.data[[var]], 2)\n    )\n}\ntest_df <- test_df %>% slice(3:n())  # Drop early rows with NA lags\n\n# --- 12. Predict test and save submission ---\ntest_preds <- predict(crypto_fit, new_data = test_df)\nsubmission <- sample_submission\nsubmission$label <- test_preds$.pred\nwrite_csv(submission, \"submission.csv\")","metadata":{"trusted":true,"execution":{"execution_failed":"2025-05-29T05:40:47.189Z"}},"outputs":[],"execution_count":null}]}