{"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":84896,"databundleVersionId":10305135,"sourceType":"competition"}],"dockerImageVersionId":30804,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport scipy.stats as stats\nimport sklearn.preprocessing\nfrom sklearn.ensemble import RandomForestRegressor\nfrom sklearn.metrics import mean_absolute_error\nfrom sklearn.model_selection import GridSearchCV\nimport lightgbm as lgb\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.model_selection import KFold\nfrom sklearn.metrics import mean_squared_log_error\nimport numpy as np\nimport warnings\n\nwarnings.simplefilter(action='ignore', category=FutureWarning)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:39:23.590139Z","iopub.execute_input":"2024-12-17T03:39:23.590551Z","iopub.status.idle":"2024-12-17T03:39:26.911408Z","shell.execute_reply.started":"2024-12-17T03:39:23.590515Z","shell.execute_reply":"2024-12-17T03:39:26.910486Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"pd.options.display.max_columns = 100\ndf_train = pd.read_csv('/kaggle/input/playground-series-s4e12/train.csv', index_col='id')\ndf_test = pd.read_csv('/kaggle/input/playground-series-s4e12/test.csv', index_col='id')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:39:30.141583Z","iopub.execute_input":"2024-12-17T03:39:30.142628Z","iopub.status.idle":"2024-12-17T03:39:40.233935Z","shell.execute_reply.started":"2024-12-17T03:39:30.142588Z","shell.execute_reply":"2024-12-17T03:39:40.232926Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(f'Dataframe has {df_train.shape[0]} rows and {df_train.shape[1]} columns')\nprint(f'----------')\nprint(df_train.head(5))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:39:45.127372Z","iopub.execute_input":"2024-12-17T03:39:45.127775Z","iopub.status.idle":"2024-12-17T03:39:45.145788Z","shell.execute_reply.started":"2024-12-17T03:39:45.127739Z","shell.execute_reply":"2024-12-17T03:39:45.144615Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(df_train.info())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:39:48.844945Z","iopub.execute_input":"2024-12-17T03:39:48.845328Z","iopub.status.idle":"2024-12-17T03:39:49.500603Z","shell.execute_reply.started":"2024-12-17T03:39:48.845297Z","shell.execute_reply":"2024-12-17T03:39:49.49948Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def divide_columns(df: pd.DataFrame):\n    categorical_cols = df.select_dtypes(['object']).columns\n    numeric_cols = df.select_dtypes(['int64', 'float64']).columns\n\n    return categorical_cols, numeric_cols\n\ncat_cols, num_cols = divide_columns(df_train)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:39:53.087309Z","iopub.execute_input":"2024-12-17T03:39:53.088242Z","iopub.status.idle":"2024-12-17T03:39:53.274545Z","shell.execute_reply.started":"2024-12-17T03:39:53.0882Z","shell.execute_reply":"2024-12-17T03:39:53.273465Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(df_train[num_cols].head().T)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:39:56.234228Z","iopub.execute_input":"2024-12-17T03:39:56.234636Z","iopub.status.idle":"2024-12-17T03:39:56.260279Z","shell.execute_reply.started":"2024-12-17T03:39:56.234602Z","shell.execute_reply":"2024-12-17T03:39:56.259127Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print('Numeric columns containing null values')\nprint('--------------------------------------')\nfor i in df_train[num_cols].columns:\n    if df_train[i].isnull().any():\n        print(i)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:39:59.274515Z","iopub.execute_input":"2024-12-17T03:39:59.274932Z","iopub.status.idle":"2024-12-17T03:39:59.307053Z","shell.execute_reply.started":"2024-12-17T03:39:59.274896Z","shell.execute_reply":"2024-12-17T03:39:59.305766Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for i in df_train[num_cols].columns:\n    df_train[i].plot.box()\n    plt.title(f'{i} Distribution')\n    plt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:40:02.221525Z","iopub.execute_input":"2024-12-17T03:40:02.221926Z","iopub.status.idle":"2024-12-17T03:40:04.894416Z","shell.execute_reply.started":"2024-12-17T03:40:02.221893Z","shell.execute_reply":"2024-12-17T03:40:04.893097Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Looks like there are outliers in the annual income and premium claims columns","metadata":{}},{"cell_type":"code","source":"#Determining the Mean of the Annual Income and Previous Claims columns without outliers factored in\n\nclean_means = {\n    'Annual Income': 0,\n    'Previous Claims': 0\n}\n\n#Function used to find the mean without outliers using IQR\nfor i in ['Annual Income', 'Previous Claims']:  \n    Q1 = df_train[i].quantile(0.25)\n    Q3 = df_train[i].quantile(0.75)\n    \n    IQR = Q3 - Q1\n    \n    lower_fence = Q1 - (1.5 * IQR)\n    upper_fence = Q3 + (1.5 * IQR)\n    \n    non_outlier_data = df_train[(df_train[i] >= lower_fence) & (df_train[i] <= upper_fence)]\n    non_outlier_mean = non_outlier_data[i].mean()\n    \n    print(f'The {i} mean without outliers is {non_outlier_mean}')\n    clean_means[i] = non_outlier_mean\n\n    #This is mainly for me to practice statistics...\n\ndf_train['Annual Income'].fillna(clean_means['Annual Income'], inplace=True)\ndf_train['Previous Claims'].fillna(clean_means['Previous Claims'], inplace=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:40:08.531579Z","iopub.execute_input":"2024-12-17T03:40:08.532571Z","iopub.status.idle":"2024-12-17T03:40:09.027047Z","shell.execute_reply.started":"2024-12-17T03:40:08.532529Z","shell.execute_reply":"2024-12-17T03:40:09.025982Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for i in ['Annual Income', 'Previous Claims']:  \n    Q1 = df_test[i].quantile(0.25)\n    Q3 = df_test[i].quantile(0.75)\n    \n    IQR = Q3 - Q1\n    \n    lower_fence = Q1 - (1.5 * IQR)\n    upper_fence = Q3 + (1.5 * IQR)\n    \n    non_outlier_data = df_test[(df_test[i] >= lower_fence) & (df_test[i] <= upper_fence)]\n    non_outlier_mean = non_outlier_data[i].mean()\n    \n    print(f'The {i} mean without outliers is {non_outlier_mean}')\n    clean_means[i] = non_outlier_mean\n\ndf_test['Annual Income'].fillna(clean_means['Annual Income'], inplace=True)\ndf_test['Previous Claims'].fillna(clean_means['Previous Claims'], inplace=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:40:14.169717Z","iopub.execute_input":"2024-12-17T03:40:14.170114Z","iopub.status.idle":"2024-12-17T03:40:14.498672Z","shell.execute_reply.started":"2024-12-17T03:40:14.170081Z","shell.execute_reply":"2024-12-17T03:40:14.497519Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_test[df_test['Annual Income'] == 0.0]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:40:17.73163Z","iopub.execute_input":"2024-12-17T03:40:17.732028Z","iopub.status.idle":"2024-12-17T03:40:17.74682Z","shell.execute_reply.started":"2024-12-17T03:40:17.731996Z","shell.execute_reply":"2024-12-17T03:40:17.745776Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for i in ['Age', 'Number of Dependents', 'Health Score', 'Vehicle Age', 'Credit Score', 'Insurance Duration']:\n    df_train[i] = df_train[i].fillna(df_train[i].mean())\n    df_test[i] = df_test[i].fillna(df_test[i].mean())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:40:20.011777Z","iopub.execute_input":"2024-12-17T03:40:20.012155Z","iopub.status.idle":"2024-12-17T03:40:20.155556Z","shell.execute_reply.started":"2024-12-17T03:40:20.012119Z","shell.execute_reply":"2024-12-17T03:40:20.154281Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Cleaned up the rest of the null values for columns that did not contain outliers","metadata":{}},{"cell_type":"code","source":"print(df_train[num_cols].isnull().sum())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:40:23.066898Z","iopub.execute_input":"2024-12-17T03:40:23.06728Z","iopub.status.idle":"2024-12-17T03:40:23.156603Z","shell.execute_reply.started":"2024-12-17T03:40:23.067246Z","shell.execute_reply":"2024-12-17T03:40:23.155334Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"corr_matrix = df_train[num_cols].corr()\nplt.figure(figsize=(10,10))\nsns.heatmap(data=corr_matrix, annot=True)\nplt.title('Correlation between different numeric features')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:40:28.51845Z","iopub.execute_input":"2024-12-17T03:40:28.519276Z","iopub.status.idle":"2024-12-17T03:40:29.478602Z","shell.execute_reply.started":"2024-12-17T03:40:28.519238Z","shell.execute_reply":"2024-12-17T03:40:29.477501Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"No strong correlations","metadata":{}},{"cell_type":"code","source":"print('Categorical columns containing null values')\nprint('--------------------------------------')\nfor i in df_train[cat_cols].columns:\n    if df_train[i].isnull().any():\n        print(i)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:40:33.366167Z","iopub.execute_input":"2024-12-17T03:40:33.366602Z","iopub.status.idle":"2024-12-17T03:40:34.174329Z","shell.execute_reply.started":"2024-12-17T03:40:33.366567Z","shell.execute_reply":"2024-12-17T03:40:34.173243Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_train['Customer Feedback'].value_counts().plot(kind='bar', color='forestgreen', edgecolor='black')\nplt.title('Distribution of Customer Feedback')\nplt.xlabel('Customer Feedback Rating')\nplt.ylabel('Count')\nplt.show()\n#Even distribution of feedback","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:40:38.952663Z","iopub.execute_input":"2024-12-17T03:40:38.953074Z","iopub.status.idle":"2024-12-17T03:40:39.280646Z","shell.execute_reply.started":"2024-12-17T03:40:38.953041Z","shell.execute_reply":"2024-12-17T03:40:39.279415Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_train['Marital Status'].value_counts().plot(kind='bar', color='dodgerblue', edgecolor='black')\nplt.title('Marital Status Distribution')\nplt.xlabel('Marital Status')\nplt.ylabel('Count')\nplt.show()\n#Another even distribution..","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:40:42.121886Z","iopub.execute_input":"2024-12-17T03:40:42.122257Z","iopub.status.idle":"2024-12-17T03:40:42.395182Z","shell.execute_reply.started":"2024-12-17T03:40:42.122228Z","shell.execute_reply":"2024-12-17T03:40:42.393934Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for i in ['Customer Feedback', 'Marital Status', 'Occupation']:\n    df_train[i] = df_train[i].fillna('Unknown')\n    df_test[i] = df_test[i].fillna('Unknown')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:40:46.552265Z","iopub.execute_input":"2024-12-17T03:40:46.552724Z","iopub.status.idle":"2024-12-17T03:40:46.963573Z","shell.execute_reply.started":"2024-12-17T03:40:46.55268Z","shell.execute_reply":"2024-12-17T03:40:46.962687Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_test.isnull().sum()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:40:49.680026Z","iopub.execute_input":"2024-12-17T03:40:49.680405Z","iopub.status.idle":"2024-12-17T03:40:50.114573Z","shell.execute_reply.started":"2024-12-17T03:40:49.680375Z","shell.execute_reply":"2024-12-17T03:40:50.113363Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#Find all categorical columns that need to be encoded\nfor i in df_train.columns:\n    if df_train[i].dtype == 'object':\n        print(i)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:40:53.281336Z","iopub.execute_input":"2024-12-17T03:40:53.282306Z","iopub.status.idle":"2024-12-17T03:40:53.288914Z","shell.execute_reply.started":"2024-12-17T03:40:53.282266Z","shell.execute_reply":"2024-12-17T03:40:53.287605Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"'''\nConverted Policy Start Date to datetime and extracted year, month, day to avoid\nthe insane cardinality associated with the column\n'''\n\n\ndf_train['Policy Start Date'] = pd.to_datetime(df_train['Policy Start Date'])\ndf_test['Policy Start Date'] = pd.to_datetime(df_test['Policy Start Date'])\n\ndf_train['Policy Start Year'] = df_train['Policy Start Date'].dt.year\ndf_train['Policy Start Month'] = df_train['Policy Start Date'].dt.month\ndf_train['Policy Start Day'] = df_train['Policy Start Date'].dt.day\n\ndf_test['Policy Start Year'] = df_test['Policy Start Date'].dt.year\ndf_test['Policy Start Month'] = df_test['Policy Start Date'].dt.month\ndf_test['Policy Start Day'] = df_test['Policy Start Date'].dt.day\n\ndf_train.drop(columns=['Policy Start Date'], inplace=True)\ndf_test.drop(columns=['Policy Start Date'], inplace=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:40:57.336609Z","iopub.execute_input":"2024-12-17T03:40:57.337013Z","iopub.status.idle":"2024-12-17T03:40:58.746117Z","shell.execute_reply.started":"2024-12-17T03:40:57.336979Z","shell.execute_reply":"2024-12-17T03:40:58.74442Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for i in df_train.columns:\n    if df_train[i].dtype == 'object':\n        print(f'Cardinality of the {i} column is {len(df_train[i].unique())}')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:41:02.199991Z","iopub.execute_input":"2024-12-17T03:41:02.200364Z","iopub.status.idle":"2024-12-17T03:41:02.856075Z","shell.execute_reply.started":"2024-12-17T03:41:02.200335Z","shell.execute_reply":"2024-12-17T03:41:02.854878Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#Separating the columns based on how I want to encode them\n\n#Might revisit and drop Occupation column\none_hot_cols = ['Gender', 'Marital Status', 'Location', 'Smoking Status', 'Property Type', 'Occupation', 'Customer Feedback']\nordinal_cols = ['Education Level', 'Policy Type', 'Exercise Frequency']\n\ntest_label_cols = []\nfor i in df_train.columns:\n    if df_train[i].dtypes == 'object' and i != 'Policy Start Month' and i != 'Policy Start Day':\n        test_label_cols.append(i)\n\nprint(test_label_cols)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:41:06.555311Z","iopub.execute_input":"2024-12-17T03:41:06.555722Z","iopub.status.idle":"2024-12-17T03:41:06.562293Z","shell.execute_reply.started":"2024-12-17T03:41:06.555686Z","shell.execute_reply":"2024-12-17T03:41:06.561251Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"numeric_cols = df_train.columns[(df_train.dtypes == 'float64') | (df_train.dtypes == 'int32')].tolist()\nnumeric_cols.remove('Premium Amount')\nnumeric_cols.remove('Policy Start Day')\nnumeric_cols.remove('Policy Start Month')\nprint(numeric_cols)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:41:10.292839Z","iopub.execute_input":"2024-12-17T03:41:10.293398Z","iopub.status.idle":"2024-12-17T03:41:10.302636Z","shell.execute_reply.started":"2024-12-17T03:41:10.293351Z","shell.execute_reply":"2024-12-17T03:41:10.301273Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for i in ordinal_cols:\n    print(df_train[i].unique())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:41:12.960495Z","iopub.execute_input":"2024-12-17T03:41:12.960908Z","iopub.status.idle":"2024-12-17T03:41:13.170929Z","shell.execute_reply.started":"2024-12-17T03:41:12.960875Z","shell.execute_reply":"2024-12-17T03:41:13.169831Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Setting up the preprocessor in preparation for my pipeline","metadata":{}},{"cell_type":"code","source":"from sklearn.preprocessing import OrdinalEncoder, OneHotEncoder, StandardScaler\nfrom sklearn.compose import ColumnTransformer\nfrom sklearn.pipeline import Pipeline\nfrom xgboost import XGBRegressor\n\n#Setting up the ordinal orders for each of the three columns\neducation_level_order = ['High School', \"Bachelor's\", \"Master's\", 'PhD']\npolicy_type_order = ['Basic', 'Comprehensive', 'Premium']\nexercise_freq_order = ['Rarely', 'Monthly', 'Weekly', 'Daily']\n\n#Preprocessor for scaling numeric values, and incoding categorical values\npreprocessor = ColumnTransformer(\n    transformers=[\n        ('ordinal', OrdinalEncoder(categories=[education_level_order, policy_type_order, exercise_freq_order]), ordinal_cols),\n        ('onehot', OneHotEncoder(handle_unknown='ignore'), one_hot_cols),\n        ('numeric', StandardScaler(), numeric_cols)\n    ]\n)\n\n#Setting up pipeline using XGBRegressor as the model\npipeline = Pipeline(steps=[\n    ('preprocessor', preprocessor),\n    ('regressor', XGBRegressor(random_state=42, learning_rate=0.3, reg_alpha=0.01, reg_lambda=1))\n])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:41:17.438411Z","iopub.execute_input":"2024-12-17T03:41:17.439694Z","iopub.status.idle":"2024-12-17T03:41:17.637346Z","shell.execute_reply.started":"2024-12-17T03:41:17.439637Z","shell.execute_reply":"2024-12-17T03:41:17.636321Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Going to experiment with just using a label encoder for simplicity","metadata":{}},{"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder\nX = df_train.drop(columns=['Premium Amount', 'Policy Start Month', 'Policy Start Day'])\ny = df_train['Premium Amount']\n\nsimple_preprocessor = ColumnTransformer(\n    transformers=[\n        ('onehot', OneHotEncoder(handle_unknown='ignore'), test_label_cols),\n        ('numeric', StandardScaler(), numeric_cols)\n    ]\n)\n\nsimple_pipeline = Pipeline(steps=[\n    ('preprocessor', simple_preprocessor),\n    ('regressor', lgb.LGBMRegressor(n_estimators=200, reg_alpha=0.1, reg_lambda=1))\n])\n\nkfold = KFold(n_splits=5, shuffle=True, random_state=42)\n\nrmsle_scores = []\nfor train_index, val_index in kfold.split(X):  # X is the feature data\n    X_train, X_val = X.iloc[train_index], X.iloc[val_index]\n    y_train, y_val = y.iloc[train_index], y.iloc[val_index]\n\n    y_train_log = np.log1p(y_train)\n    \n    simple_pipeline.fit(X_train, y_train_log)\n    y_pred_log = simple_pipeline.predict(X_val)\n    y_pred = np.expm1(y_pred_log)\n    rmsle = np.sqrt(mean_squared_log_error(y_val, y_pred))\n\n    rmsle_scores.append(rmsle)\n\nprint(f'Average RMSLE score across 5 folds: {np.mean(rmsle_scores)}')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:41:25.451155Z","iopub.execute_input":"2024-12-17T03:41:25.451555Z","iopub.status.idle":"2024-12-17T03:43:04.19818Z","shell.execute_reply.started":"2024-12-17T03:41:25.451524Z","shell.execute_reply":"2024-12-17T03:43:04.196894Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_test = df_test.drop(columns=['Policy Start Day', 'Policy Start Month'])\ndf_test.columns","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:43:14.431814Z","iopub.execute_input":"2024-12-17T03:43:14.432192Z","iopub.status.idle":"2024-12-17T03:43:14.528602Z","shell.execute_reply.started":"2024-12-17T03:43:14.432162Z","shell.execute_reply":"2024-12-17T03:43:14.527512Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"simple_pipeline.fit(X_train, y_train_log)\n\ny_pred_log = simple_pipeline.predict(df_test)\ny_pred = np.expm1(y_pred_log)\n\nsubmission = pd.DataFrame({\n    'Id': df_test.index,\n    'Premium Amount': y_pred   \n})\n\nsubmission.to_csv('submission.csv', index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:43:29.335269Z","iopub.execute_input":"2024-12-17T03:43:29.335705Z","iopub.status.idle":"2024-12-17T03:43:58.641003Z","shell.execute_reply.started":"2024-12-17T03:43:29.33567Z","shell.execute_reply":"2024-12-17T03:43:58.639944Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T03:44:04.346573Z","iopub.execute_input":"2024-12-17T03:44:04.346981Z","iopub.status.idle":"2024-12-17T03:44:04.361225Z","shell.execute_reply.started":"2024-12-17T03:44:04.346949Z","shell.execute_reply":"2024-12-17T03:44:04.360144Z"}},"outputs":[],"execution_count":null}]}