{"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"}],"dockerImageVersionId":30786,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# **Imports**","metadata":{}},{"cell_type":"code","source":"import pandas as pd \nimport polars as pl \nimport numpy as np\nimport os\nfrom glob import glob\n\n%matplotlib inline\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nimport time\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import confusion_matrix, classification_report,  roc_curve,auc, roc_auc_score, r2_score\n\nfrom sklearn.linear_model import ElasticNet\nfrom xgboost import XGBRegressor\nfrom lightgbm import LGBMRegressor\n\n\nimport tensorflow as tf\nfrom tensorflow.keras import backend as K\nfrom tensorflow.keras.callbacks import EarlyStopping\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras.layers import Input, Dense\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.regularizers import l2","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:40.491427Z","iopub.execute_input":"2024-12-17T09:01:40.491837Z","iopub.status.idle":"2024-12-17T09:01:43.855008Z","shell.execute_reply.started":"2024-12-17T09:01:40.491786Z","shell.execute_reply":"2024-12-17T09:01:43.853692Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# **Functions** ","metadata":{}},{"cell_type":"code","source":"class CNG:\n    train_path = \"/kaggle/input/jane-street-real-time-market-data-forecasting/train.parquet\"\n    test_path = \"/kaggle/input/jane-street-real-time-market-data-forecasting/test.parquet\"\n    lagged_path = \"/kaggle/input/jane-street-real-time-market-data-forecasting/lags.parquet\"\n    responders_path = \"/kaggle/input/jane-street-real-time-market-data-forecasting/responders.csv\"\n    features_path = \"/kaggle/input/jane-street-real-time-market-data-forecasting/features.csv\"","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:43.856901Z","iopub.execute_input":"2024-12-17T09:01:43.857512Z","iopub.status.idle":"2024-12-17T09:01:43.863781Z","shell.execute_reply.started":"2024-12-17T09:01:43.857471Z","shell.execute_reply":"2024-12-17T09:01:43.862130Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def parquet_sorting(path):\n    parts = path.split('/')\n    partition_id = int(parts[-2].split('=')[1])\n    parquet_num = int(parts[-1].split('-')[1].split('.')[0])\n    return (partition_id, parquet_num)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:43.865774Z","iopub.execute_input":"2024-12-17T09:01:43.866452Z","iopub.status.idle":"2024-12-17T09:01:43.886262Z","shell.execute_reply.started":"2024-12-17T09:01:43.866405Z","shell.execute_reply":"2024-12-17T09:01:43.884870Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class Pre_procesing():\n    def __init__(self, df, drop_cols, null_cols):\n        self.df = df \n        self.drop_cols = drop_cols\n        self.null_cols = null_cols\n        print(f'Data: {df.shape}')\n        self._main_preprocesing()\n\n    def get_dataframe(self):\n        return self.df\n\n    def _main_preprocesing(self):\n        self._drop_columns()\n        self._drop_null_cols()\n        self._drop_null_rows()\n        self._drop_dublicates()\n    \n    def _drop_dublicates(self):\n        print(f'Dublicate Values:{self.df.is_duplicated().sum()}')\n\n    def _drop_columns(self):\n        # drop repsonders\n        self.df = self.df.drop(self.drop_cols)\n        print(f'Data Shape(Drop_columns):{self.df.shape}')\n\n    def _drop_null_cols(self):\n        # drop null cols \n        self.df = self.df.drop(self.null_cols)\n        print(f'Data Shape(Drop_null_cols):{self.df.shape}')\n\n    def _drop_null_rows(self):\n        # idenitfy null rows \n        null_counts = self.df.null_count()\n        maxrows = max(null_counts.row(0))\n        print(f'Drop percentage:{round((maxrows/ self.df.shape[0])*100, 3)}% ')\n        self.df = self.df.drop_nulls()\n        print(f'Data Shape(Drop_null_rows):{self.df.shape}')\n    \n    ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:43.888725Z","iopub.execute_input":"2024-12-17T09:01:43.889193Z","iopub.status.idle":"2024-12-17T09:01:43.906358Z","shell.execute_reply.started":"2024-12-17T09:01:43.889154Z","shell.execute_reply":"2024-12-17T09:01:43.904820Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def eval_metrics(y_test, y_pred):\n    # Evaluate the model's accuracy\n    con_matr = confusion_matrix(y_test, y_pred)\n    print(f'Confusion Matrix\\n {con_matr}')\n    print(f'{classification_report(y_test, y_pred)}')\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:43.907923Z","iopub.execute_input":"2024-12-17T09:01:43.908429Z","iopub.status.idle":"2024-12-17T09:01:43.925461Z","shell.execute_reply.started":"2024-12-17T09:01:43.908378Z","shell.execute_reply":"2024-12-17T09:01:43.924145Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nfrom sklearn.metrics import r2_score\n\ndef time_series_error_metrics(y_true, y_pred, weights):\n    \"\"\"\n        - Mean Absolute Error (MAE)\n        - Mean Squared Error (MSE)\n        - Root Mean Squared Error (RMSE)\n        - Mean Absolute Percentage Error (MAPE)\n        - Symmetric Mean Absolute Percentage Error (sMAPE)\n        - Mean Directional Accuracy (MDA)\n        - R-squared (R2)\n    \"\"\"\n    y_true, y_pred = np.array(y_true), np.array(y_pred)    \n    weights = np.array(weights) / np.sum(weights)  # Normalize weights to sum to 1\n    \n    # Compute weighted errors\n    mae = np.sum(weights * np.abs(y_true - y_pred))\n    mse = np.sum(weights * (y_true - y_pred) ** 2)\n    rmse = np.sqrt(mse)\n    \n    # Weighted MAPE (avoid division by zero by handling small values of y_true)\n    mape = np.sum(weights * np.abs((y_true - y_pred) / (y_true + 1e-10))) * 100\n    \n    # Weighted sMAPE (avoid division by zero by handling small values in the denominator)\n    smape = np.sum(weights * (2 * np.abs(y_true - y_pred) / (np.abs(y_true) + np.abs(y_pred) + 1e-10))) * 100\n\n    # Mean Directional Accuracy (MDA)\n    directional_accuracy = np.mean(np.sign(np.diff(y_true)) == np.sign(np.diff(y_pred)))\n    mda = directional_accuracy * 100\n\n    # Weighted R-squared\n    r2 = r2_score(y_true, y_pred, sample_weight=weights)\n    \n    # Return results as a dictionary\n    metrics = {\n        \"MAE\": mae,\n        \"MSE\": mse,\n        \"RMSE\": rmse,\n        \"MAPE\": mape,\n        \"sMAPE\": smape,\n        \"MDA (%)\": mda,\n        \"R2\": r2,\n    }\n    \n    return metrics\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:43.927240Z","iopub.execute_input":"2024-12-17T09:01:43.927659Z","iopub.status.idle":"2024-12-17T09:01:43.938407Z","shell.execute_reply.started":"2024-12-17T09:01:43.927622Z","shell.execute_reply":"2024-12-17T09:01:43.937137Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\ndef ML_models(models, names, X_train, y_train, X_test, y_test, train_weights, test_weights, type='reg'):\n  #Variables\n  y_predictions =[]\n\n  # Comparison of the ML models\n  for model, name in zip(models, names):\n    print(f'====== {name} =====')\n    # Train the decision tree on the training data\n    model.fit(X_train, y_train, sample_weight=train_weights)\n    # predictions on the test data\n    y_pred = model.predict(X_test)\n    #Store the prediction\n    y_predictions.append( (str(name), y_pred) )\n    #Evaluation Metrics of the model\n    if type=='reg':\n        error_dict = time_series_error_metrics(y_true=y_test, y_pred=y_pred, weights = test_weights)\n        print(error_dict)\n    else: \n        eval_lst = eval_metrics(y_true=y_test, y_pred=y_pred, weights = test_weights)\n        print(eval_lst)\n\n\n  return y_predictions, model","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:43.940694Z","iopub.execute_input":"2024-12-17T09:01:43.941128Z","iopub.status.idle":"2024-12-17T09:01:43.961279Z","shell.execute_reply.started":"2024-12-17T09:01:43.941081Z","shell.execute_reply":"2024-12-17T09:01:43.959705Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# **Variables**","metadata":{}},{"cell_type":"code","source":"features_path = '/kaggle/input/jane-street-real-time-market-data-forecasting/features.csv'\nrespondesr_path = '/kaggle/input/jane-street-real-time-market-data-forecasting/responders.csv'","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:43.962538Z","iopub.execute_input":"2024-12-17T09:01:43.963032Z","iopub.status.idle":"2024-12-17T09:01:43.979336Z","shell.execute_reply.started":"2024-12-17T09:01:43.962982Z","shell.execute_reply":"2024-12-17T09:01:43.977968Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"target = 'responder_6'\n\ndrop_cols =  ['responder_0', 'responder_1', 'responder_2', \n              'responder_3', 'responder_4', 'responder_5', 'responder_7', \n              'responder_8']\n\nnull_cols = ['feature_00', 'feature_01', 'feature_02', 'feature_03', \n             'feature_04', 'feature_21', 'feature_26', 'feature_27', \n             'feature_31']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:43.980994Z","iopub.execute_input":"2024-12-17T09:01:43.981437Z","iopub.status.idle":"2024-12-17T09:01:43.991958Z","shell.execute_reply.started":"2024-12-17T09:01:43.981401Z","shell.execute_reply":"2024-12-17T09:01:43.990753Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# **MAIN**","metadata":{}},{"cell_type":"code","source":"features = pl.read_csv(features_path)\nresponders = pl.read_csv(respondesr_path)\n\ncng = CNG","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:43.995362Z","iopub.execute_input":"2024-12-17T09:01:43.995701Z","iopub.status.idle":"2024-12-17T09:01:44.055523Z","shell.execute_reply.started":"2024-12-17T09:01:43.995668Z","shell.execute_reply":"2024-12-17T09:01:44.054163Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_paths = sorted(glob(os.path.join(cng.train_path, \"*/*\")), key=parquet_sorting)\ntrain_dfs = [pl.read_parquet(path) for path in train_paths[0:1]]\ntrain_df = pl.concat(train_dfs)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:44.057071Z","iopub.execute_input":"2024-12-17T09:01:44.057455Z","iopub.status.idle":"2024-12-17T09:01:46.360926Z","shell.execute_reply.started":"2024-12-17T09:01:44.057419Z","shell.execute_reply":"2024-12-17T09:01:46.359594Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"data_pp = Pre_procesing(df=train_df, drop_cols=drop_cols, null_cols=null_cols)\ntrain_df_new = data_pp.get_dataframe()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:46.362792Z","iopub.execute_input":"2024-12-17T09:01:46.363202Z","iopub.status.idle":"2024-12-17T09:01:48.393447Z","shell.execute_reply.started":"2024-12-17T09:01:46.363165Z","shell.execute_reply":"2024-12-17T09:01:48.392317Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Feature Engineering**","metadata":{}},{"cell_type":"code","source":"train_df_new = train_df_new.to_pandas()\ntrain_df_new['responder_6_new'] = train_df_new['responder_6'].shift(-1)\ntrain_df_new['feature_new'] = (train_df_new['responder_6_new'] > train_df_new['responder_6']).astype(int)\ntrain_df_new = train_df_new.drop(['responder_6_new'], axis=1) # drop the column since are the sam as close col","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:48.394572Z","iopub.execute_input":"2024-12-17T09:01:48.394962Z","iopub.status.idle":"2024-12-17T09:01:49.349405Z","shell.execute_reply.started":"2024-12-17T09:01:48.394927Z","shell.execute_reply":"2024-12-17T09:01:49.348021Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sample_weights = train_df_new.weight\ntrain_df_new = train_df_new.drop(['weight', 'date_id', 'time_id'], axis=1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:49.350852Z","iopub.execute_input":"2024-12-17T09:01:49.351300Z","iopub.status.idle":"2024-12-17T09:01:49.546229Z","shell.execute_reply.started":"2024-12-17T09:01:49.351262Z","shell.execute_reply":"2024-12-17T09:01:49.544533Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Calculate mean and standard deviation\nmeans, stds = train_df_new.mean(), train_df_new.std()\n# Standardize\nstandardized_df = (train_df_new - means) / stds","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:49.547720Z","iopub.execute_input":"2024-12-17T09:01:49.548549Z","iopub.status.idle":"2024-12-17T09:01:51.727555Z","shell.execute_reply.started":"2024-12-17T09:01:49.548508Z","shell.execute_reply":"2024-12-17T09:01:51.726272Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X = standardized_df.drop(columns=['responder_6'])\ny = train_df_new['responder_6']\nX_train, X_test, y_train, y_test, weights_train, weights_test = train_test_split(X, y, sample_weights, \n                                                                                 test_size=0.2, random_state=42)\n\nprint(f'X_train{X_train.shape}, X_test{X_test.shape},\\ny_train{y_train.shape}, y_test{y_test.shape}')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:51.729074Z","iopub.execute_input":"2024-12-17T09:01:51.729572Z","iopub.status.idle":"2024-12-17T09:01:54.767589Z","shell.execute_reply.started":"2024-12-17T09:01:51.729522Z","shell.execute_reply":"2024-12-17T09:01:54.766259Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\ndef r_squared(y_true, y_pred):\n    \"\"\"Custom R-squared metric.\"\"\"\n    ss_res = K.sum(K.square(y_true - y_pred))  # Residual sum of squares\n    ss_tot = K.sum(K.square(y_true - K.mean(y_true)))  # Total sum of squares\n    return 1 - ss_res / (ss_tot + K.epsilon())  # Add epsilon to prevent division by zero","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:01:54.769189Z","iopub.execute_input":"2024-12-17T09:01:54.769638Z","iopub.status.idle":"2024-12-17T09:02:09.457866Z","shell.execute_reply.started":"2024-12-17T09:01:54.769589Z","shell.execute_reply":"2024-12-17T09:02:09.455932Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Define the number of input and output nodes\ninput_dim = X.shape[1]  # Number of features (79)\nbottle_neck = 8\n# Set custom learning rate\noptimizer = Adam(learning_rate=0.01)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:02:09.459663Z","iopub.execute_input":"2024-12-17T09:02:09.460588Z","iopub.status.idle":"2024-12-17T09:02:09.531025Z","shell.execute_reply.started":"2024-12-17T09:02:09.460531Z","shell.execute_reply":"2024-12-17T09:02:09.529190Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Autoencoder Architecture\ninput_layer = Input(shape=(input_dim,))\nencoded = Dense(64, activation='relu')(input_layer)  # Encoder\nencoded = Dense(32, activation='relu')(encoded)\nencoded = Dense(bottle_neck, activation='relu')(encoded)      # Bottleneck layer (feature extraction)\ndecoded = Dense(32, activation='relu')(encoded)      # Decoder\ndecoded = Dense(64, activation='relu')(decoded)\ndecoded = Dense(input_dim, activation='linear')(decoded)  # Output layer\n\n# Create the model\nautoencoder = Model(inputs=input_layer, outputs=decoded)\n\n# Compile the model\nautoencoder.compile(optimizer=optimizer, loss='mae',metrics=[r_squared])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:02:09.533091Z","iopub.execute_input":"2024-12-17T09:02:09.533611Z","iopub.status.idle":"2024-12-17T09:02:09.657785Z","shell.execute_reply.started":"2024-12-17T09:02:09.533560Z","shell.execute_reply":"2024-12-17T09:02:09.656650Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Define EarlyStopping\nearly_stopping = EarlyStopping(\n    monitor='val_r_squared',    # Monitor validation loss\n    mode = 'max',\n    patience=1,            # Number of epochs to wait for improvement\n    min_delta=0.001,       # Minimum change to qualify as an improvement\n    restore_best_weights=True  # Restore weights from the best epoch\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:02:09.659366Z","iopub.execute_input":"2024-12-17T09:02:09.659735Z","iopub.status.idle":"2024-12-17T09:02:09.665548Z","shell.execute_reply.started":"2024-12-17T09:02:09.659698Z","shell.execute_reply":"2024-12-17T09:02:09.664424Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"history = autoencoder.fit(\n    X_train.values, X_train.values,\n    epochs=100,\n    batch_size=512,\n    validation_split=0.2,\n    callbacks=[early_stopping]\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:02:09.666708Z","iopub.execute_input":"2024-12-17T09:02:09.667189Z","iopub.status.idle":"2024-12-17T09:02:47.103541Z","shell.execute_reply.started":"2024-12-17T09:02:09.667138Z","shell.execute_reply":"2024-12-17T09:02:47.102251Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"encoder_ = Model(inputs=autoencoder.input, outputs=encoded)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:04:46.895372Z","iopub.execute_input":"2024-12-17T09:04:46.897839Z","iopub.status.idle":"2024-12-17T09:04:46.914644Z","shell.execute_reply.started":"2024-12-17T09:04:46.897764Z","shell.execute_reply":"2024-12-17T09:04:46.913162Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Generate the reduced features\nX_train_encoded = encoder_.predict(X_train)\nX_test_encoded = encoder_.predict(X_test)\n\nprint(\"Original shape:\", X_train.shape)\nprint(\"Encoded shape:\", X_train_encoded.shape)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:04:49.099276Z","iopub.execute_input":"2024-12-17T09:04:49.099806Z","iopub.status.idle":"2024-12-17T09:06:15.378677Z","shell.execute_reply.started":"2024-12-17T09:04:49.099753Z","shell.execute_reply":"2024-12-17T09:06:15.377203Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"ml_models = [LGBMRegressor(), # n_estimators=150, learning_rate=0.05, max_depth=7\n             ElasticNet()  , # alpha=0.1, l1_ratio=0.5\n             XGBRegressor()] # n_estimators=150","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:08:08.765485Z","iopub.execute_input":"2024-12-17T09:08:08.765949Z","iopub.status.idle":"2024-12-17T09:08:08.771980Z","shell.execute_reply.started":"2024-12-17T09:08:08.765902Z","shell.execute_reply":"2024-12-17T09:08:08.770784Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Evauation Metrics of the models\ny_predictions_MC, xgb_model = ML_models(\n    models=ml_models, names=['LGBMRegressor', 'ElasticNet', 'Xgb'], \n    X_train=X_train_encoded, y_train=y_train, \n    X_test=X_test_encoded, y_test=y_test,\n    train_weights=weights_train,\n    test_weights=weights_test, \n    type='reg' )","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T09:10:43.839656Z","iopub.execute_input":"2024-12-17T09:10:43.840149Z","iopub.status.idle":"2024-12-17T09:11:06.825429Z","shell.execute_reply.started":"2024-12-17T09:10:43.840092Z","shell.execute_reply":"2024-12-17T09:11:06.824123Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-11T14:06:42.882100Z","iopub.execute_input":"2024-12-11T14:06:42.882425Z","iopub.status.idle":"2024-12-11T14:06:45.532286Z","shell.execute_reply.started":"2024-12-11T14:06:42.882395Z","shell.execute_reply":"2024-12-11T14:06:45.531255Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-11T14:06:45.533397Z","iopub.execute_input":"2024-12-11T14:06:45.533687Z","iopub.status.idle":"2024-12-11T14:06:45.538287Z","shell.execute_reply.started":"2024-12-11T14:06:45.533658Z","shell.execute_reply":"2024-12-11T14:06:45.537205Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-11T14:06:45.539375Z","iopub.execute_input":"2024-12-11T14:06:45.539653Z","iopub.status.idle":"2024-12-11T14:08:23.222476Z","shell.execute_reply.started":"2024-12-11T14:06:45.539625Z","shell.execute_reply":"2024-12-11T14:08:23.221303Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}