{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","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":9625192,"sourceType":"datasetVersion","datasetId":5875295},{"sourceId":10400566,"sourceType":"datasetVersion","datasetId":6444325},{"sourceId":201497957,"sourceType":"kernelVersion"},{"sourceId":223387,"sourceType":"modelInstanceVersion","modelInstanceId":190589,"modelId":212565},{"sourceId":226139,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":192876,"modelId":214827},{"sourceId":226814,"sourceType":"modelInstanceVersion","modelInstanceId":193421,"modelId":215351},{"sourceId":227021,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":193588,"modelId":215515},{"sourceId":227062,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":193617,"modelId":215544},{"sourceId":227172,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":193706,"modelId":215629},{"sourceId":227207,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":193733,"modelId":215653},{"sourceId":227241,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":193758,"modelId":215679},{"sourceId":227272,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":193783,"modelId":215703},{"sourceId":227278,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":193787,"modelId":215707}],"dockerImageVersionId":30822,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"execution_failed":"2025-01-13T04:06:02.856Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nimport polars as pl\nimport numpy as np\nimport os\nfrom tqdm.auto import tqdm\nfrom matplotlib import pyplot as plt\nimport pickle\n\nfrom sklearn.metrics import r2_score\nfrom lightgbm import LGBMRegressor\nimport lightgbm as lgb\nfrom xgboost import XGBRegressor\nfrom catboost import CatBoostRegressor\nfrom sklearn.ensemble import VotingRegressor\n\nimport warnings\nwarnings.filterwarnings('ignore')\npd.options.display.max_columns = None\n\n","metadata":{"trusted":true,"execution":{"execution_failed":"2025-01-13T04:06:02.857Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = pl.read_parquet(f\"/kaggle/input/training/training.parquet\")","metadata":{"trusted":true,"execution":{"execution_failed":"2025-01-13T04:06:02.857Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"valid = pl.read_parquet(f\"/kaggle/input/training/validation.parquet\")","metadata":{"trusted":true,"execution":{"execution_failed":"2025-01-13T04:06:02.857Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"n_skip = 25  # Number of last rows to skip\nfiltered_train = train[:-n_skip]","metadata":{"trusted":true,"execution":{"execution_failed":"2025-01-13T04:06:02.857Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"filtered_train.shape, valid.shape","metadata":{"trusted":true,"execution":{"execution_failed":"2025-01-13T04:06:02.858Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import kaggle_evaluation.jane_street_inference_server\n\n","metadata":{"trusted":true,"execution":{"execution_failed":"2025-01-13T04:06:02.858Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class CONFIG:\n    seed = 42\n    target_col = \"responder_6\"\n    feature_cols = [col for col in valid.columns if ('feature' in col) or ('_lag_' in col)]\n    \n        \n    ","metadata":{"trusted":true,"execution":{"execution_failed":"2025-01-13T04:06:02.858Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\nfrom xgboost import XGBRegressor\n\n# Fit the model\nX_train = train[ CONFIG.feature_cols ]\ny_train = train[ CONFIG.target_col ]\nw_train = train[ \"weight\" ]\nX_valid = valid[ CONFIG.feature_cols ]\ny_valid = valid[ CONFIG.target_col ]\nw_valid = valid[ \"weight\" ]\n\n# Define the model globally\nXGB_Model = None\n\ndef get_model(seed, X_train, y_train, w_train):\n    # Define the seed\n    seed = 42  # or any other integer value\n    \n    # XGBoost parameters\n    model = XGBRegressor(\n        learning_rate=0.05,\n        max_depth=9,\n        n_estimators=300,\n        subsample=0.8,\n        colsample_bytree=0.8,\n        reg_alpha=1,\n        reg_lambda=5,\n        random_state=seed,\n        tree_method='hist',\n        device='cuda',\n        n_gpus=2,\n    )\n\n    # Fit the model\n    X_train = train[ CONFIG.feature_cols ]\n    y_train = train[ CONFIG.target_col ]\n    w_train = train[ \"weight\" ]\n    X_valid = valid[ CONFIG.feature_cols ]\n    y_valid = valid[ CONFIG.target_col ]\n    w_valid = valid[ \"weight\" ]\n\n    # Fit the model with sample weights\n    model.fit(X_train, y_train, sample_weight=w_train)\n\n    \n    \n    return model\n\n\nX_train.shape, y_train.shape, w_train.shape, X_valid.shape, y_valid.shape, w_valid.shape","metadata":{"trusted":true,"execution":{"execution_failed":"2025-01-13T04:06:02.858Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_valid = valid[ CONFIG.feature_cols ]\ny_valid = valid[ CONFIG.target_col ]\nw_valid = valid[ \"weight\" ]\n\nX_valid.shape, y_valid.shape, w_valid.shape","metadata":{"trusted":true,"execution":{"execution_failed":"2025-01-13T04:06:02.859Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nimport polars as pl\n\nlags_: pl.DataFrame | None = None\n\ndef predict(test: pl.DataFrame, lags: pl.DataFrame | None = None) -> pd.DataFrame:\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        for idx in range(9):\n            test_pd[f'responder_{idx}_lag_1'] = 0.0\n\n    feature_cols = [col for col in test_pd.columns if ('feature' in col) or ('responder' in col)]\n    print(\"Feature columns for prediction:\", feature_cols)  \n    \n    # Prepare the features for prediction\n    test_pd = test_pd.fillna(0)\n    print(\"Number of NaN values after filling:\", test_pd.isna().sum().sum())\n\n    model = get_model(CONFIG.seed, X_train, y_train, w_train)\n    # Make predictions using the XGB_Model\n    predictions = model.predict(test_pd[feature_cols])\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","metadata":{"trusted":true,"execution":{"execution_failed":"2025-01-13T04:06:02.859Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import kaggle_evaluation.jane_street_inference_server\n\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,"execution":{"execution_failed":"2025-01-13T04:06:02.859Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}