{"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":"none","dataSources":[{"sourceId":84493,"databundleVersionId":9871156,"sourceType":"competition"},{"sourceId":10004078,"sourceType":"datasetVersion","datasetId":6158005},{"sourceId":10004352,"sourceType":"datasetVersion","datasetId":6158178},{"sourceId":10004448,"sourceType":"datasetVersion","datasetId":6158247},{"sourceId":177576,"sourceType":"modelInstanceVersion","modelInstanceId":151273,"modelId":173745},{"sourceId":177591,"sourceType":"modelInstanceVersion","modelInstanceId":151288,"modelId":173760},{"sourceId":177620,"sourceType":"modelInstanceVersion","modelInstanceId":151306,"modelId":173777},{"sourceId":182165,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":155278,"modelId":177752}],"dockerImageVersionId":30786,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nimport joblib\nimport pandas as pd\nimport numpy as np\nimport polars as pl\nimport xgboost as xgb\nimport sys\nimport kaggle_evaluation.jane_street_inference_server\n\nsys.path.append('/kaggle/input/kaggle-evaluation/')\n\n# Model file\nmodel_path = '/kaggle/input/customr2model/scikitlearn/default/1/customr2_model.json'\n\n# Load the model\nmodel = xgb.Booster()\nmodel.load_model(model_path)\n\nlags_ = None\n\ndef predict(test: pl.DataFrame, lags: pl.DataFrame | None) -> pl.DataFrame | pd.DataFrame:\n    \"\"\"Make a prediction.\"\"\"\n    global lags_\n    \n    # Handle lags data if provided\n    if lags is not None:\n        lags_ = lags\n    \n    # Convert Polars DataFrame to Pandas for compatibility with XGBoost\n    test_pd = test.to_pandas()\n    \n    # Select only the feature columns used during training\n    \n    excluded_features = [col for col in test_pd.columns if col.startswith('responder_')] + ['weight'] + ['row_id'] + ['is_scored']\n    feature_cols = [col for col in test_pd.columns if col not in excluded_features]\n    X_test = test_pd[feature_cols]\n    \n    # Ensure the index is appropriate\n    X_test.reset_index(drop=True, inplace=True)\n    \n    # Convert to DMatrix with feature names\n    dtest = xgb.DMatrix(X_test, feature_names=feature_cols)\n    \n    # Make predictions\n    predictions = model.predict(dtest, validate_features=True)\n    \n    # Prepare the output DataFrame\n    if 'row_id' not in test_pd.columns:\n        raise ValueError(\"The test DataFrame must contain a 'row_id' column.\")\n    \n    output_df = pd.DataFrame({\n        'row_id': test_pd['row_id'],\n        'responder_6': predictions\n    })\n    \n    # Convert back to Polars DataFrame\n    output_pl = pl.from_pandas(output_df)\n    \n    # Ensure the output has the correct columns\n    assert output_pl.columns == ['row_id', 'responder_6'], \"Output DataFrame must have 'row_id' and 'responder_6' columns.\"\n    \n    # Confirm the number of rows matches\n    assert len(output_pl) == len(test), \"Number of predictions does not match number of test samples.\"\n    \n    return output_pl","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-29T03:49:17.423426Z","iopub.execute_input":"2024-11-29T03:49:17.424424Z","iopub.status.idle":"2024-11-29T03:49:17.446214Z","shell.execute_reply.started":"2024-11-29T03:49:17.424383Z","shell.execute_reply":"2024-11-29T03:49:17.445198Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"inference_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,"execution":{"iopub.status.busy":"2024-11-29T03:49:21.998498Z","iopub.execute_input":"2024-11-29T03:49:21.999480Z","iopub.status.idle":"2024-11-29T03:49:22.096631Z","shell.execute_reply.started":"2024-11-29T03:49:21.999439Z","shell.execute_reply":"2024-11-29T03:49:22.095640Z"}},"outputs":[],"execution_count":null}]}