{"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":9849268,"sourceType":"competition"}],"dockerImageVersionId":31012,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false},"papermill":{"default_parameters":{},"duration":88.143417,"end_time":"2024-10-23T00:28:09.481855","environment_variables":{},"exception":null,"input_path":"__notebook__.ipynb","output_path":"__notebook__.ipynb","parameters":{},"start_time":"2024-10-23T00:26:41.338438","version":"2.6.0"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os, sys\nimport random\nimport dill\nimport polars as pl\nimport pandas as pd\nimport numpy as np\nfrom sklearn.linear_model import Ridge\n\nimport warnings\nwarnings.filterwarnings('ignore')\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)\n\ndef save_as_dill(model_name, model_object, file_ext='.dill'):\n    with open(f\"./{model_name}{file_ext}\", \"wb\") as file_handle:\n        dill.dump(model_object, file_handle, protocol=4)\n\ndef custom_metric(y_true,y_pred,weight):\n    weighted_r2=1-(np.sum(weight*(y_true-y_pred)**2)/np.sum(weight*y_true**2))\n    return weighted_r2\n    \nprint(\"< read parquet >\")\ndatas=[]\nfor i in range(7,10):\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    datas.append(train)\ntrain=pd.concat(datas)\nprint(f\"train.shape:{train.shape}\")\n\nprint(\"< get X,y >\")\ncols=[f'feature_0{i}' if i<10 else f'feature_{i}' for i in range(79)]\nX=train[cols].fillna(3).values\ny=train['responder_6'].values\n\nprint(\"< train test split >\")\nsplit=1300000#around 10%\nweights=train['weight'].values\ntrain_X,train_y,test_X,test_y,train_weight,test_weight=X[:-split],y[:-split],X[-split:],y[-split:],weights[:-split],weights[-split:]\nprint(f\"train_X.shape:{train_X.shape},test_X.shape:{test_X.shape}\")\n\nprint(\"< fit and predict >\")\nmodel=Ridge()\nmodel.fit(train_X,train_y)\nsave_as_dill('ridge', model)\ntrain_pred=model.predict(train_X)\ntest_pred=model.predict(test_X)\nprint(f\"train weighted_r2:{custom_metric(train_y,train_pred,weight=train_weight)}\")\nprint(f\"test weighted_r2:{custom_metric(test_y,test_pred,weight=test_weight)}\")\n\ndef predict(test,lags):\n    cols=[f'feature_0{i}' if i<10 else f'feature_{i}' for i in range(79)]\n    predictions = test.select(\n        'row_id',\n        pl.lit(0.0).alias('responder_6'),\n    )\n    test_preds=model.predict(test[cols].to_pandas().fillna(3).values)\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":{"iopub.status.busy":"2025-04-11T16:11:22.556104Z","iopub.execute_input":"2025-04-11T16:11:22.556355Z","iopub.status.idle":"2025-04-11T16:12:58.185525Z","shell.execute_reply.started":"2025-04-11T16:11:22.556333Z","shell.execute_reply":"2025-04-11T16:12:58.184376Z"},"papermill":{"duration":80.99381,"end_time":"2024-10-23T00:28:07.874109","exception":false,"start_time":"2024-10-23T00:26:46.880299","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null}]}