{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":84493,"databundleVersionId":9871156,"sourceType":"competition"},{"sourceId":9883535,"sourceType":"datasetVersion","datasetId":6068987}],"dockerImageVersionId":30804,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport polars as pl\nimport pandas as pd\nimport lightgbm as lgb\n\ndf = pl.read_parquet('/kaggle/input/js-2024-train/train_df_half.parquet')\nfeatures = [col for col in df.columns if ('feature' in col) or ('_lag_' in col)]\nresponders = [col for col in df.columns if ('_lag_' in col)]\n\nX = df[features].slice(1, None)\n# X_r = df[responders].slice(1, None)\ny = df['responder_6'].slice(1, None)\nweights = df['weight'].slice(1, None)\n\nparams = {'n_estimators': 700, 'learning_rate': 0.02, 'max_depth': 5, 'num_leaves': 42, 'reg_alpha': 7.3, 'reg_lambda': 8.1}\nmodel = lgb.LGBMRegressor( **params, n_jobs=-1, verbose=-1, device = 'gpu')\nmodel.fit(X, y, sample_weight=weights)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def predict(test: pl.DataFrame, lags: pl.DataFrame | None) -> pd.DataFrame:\n    global lags_\n    \n    test_pd = test.to_pandas()\n    \n    if lags is not None:\n        lags_ = lags\n\n        # Convert lags to Pandas DataFrame if it's Polars\n        lags_pd = lags.to_pandas()\n        lags_pd = lags_pd.groupby(['date_id', 'symbol_id']).last().reset_index() \n        test_pd = test_pd.merge(lags_pd, on=['date_id', 'symbol_id'], how='left')\n    else:\n        \n        for idx in range(9):\n            test_pd[f'responder_{idx}_lag_1'] = 0.0\n\n    features = [col for col in test_pd.columns if ('feature' in col) or ('responder' in col)]\n    print(features)  \n    # Prepare the features for prediction\n    predictions =  model.predict(test_pd[features])\n\n    # Create a DataFrame for the output\n    output = pd.DataFrame({\n        'row_id': test_pd['row_id'],\n        'responder_6': predictions\n    })\n\n    # Ensure the output DataFrame has the correct format\n    assert output.columns.tolist() == ['row_id', 'responder_6']\n    assert len(output) == len(test)\n\n    return output\n\nimport kaggle_evaluation.jane_street_inference_server\nimport os\n\n# Set up the inference server\ninference_server = kaggle_evaluation.jane_street_inference_server.JSInferenceServer(predict)\n\nif os.getenv('KAGGLE_IS_COMPETITION_RERUN'):\n    inference_server.serve()\nelse:\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":{"trusted":true},"outputs":[],"execution_count":null}]}