{"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":"markdown","source":"This notebook creates a simple submission using **LGBM**.  \nThanks to [yunsuxiaozi](https://www.kaggle.com/yunsuxiaozi) for the idea in this [discussion](https://www.kaggle.com/competitions/drw-crypto-market-prediction/discussion/580067).","metadata":{}},{"cell_type":"code","source":"# import packages\nimport random\nimport numpy as np\nimport pandas as pd\nimport polars as pl\nimport matplotlib.pyplot as plt\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler\nfrom tqdm import tqdm\n\nimport warnings\nwarnings.filterwarnings(\"ignore\", category=RuntimeWarning)\n\nseed = 42\nnp.random.seed(seed)\nrandom.seed(seed)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-05-22T15:40:34.266495Z","iopub.execute_input":"2025-05-22T15:40:34.267446Z","iopub.status.idle":"2025-05-22T15:40:34.276327Z","shell.execute_reply.started":"2025-05-22T15:40:34.267400Z","shell.execute_reply":"2025-05-22T15:40:34.275366Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Load data","metadata":{}},{"cell_type":"code","source":"train=pl.read_parquet(\"/kaggle/input/drw-crypto-market-prediction/train.parquet\")\ntrain=train.to_pandas()\ntest=pl.read_parquet('/kaggle/input/drw-crypto-market-prediction/test.parquet')\ntest=test.to_pandas()\nprint(f\"train.shape:{train.shape},test.shape:{test.shape}\")\ntrain.head()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-22T15:36:58.277390Z","iopub.execute_input":"2025-05-22T15:36:58.277885Z","iopub.status.idle":"2025-05-22T15:37:30.807041Z","shell.execute_reply.started":"2025-05-22T15:36:58.277859Z","shell.execute_reply":"2025-05-22T15:37:30.806185Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Overview Data","metadata":{}},{"cell_type":"code","source":"features = [c for c in train.columns if c!='label']\nlabel_col = 'label'\n\n# 1. BASIC DATA OVERVIEW\nprint(\"=== CRYPTO TRADING DATA EDA ===\")\nprint(f\"Dataset shape: {train.shape}\")\nprint(f\"Number of features: {len(features)}\")\nprint(f\"Time range: {train.index.min()} to {train.index.max()}\")\n\nprint(\"\\n=== 1. BASIC DATA OVERVIEW ===\")\nprint(\"\\nDataset Info:\")\nprint(train.info())\n\nprint(\"\\nMissing Values:\")\nmissing_data = train[features + [label_col]].isnull().sum()\nmissing_pct = (missing_data / len(train)) * 100\nmissing_df = pd.DataFrame({'Missing_Count': missing_data, 'Missing_Percentage': missing_pct})\nmissing_df[missing_df['Missing_Count'] > 0].sort_values('Missing_Count', ascending=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-22T15:38:15.789160Z","iopub.execute_input":"2025-05-22T15:38:15.789758Z","iopub.status.idle":"2025-05-22T15:38:18.590145Z","shell.execute_reply.started":"2025-05-22T15:38:15.789732Z","shell.execute_reply":"2025-05-22T15:38:18.589242Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(\"\\nBasic Statistics:\")\ntrain[features + [label_col]].describe()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-22T15:40:37.690441Z","iopub.execute_input":"2025-05-22T15:40:37.691332Z","iopub.status.idle":"2025-05-22T15:40:58.583762Z","shell.execute_reply.started":"2025-05-22T15:40:37.691280Z","shell.execute_reply":"2025-05-22T15:40:58.582882Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Feature Engineering","metadata":{}},{"cell_type":"code","source":"# Drop columns have exactly 1 value\nNUNIQUE1=[c for c in train.columns if train[c].nunique()==1]\ntrain.drop(NUNIQUE1+['timestamp'],axis=1,inplace=True)\ntest.drop(NUNIQUE1+['label'],axis=1,inplace=True)\ntrain.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-22T15:41:14.910766Z","iopub.execute_input":"2025-05-22T15:41:14.911089Z","iopub.status.idle":"2025-05-22T15:42:01.166463Z","shell.execute_reply.started":"2025-05-22T15:41:14.911055Z","shell.execute_reply":"2025-05-22T15:42:01.165546Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(NUNIQUE1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-22T15:43:00.712146Z","iopub.execute_input":"2025-05-22T15:43:00.712515Z","iopub.status.idle":"2025-05-22T15:43:00.717711Z","shell.execute_reply.started":"2025-05-22T15:43:00.712489Z","shell.execute_reply":"2025-05-22T15:43:00.716743Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Train model","metadata":{}},{"cell_type":"code","source":"from lightgbm import LGBMRegressor\n\n\nfeatures = [c for c in train.columns if c!='label']  # features after drop\n# Init and fit\nmodel=LGBMRegressor()\nmodel.fit(train[features].values,train['label'].values)\n\n# predict \ntest_preds=model.predict(test[features].values)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-22T03:22:03.576959Z","iopub.execute_input":"2025-05-22T03:22:03.577206Z","iopub.status.idle":"2025-05-22T03:22:05.428482Z","shell.execute_reply.started":"2025-05-22T03:22:03.577186Z","shell.execute_reply":"2025-05-22T03:22:05.427239Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#","metadata":{}},{"cell_type":"code","source":"sub=pd.read_csv('/kaggle/input/drw-crypto-market-prediction/sample_submission.csv')\nsub['prediction']=test_preds\nsub.to_csv(\"base.csv\",index=None)","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}