{"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":"# Autogluon approach\n\nThis notebook uses Autogluon, an AutoML library from Amazon, to predict the ","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2025-05-27T10:09:45.675530Z","iopub.execute_input":"2025-05-27T10:09:45.676262Z","iopub.status.idle":"2025-05-27T10:09:45.682840Z","shell.execute_reply.started":"2025-05-27T10:09:45.676235Z","shell.execute_reply":"2025-05-27T10:09:45.681877Z"}}},{"cell_type":"code","source":"import pandas as pd","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-27T10:21:56.344803Z","iopub.execute_input":"2025-05-27T10:21:56.345507Z","iopub.status.idle":"2025-05-27T10:21:57.292899Z","shell.execute_reply.started":"2025-05-27T10:21:56.345474Z","shell.execute_reply":"2025-05-27T10:21:57.292037Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"%%capture\n\n!pip install -q autogluon","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-27T10:21:57.294537Z","iopub.execute_input":"2025-05-27T10:21:57.295156Z","iopub.status.idle":"2025-05-27T10:22:05.272061Z","shell.execute_reply.started":"2025-05-27T10:21:57.295131Z","shell.execute_reply":"2025-05-27T10:22:05.270787Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Read data","metadata":{}},{"cell_type":"code","source":"# Load the data\ntrain_df = pd.read_parquet(\"/kaggle/input/drw-crypto-market-prediction/train.parquet\").reset_index()\ntest_df = pd.read_parquet(\"/kaggle/input/drw-crypto-market-prediction/test.parquet\").reset_index()\nsample_submission = pd.read_csv('/kaggle/input/drw-crypto-market-prediction/sample_submission.csv')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-27T10:22:05.273396Z","iopub.execute_input":"2025-05-27T10:22:05.273753Z","iopub.status.idle":"2025-05-27T10:22:50.318094Z","shell.execute_reply.started":"2025-05-27T10:22:05.273724Z","shell.execute_reply":"2025-05-27T10:22:50.317328Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Drop low-variance features\n\nThe training fails because of an out-of-memory error. To reduce this, we use simpler data types and limit the training to the most variable features.","metadata":{}},{"cell_type":"code","source":"def downcast_df(df):\n    for col in df.select_dtypes(include=['float64']).columns:\n        df[col] = pd.to_numeric(df[col], downcast='float')\n    for col in df.select_dtypes(include=['int64']).columns:\n        df[col] = pd.to_numeric(df[col], downcast='integer')\n    return df\n\ntrain_df = downcast_df(train_df)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-27T10:22:50.319108Z","iopub.execute_input":"2025-05-27T10:22:50.319367Z","iopub.status.idle":"2025-05-27T10:22:59.765737Z","shell.execute_reply.started":"2025-05-27T10:22:50.319348Z","shell.execute_reply":"2025-05-27T10:22:59.765065Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.feature_selection import VarianceThreshold\n\nX = train_df.drop(columns=['timestamp', 'label'])\ny = train_df['label']\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-27T10:22:59.767398Z","iopub.execute_input":"2025-05-27T10:22:59.767649Z","iopub.status.idle":"2025-05-27T10:23:04.141512Z","shell.execute_reply.started":"2025-05-27T10:22:59.767628Z","shell.execute_reply":"2025-05-27T10:23:04.140537Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X.dtypes","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-27T10:23:04.142532Z","iopub.execute_input":"2025-05-27T10:23:04.143016Z","iopub.status.idle":"2025-05-27T10:23:04.154822Z","shell.execute_reply.started":"2025-05-27T10:23:04.142961Z","shell.execute_reply":"2025-05-27T10:23:04.154005Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\n\n# Replace inf values with NaN\nX = X.replace([np.inf, -np.inf], np.nan)\n\n# Drop columns with all NaNs\nX = X.dropna(axis=1, how='all')\n\n# Option 1: Fill NaNs with 0 (or use mean imputation)\nX = X.fillna(0)\n\n# Now apply VarianceThreshold\nfrom sklearn.feature_selection import VarianceThreshold\n\nselector = VarianceThreshold(threshold=0.01)\nX_reduced = pd.DataFrame(selector.fit_transform(X), columns=X.columns[selector.get_support()])\n\n# Combine with label\ntrain_filtered = pd.concat([X_reduced, y.reset_index(drop=True)], axis=1)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-27T10:23:58.111491Z","iopub.execute_input":"2025-05-27T10:23:58.112172Z","iopub.status.idle":"2025-05-27T10:24:24.090695Z","shell.execute_reply.started":"2025-05-27T10:23:58.112140Z","shell.execute_reply":"2025-05-27T10:24:24.089750Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Trigger Training","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nfrom autogluon.tabular import TabularPredictor\n\n\n\n# Define feature and label columns\nlabel = 'label'\nignore_cols = ['timestamp']  # or add more like IDs if needed\n\n# Train AutoGluon model\npredictor = TabularPredictor(\n    label=label,\n    eval_metric='pearsonr',  \n).fit(\n    train_df.drop(columns=ignore_cols),\n#    presets='best_quality', \n    presets='medium_quality', \n    excluded_model_types=['NN_TORCH', 'CATBOOST'],  # Drop memory-heavy models\n    time_limit=3600  # 1 hour limit\n)\n\n# Predict on test set\npreds = predictor.predict(test_df.drop(columns=ignore_cols + [label]))\n\n# Create submission\nsubmission = sample_submission.copy()\nsubmission['label'] = preds\nsubmission.to_csv('submission.csv', index=False)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-27T10:25:11.348206Z","iopub.execute_input":"2025-05-27T10:25:11.348551Z","execution_failed":"2025-05-27T10:25:19.344Z"}},"outputs":[],"execution_count":null}]}