{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.11","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":96164,"databundleVersionId":11418275,"sourceType":"competition"}],"dockerImageVersionId":31041,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"### 1. **Imports & Environment Setup**\n","metadata":{}},{"cell_type":"code","source":"# Suppress warnings\nimport warnings\nwarnings.filterwarnings(\"ignore\")\n\n# Memory management\nimport gc\n\n# Data manipulation\nimport pandas as pd\nimport numpy as np\n\n# Modeling\nimport xgboost as xgb\n\n# Visualization\nimport matplotlib.pyplot as plt\n\n# Evaluation metrics\nfrom sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score\nfrom scipy.stats import pearsonr\n\n# Display utility\nfrom IPython.display import display","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-25T07:36:33.791747Z","iopub.execute_input":"2025-05-25T07:36:33.792004Z","iopub.status.idle":"2025-05-25T07:36:35.334486Z","shell.execute_reply.started":"2025-05-25T07:36:33.791986Z","shell.execute_reply":"2025-05-25T07:36:35.333690Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### 2. **Data Loading and Preprocessing**\n","metadata":{}},{"cell_type":"code","source":"# Load training data\ntrain_df = pd.read_parquet('/kaggle/input/drw-crypto-market-prediction/train.parquet', engine='pyarrow')\ntrain_df.replace([np.inf, -np.inf], 0, inplace=True)\n\n# Subset data for efficiency\n_train_df = train_df.iloc[:200_000]\n_test_df = train_df.iloc[500_000:550_000]\n\nx_train = _train_df.drop(columns=['label'])\ny_train = _train_df['label']\n\nx_test = _test_df.drop(columns=['label'])\ny_test = _test_df['label']\n\ndel _train_df, _test_df, train_df\ngc.collect()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-25T07:36:35.335831Z","iopub.execute_input":"2025-05-25T07:36:35.336237Z","iopub.status.idle":"2025-05-25T07:37:00.416638Z","shell.execute_reply.started":"2025-05-25T07:36:35.336211Z","shell.execute_reply":"2025-05-25T07:37:00.415920Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### 3. **Model Definition and Training**\n","metadata":{}},{"cell_type":"code","source":"# Define XGBoost model\nXGBR = xgb.XGBRegressor(\n    objective='reg:squarederror',\n    n_estimators=200,\n    learning_rate=0.1,\n    max_depth=5,\n    subsample=0.8,\n    colsample_bytree=0.7,\n    tree_method='hist',\n    max_bin=64,\n    n_jobs=-1,\n    random_state=42,\n    verbosity=0\n)\n\n# Train with early stopping\neval_set = [(x_test, y_test)]\nXGBR.fit(\n    x_train, y_train,\n    eval_metric='rmse',\n    eval_set=eval_set,\n    early_stopping_rounds=10,\n    verbose=False\n)\n\n# SHAP Interpretability \nimport shap\nexplainer = shap.Explainer(XGBR)\nshap_values = explainer(x_test[:100])\nshap.plots.beeswarm(shap_values)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-25T07:37:00.417271Z","iopub.execute_input":"2025-05-25T07:37:00.417467Z","iopub.status.idle":"2025-05-25T07:37:24.883868Z","shell.execute_reply.started":"2025-05-25T07:37:00.417451Z","shell.execute_reply":"2025-05-25T07:37:24.883065Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### 4. **Model Evaluation**\n","metadata":{}},{"cell_type":"code","source":"# Prediction and metric computation\ny_pred = XGBR.predict(x_test)\n\nmae = mean_absolute_error(y_test, y_pred)\nmse = mean_squared_error(y_test, y_pred)\nrmse = np.sqrt(mse)\nr2 = r2_score(y_test, y_pred)\ncorr_coef, p_value = pearsonr(y_test, y_pred)\n\nresults = pd.DataFrame({\n    'Model': ['XGB-Fast'],\n    'MAE': [mae],\n    'MSE': [mse],\n    'RMSE': [rmse],\n    'R2': [r2],\n    'Pearson Corr': [corr_coef],\n    'P-value': [p_value],\n})\n\ndisplay(results)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-25T07:37:24.884556Z","iopub.execute_input":"2025-05-25T07:37:24.884971Z","iopub.status.idle":"2025-05-25T07:37:25.132918Z","shell.execute_reply.started":"2025-05-25T07:37:24.884941Z","shell.execute_reply":"2025-05-25T07:37:25.132274Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### 5. **Visualization of Predictions**\n","metadata":{}},{"cell_type":"code","source":"# Random sample visualization\nidx = np.random.RandomState(42).choice(len(y_test), size=100, replace=False)\n\nplt.figure(figsize=(12, 6))\nplt.plot(np.array(y_test)[idx], label='Actual', marker='o')\nplt.plot(y_pred[idx], label='Predicted', marker='x')\nplt.title(\"Actual vs Predicted (100 Random Samples)\")\nplt.xlabel(\"Sample Index\")\nplt.ylabel(\"Target\")\nplt.legend()\nplt.tight_layout()\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-25T07:37:25.134349Z","iopub.execute_input":"2025-05-25T07:37:25.134650Z","iopub.status.idle":"2025-05-25T07:37:25.359207Z","shell.execute_reply.started":"2025-05-25T07:37:25.134633Z","shell.execute_reply":"2025-05-25T07:37:25.358515Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### 6. **Final Test Prediction & Submission**\n","metadata":{}},{"cell_type":"code","source":"# Load and clean test data\ntest_df = pd.read_parquet('/kaggle/input/drw-crypto-market-prediction/test.parquet', engine='pyarrow')\ntest_df.drop(columns=['label'], inplace=True)\ntest_df.replace([np.inf, -np.inf], 0, inplace=True)\n\n# Predict and prepare submission\npreds = XGBR.predict(test_df)\n\nsample_submission = pd.read_csv('/kaggle/input/drw-crypto-market-prediction/sample_submission.csv')\nsample_submission['prediction'] = preds\nsample_submission.to_csv('sample_submission.csv', index=False)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-25T07:37:25.360052Z","iopub.execute_input":"2025-05-25T07:37:25.360561Z","iopub.status.idle":"2025-05-25T07:37:57.883475Z","shell.execute_reply.started":"2025-05-25T07:37:25.360532Z","shell.execute_reply":"2025-05-25T07:37:57.882934Z"}},"outputs":[],"execution_count":null}]}