{"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","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"}],"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false},"papermill":{"default_parameters":{},"duration":2880.91479,"end_time":"2024-10-31T04:00:33.930832","environment_variables":{},"exception":null,"input_path":"__notebook__.ipynb","output_path":"__notebook__.ipynb","parameters":{},"start_time":"2024-10-31T03:12:33.016042","version":"2.6.0"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Jane Street Optuna LGBM","metadata":{"papermill":{"duration":0.008092,"end_time":"2024-10-31T03:12:35.623661","exception":false,"start_time":"2024-10-31T03:12:35.615569","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"https://www.kaggle.com/code/stpeteishii/jane-street-optuna-lgbm\n\nhttps://www.kaggle.com/code/stpeteishii/jane-street-lgbm-w-best-trial-submission\n\nhttps://www.kaggle.com/code/stpeteishii/jane-street-lgbm-w-trained-model-submission","metadata":{"papermill":{"duration":0.006815,"end_time":"2024-10-31T03:12:35.637906","exception":false,"start_time":"2024-10-31T03:12:35.631091","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nimport random\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom contextlib import contextmanager\nfrom time import time\nfrom tqdm import tqdm\nimport lightgbm as lgb\nimport category_encoders as ce\nfrom tensorflow.keras.utils import to_categorical\nfrom sklearn.metrics import classification_report, log_loss, accuracy_score\nfrom sklearn.metrics import mean_squared_error\nfrom sklearn.model_selection import KFold, train_test_split\nimport optuna\nimport yaml\nimport polars as pl\nimport kaggle_evaluation.jane_street_inference_server\nimport json","metadata":{"papermill":{"duration":17.506306,"end_time":"2024-10-31T03:12:53.151681","exception":false,"start_time":"2024-10-31T03:12:35.645375","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T03:58:05.175039Z","iopub.execute_input":"2025-01-05T03:58:05.175317Z","iopub.status.idle":"2025-01-05T03:58:17.671622Z","shell.execute_reply.started":"2025-01-05T03:58:05.175287Z","shell.execute_reply":"2025-01-05T03:58:17.670961Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Data preparation","metadata":{"papermill":{"duration":0.0072,"end_time":"2024-10-31T03:12:53.166545","exception":false,"start_time":"2024-10-31T03:12:53.159345","status":"completed"},"tags":[]}},{"cell_type":"code","source":"train0 = pd.read_parquet('/kaggle/input/jane-street-real-time-market-data-forecasting/train.parquet/partition_id=0/part-0.parquet')\ntest = pd.read_parquet('/kaggle/input/jane-street-real-time-market-data-forecasting/test.parquet/date_id=0/part-0.parquet')\n\nprint(len(train0))\nprint(len(test))\ntrain0 = train0.sample(frac=1, random_state=42).reset_index(drop=True)\n\ntcols0=test.columns.tolist()\nprint(tcols0)\ntcols=[ 'date_id', 'time_id', 'symbol_id', 'weight',  'feature_00', 'feature_01', 'feature_02', 'feature_03', 'feature_04', 'feature_05', 'feature_06', 'feature_07', 'feature_08', 'feature_09', 'feature_10', 'feature_11', 'feature_12', 'feature_13', 'feature_14', 'feature_15', 'feature_16', 'feature_17', 'feature_18', 'feature_19', 'feature_20', 'feature_21', 'feature_22', 'feature_23', 'feature_24', 'feature_25', 'feature_26', 'feature_27', 'feature_28', 'feature_29', 'feature_30', 'feature_31', 'feature_32', 'feature_33', 'feature_34', 'feature_35', 'feature_36', 'feature_37', 'feature_38', 'feature_39', 'feature_40', 'feature_41', 'feature_42', 'feature_43', 'feature_44', 'feature_45', 'feature_46', 'feature_47', 'feature_48', 'feature_49', 'feature_50', 'feature_51', 'feature_52', 'feature_53', 'feature_54', 'feature_55', 'feature_56', 'feature_57', 'feature_58', 'feature_59', 'feature_60', 'feature_61', 'feature_62', 'feature_63', 'feature_64', 'feature_65', 'feature_66', 'feature_67', 'feature_68', 'feature_69', 'feature_70', 'feature_71', 'feature_72', 'feature_73', 'feature_74', 'feature_75', 'feature_76', 'feature_77', 'feature_78']\ntarget='responder_6'\ndataX=train0[tcols]\ndataY=train0[target]\nTESTX=test[tcols]","metadata":{"papermill":{"duration":4.810388,"end_time":"2024-10-31T03:12:57.985024","exception":false,"start_time":"2024-10-31T03:12:53.174636","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T03:58:17.672513Z","iopub.execute_input":"2025-01-05T03:58:17.673163Z","iopub.status.idle":"2025-01-05T03:58:22.873177Z","shell.execute_reply.started":"2025-01-05T03:58:17.673137Z","shell.execute_reply":"2025-01-05T03:58:22.872313Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Target setting","metadata":{"papermill":{"duration":0.007451,"end_time":"2024-10-31T03:12:58.000407","exception":false,"start_time":"2024-10-31T03:12:57.992956","status":"completed"},"tags":[]}},{"cell_type":"code","source":"df_columns = list(dataX.columns)\nprint(df_columns)\n\nm=len(dataX)\nprint(m)\nM=list(range(m))\nrandom.seed(2021)\nrandom.shuffle(M)\n\ntrainX=dataX.iloc[M[0:(m//5)*4]]\ntrainY=dataY.iloc[M[0:(m//5)*4]]\ntestX=dataX.iloc[M[(m//5)*4:]]\ntestY=dataY.iloc[M[(m//5)*4:]]\n\ntrain_df=trainX\ntest_df=testX\n\ntrain_df.columns=df_columns\ntest_df.columns=df_columns","metadata":{"papermill":{"duration":3.797718,"end_time":"2024-10-31T03:13:01.805635","exception":false,"start_time":"2024-10-31T03:12:58.007917","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T03:58:22.874062Z","iopub.execute_input":"2025-01-05T03:58:22.874387Z","iopub.status.idle":"2025-01-05T03:58:26.083506Z","shell.execute_reply.started":"2025-01-05T03:58:22.874353Z","shell.execute_reply":"2025-01-05T03:58:26.082786Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"---","metadata":{"papermill":{"duration":0.007292,"end_time":"2024-10-31T03:13:01.820693","exception":false,"start_time":"2024-10-31T03:13:01.813401","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"# valid_df","metadata":{"papermill":{"duration":0.007238,"end_time":"2024-10-31T03:13:01.835367","exception":false,"start_time":"2024-10-31T03:13:01.828129","status":"completed"},"tags":[]}},{"cell_type":"code","source":"valid_from = 1455 # for private you should change to 1455 (1 year)\nalltraindata = pl.scan_parquet(\"/kaggle/input/jane-street-real-time-market-data-forecasting/train.parquet\")\nvalid_df = alltraindata.filter(pl.col(\"date_id\")>=valid_from).collect()\nvalid_df = valid_df.with_columns(pl.Series(range(len(valid_df))).alias(\"row_id\"))\nweights = valid_df.select(\"weight\").to_numpy().reshape(-1)\n\nlen(valid_df)\ndisplay(valid_df[0:2])\nprint(weights)\nprint(weights.shape)","metadata":{"papermill":{"duration":8.351951,"end_time":"2024-10-31T03:13:10.194697","exception":false,"start_time":"2024-10-31T03:13:01.842746","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T03:58:26.084125Z","iopub.execute_input":"2025-01-05T03:58:26.084327Z","iopub.status.idle":"2025-01-05T03:58:34.342532Z","shell.execute_reply.started":"2025-01-05T03:58:26.084309Z","shell.execute_reply":"2025-01-05T03:58:34.341667Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"weights","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T03:58:34.343402Z","iopub.execute_input":"2025-01-05T03:58:34.343661Z","iopub.status.idle":"2025-01-05T03:58:34.348964Z","shell.execute_reply.started":"2025-01-05T03:58:34.343619Z","shell.execute_reply":"2025-01-05T03:58:34.348184Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# weighted_zero_mean_r2","metadata":{"papermill":{"duration":0.007574,"end_time":"2024-10-31T03:13:10.210302","exception":false,"start_time":"2024-10-31T03:13:10.202728","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def weighted_zero_mean_r2(y_true, y_pred, weights):\n    \"\"\"\n    Calculate the sample weighted zero-mean R-squared score.\n\n    Parameters:\n    y_true (numpy.ndarray): Ground-truth values for responder_6.\n    y_pred (numpy.ndarray): Predicted values for responder_6.\n    weights (numpy.ndarray): Sample weight vector.\n\n    Returns:\n    float: The weighted zero-mean R-squared score.\n    \"\"\"\n    numerator = np.sum(weights * (y_true - y_pred)**2)\n    denominator = np.sum(weights * y_true**2)\n    \n    r2_score = 1 - numerator / denominator\n    return r2_score","metadata":{"papermill":{"duration":0.017432,"end_time":"2024-10-31T03:13:10.235931","exception":false,"start_time":"2024-10-31T03:13:10.218499","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T03:58:34.350849Z","iopub.execute_input":"2025-01-05T03:58:34.351055Z","iopub.status.idle":"2025-01-05T03:58:34.372918Z","shell.execute_reply.started":"2025-01-05T03:58:34.351038Z","shell.execute_reply":"2025-01-05T03:58:34.372002Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Optuna","metadata":{"papermill":{"duration":0.007502,"end_time":"2024-10-31T03:13:10.251373","exception":false,"start_time":"2024-10-31T03:13:10.243871","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def objective0_fixed(data=trainX, target=trainY):\n    from sklearn.model_selection import train_test_split\n    import lightgbm as lgb\n    \n    # Split the data\n    train_x, test_x, train_y, test_y = train_test_split(data, target, test_size=0.2, random_state=42)\n\n    # Fixed parameter values\n    param = {\n        'lambda_l1': 0.0016693745454637197,\n        'lambda_l2': 10.07496298829979,\n        'bagging_freq': 5,\n        'bagging_fraction': 0.5625928201192897,\n        'feature_fraction': 0.7530331798144458,\n        'learning_rate': 0.07109179045308964,\n        'verbosity': 8,\n        'max_depth': 9,\n        'colsample_bytree': 0.5198241445546926,\n        'min_child_samples': 17,\n        'subsample_freq': 4,\n        'subsample': 0.9727650415253277,\n        'reg_lambda': 0.20767092953307742,\n        'reg_alpha': 0.05331399004989085,\n        \n        # Additional fixed parameters\n        'objective': 'rmse',\n        'random_state': 65,\n        'num_leaves': 65,\n        'n_estimators': 100,\n        'importance_type': 'gain',\n    }\n\n    # Initialize the model\n    model = lgb.LGBMRegressor(**param)\n    \n    # Fit the model\n    model.fit(train_x, train_y, eval_set=[(test_x, test_y)], verbose=0)\n    \n    # Predict on the test set\n    preds = model.predict(test_x)\n\n    # Apply weights to the predictions (assuming weights is predefined)\n    weights2 = weights[0:len(preds)]\n    \n    # Calculate the weighted R² score\n    r2_score = weighted_zero_mean_r2(test_y, preds, weights2)\n    \n    return r2_score\n\n","metadata":{"papermill":{"duration":0.082765,"end_time":"2024-10-31T03:13:10.342109","exception":false,"start_time":"2024-10-31T03:13:10.259344","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T03:58:34.374437Z","iopub.execute_input":"2025-01-05T03:58:34.374678Z","iopub.status.idle":"2025-01-05T03:58:34.385121Z","shell.execute_reply.started":"2025-01-05T03:58:34.374631Z","shell.execute_reply":"2025-01-05T03:58:34.384252Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import yaml\n\n# Define the fixed parameters\nBest_trial = {\n    'lambda_l1': 0.0016693745454637197,\n    'lambda_l2': 10.07496298829979,\n    'bagging_freq': 5,\n    'bagging_fraction': 0.5625928201192897,\n    'feature_fraction': 0.7530331798144458,\n    'learning_rate': 0.07109179045308964,\n    'verbosity': 8,\n    'max_depth': 9,\n    'colsample_bytree': 0.5198241445546926,\n    'min_child_samples': 17,\n    'subsample_freq': 4,\n    'subsample': 0.9727650415253277,\n    'reg_lambda': 0.20767092953307742,\n    'reg_alpha': 0.05331399004989085,\n}\n\n# Add fixed parameters to the dictionary\nfix_dict = {\n    'objective': 'rmse',\n    'random_state': 65,\n    'num_leaves': 65,\n    'n_estimators': 100,\n    'importance_type': 'gain'\n}\nBest_trial.update(fix_dict)\n\n# Save the fixed parameters to a YAML file\nwith open(\"Best_trial_fixed.yaml\", \"w\") as yaml_file:\n    yaml.dump(Best_trial, yaml_file)\n\n# Store the parameters for future use\nBestTrials = [Best_trial]\nStudies = []  # Since no `optuna` study is being conducted\n\n# Print the fixed parameters\nprint('Fixed parameters:', Best_trial)\n","metadata":{"_kg_hide-output":true,"papermill":{"duration":2701.20518,"end_time":"2024-10-31T03:58:11.555101","exception":false,"start_time":"2024-10-31T03:13:10.349921","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T03:58:34.386014Z","iopub.execute_input":"2025-01-05T03:58:34.386302Z","iopub.status.idle":"2025-01-05T03:58:34.406190Z","shell.execute_reply.started":"2025-01-05T03:58:34.386271Z","shell.execute_reply":"2025-01-05T03:58:34.405394Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"---","metadata":{"papermill":{"duration":0.135176,"end_time":"2024-10-31T03:58:11.822934","exception":false,"start_time":"2024-10-31T03:58:11.687758","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def create_numeric_feature(input_df):\n    use_columns = df_columns \n    return input_df[use_columns].copy()","metadata":{"papermill":{"duration":0.140961,"end_time":"2024-10-31T03:58:12.114962","exception":false,"start_time":"2024-10-31T03:58:11.974001","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T03:58:34.406988Z","iopub.execute_input":"2025-01-05T03:58:34.407177Z","iopub.status.idle":"2025-01-05T03:58:34.422782Z","shell.execute_reply.started":"2025-01-05T03:58:34.407160Z","shell.execute_reply":"2025-01-05T03:58:34.422058Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from contextlib import contextmanager\nfrom time import time\n\nclass Timer:\n    def __init__(self, logger=None, format_str='{:.3f}[s]', prefix=None, suffix=None, sep=' '):\n\n        if prefix: format_str = str(prefix) + sep + format_str\n        if suffix: format_str = format_str + sep + str(suffix)\n        self.format_str = format_str\n        self.logger = logger\n        self.start = None\n        self.end = None\n\n    @property\n    def duration(self):\n        if self.end is None:\n            return 0\n        return self.end - self.start\n\n    def __enter__(self):\n        self.start = time()\n\n    def __exit__(self, exc_type, exc_val, exc_tb):\n        self.end = time()\n        out_str = self.format_str.format(self.duration)\n        if self.logger:\n            self.logger.info(out_str)\n        else:\n            print(out_str)","metadata":{"papermill":{"duration":0.145217,"end_time":"2024-10-31T03:58:12.391249","exception":false,"start_time":"2024-10-31T03:58:12.246032","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T03:58:34.423527Z","iopub.execute_input":"2025-01-05T03:58:34.423766Z","iopub.status.idle":"2025-01-05T03:58:34.437795Z","shell.execute_reply.started":"2025-01-05T03:58:34.423732Z","shell.execute_reply":"2025-01-05T03:58:34.437030Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from tqdm import tqdm\n\ndef to_feature(input_df):\n\n    processors = [\n        create_numeric_feature,\n    ]\n    \n    out_df = pd.DataFrame()\n    \n    for func in tqdm(processors, total=len(processors)):\n        with Timer(prefix='create' + func.__name__ + ' '):\n            _df = func(input_df)\n\n        assert len(_df) == len(input_df), func.__name__\n        out_df = pd.concat([out_df, _df], axis=1)\n        \n    return out_df","metadata":{"papermill":{"duration":0.141041,"end_time":"2024-10-31T03:58:12.666916","exception":false,"start_time":"2024-10-31T03:58:12.525875","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T03:58:34.438427Z","iopub.execute_input":"2025-01-05T03:58:34.438606Z","iopub.status.idle":"2025-01-05T03:58:34.454283Z","shell.execute_reply.started":"2025-01-05T03:58:34.438588Z","shell.execute_reply":"2025-01-05T03:58:34.453546Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_feat_df = to_feature(train_df)\ntest_feat_df = to_feature(test_df)","metadata":{"papermill":{"duration":0.798751,"end_time":"2024-10-31T03:58:13.599703","exception":false,"start_time":"2024-10-31T03:58:12.800952","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T03:58:34.455018Z","iopub.execute_input":"2025-01-05T03:58:34.455219Z","iopub.status.idle":"2025-01-05T03:58:35.086982Z","shell.execute_reply.started":"2025-01-05T03:58:34.455200Z","shell.execute_reply":"2025-01-05T03:58:35.086168Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Model","metadata":{"papermill":{"duration":0.132064,"end_time":"2024-10-31T03:58:13.86397","exception":false,"start_time":"2024-10-31T03:58:13.731906","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"# from joblib import Parallel, delayed","metadata":{"papermill":{"duration":0.13286,"end_time":"2024-10-31T03:58:14.398356","exception":false,"start_time":"2024-10-31T03:58:14.265496","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"    This code uses `Parallel` and `delayed` to train models in parallel for each cross-validation split (`cv`). By setting `n_jobs`, it specifies the number of processes to run simultaneously, and each fold is processed independently by calling the `train_fold` function in parallel. This approach can significantly improve the overall training speed.\n\n    The main benefits are:\n\n    1. **Faster Processing**: By running each fold training concurrently across multiple CPU cores, training time is reduced.\n    \n    2. **Efficient Resource Utilization**: Setting `n_jobs` optimally allows for maximized use of CPU resources, enhancing performance.\n    \n    3. **Scalability**: Especially useful for large datasets or complex models where training is time-consuming.\n\n    However, parallelization increases memory usage, so it’s best used in environments with sufficient memory capacity.","metadata":{"papermill":{"duration":0.188117,"end_time":"2024-10-31T03:58:14.721019","exception":false,"start_time":"2024-10-31T03:58:14.532902","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import joblib\nfrom joblib import Parallel, delayed\n\n\ndef fit_lgb(X, y, cv, params: dict = None, n_jobs: int = 1):\n    if params is None:\n        params = {}\n\n    models = []\n    oof_pred = np.zeros_like(y, dtype=np.float32) \n\n    def train_fold(i, idx_train, idx_valid):\n        x_train, y_train = X[idx_train], y[idx_train]\n        x_valid, y_valid = X[idx_valid], y[idx_valid]\n\n        clf = clf = lgb.LGBMRegressor(**params)\n        with Timer(prefix=f'fit fold={i} '):\n            clf.fit(\n                x_train, y_train,\n                eval_set=[(x_valid, y_valid)],\n            )\n\n        pred_i = clf.predict(x_valid)\n        oof_pred[idx_valid] = pred_i\n        models.append(clf)\n\n        # Save Booster and params to file\n        #clf.booster_.save_model(f'model_fold_{i}.model')  # Save Booster\n        #with open(f'model_fold_{i}_params.json', 'w') as f:\n        #    json.dump(clf.get_params(), f)  # Save parameters to JSON\n\n        joblib.dump(clf, f'model_fold_{i}.pkl')  \n        with open(f'model_fold_{i}_params.json', 'w') as f:\n            json.dump(clf.get_params(), f)           \n            \n        return clf\n\n    models = Parallel(n_jobs=n_jobs)(delayed(train_fold)(i, idx_train, idx_valid) for i, (idx_train, idx_valid) in enumerate(cv))\n\n    weights2=weights[0:len(y)]\n    r2_score=weighted_zero_mean_r2(y, oof_pred, weights2)\n\n    print('-' * 50)\n    print('FINISHED | r2_score: {:.4f}'.format(r2_score))\n    return oof_pred, models","metadata":{"papermill":{"duration":0.144119,"end_time":"2024-10-31T03:58:14.998181","exception":false,"start_time":"2024-10-31T03:58:14.854062","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T03:58:35.087790Z","iopub.execute_input":"2025-01-05T03:58:35.088054Z","iopub.status.idle":"2025-01-05T03:58:35.095709Z","shell.execute_reply.started":"2025-01-05T03:58:35.088021Z","shell.execute_reply":"2025-01-05T03:58:35.094738Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y = trainY\nydf=pd.DataFrame(y)","metadata":{"papermill":{"duration":0.142196,"end_time":"2024-10-31T03:58:15.538318","exception":false,"start_time":"2024-10-31T03:58:15.396122","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T03:58:35.096613Z","iopub.execute_input":"2025-01-05T03:58:35.096932Z","iopub.status.idle":"2025-01-05T03:58:35.111186Z","shell.execute_reply.started":"2025-01-05T03:58:35.096902Z","shell.execute_reply":"2025-01-05T03:58:35.110508Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.model_selection import KFold\nfor i in range(1):\n    fold = KFold(n_splits=5, shuffle=True, random_state=71)\n    ydfi=ydf.iloc[:,i]\n    y=np.array(ydfi)\n    cv = list(fold.split(train_feat_df, y))\n    oof, models = fit_lgb(train_feat_df.values, y, cv, params=Best_trial)","metadata":{"_kg_hide-output":true,"papermill":{"duration":129.264431,"end_time":"2024-10-31T04:00:24.934724","exception":false,"start_time":"2024-10-31T03:58:15.670293","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T03:58:35.111895Z","iopub.execute_input":"2025-01-05T03:58:35.112141Z","iopub.status.idle":"2025-01-05T04:00:29.335560Z","shell.execute_reply.started":"2025-01-05T03:58:35.112121Z","shell.execute_reply":"2025-01-05T04:00:29.334707Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"preds=[]\nfor i in range(5):\n    preds += [models[i].predict(test_feat_df.values)/5]\npredsT=np.array(preds).T\npreds2=[]\n\nfor item in predsT:\n    value=sum(item)\n    preds2+=[value]\nprint(preds2[0:5])","metadata":{"papermill":{"duration":3.704704,"end_time":"2024-10-31T04:00:28.775987","exception":false,"start_time":"2024-10-31T04:00:25.071283","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T04:00:29.336521Z","iopub.execute_input":"2025-01-05T04:00:29.336843Z","iopub.status.idle":"2025-01-05T04:00:38.614969Z","shell.execute_reply.started":"2025-01-05T04:00:29.336805Z","shell.execute_reply":"2025-01-05T04:00:38.614138Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"---","metadata":{"papermill":{"duration":0.136543,"end_time":"2024-10-31T04:00:29.048213","exception":false,"start_time":"2024-10-31T04:00:28.91167","status":"completed"},"tags":[]}},{"cell_type":"code","source":"","metadata":{"papermill":{"duration":0.136483,"end_time":"2024-10-31T04:00:29.320831","exception":false,"start_time":"2024-10-31T04:00:29.184348","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"submission will be done here\n\nhttps://www.kaggle.com/code/stpeteishii/jane-street-lgbm-submission","metadata":{"papermill":{"duration":0.136044,"end_time":"2024-10-31T04:00:29.593824","exception":false,"start_time":"2024-10-31T04:00:29.45778","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"Submission for API","metadata":{"papermill":{"duration":0.19052,"end_time":"2024-10-31T04:00:29.920642","exception":false,"start_time":"2024-10-31T04:00:29.730122","status":"completed"},"tags":[]}},{"cell_type":"code","source":"lags_ : pl.DataFrame | None = None\n\ndef predict(test: pl.DataFrame, lags: pl.DataFrame | None) -> pl.DataFrame | pd.DataFrame:\n\n    global lags_,df_columns\n    if lags is not None:\n        lags_ = lags\n\n    predictions = test.select(\n        'row_id',\n        pl.lit(0.0).alias('responder_6'),\n    )\n\n    x_test = test[df_columns].to_pandas()\n    pred = []\n    for i in range(5):\n        pred += [models[i].predict(x_test.values)/5] \n\n    pred = np.mean(pred, axis=0)\n\n    predictions = predictions.with_columns(pl.Series('responder_6', pred.ravel()))\n\n    return predictions","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T04:13:31.343948Z","iopub.execute_input":"2025-01-05T04:13:31.344287Z","iopub.status.idle":"2025-01-05T04:13:31.349972Z","shell.execute_reply.started":"2025-01-05T04:13:31.344257Z","shell.execute_reply":"2025-01-05T04:13:31.349089Z"}},"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        )\n    )\n    ","metadata":{"papermill":{"duration":0.136128,"end_time":"2024-10-31T04:00:30.74227","exception":false,"start_time":"2024-10-31T04:00:30.606142","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T04:13:33.855322Z","iopub.execute_input":"2025-01-05T04:13:33.855623Z","iopub.status.idle":"2025-01-05T04:13:33.894050Z","shell.execute_reply.started":"2025-01-05T04:13:33.855599Z","shell.execute_reply":"2025-01-05T04:13:33.893318Z"}},"outputs":[],"execution_count":null}]}