{"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"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":84493,"databundleVersionId":11305158,"isSourceIdPinned":false,"sourceType":"competition"},{"sourceId":233141816,"sourceType":"kernelVersion"}],"dockerImageVersionId":31011,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false},"papermill":{"default_parameters":{},"duration":771.015852,"end_time":"2024-11-12T11:46:23.889028","environment_variables":{},"exception":null,"input_path":"__notebook__.ipynb","output_path":"__notebook__.ipynb","parameters":{},"start_time":"2024-11-12T11:33:32.873176","version":"2.6.0"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"## Created by <a href=\"https://github.com/yunsuxiaozi/\">yunsuxiaozi </a>  2024/11/12\n\n### Here we will use lightgbm、xgboost、catboost and origin features to create a simple baseline.\n\n- version1:LB:0.0043\n\n- version2:LB:0.0045\n\n- version3:LB:0.0045\n\n- version4:LB:0.0045\n\n- version5:LB:0.0045\n\n- version6:failed\n\n- version7:LB:0.0051\n\n- version8:LB:0.0050\n\n- version9:Failed","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","papermill":{"duration":0.003837,"end_time":"2024-11-12T11:33:35.593878","exception":false,"start_time":"2024-11-12T11:33:35.590041","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"# <span><h1 style = \"font-family: garamond; font-size: 40px; font-style: normal; letter-spcaing: 3px; background-color: #f6f5f5; color :#fe346e; border-radius: 100px 100px; text-align:center\">Import Libraries</h1></span>","metadata":{"papermill":{"duration":0.002968,"end_time":"2024-11-12T11:33:35.600294","exception":false,"start_time":"2024-11-12T11:33:35.597326","status":"completed"},"tags":[]}},{"cell_type":"code","source":"! pip install cir_model pytorch_tabnet ftfy","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-11T16:32:58.785469Z","iopub.execute_input":"2025-04-11T16:32:58.785742Z","iopub.status.idle":"2025-04-11T16:33:02.079699Z","shell.execute_reply.started":"2025-04-11T16:32:58.785723Z","shell.execute_reply":"2025-04-11T16:33:02.078967Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"if 1 == 2:\n    source_file_path = '/kaggle/input/yunbase/Yunbase/baseline.py'\n    target_file_path = '/kaggle/working/baseline.py'\n    with open(source_file_path, 'r', encoding='utf-8') as file:\n        content = file.read()\n    with open(target_file_path, 'w', encoding='utf-8') as file:\n        file.write(content)\n    !pip install -q --requirement /kaggle/input/yunbase/Yunbase/requirements.txt --no-index --find-links file:/kaggle/input/yunbase/","metadata":{"execution":{"iopub.status.busy":"2025-04-11T16:33:02.081293Z","iopub.execute_input":"2025-04-11T16:33:02.081531Z","iopub.status.idle":"2025-04-11T16:33:02.086959Z","shell.execute_reply.started":"2025-04-11T16:33:02.081509Z","shell.execute_reply":"2025-04-11T16:33:02.086191Z"},"papermill":{"duration":0.025449,"end_time":"2024-11-12T11:33:35.628847","exception":false,"start_time":"2024-11-12T11:33:35.603398","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import polars as pl\nimport pandas as pd\nimport numpy as np\nimport random\nfrom  lightgbm import LGBMRegressor\nfrom catboost import CatBoostRegressor\nfrom xgboost import XGBRegressor\nimport sys, os, gc\n\nsys.path.append(\"/kaggle/input/yunbase\")\nsys.path.append(\"/kaggle/input/yunbase/Yunbase\")\nsys.path.append(\"/kaggle/usr/lib/yunbase_baseline_04_12_2024\")\n#from baseline import Yunbase\nfrom yunbase_baseline_04_12_2024 import Yunbase \n\nsys.path.append(\"/kaggle/input/jane-street-real-time-market-data-forecasting\")\nimport kaggle_evaluation.jane_street_inference_server\n\ndef seed_everything(seed):\n    np.random.seed(seed)\n    random.seed(seed)\nseed_everything(seed=2025)","metadata":{"execution":{"iopub.status.busy":"2025-04-11T16:33:02.087624Z","iopub.execute_input":"2025-04-11T16:33:02.087859Z","iopub.status.idle":"2025-04-11T16:33:02.729371Z","shell.execute_reply.started":"2025-04-11T16:33:02.087834Z","shell.execute_reply":"2025-04-11T16:33:02.728607Z"},"papermill":{"duration":6.119887,"end_time":"2024-11-12T11:33:54.457817","exception":false,"start_time":"2024-11-12T11:33:48.337930","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# <span><h1 style = \"font-family: garamond; font-size: 40px; font-style: normal; letter-spcaing: 3px; background-color: #f6f5f5; color :#fe346e; border-radius: 100px 100px; text-align:center\">Load Train Data</h1></span>\n\nI accidentally made a mistake by not filling in missing values in the training data and filling in -1 in the test data, resulting in a good LB (Those who know the reason can leave a message in the discussion forum)","metadata":{"papermill":{"duration":0.003115,"end_time":"2024-11-12T11:33:54.464664","exception":false,"start_time":"2024-11-12T11:33:54.461549","status":"completed"},"tags":[]}},{"cell_type":"code","source":"yunbase=Yunbase()\ndata=[]\nfor i in [6,7,8,9]:\n    train=pl.read_parquet(f\"/kaggle/input/jane-street-real-time-market-data-forecasting/train.parquet/partition_id={i}/part-0.parquet\")\n    train=train.to_pandas()\n    train['sin_time_id']=np.sin(2*np.pi*train['time_id']/967)\n    train['cos_time_id']=np.cos(2*np.pi*train['time_id']/967)\n    train['sin_time_id_halfday']=np.sin(2*np.pi*train['time_id']/483)\n    train['cos_time_id_halfday']=np.cos(2*np.pi*train['time_id']/483)\n    #train=train.fillna(-1)\n    train=yunbase.reduce_mem_usage(train,float16_as32=False)\n    data.append(train)\ntrain=pd.concat(data)\nprint(f\"train.shape:{train.shape}\")\ndel data\ngc.collect()\nfinal_feature=['symbol_id','sin_time_id','cos_time_id','sin_time_id_halfday','cos_time_id_halfday']+[f'feature_0{i}' if i<10 else f'feature_{i}' for i in range(79)]\ntrain=train[['responder_6']+final_feature]\ntrain.head()","metadata":{"execution":{"iopub.status.busy":"2025-04-11T16:33:02.730192Z","iopub.execute_input":"2025-04-11T16:33:02.730443Z","iopub.status.idle":"2025-04-11T16:34:14.196583Z","shell.execute_reply.started":"2025-04-11T16:33:02.730419Z","shell.execute_reply":"2025-04-11T16:34:14.195824Z"},"papermill":{"duration":65.933657,"end_time":"2024-11-12T11:35:00.401531","exception":false,"start_time":"2024-11-12T11:33:54.467874","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# <span><h1 style = \"font-family: garamond; font-size: 40px; font-style: normal; letter-spcaing: 3px; background-color: #f6f5f5; color :#fe346e; border-radius: 100px 100px; text-align:center\">Model training</h1></span>","metadata":{"papermill":{"duration":0.004236,"end_time":"2024-11-12T11:35:00.410479","exception":false,"start_time":"2024-11-12T11:35:00.406243","status":"completed"},"tags":[]}},{"cell_type":"code","source":"lgb_params={\"boosting_type\": \"gbdt\",\"metric\": 'rmse',\n            'random_state': 2025,  \"max_depth\": 10,\"learning_rate\": 0.1,\n            \"n_estimators\": 120,\"colsample_bytree\": 0.6,\"colsample_bynode\": 0.6,\"verbose\": -1,\"reg_alpha\": 0.2,\n            \"reg_lambda\": 5,\"extra_trees\":True,'num_leaves':64,\"max_bin\":255,\n            'device':'gpu','gpu_use_dp':True,\n            }\n\ncat_params={'task_type':'GPU',\n           'random_state':2025,\n           'eval_metric'         : 'RMSE',\n           'bagging_temperature' : 0.50,\n           'iterations'          : 200,\n           'learning_rate'       : 0.1,\n           'max_depth'           : 12,\n           'l2_leaf_reg'         : 1.25,\n           'min_data_in_leaf'    : 24,\n           'random_strength'     : 0.25, \n           'verbose'             : 0,\n          }\nxgb_params={'random_state': 2025, 'n_estimators': 125, \n            'learning_rate': 0.1, 'max_depth': 10,\n            'reg_alpha': 0.08, 'reg_lambda': 0.8, \n            'subsample': 0.95, 'colsample_bytree': 0.6, \n            'min_child_weight': 3,\n            'tree_method':'gpu_hist',\n           }\n\nprint(\"lgb\")\nlgb=LGBMRegressor(**lgb_params)\nlgb.fit(train[final_feature].values,train['responder_6'].values)\nlgb.booster_.save_model(\"./lgb.model\")\n\nprint(\"cat\")\ncat=CatBoostRegressor(**cat_params)\ncat.fit(train[final_feature].values,train['responder_6'].values)\ncat.save_model(\"./cat.model\", pool=None)\n\nprint(\"xgb\")\nxgb=XGBRegressor(**xgb_params)\nxgb.fit(train[final_feature].values,train['responder_6'].values)\nxgb.save_model(\"./xgb.model\")","metadata":{"execution":{"iopub.status.busy":"2025-04-11T16:34:14.198064Z","iopub.execute_input":"2025-04-11T16:34:14.198276Z","execution_failed":"2025-04-11T16:35:21.620Z"},"papermill":{"duration":680.883166,"end_time":"2024-11-12T11:46:21.298073","exception":false,"start_time":"2024-11-12T11:35:00.414907","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# <span><h1 style = \"font-family: garamond; font-size: 40px; font-style: normal; letter-spcaing: 3px; background-color: #f6f5f5; color :#fe346e; border-radius: 100px 100px; text-align:center\">Model Inference</h1></span>\n\n#### The following code is used in the training set to load more data for training, and not in the testing set to save time. I tried calling this function 100000 times and it would take about an hour.\n\n```python\ntest=yunbase.reduce_mem_usage(test,float16_as32=False)\n```","metadata":{"papermill":{"duration":0.006386,"end_time":"2024-11-12T11:46:21.310917","exception":false,"start_time":"2024-11-12T11:46:21.304531","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def predict(test,lags):\n    global lgb,cat,xgb\n    \n    predictions = test.select(\n        'row_id',\n        pl.lit(0.0).alias('responder_6'),\n    )\n    test=test.to_pandas()\n    test['sin_time_id']=np.sin(2*np.pi*test['time_id']/967)\n    test['cos_time_id']=np.cos(2*np.pi*test['time_id']/967)\n    test['sin_time_id_halfday']=np.sin(2*np.pi*test['time_id']/483)\n    test['cos_time_id_halfday']=np.cos(2*np.pi*test['time_id']/483)\n    test=test.fillna(-1)\n    test=test[final_feature]\n    eps=1e-10\n    test_preds=0.55*lgb.predict(test)+0.2*cat.predict(test)+0.25*xgb.predict(test)\n    test_preds=np.clip(test_preds,-5+eps,5-eps)\n    predictions = predictions.with_columns(pl.Series('responder_6', test_preds.ravel()))\n    return predictions\n\ninference_server = kaggle_evaluation.jane_street_inference_server.JSInferenceServer(predict)\n\n#if os.getenv('KAGGLE_IS_COMPETITION_RERUN'):\n#    inference_server.serve()\n#else:\n#    inference_server.run_local_gateway(\n#        (\n#            '/kaggle/input/jane-street-real-time-market-data-forecasting/test.parquet',\n#            '/kaggle/input/jane-street-real-time-market-data-forecasting/lags.parquet',\n#        )\n#    )","metadata":{"execution":{"execution_failed":"2025-04-11T16:35:21.621Z"},"papermill":{"duration":0.339391,"end_time":"2024-11-12T11:46:21.656793","exception":false,"start_time":"2024-11-12T11:46:21.317402","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null}]}