{"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"}],"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":{"iopub.status.busy":"2024-12-22T17:28:15.315542Z","iopub.execute_input":"2024-12-22T17:28:15.315955Z","iopub.status.idle":"2024-12-22T17:28:15.767231Z","shell.execute_reply.started":"2024-12-22T17:28:15.315883Z","shell.execute_reply":"2024-12-22T17:28:15.766074Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import warnings\nwarnings.filterwarnings(\"ignore\")\n\nimport numpy as np\nimport pandas as pd\n\n\nfrom sklearn import linear_model\nfrom sklearn.metrics import mean_squared_error, r2_score\n\nfrom sklearn.linear_model import LassoCV\nfrom sklearn.linear_model import lasso_path\n\nfrom sklearn.feature_selection import f_regression\nfrom sklearn.metrics import confusion_matrix\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.impute import KNNImputer\nfrom sklearn.preprocessing import OneHotEncoder, OrdinalEncoder, LabelEncoder\nfrom sklearn.model_selection import TimeSeriesSplit\nfrom sklearn.model_selection import GridSearchCV\nfrom lightgbm import LGBMRegressor\nfrom xgboost import XGBRegressor","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:28:15.768333Z","iopub.execute_input":"2024-12-22T17:28:15.768866Z","iopub.status.idle":"2024-12-22T17:28:20.248287Z","shell.execute_reply.started":"2024-12-22T17:28:15.768835Z","shell.execute_reply":"2024-12-22T17:28:20.246774Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Initialize a list to hold samples from each file\nsamples = []\n# Load a sample from each file\nfor i in range(10):\n    file_path = f\"/kaggle/input/jane-street-real-time-market-data-forecasting/train.parquet/partition_id={i}/part-0.parquet\"\n    chunk = pd.read_parquet(file_path)\n    \n    # Take a sample of the data (adjust sample size as needed)\n    sample_chunk = chunk.sample(n=400000, random_state=42)  # For example, 100 rows\n    # sample_chunk = chunk.sample(n=5000, random_state=42)  # For example, 100 rows\n    samples.append(sample_chunk)\n\n# Concatenate all samples into one DataFrame if needed\nsample_df = pd.concat(samples, ignore_index=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:28:20.249460Z","iopub.execute_input":"2024-12-22T17:28:20.250395Z","iopub.status.idle":"2024-12-22T17:29:49.024327Z","shell.execute_reply.started":"2024-12-22T17:28:20.250355Z","shell.execute_reply":"2024-12-22T17:29:49.023255Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sample_df","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:29:49.026251Z","iopub.execute_input":"2024-12-22T17:29:49.026729Z","iopub.status.idle":"2024-12-22T17:29:49.619590Z","shell.execute_reply.started":"2024-12-22T17:29:49.026634Z","shell.execute_reply":"2024-12-22T17:29:49.618544Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 將 sample_df 按照 date 與 time 排序\nsample_df = sample_df.sort_values(by=['date_id', 'time_id']).reset_index(drop=True)\nsample_df","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:29:49.621629Z","iopub.execute_input":"2024-12-22T17:29:49.622046Z","iopub.status.idle":"2024-12-22T17:29:58.041258Z","shell.execute_reply.started":"2024-12-22T17:29:49.622008Z","shell.execute_reply":"2024-12-22T17:29:58.040221Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Separate features and responders\nfeatures = sample_df.filter(regex='^feature_')\nresponders = sample_df.filter(regex='^responder_')\nfeatures","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:29:58.042259Z","iopub.execute_input":"2024-12-22T17:29:58.042645Z","iopub.status.idle":"2024-12-22T17:29:59.061437Z","shell.execute_reply.started":"2024-12-22T17:29:58.042608Z","shell.execute_reply":"2024-12-22T17:29:59.060362Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## 處理 Lag","metadata":{}},{"cell_type":"code","source":"# 將 sample_df 的 weight, feature_ 欄位去除\nresp = sample_df.drop(columns=['weight'])\nresp = resp.drop(columns=features.columns)\n\n# 將 resp date_id 欄位-1\nresp['date_id'] = resp['date_id'] - 1\nresp\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:29:59.062472Z","iopub.execute_input":"2024-12-22T17:29:59.062770Z","iopub.status.idle":"2024-12-22T17:29:59.659013Z","shell.execute_reply.started":"2024-12-22T17:29:59.062744Z","shell.execute_reply":"2024-12-22T17:29:59.657980Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"features_df = sample_df.drop(columns=responders.columns)\nfeatures_df[\"index\"] = features_df.index\nfeatures_df ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:29:59.659836Z","iopub.execute_input":"2024-12-22T17:29:59.660143Z","iopub.status.idle":"2024-12-22T17:30:00.863396Z","shell.execute_reply.started":"2024-12-22T17:29:59.660119Z","shell.execute_reply":"2024-12-22T17:30:00.862234Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 將 features, responders(前一天的) 合併\nmerged_df = pd.merge(features_df, resp, on=['date_id', 'time_id', 'symbol_id'], how='inner')\ndf = merged_df.drop(columns=['date_id', 'time_id'])\ninner_index = df['index']\ndf = df.drop(columns=['index'])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:30:00.864548Z","iopub.execute_input":"2024-12-22T17:30:00.864936Z","iopub.status.idle":"2024-12-22T17:30:03.980062Z","shell.execute_reply.started":"2024-12-22T17:30:00.864883Z","shell.execute_reply":"2024-12-22T17:30:03.978931Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 將 symbol_id 轉換成 0, 1, getdummies\nsymbol_id = df['symbol_id']\nsymbol_id_one_hot = pd.get_dummies(symbol_id, prefix='symbol_id')\n\n# 合併 symbol_id_one_hot 到 df\ndf = pd.concat([df, symbol_id_one_hot], axis=1)\ndf = df.drop(columns=['symbol_id'])\ndf = df.replace({True: 1, False: 0})\ndf","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:30:03.981075Z","iopub.execute_input":"2024-12-22T17:30:03.981447Z","iopub.status.idle":"2024-12-22T17:30:08.581581Z","shell.execute_reply.started":"2024-12-22T17:30:03.981408Z","shell.execute_reply":"2024-12-22T17:30:08.580549Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 將 df 標準化 minmax   \nfrom sklearn.preprocessing import MinMaxScaler\nscaler = MinMaxScaler()\ndf_scaler = scaler.fit_transform(df)\ndf_scaler = pd.DataFrame(df_scaler)\ndf_scaler\n\n# scaler = StandardScaler()\n# df_scaler = scaler.fit_transform(df)\n# df_scaler = pd.DataFrame(df)\n# df_scaler\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:30:08.582591Z","iopub.execute_input":"2024-12-22T17:30:08.582886Z","iopub.status.idle":"2024-12-22T17:30:09.635554Z","shell.execute_reply.started":"2024-12-22T17:30:08.582860Z","shell.execute_reply":"2024-12-22T17:30:09.634632Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X = df_scaler.values  \n# y = responders['responder_6'].values \ny = responders.iloc[inner_index]['responder_6']\n\n# Splitting the data into training and test sets\n# X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\nsplit_index = int(len(X) * 0.8)  # 前 80% 作為訓練集\n\n# 切分訓練集和測試集\nX_train, X_test = X[:split_index], X[split_index:]\ny_train, y_test = y[:split_index], y[split_index:]\n\n# Impute missing values with the median\nmedian = np.nanmedian(X_train, axis=0)  \nX_train = np.where(np.isnan(X_train), median, X_train)\nX_test = np.where(np.isnan(X_test), median, X_test)  # Apply medians directly to the test set\n\nX_train = np.nan_to_num(X_train, nan=0.0, posinf=0.0, neginf=0.0)\nX_test = np.nan_to_num(X_test, nan=0.0, posinf=0.0, neginf=0.0)\nprint(X_train.shape)\nprint(X_test.shape)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:30:09.636528Z","iopub.execute_input":"2024-12-22T17:30:09.636854Z","iopub.status.idle":"2024-12-22T17:30:11.128056Z","shell.execute_reply.started":"2024-12-22T17:30:09.636817Z","shell.execute_reply":"2024-12-22T17:30:11.126892Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### 使用tree選變數","metadata":{}},{"cell_type":"code","source":"lgb_model = LGBMRegressor(random_state=42)\nlgb_model.fit(X, y)\n\nsymbol_indices = np.where(lgb_model.feature_importances_<30)[0]\n\n# 刪除相應的列\nX_train = np.delete(X_train, symbol_indices, axis=1)\nX_test = np.delete(X_test, symbol_indices, axis=1)\n\n# 刪除後檢查新形狀\nprint(\"X_train 新形狀:\", X_train.shape)\nprint(\"X_test 新形狀:\", X_test.shape)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:30:11.131440Z","iopub.execute_input":"2024-12-22T17:30:11.131750Z","iopub.status.idle":"2024-12-22T17:30:21.642142Z","shell.execute_reply.started":"2024-12-22T17:30:11.131726Z","shell.execute_reply":"2024-12-22T17:30:21.641172Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"use_feature = df.columns[np.where(lgb_model.feature_importances_>=30)[0]]\n# symbol_indices","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:30:21.643615Z","iopub.execute_input":"2024-12-22T17:30:21.643881Z","iopub.status.idle":"2024-12-22T17:30:21.648583Z","shell.execute_reply.started":"2024-12-22T17:30:21.643859Z","shell.execute_reply":"2024-12-22T17:30:21.647511Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"use_feature_lag = [col + \"_lag_1\" if col.startswith(\"responder_\") else col for col in use_feature]\nprint(use_feature_lag)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:30:21.649570Z","iopub.execute_input":"2024-12-22T17:30:21.649850Z","iopub.status.idle":"2024-12-22T17:30:21.668588Z","shell.execute_reply.started":"2024-12-22T17:30:21.649828Z","shell.execute_reply":"2024-12-22T17:30:21.667584Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Modeling","metadata":{}},{"cell_type":"code","source":" tscv = TimeSeriesSplit(n_splits=5)\n lasso_cv = LassoCV(alphas=None, cv=tscv, max_iter=10000, random_state=2023)\n linear_lasso = lasso_cv.fit(X_train, y_train)\n\n print(\"最好的alpha值:\", lasso_cv.alpha_)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:30:21.669627Z","iopub.execute_input":"2024-12-22T17:30:21.670008Z","iopub.status.idle":"2024-12-22T17:30:26.781639Z","shell.execute_reply.started":"2024-12-22T17:30:21.669976Z","shell.execute_reply":"2024-12-22T17:30:26.779472Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"lasso_model = linear_model.Lasso(alpha=lasso_cv.alpha_, random_state=42)  # Alpha controls the regularization\nlasso_model.fit(X_train, y_train)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:30:26.782630Z","iopub.execute_input":"2024-12-22T17:30:26.783008Z","iopub.status.idle":"2024-12-22T17:30:27.785185Z","shell.execute_reply.started":"2024-12-22T17:30:26.782976Z","shell.execute_reply":"2024-12-22T17:30:27.784206Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# LightGBM Hyperparameter Tuning\nlgb_params = {\n    'learning_rate': [0.01, 0.05, 0.1],  # Learning rate\n    'num_leaves': [31, 63, 127],  # Number of leaves per tree\n}\ntscv = TimeSeriesSplit(n_splits=5)\n\nlgb_model = LGBMRegressor(random_state=42)\nlgb_grid = GridSearchCV(estimator=lgb_model, param_grid=lgb_params, scoring=\"r2\", cv=tscv, n_jobs=-1)\nlgb_grid.fit(X_train, y_train)\n\nprint(\"Best LightGBM Parameters:\")\nprint(lgb_grid.best_params_)\n\n# 4. XGBoost Hyperparameter Tuning\nxgb_params = {\n    'learning_rate': [0.01, 0.05, 0.1],  # Learning rate\n    'max_depth': [3, 5, 7],  # Maximum depth of trees\n}\n\nxgb_model = XGBRegressor(random_state=42)\nxgb_grid = GridSearchCV(estimator=xgb_model, param_grid=xgb_params, scoring=\"r2\", cv=tscv, n_jobs=-1)\nxgb_grid.fit(X_train, y_train)\n\nprint(\"\\nBest XGBoost Parameters:\")\nprint(xgb_grid.best_params_)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:36:34.479996Z","iopub.execute_input":"2024-12-22T17:36:34.480524Z","iopub.status.idle":"2024-12-22T17:44:32.931530Z","shell.execute_reply.started":"2024-12-22T17:36:34.480481Z","shell.execute_reply":"2024-12-22T17:44:32.929747Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Evaluation","metadata":{}},{"cell_type":"code","source":"def mape(y_ture, y_pred):\n    return  np.sum(np.abs(y_ture-y_pred) / y_ture) / len(y_ture)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:33:11.605631Z","iopub.execute_input":"2024-12-22T17:33:11.606020Z","iopub.status.idle":"2024-12-22T17:33:11.611396Z","shell.execute_reply.started":"2024-12-22T17:33:11.605986Z","shell.execute_reply":"2024-12-22T17:33:11.610437Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def performance(model, X_test, y_test):\n    # testing\n    y_test_pred = model.predict(X_test)\n    \n    r2_test = r2_score(y_test, y_test_pred)\n    rmse_test = mean_squared_error(y_test, y_test_pred)**0.5\n    mape_test = mape(y_test, y_test_pred)\n    test_per = [r2_test, rmse_test, mape_test]\n    print(\"r2_test:\", r2_test)\n    print(\"rmse_test:\", rmse_test)\n    print(\"mape_test:\", mape_test)\n    print(\"\")\n    \n    return test_per","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:33:11.612404Z","iopub.execute_input":"2024-12-22T17:33:11.612723Z","iopub.status.idle":"2024-12-22T17:33:11.631432Z","shell.execute_reply.started":"2024-12-22T17:33:11.612698Z","shell.execute_reply":"2024-12-22T17:33:11.630224Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 3. Model evaluation\nperformance(lasso_model,X_test, y_test)\nperformance(lgb_grid,X_test, y_test)\nperformance(xgb_grid,X_test, y_test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:44:32.933869Z","iopub.execute_input":"2024-12-22T17:44:32.934273Z","iopub.status.idle":"2024-12-22T17:44:33.364415Z","shell.execute_reply.started":"2024-12-22T17:44:32.934243Z","shell.execute_reply":"2024-12-22T17:44:33.363311Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Submission","metadata":{}},{"cell_type":"code","source":"model = xgb_grid","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:33:11.720139Z","iopub.execute_input":"2024-12-22T17:33:11.720437Z","iopub.status.idle":"2024-12-22T17:33:11.725211Z","shell.execute_reply.started":"2024-12-22T17:33:11.720412Z","shell.execute_reply":"2024-12-22T17:33:11.724063Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\nimport polars as pl\nimport kaggle_evaluation.jane_street_inference_server","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:33:11.726659Z","iopub.execute_input":"2024-12-22T17:33:11.727152Z","iopub.status.idle":"2024-12-22T17:33:12.338458Z","shell.execute_reply.started":"2024-12-22T17:33:11.727109Z","shell.execute_reply":"2024-12-22T17:33:12.337287Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import polars as pl\nimport numpy as np\n\ndef predict(test: pl.DataFrame, lags: pl.DataFrame | None) -> pl.DataFrame:\n    \"\"\"Make a prediction.\"\"\"\n    global lags_\n    if lags is not None:\n        lags_ = lags\n        # 將 test, lags 合併\n        # test_df = test.join(lags_, on=['date_id', 'time_id', 'symbol_id'], how=\"inner\")\n        test_df = test.join(lags_, on=['date_id', 'time_id', 'symbol_id'], how=\"left\")\n        new_test = test_df.select(use_feature_lag).to_numpy()\n\n    else:\n        test_df = test\n        missing_features = [col for col in use_feature_lag if col not in test_df.columns]\n        for col in missing_features:\n            test_df = test_df.with_columns(pl.lit(0).alias(col))\n    \n    # 選擇所有需要的欄位（存在的欄位和補充的欄位）\n    new_test = test_df.select(use_feature_lag).to_numpy()\n    \n    new_median = np.nanmedian(new_test, axis=0)  \n    new_test = np.where(np.isnan(new_test), new_median, new_test)\n    new_test = np.nan_to_num(new_test, nan=0.0, posinf=0.0, neginf=0.0)\n    print(new_test.shape)\n\n    # 模型預測\n    responder_6_predictions = model.predict(new_test)\n    # 創建預測結果 DataFrame\n    predictions = test.select(\"row_id\").with_columns(\n        pl.Series(\"responder_6\", responder_6_predictions)\n    )\n    print(predictions)\n  \n    # 打印預測結果中的 row_id\n    # print(\"Predicted row_id:\", predictions[\"row_id\"].to_list())\n    \n\n    # Ensure the output format and length requirements\n    if isinstance(predictions, pl.DataFrame):\n        assert predictions.columns == ['row_id', 'responder_6']\n    elif isinstance(predictions, pd.DataFrame):\n        assert (predictions.columns == ['row_id', 'responder_6']).all()\n    else:\n        raise TypeError('The predict function must return a DataFrame')\n    assert len(predictions) == len(test)\n    return predictions","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:33:12.339695Z","iopub.execute_input":"2024-12-22T17:33:12.341065Z","iopub.status.idle":"2024-12-22T17:33:12.351685Z","shell.execute_reply.started":"2024-12-22T17:33:12.341011Z","shell.execute_reply":"2024-12-22T17:33:12.350140Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# import traceback\n\n# def predict(test: pl.DataFrame, lags: pl.DataFrame | None) -> pl.DataFrame:\n#     \"\"\"Make a prediction.\"\"\"\n#     try:\n#         global lags_\n#         if lags is not None:\n#             lags_ = lags\n\n#         # 合併 test 和 lags_\n#         try:\n#             test_df = test.join(lags_, on=['date_id', 'time_id', 'symbol_id'], how=\"inner\")\n#         except Exception as e:\n#             print(\"Error during merging test and lags:\")\n#             traceback.print_exc()\n#             raise\n\n#         # 選擇特徵並轉換為 NumPy\n#         try:\n#             new_test = test_df.select(use_feature_lag).to_numpy()\n#             new_median = np.nanmedian(new_test, axis=0)\n#             new_test = np.where(np.isnan(new_test), new_median, new_test)\n#             new_test = np.nan_to_num(new_test, nan=0.0, posinf=0.0, neginf=0.0)\n#         except Exception as e:\n#             print(\"Error during feature selection or transformation:\")\n#             traceback.print_exc()\n#             raise\n\n#         # 模型預測\n#         try:\n#             responder_6_predictions = model.predict(new_test)\n#         except Exception as e:\n#             print(\"Error during model prediction:\")\n#             traceback.print_exc()\n#             raise\n\n#         # 創建預測結果\n#         try:\n#             predictions = test.select(\"row_id\").with_columns(\n#                 pl.Series(\"responder_6\", responder_6_predictions)\n#             )\n#             predictions = predictions.sort(\"row_id\")\n#         except Exception as e:\n#             print(\"Error during result creation:\")\n#             traceback.print_exc()\n#             raise\n\n#         # 確保格式正確\n#         assert predictions.columns == [\"row_id\", \"responder_6\"]\n#         assert len(predictions) == len(test)\n#         return predictions\n#     except Exception as e:\n#         print(\"Unhandled exception in predict function:\")\n#         traceback.print_exc()\n#         raise\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T17:33:12.353195Z","iopub.execute_input":"2024-12-22T17:33:12.353676Z","iopub.status.idle":"2024-12-22T17:33:12.379574Z","shell.execute_reply.started":"2024-12-22T17:33:12.353626Z","shell.execute_reply":"2024-12-22T17:33:12.378382Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"inference_server = kaggle_evaluation.jane_street_inference_server.JSInferenceServer(predict)\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-12-22T17:33:12.380862Z","iopub.execute_input":"2024-12-22T17:33:12.381257Z","iopub.status.idle":"2024-12-22T17:33:12.837073Z","shell.execute_reply.started":"2024-12-22T17:33:12.381224Z","shell.execute_reply":"2024-12-22T17:33:12.835900Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}