{"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":84896,"databundleVersionId":10305135,"sourceType":"competition"}],"isInternetEnabled":true,"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)\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport sklearn\nfrom sklearn import preprocessing\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.feature_selection import mutual_info_regression\nfrom sklearn.decomposition import PCA\nfrom sklearn.model_selection import cross_val_score\nfrom sklearn.ensemble import HistGradientBoostingRegressor, RandomForestRegressor\nfrom sklearn.metrics import mean_squared_log_error\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nfrom keras import losses\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\npathlist = []\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        pathlist.append(os.path.join(dirname, filename))\n\nprint(pathlist)\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":"2025-02-12T10:21:57.42815Z","iopub.execute_input":"2025-02-12T10:21:57.428539Z","iopub.status.idle":"2025-02-12T10:21:57.444692Z","shell.execute_reply.started":"2025-02-12T10:21:57.42851Z","shell.execute_reply":"2025-02-12T10:21:57.443714Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_train = pd.read_csv(pathlist[1], index_col = 'id')\n\ndf_train.head(10)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T11:15:38.809265Z","iopub.execute_input":"2025-02-12T11:15:38.809626Z","iopub.status.idle":"2025-02-12T11:15:43.475862Z","shell.execute_reply.started":"2025-02-12T11:15:38.8096Z","shell.execute_reply":"2025-02-12T11:15:43.474688Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(df_train.shape)\nprint(df_train.dtypes)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T08:40:33.150576Z","iopub.execute_input":"2025-02-12T08:40:33.151004Z","iopub.status.idle":"2025-02-12T08:40:33.157736Z","shell.execute_reply.started":"2025-02-12T08:40:33.150975Z","shell.execute_reply":"2025-02-12T08:40:33.156532Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(f'NaN values: \\n {df_train.isna().sum()}')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T08:42:16.104158Z","iopub.execute_input":"2025-02-12T08:42:16.104755Z","iopub.status.idle":"2025-02-12T08:42:16.786294Z","shell.execute_reply.started":"2025-02-12T08:42:16.104716Z","shell.execute_reply":"2025-02-12T08:42:16.785182Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Note**: to prevent data leakage, missing value will be imputed after train test split.","metadata":{}},{"cell_type":"code","source":"df_train['Month Start Date'] = df_train['Policy Start Date'].apply(lambda date: str(date).split('-')[1])\ndf_train['Year Start Date'] = df_train['Policy Start Date'].apply(lambda date: str(date).split('-')[0])\n\ndf_train.drop('Policy Start Date', axis = 1, inplace = True)\n\nprint(df_train[['Month Start Date', 'Year Start Date']].head(10))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T11:15:47.865373Z","iopub.execute_input":"2025-02-12T11:15:47.86573Z","iopub.status.idle":"2025-02-12T11:15:49.210188Z","shell.execute_reply.started":"2025-02-12T11:15:47.865696Z","shell.execute_reply":"2025-02-12T11:15:49.209129Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"cat_features = [col for col in df_train.columns if df_train[col].dtype != 'float'] # Categorical features\nprint(cat_features)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T11:16:42.336979Z","iopub.execute_input":"2025-02-12T11:16:42.337381Z","iopub.status.idle":"2025-02-12T11:16:42.342943Z","shell.execute_reply.started":"2025-02-12T11:16:42.337338Z","shell.execute_reply":"2025-02-12T11:16:42.341792Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Convert dtype for categorical features\nfor col in cat_features:\n    df_train[col], _ = df_train[col].factorize()\n# Check if all categorical features were converted in dtype integer    \nprint(all(df_train[cat_features].dtypes == int))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T11:17:04.306177Z","iopub.execute_input":"2025-02-12T11:17:04.306566Z","iopub.status.idle":"2025-02-12T11:17:05.408921Z","shell.execute_reply.started":"2025-02-12T11:17:04.306535Z","shell.execute_reply":"2025-02-12T11:17:05.407768Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Check which categorical features have more than 5 unique values.\nfor col in cat_features:\n    if df_train[col].nunique() > 5:\n        print(col)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-11T09:13:48.747609Z","iopub.execute_input":"2025-02-11T09:13:48.747845Z","iopub.status.idle":"2025-02-11T09:13:48.821293Z","shell.execute_reply.started":"2025-02-11T09:13:48.747824Z","shell.execute_reply":"2025-02-11T09:13:48.820343Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Numerical features\nnum_features = [col for col in df_train.columns if df_train[col].dtype == 'float']  \nnum_features.remove('Premium Amount') # Remove target values\nprint(num_features)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T08:49:49.941647Z","iopub.execute_input":"2025-02-12T08:49:49.942078Z","iopub.status.idle":"2025-02-12T08:49:49.949094Z","shell.execute_reply.started":"2025-02-12T08:49:49.94205Z","shell.execute_reply":"2025-02-12T08:49:49.948006Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**TRAIN AND TEST DATASETS**","metadata":{}},{"cell_type":"code","source":"X = df_train[[col for col in list(cat_features + num_features)]].copy()\ny = df_train['Premium Amount']\n\nx_train, x_valid, y_train, y_valid = train_test_split(X, y, test_size = 0.3, random_state = 1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T08:51:08.112091Z","iopub.execute_input":"2025-02-12T08:51:08.112472Z","iopub.status.idle":"2025-02-12T08:51:08.755358Z","shell.execute_reply.started":"2025-02-12T08:51:08.112441Z","shell.execute_reply":"2025-02-12T08:51:08.75417Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"imputer_median = SimpleImputer(strategy = 'median')\nscaler = preprocessing.StandardScaler()\n\npipeline = Pipeline([\n    ('imputer', imputer_median),\n    ('std_scaler', scaler) \n    ])\n\nx_train_proc = pipeline.fit_transform(x_train)\nx_train_proc = pd.DataFrame(x_train_proc, columns = x_train.columns)\n\nx_valid_proc = pipeline.transform(x_valid)\nx_valid_proc = pd.DataFrame(x_valid_proc, columns = x_valid.columns)\n\n\nx_valid_proc.head()\n\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T09:08:34.827148Z","iopub.execute_input":"2025-02-12T09:08:34.827569Z","iopub.status.idle":"2025-02-12T09:08:38.295462Z","shell.execute_reply.started":"2025-02-12T09:08:34.827541Z","shell.execute_reply":"2025-02-12T09:08:38.294432Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Calculate correlation values among each pair of numerical features\ncorrelation_num_features = x_train_proc[num_features].corr(method = 'spearman') # Use Spearman any kind of monotone relationship.\n\n# Calculate correlation between each numerical features and target.\ncorrelation_num_target = x_train_proc[num_features].corrwith(y_train, method = 'spearman')\n\nprint('Correlation among numerical features \\n')\nprint(correlation_num_features)\nprint('_'*30, '\\n')\nprint('Correlation between numerical features and target \\n')\nprint(correlation_num_target.sort_values(ascending= False))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T09:15:49.294526Z","iopub.execute_input":"2025-02-12T09:15:49.294897Z","iopub.status.idle":"2025-02-12T09:15:52.60342Z","shell.execute_reply.started":"2025-02-12T09:15:49.294867Z","shell.execute_reply":"2025-02-12T09:15:52.602427Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Since there's no strong correlation among numerical features, PCA is likely to be effective on this dataset.","metadata":{}},{"cell_type":"markdown","source":"**Mutual info regression**","metadata":{}},{"cell_type":"code","source":"def calc_mireg(X, y, discrete_features):\n    \n    mi_scores = mutual_info_regression(X, y, discrete_features = discrete_features)\n    mi_scores = pd.Series(mi_scores, name = 'MI Scores', index = X.columns)\n    mi_scores = mi_scores.sort_values(ascending = False)\n    \n    return mi_scores\n\ndef plot_mi_scores(scores):\n    scores = scores.sort_values(ascending=True)\n    width = np.arange(len(scores))\n    ticks = list(scores.index)\n    plt.barh(width, scores)\n    plt.yticks(width, ticks)\n    plt.title(\"Mutual Information Scores\")\n\ndiscrete_features = x_train_proc.dtypes == 'int64' # boolean mask to identify discrete features\n\nmireg_scores = calc_mireg(x_train_proc, y_train, discrete_features)\n\nplt.figure(dpi=100, figsize=(8, 5))\nplot_mi_scores(mireg_scores)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T09:20:38.39128Z","iopub.execute_input":"2025-02-12T09:20:38.391756Z","iopub.status.idle":"2025-02-12T09:25:29.025143Z","shell.execute_reply.started":"2025-02-12T09:20:38.391725Z","shell.execute_reply":"2025-02-12T09:25:29.023806Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Comparing RMSLE calculation between all features train dataset and mi-selected feature train dataset**","metadata":{}},{"cell_type":"code","source":"# Relevant Mutual info regression features.\n\nselected_col = [col for col in mireg_scores.index if mireg_scores[col] > 0.]\nselected_col\nx_train_selected = x_train_proc[selected_col]\nx_valid_selected = x_valid_proc[selected_col]\n\nprint('Selected features:', len(selected_col),'\\n','All features:', len(x_train_proc.columns))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T09:28:13.333603Z","iopub.execute_input":"2025-02-12T09:28:13.333974Z","iopub.status.idle":"2025-02-12T09:28:13.401555Z","shell.execute_reply.started":"2025-02-12T09:28:13.333939Z","shell.execute_reply":"2025-02-12T09:28:13.400528Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def calc_score(x, y, model = HistGradientBoostingRegressor()):\n    for col in x.columns:\n        if x[col].dtype in ('object', 'category'):\n            x[col], _ = x[col].factorize()\n    score = cross_val_score(model, x, y, scoring = 'neg_mean_squared_log_error')\n\n    score = -1*score\n    score = np.sqrt(score)\n    score = score.mean()\n    \n    return f'RMSLE: {score:.2f}'\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T09:34:57.926746Z","iopub.execute_input":"2025-02-12T09:34:57.927166Z","iopub.status.idle":"2025-02-12T09:34:57.932858Z","shell.execute_reply.started":"2025-02-12T09:34:57.927137Z","shell.execute_reply":"2025-02-12T09:34:57.931813Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"rmsle_all_features = calc_score(x_train_proc, y_train)\nrmsle_mi_features = calc_score(x_train_selected, y_train)\n\nprint(f'RMSLE calculated on all features: {rmsle_all_features}')\nprint(f'RMSLE calculated on mutual info regression selected features: {rmsle_mi_features}')\n\n# Since the performances between the reduced dataset and the full one are comparable, the former will be used.","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T09:35:07.065782Z","iopub.execute_input":"2025-02-12T09:35:07.066135Z","iopub.status.idle":"2025-02-12T09:35:46.928631Z","shell.execute_reply.started":"2025-02-12T09:35:07.066106Z","shell.execute_reply":"2025-02-12T09:35:46.927563Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Models evaluation**","metadata":{}},{"cell_type":"code","source":"selected_col_cat = [True if col in cat_features else False for col in selected_col]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T10:41:08.765639Z","iopub.execute_input":"2025-02-12T10:41:08.765967Z","iopub.status.idle":"2025-02-12T10:41:08.770376Z","shell.execute_reply.started":"2025-02-12T10:41:08.765941Z","shell.execute_reply":"2025-02-12T10:41:08.769196Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"hist_gbr = HistGradientBoostingRegressor()\n    \nhist_gbr.fit(x_train_selected, y_train)\n\ny_valid_predict_gbr = hist_gbr.predict(x_valid_selected)\n\ngbr_score = np.sqrt(mean_squared_log_error(y_valid, y_valid_predict_gbr)) # Root mean squared log error\n\nprint(f'{gbr_score = :.2f}')\n    \n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T10:48:01.72723Z","iopub.execute_input":"2025-02-12T10:48:01.727654Z","iopub.status.idle":"2025-02-12T10:48:08.993573Z","shell.execute_reply.started":"2025-02-12T10:48:01.727625Z","shell.execute_reply":"2025-02-12T10:48:08.992537Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"rfr = RandomForestRegressor(n_estimators=100)\n\nrfr.fit(x_train_selected, y_train)\n\ny_valid_predict_rfr = rfr.predict(x_valid_selected)\n\nrfr_score = np.sqrt(mean_squared_log_error(y_valid, y_valid_predict_rfr)) # Root mean squared log error\n\nprint(f'{rfr_score = :.2f}')\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T10:52:39.940545Z","iopub.execute_input":"2025-02-12T10:52:39.940954Z","iopub.status.idle":"2025-02-12T11:13:44.508748Z","shell.execute_reply.started":"2025-02-12T10:52:39.940926Z","shell.execute_reply":"2025-02-12T11:13:44.507701Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Neural networks**","metadata":{}},{"cell_type":"code","source":"input_shape = [x_train_selected.shape[1]]\nmsle_metric = keras.metrics.MeanSquaredLogarithmicError()\nmsle_loss = losses.MeanSquaredLogarithmicError(\n    reduction=\"sum_over_batch_size\", name=\"mean_squared_logarithmic_error\", dtype=None\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T11:18:35.117079Z","iopub.execute_input":"2025-02-12T11:18:35.117538Z","iopub.status.idle":"2025-02-12T11:18:35.17505Z","shell.execute_reply.started":"2025-02-12T11:18:35.117503Z","shell.execute_reply":"2025-02-12T11:18:35.173664Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model = keras.Sequential([\n                layers.Input(shape = input_shape),\n                layers.Dense(32, activation = 'relu'),\n                layers.Dense(1, activation = 'relu')\n                ])\n\nmodel.compile(\n        optimizer = 'adam',\n        loss = msle_loss,\n        metrics = [msle_metric]\n)\n\nearly_stopping = keras.callbacks.EarlyStopping(\n                patience = 10,\n                min_delta = 0.001,\n                restore_best_weights = True\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T11:18:40.128341Z","iopub.execute_input":"2025-02-12T11:18:40.1287Z","iopub.status.idle":"2025-02-12T11:18:40.182178Z","shell.execute_reply.started":"2025-02-12T11:18:40.128673Z","shell.execute_reply":"2025-02-12T11:18:40.181329Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"history = model.fit(\n    x_train_selected, y_train,\n    validation_data = (x_valid_selected, y_valid),\n    batch_size = 512,\n    epochs = 100,\n    callbacks = [early_stopping],\n    verbose = 0\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T11:18:46.551281Z","iopub.execute_input":"2025-02-12T11:18:46.551694Z","iopub.status.idle":"2025-02-12T11:22:22.449155Z","shell.execute_reply.started":"2025-02-12T11:18:46.551664Z","shell.execute_reply":"2025-02-12T11:22:22.447814Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"history_df = pd.DataFrame(history.history)\n\ny_bottom, y_up = 1.15, 1.3 # Define y-axis range\n# Loss plot\nloss_plot = history_df.loc[:, ['loss', 'val_loss']].plot()\nloss_plot.set_title('Loss plots for train and validation sets')\nloss_plot.set_ylim(y_bottom, y_up)\nloss_plot.legend(['Train dataset', 'Validation dataset'], title = 'Loss:')\n\n#MSLE\nmsle_plot = history_df.loc[:, ['mean_squared_logarithmic_error', 'val_mean_squared_logarithmic_error']].plot()\nmsle_plot.set_title('Mean squared logarithmic error plots for train and validation sets')\nmsle_plot.set_ylim(y_bottom, y_up)\nmsle_plot.legend(['Train dataset', 'Validation dataset'], title = 'MSLE:')\n\n\nrmsle_val = np.sqrt(history_df['val_mean_squared_logarithmic_error'].iloc[-1])\nrmsle = np.sqrt(history_df['mean_squared_logarithmic_error'].iloc[-1])\n\nprint(f'RMSLE for train dataset: {rmsle:.2f}')\n\nprint(f'RMSLE for validation dataset: {rmsle_val:.2f}')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T11:24:56.295716Z","iopub.execute_input":"2025-02-12T11:24:56.296154Z","iopub.status.idle":"2025-02-12T11:24:56.871176Z","shell.execute_reply.started":"2025-02-12T11:24:56.296119Z","shell.execute_reply":"2025-02-12T11:24:56.870116Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Test dataset prediction**","metadata":{}},{"cell_type":"code","source":"df_test = pd.read_csv(pathlist[2], index_col = 'id')\n\ndf_test.head()\n\ndf_test.dtypes","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T11:26:12.857833Z","iopub.execute_input":"2025-02-12T11:26:12.858208Z","iopub.status.idle":"2025-02-12T11:26:17.425517Z","shell.execute_reply.started":"2025-02-12T11:26:12.85818Z","shell.execute_reply":"2025-02-12T11:26:17.4245Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_test.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T11:29:23.597016Z","iopub.execute_input":"2025-02-12T11:29:23.597494Z","iopub.status.idle":"2025-02-12T11:29:23.618667Z","shell.execute_reply.started":"2025-02-12T11:29:23.597461Z","shell.execute_reply":"2025-02-12T11:29:23.617428Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Process test dataset before predicting\ndef processing_dataset(x, pipeline = pipeline, sorted_col = x_train_proc.columns, selected_col = selected_col):\n\n    # Create features \n    x['Month Start Date'] = x['Policy Start Date'].apply(lambda date: str(date).split('-')[1])\n    x['Year Start Date'] = x['Policy Start Date'].apply(lambda date: str(date).split('-')[0])    \n\n    # Drop feature\n    x.drop('Policy Start Date', axis = 1, inplace = True)\n\n    columns = x.columns\n    \n    # Convert object dtypes in 'int'\n    for col in columns:\n        if x[col].dtype == 'object':\n            x[col], _ = x[col].factorize()\n\n    # Sort columns\n    x = x.loc[:, sorted_col]\n    \n    # Processing data\n    x = pipeline.transform(x)\n    \n    x = pd.DataFrame(x, columns = sorted_col) # Reconvert x in Dataframe since imputer converted it in ndarray\n\n    x = x[selected_col] # Select column with mutual information regression value > 0.\n\n    return x\n    ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T11:26:22.666885Z","iopub.execute_input":"2025-02-12T11:26:22.667259Z","iopub.status.idle":"2025-02-12T11:26:22.674094Z","shell.execute_reply.started":"2025-02-12T11:26:22.667228Z","shell.execute_reply":"2025-02-12T11:26:22.672864Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"processed_test = processing_dataset(df_test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T11:26:26.767158Z","iopub.execute_input":"2025-02-12T11:26:26.76759Z","iopub.status.idle":"2025-02-12T11:26:28.902006Z","shell.execute_reply.started":"2025-02-12T11:26:26.767558Z","shell.execute_reply":"2025-02-12T11:26:28.90077Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_test_predict = model.predict(processed_test, batch_size=512)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T11:27:12.122517Z","iopub.execute_input":"2025-02-12T11:27:12.122863Z","iopub.status.idle":"2025-02-12T11:27:14.583301Z","shell.execute_reply.started":"2025-02-12T11:27:12.122827Z","shell.execute_reply":"2025-02-12T11:27:14.582369Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_test_predict_ravel = y_test_predict.ravel()\nprint(f'ravel: {y_test_predict_ravel.shape}')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T11:27:26.042259Z","iopub.execute_input":"2025-02-12T11:27:26.042653Z","iopub.status.idle":"2025-02-12T11:27:26.047686Z","shell.execute_reply.started":"2025-02-12T11:27:26.042624Z","shell.execute_reply":"2025-02-12T11:27:26.046405Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission = pd.DataFrame({'id': df_test.index, 'Premium Amount': y_test_predict_ravel})\nsubmission.reset_index(drop = True)\n\nprint(submission.head())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T11:42:02.621279Z","iopub.execute_input":"2025-02-12T11:42:02.621636Z","iopub.status.idle":"2025-02-12T11:42:02.634648Z","shell.execute_reply.started":"2025-02-12T11:42:02.621609Z","shell.execute_reply":"2025-02-12T11:42:02.633287Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission.to_csv('./submission.csv', index = False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-12T11:46:34.68825Z","iopub.execute_input":"2025-02-12T11:46:34.6887Z","iopub.status.idle":"2025-02-12T11:46:35.796098Z","shell.execute_reply.started":"2025-02-12T11:46:34.688673Z","shell.execute_reply":"2025-02-12T11:46:35.795074Z"}},"outputs":[],"execution_count":null}]}