{"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":"none","dataSources":[{"sourceId":96164,"databundleVersionId":11418275,"sourceType":"competition"}],"dockerImageVersionId":31040,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport gc\nfrom sklearn.linear_model import LinearRegression\nimport numpy as np\nfrom sklearn.metrics import mean_absolute_error, mean_squared_error , r2_score\nfrom scipy.stats import pearsonr\nfrom IPython.display import display\nimport math\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport warnings\nfrom tqdm import tqdm\nimport xgboost as xgb\nfrom sklearn.ensemble import RandomForestRegressor\nfrom lightgbm import LGBMRegressor\n\nwarnings.filterwarnings('ignore')","metadata":{"_uuid":"0181befa-e1bb-4f33-a0b7-48babdbcc6d3","_cell_guid":"0e151168-ae3c-4199-922e-686ad749bc6f","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-05-23T13:03:53.318766Z","iopub.execute_input":"2025-05-23T13:03:53.319093Z","iopub.status.idle":"2025-05-23T13:04:00.089009Z","shell.execute_reply.started":"2025-05-23T13:03:53.319073Z","shell.execute_reply":"2025-05-23T13:04:00.087941Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Preprocessing","metadata":{"_uuid":"95fb4313-f842-4c8c-ba61-89fad43c2ea0","_cell_guid":"a180ee29-b5ea-4f54-9335-1103c820b942","trusted":true,"collapsed":false,"jupyter":{"outputs_hidden":false}}},{"cell_type":"code","source":"train_df = pd.read_parquet('/kaggle/input/drw-crypto-market-prediction/train.parquet', engine='pyarrow')\ntrain_df.head(3)","metadata":{"_uuid":"a1db5acc-7a92-4976-852c-cb05af508ecc","_cell_guid":"67ac58cb-9e93-4b93-86e1-58c14ab8d79e","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-05-23T12:52:56.688581Z","iopub.execute_input":"2025-05-23T12:52:56.689068Z","iopub.status.idle":"2025-05-23T12:53:23.200278Z","shell.execute_reply.started":"2025-05-23T12:52:56.689038Z","shell.execute_reply":"2025-05-23T12:53:23.199157Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_df.replace([np.inf, -np.inf], 0, inplace=True)","metadata":{"_uuid":"6bfde823-a7a7-4c4f-9a12-a1d2198c7567","_cell_guid":"3bfb5799-cf9b-4b12-b42b-1960be570733","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-05-23T12:53:23.201377Z","iopub.execute_input":"2025-05-23T12:53:23.201744Z","iopub.status.idle":"2025-05-23T12:53:27.027101Z","shell.execute_reply.started":"2025-05-23T12:53:23.201713Z","shell.execute_reply":"2025-05-23T12:53:27.026203Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_df.shape","metadata":{"_uuid":"64d721ab-1207-4c9a-bbfc-bd88ed59c298","_cell_guid":"9fd78a92-91ae-48e1-91d1-3661b8011696","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-05-23T12:53:27.028001Z","iopub.execute_input":"2025-05-23T12:53:27.028240Z","iopub.status.idle":"2025-05-23T12:53:27.034098Z","shell.execute_reply.started":"2025-05-23T12:53:27.028220Z","shell.execute_reply":"2025-05-23T12:53:27.033353Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"_train_df = train_df.iloc[:500000]\n_test_df = train_df.iloc[500000:]","metadata":{"_uuid":"ba864e23-4f20-48ce-a278-73467f8dc50d","_cell_guid":"a230e3f7-555b-4823-81d2-29d24744242e","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-05-23T12:53:27.036702Z","iopub.execute_input":"2025-05-23T12:53:27.036990Z","iopub.status.idle":"2025-05-23T12:53:27.056622Z","shell.execute_reply.started":"2025-05-23T12:53:27.036968Z","shell.execute_reply":"2025-05-23T12:53:27.055490Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"x_train = _train_df.drop(columns = ['label'])\ny_train = _train_df['label']\nx_test = _test_df.drop(columns = ['label'])\ny_test = _test_df['label']","metadata":{"_uuid":"3e292d78-6d52-43e2-994b-2c44a37aa663","_cell_guid":"349097b8-2532-4795-a42b-fcca44c84c49","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-05-23T12:53:27.057586Z","iopub.execute_input":"2025-05-23T12:53:27.057847Z","iopub.status.idle":"2025-05-23T12:53:28.563335Z","shell.execute_reply.started":"2025-05-23T12:53:27.057829Z","shell.execute_reply":"2025-05-23T12:53:28.562516Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"del _train_df\ndel train_df\ngc.collect()","metadata":{"_uuid":"3383b92c-ab22-489d-85d9-986298ed4182","_cell_guid":"84f1aa39-2849-48a9-861b-15a745336605","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-05-23T12:53:28.564361Z","iopub.execute_input":"2025-05-23T12:53:28.564622Z","iopub.status.idle":"2025-05-23T12:53:28.669877Z","shell.execute_reply.started":"2025-05-23T12:53:28.564602Z","shell.execute_reply":"2025-05-23T12:53:28.668922Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"%system free -m","metadata":{"_uuid":"94437a47-525a-4a11-9af3-06b172996395","_cell_guid":"00820b8b-9f85-48b3-b8cc-4e5f2f9c20ba","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-05-23T12:53:28.670833Z","iopub.execute_input":"2025-05-23T12:53:28.671172Z","iopub.status.idle":"2025-05-23T12:53:28.737872Z","shell.execute_reply.started":"2025-05-23T12:53:28.671147Z","shell.execute_reply":"2025-05-23T12:53:28.736759Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Train model","metadata":{"_uuid":"b5341118-dc7a-40b8-bdcc-d402cf24d2ac","_cell_guid":"9f97929b-7a66-4ed1-bfe1-861a6a229d47","trusted":true,"collapsed":false,"jupyter":{"outputs_hidden":false}}},{"cell_type":"code","source":"# XGBR = xgb.XGBRegressor(\n#         objective='reg:squarederror',\n#         n_estimators=100,\n#         learning_rate=0.1,\n#         random_state=42,\n# )\n# XGBR.fit(x_train , y_train)\n# XGBR_preds = XGBR.predict(x_test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-23T13:26:08.191727Z","iopub.execute_input":"2025-05-23T13:26:08.192009Z","iopub.status.idle":"2025-05-23T13:26:08.198303Z","shell.execute_reply.started":"2025-05-23T13:26:08.191989Z","shell.execute_reply":"2025-05-23T13:26:08.196881Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# RF = RandomForestRegressor(\n#     n_estimators=10, \n#     random_state=42\n# )\n# RF.fit(x_train, y_train)\n# RF_preds = RF.predict(x_test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-23T13:04:00.090423Z","iopub.execute_input":"2025-05-23T13:04:00.091953Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"LGBM = LGBMRegressor(\n    n_estimators=100, \n    learning_rate=0.1, \n    random_state=42\n)\nLGBM.fit(x_train, y_train)\nLGBM_preds = LGBM.predict(x_test)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Predict","metadata":{"_uuid":"8f8ca959-1b36-4b1a-a38f-f1204673a762","_cell_guid":"8596d4ef-a1dd-4e15-87b1-c3fdebc1ce3a","trusted":true,"collapsed":false,"jupyter":{"outputs_hidden":false}}},{"cell_type":"code","source":"y_pred = LGBM.predict(x_test)\ny_pred","metadata":{"_uuid":"3a08d247-7ff6-4e29-9dcd-ae3f40e881f8","_cell_guid":"b5e17a57-1a29-437a-bde6-d2a0a21e8c93","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-05-23T13:03:40.148592Z","iopub.status.idle":"2025-05-23T13:03:40.149693Z","shell.execute_reply.started":"2025-05-23T13:03:40.149409Z","shell.execute_reply":"2025-05-23T13:03:40.149433Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Test and evaluate","metadata":{"_uuid":"bb609e02-6b7d-484b-a2f8-cd50d66f5036","_cell_guid":"c8bddad1-aafa-46dc-bbe7-1d4f4fa4e57c","trusted":true,"collapsed":false,"jupyter":{"outputs_hidden":false}}},{"cell_type":"code","source":"mae = 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': ['LGBM'],\n    'MAE': [mae],\n    'MSE': [mse],\n    'RMSE': [rmse],\n    'R2': [r2],\n    'Pearson Correlation Coefficient':[corr_coef],\n    'P value':[p_value],\n})\ndisplay(results)\n\nnp.random.seed(42)  # for reproducibility\nsample_indices = np.random.choice(len(y_test), size=100, replace=False)\n\n# Extract corresponding values\ny_test_sample = y_test.iloc[sample_indices].reset_index(drop=True)\ny_pred_sample = pd.Series(y_pred[sample_indices])\n\n# Plot comparison\nplt.figure(figsize=(12, 6))\nplt.plot(y_test_sample, label='Actual', marker='o')\nplt.plot(y_pred_sample, label='Predicted', marker='x')\nplt.title(\"Actual vs Predicted (100 Random Samples)\")\nplt.xlabel(\"Sample Index\")\nplt.ylabel(\"Target Value\")\nplt.legend()\nplt.tight_layout()\nplt.show()","metadata":{"_uuid":"0e7f26a5-d339-4e9e-9a12-6e7fe002bb26","_cell_guid":"dc701dd4-99a0-4d75-a5c8-422bc197550c","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-05-23T13:03:40.151337Z","iopub.status.idle":"2025-05-23T13:03:40.151694Z","shell.execute_reply.started":"2025-05-23T13:03:40.151510Z","shell.execute_reply":"2025-05-23T13:03:40.151522Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Performance notes\n\n| Model              | Parameters | MAE     | MSE       | RMSE     | R²        | Pearson Correlation Coefficient TRAIN | Pearson Correlation Coefficient LeatherBoard | P-value         |\n|-------------------|------------|---------|-----------|----------|-----------|----------------------------------|----------------------------------|-----------------|\n| Linear Regression | default    | 0.92182 | 1.689398  | 1.299769 | -0.194675 | 0.114861                         | 0.01226                        | 9.640476e-77    |\n| XGB\t| objective='reg:squarederror',n_estimators=500,learning_rate=0.1, random_state=42,| 0.880994\t| 1.705799\t| 1.306062\t| -0.206272\t| 0.106455\t|0.03673    | 4.015484e-66","metadata":{}},{"cell_type":"markdown","source":"# submission","metadata":{"_uuid":"1733ff0d-9c27-44c6-9271-9758c39a861a","_cell_guid":"50d782cd-6d7a-4786-b083-691579f2bb64","trusted":true,"collapsed":false,"jupyter":{"outputs_hidden":false}}},{"cell_type":"code","source":"test_df = pd.read_parquet('/kaggle/input/drw-crypto-market-prediction/test.parquet', engine='pyarrow')\ntest_df = test_df.drop(columns = ['label'])\ntest_df.replace([np.inf, -np.inf], 0, inplace=True)\npreds = LGBM.predict(test_df)","metadata":{"_uuid":"f33943dc-d253-4bd4-9472-1f89589de9ac","_cell_guid":"8a27004c-2e74-4373-896b-25e9316998db","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-05-23T13:03:40.153421Z","iopub.status.idle":"2025-05-23T13:03:40.153861Z","shell.execute_reply.started":"2025-05-23T13:03:40.153644Z","shell.execute_reply":"2025-05-23T13:03:40.153717Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sample_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 )","metadata":{"_uuid":"21d3f99c-4279-4f8b-966e-31298c64ddc0","_cell_guid":"7e2483ef-7b28-4992-836f-661b903d7f93","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-05-23T13:03:40.156248Z","iopub.status.idle":"2025-05-23T13:03:40.156790Z","shell.execute_reply.started":"2025-05-23T13:03:40.156482Z","shell.execute_reply":"2025-05-23T13:03:40.156501Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null}]}