{"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"}],"dockerImageVersionId":30886,"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)\n\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:35:08.445702Z","iopub.execute_input":"2025-02-13T11:35:08.446128Z","iopub.status.idle":"2025-02-13T11:35:08.454558Z","shell.execute_reply.started":"2025-02-13T11:35:08.4461Z","shell.execute_reply":"2025-02-13T11:35:08.453306Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_train=pd.read_csv(\"/kaggle/input/playground-series-s4e12/train.csv\")\ndf_test=pd.read_csv(\"/kaggle/input/playground-series-s4e12/test.csv\")\nsample_submission=pd.read_csv(\"/kaggle/input/playground-series-s4e12/sample_submission.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:35:11.022639Z","iopub.execute_input":"2025-02-13T11:35:11.023074Z","iopub.status.idle":"2025-02-13T11:35:19.918365Z","shell.execute_reply.started":"2025-02-13T11:35:11.023043Z","shell.execute_reply":"2025-02-13T11:35:19.91708Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_train.head(5)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:35:19.919982Z","iopub.execute_input":"2025-02-13T11:35:19.920297Z","iopub.status.idle":"2025-02-13T11:35:19.946147Z","shell.execute_reply.started":"2025-02-13T11:35:19.920271Z","shell.execute_reply":"2025-02-13T11:35:19.944782Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_train.drop(columns=\"id\", axis=1, inplace=True)\ndf_test.drop(columns=\"id\", axis=1, inplace=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:35:19.948Z","iopub.execute_input":"2025-02-13T11:35:19.948345Z","iopub.status.idle":"2025-02-13T11:35:20.275791Z","shell.execute_reply.started":"2025-02-13T11:35:19.948314Z","shell.execute_reply":"2025-02-13T11:35:20.274566Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Convert 'date' to datetime format\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'])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:35:21.501473Z","iopub.execute_input":"2025-02-13T11:35:21.501935Z","iopub.status.idle":"2025-02-13T11:35:22.22229Z","shell.execute_reply.started":"2025-02-13T11:35:21.50187Z","shell.execute_reply":"2025-02-13T11:35:22.221076Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import seaborn as sns\nimport matplotlib.pyplot as plt\ntarget_variable=\"Premium Amount\"\ndef eda_pipeline(df_train, df_test):\n    target_variable=\"Premium Amount\"\n    # Display first few rows\n    print(\"\\n--- First few rows of train data ---\")\n    display(df_train.head())\n    \n    print(\"\\n--- First few rows of test data ---\")\n    display(df_test.head())\n    \n    # Dataset info\n    print(\"\\n--- Train Data Info ---\")\n    print(df_train.info())\n    \n    print(\"\\n--- Test Data Info ---\")\n    print(df_test.info())\n    \n    # Missing values\n    print(\"\\n--- Missing Values in Train Data ---\")\n    print(df_train.isnull().sum())\n    \n    print(\"\\n--- Missing Values in Test Data ---\")\n    print(df_test.isnull().sum())\n    \n    print(\"\\n--- Percentage of Missing Values in Train Data ---\")\n    print((df_train.isnull().sum() / len(df_train)) * 100)\n    \n    print(\"\\n--- Percentage of Missing Values in Test Data ---\")\n    print((df_test.isnull().sum() / len(df_test)) * 100)\n    \n    # Summary statistics\n    print(\"\\n--- Train Data Summary Statistics ---\")\n    print(df_train.describe())\n    \n    print(\"\\n--- Test Data Summary Statistics ---\")\n    print(df_test.describe())\n    \n    # Identify categorical columns\n    train_cat_columns = [col for col in df_train.columns if df_train[col].dtype == 'O']\n    test_cat_columns = [col for col in df_test.columns if df_test[col].dtype == 'O']\n    \n    print(\"\\n--- Categorical Columns in Train Data ---\")\n    print(train_cat_columns)\n    \n    print(\"\\n--- Unique Values in Categorical Columns (Train) ---\")\n    print(df_train[train_cat_columns].nunique())\n    \n    print(\"\\n--- Categorical Columns in Test Data ---\")\n    print(test_cat_columns)\n    \n    print(\"\\n--- Unique Values in Categorical Columns (Test) ---\")\n    print(df_test[test_cat_columns].nunique())\n    \n    # Identify numerical columns\n    train_num_columns = [col for col in df_train.columns if df_train[col].dtype in ['int64', 'float64']]\n    test_num_columns = [col for col in df_test.columns if df_test[col].dtype in ['int64', 'float64']]\n    \n    print(\"\\n--- Numerical Columns in Train Data ---\")\n    print(train_num_columns)\n    \n    print(\"\\n--- Numerical Columns in Test Data ---\")\n    print(test_num_columns)\n    \n    # Check for duplicate rows\n    print(\"\\n--- Duplicate Rows in Train Data ---\")\n    print(df_train.duplicated().sum())\n    \n    print(\"\\n--- Duplicate Rows in Test Data ---\")\n    print(df_test.duplicated().sum())\n    \n    # Correlation matrix (excluding non-numeric columns)\n    print(\"\\n--- Correlation Matrix ---\")\n    plt.figure(figsize=(12, 6))\n    sns.heatmap(df_train[train_num_columns].corr(), annot=True, cmap='coolwarm')\n    plt.show()\n    \n    # Correlation with Target Variable\n    print(\"\\n--- Correlation with Target Variable ---\")\n    target_corr = df_train[train_num_columns].corr()[target_variable].sort_values(ascending=False)\n    print(target_corr)\n    \n    plt.figure(figsize=(12, 6))\n    sns.barplot(x=target_corr.index, y=target_corr.values, palette='coolwarm')\n    plt.xticks(rotation=90)\n    plt.title(f'Feature Correlation with {target_variable}')\n    plt.show()   \n    \n    # Distribution plots for numerical features\n    print(\"\\n--- Distribution of Numerical Features ---\")\n    df_train[train_num_columns].hist(figsize=(12, 10), bins=30)\n    plt.show()\n    \n    # Box plots for outlier detection\n    print(\"\\n--- Box Plots for Outlier Detection ---\")\n    for col in train_num_columns:\n        plt.figure(figsize=(8, 4))\n        sns.boxplot(x=df_train[col])\n        plt.title(f'Box plot of {col}')\n        plt.show()\n    \n    # Value counts for categorical features\n    print(\"\\n--- Value Counts for Categorical Columns ---\")\n    for col in train_cat_columns:\n        print(f\"\\nValue counts for {col}:\")\n        print(df_train[col].value_counts())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:35:25.101479Z","iopub.execute_input":"2025-02-13T11:35:25.101948Z","iopub.status.idle":"2025-02-13T11:35:25.118308Z","shell.execute_reply.started":"2025-02-13T11:35:25.101915Z","shell.execute_reply":"2025-02-13T11:35:25.117029Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"eda_pipeline(df_train, df_test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:35:30.319683Z","iopub.execute_input":"2025-02-13T11:35:30.320157Z","iopub.status.idle":"2025-02-13T11:35:45.181757Z","shell.execute_reply.started":"2025-02-13T11:35:30.320121Z","shell.execute_reply":"2025-02-13T11:35:45.179826Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder\n\ndef data_preprocessing_pipeline(df_train, df_test):\n    \"\"\"\n    Preprocess the dataset by handling missing values and encoding categorical variables.\n    \"\"\"\n    # Fill missing values\n    for column in df_train.columns:\n        if df_train[column].dtype == 'object':\n            mode_value = df_train[column].mode()[0]  # Fill categorical with mode\n            df_train[column].fillna(mode_value, inplace=True)\n        elif df_train[column].dtype in ['int64', 'float64']:\n            mean_value = df_train[column].mean()  # Fill numerical with mean\n            df_train[column].fillna(mean_value, inplace=True)\n    \n    for column in df_test.columns:\n        if df_test[column].dtype == 'object':\n            mode_value = df_test[column].mode()[0]\n            df_test[column].fillna(mode_value, inplace=True)\n        elif df_test[column].dtype in ['int64', 'float64']:\n            mean_value = df_test[column].mean()\n            df_test[column].fillna(mean_value, inplace=True)\n    \n    # Encode categorical features\n    label_encoders = {}\n    for column in df_train.columns:\n        if df_train[column].dtype == 'object':\n            le = LabelEncoder()\n            df_train[column] = le.fit_transform(df_train[column].astype(str))\n            label_encoders[column] = le  # Store encoder for consistency\n    \n    for column in df_test.columns:\n        if df_test[column].dtype == 'object':\n            if column in label_encoders:\n                df_test[column] = label_encoders[column].transform(df_test[column].astype(str))\n            else:\n                le = LabelEncoder()\n                df_test[column] = le.fit_transform(df_test[column].astype(str))\n    \n    return df_train, df_test\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:35:52.891062Z","iopub.execute_input":"2025-02-13T11:35:52.891456Z","iopub.status.idle":"2025-02-13T11:35:52.901009Z","shell.execute_reply.started":"2025-02-13T11:35:52.891425Z","shell.execute_reply":"2025-02-13T11:35:52.899542Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# df_train, df_test = data_preprocessing_pipeline(df_train, df_test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:36:18.641177Z","iopub.execute_input":"2025-02-13T11:36:18.641694Z","iopub.status.idle":"2025-02-13T11:36:18.646271Z","shell.execute_reply.started":"2025-02-13T11:36:18.641656Z","shell.execute_reply":"2025-02-13T11:36:18.645027Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# df_train.head(5)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:36:22.612701Z","iopub.execute_input":"2025-02-13T11:36:22.613148Z","iopub.status.idle":"2025-02-13T11:36:22.618091Z","shell.execute_reply.started":"2025-02-13T11:36:22.613117Z","shell.execute_reply":"2025-02-13T11:36:22.616643Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# df_test.head(5)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:36:30.816794Z","iopub.execute_input":"2025-02-13T11:36:30.817259Z","iopub.status.idle":"2025-02-13T11:36:30.822211Z","shell.execute_reply.started":"2025-02-13T11:36:30.817227Z","shell.execute_reply":"2025-02-13T11:36:30.820735Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Create time-based features\ndf_train['year'] = df_train['Policy Start Date'].dt.year\ndf_train['month'] = df_train['Policy Start Date'].dt.month\ndf_train['day'] = df_train['Policy Start Date'].dt.day\ndf_train['dayofweek'] = df_train['Policy Start Date'].dt.dayofweek","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:36:32.890488Z","iopub.execute_input":"2025-02-13T11:36:32.890969Z","iopub.status.idle":"2025-02-13T11:36:33.151567Z","shell.execute_reply.started":"2025-02-13T11:36:32.890933Z","shell.execute_reply":"2025-02-13T11:36:33.15037Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Preprocess test set\ndf_test['year'] = df_test['Policy Start Date'].dt.year\ndf_test['month'] = df_test['Policy Start Date'].dt.month\ndf_test['day'] = df_test['Policy Start Date'].dt.day\ndf_test['dayofweek'] = df_test['Policy Start Date'].dt.dayofweek","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:36:34.944571Z","iopub.execute_input":"2025-02-13T11:36:34.94499Z","iopub.status.idle":"2025-02-13T11:36:35.114102Z","shell.execute_reply.started":"2025-02-13T11:36:34.944958Z","shell.execute_reply":"2025-02-13T11:36:35.113063Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_train.drop(columns=\"Policy Start Date\", axis=1, inplace=True)\ndf_test.drop(columns=\"Policy Start Date\", axis=1, inplace=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:36:36.331785Z","iopub.execute_input":"2025-02-13T11:36:36.332269Z","iopub.status.idle":"2025-02-13T11:36:36.65066Z","shell.execute_reply.started":"2025-02-13T11:36:36.332234Z","shell.execute_reply":"2025-02-13T11:36:36.649474Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_cat_columns = [col for col in df_train.columns if df_train[col].dtype == 'O']\ntest_cat_columns = [col for col in df_test.columns if df_test[col].dtype == 'O']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:50:39.240467Z","iopub.execute_input":"2025-02-13T11:50:39.240939Z","iopub.status.idle":"2025-02-13T11:50:39.250348Z","shell.execute_reply.started":"2025-02-13T11:50:39.240906Z","shell.execute_reply":"2025-02-13T11:50:39.248367Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"pd.set_option(\"display.max_columns\",None)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:36:37.679507Z","iopub.execute_input":"2025-02-13T11:36:37.679947Z","iopub.status.idle":"2025-02-13T11:36:37.685261Z","shell.execute_reply.started":"2025-02-13T11:36:37.679904Z","shell.execute_reply":"2025-02-13T11:36:37.683806Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_train.head(3)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:36:38.089337Z","iopub.execute_input":"2025-02-13T11:36:38.089783Z","iopub.status.idle":"2025-02-13T11:36:38.113921Z","shell.execute_reply.started":"2025-02-13T11:36:38.08975Z","shell.execute_reply":"2025-02-13T11:36:38.11261Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_test.head(3)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:37:46.475364Z","iopub.execute_input":"2025-02-13T11:37:46.47572Z","iopub.status.idle":"2025-02-13T11:37:46.498994Z","shell.execute_reply.started":"2025-02-13T11:37:46.475695Z","shell.execute_reply":"2025-02-13T11:37:46.497607Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_train.shape,df_test.shape","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:37:48.970259Z","iopub.execute_input":"2025-02-13T11:37:48.970833Z","iopub.status.idle":"2025-02-13T11:37:48.979739Z","shell.execute_reply.started":"2025-02-13T11:37:48.970789Z","shell.execute_reply":"2025-02-13T11:37:48.978198Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.preprocessing import StandardScaler\n\ndef standardize_data(df_train, df_test):\n    \"\"\"\n    Standardize all numerical features using StandardScaler,\n    ensuring both train and test have the same columns, while preserving the target variable.\n    \"\"\"\n    # Separate target column from train data\n    target_values = df_train[target_variable]\n    df_train = df_train.drop(columns=[target_variable])\n    \n    # Ensure both datasets have the same feature columns\n    common_columns = df_train.columns.intersection(df_test.columns)\n    df_train = df_train[common_columns]\n    df_test = df_test[common_columns]\n    \n    # Initialize StandardScaler\n    scaler = StandardScaler()\n    \n    # Fit on train data and transform both train and test data\n    df_train_scaled = pd.DataFrame(scaler.fit_transform(df_train), columns=common_columns)\n    df_test_scaled = pd.DataFrame(scaler.transform(df_test), columns=common_columns)\n    \n    # Reattach the target column to the scaled train data\n    df_train_scaled[target_variable] = target_values.reset_index(drop=True)\n    \n    return df_train_scaled, df_test_scaled","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:37:54.174134Z","iopub.execute_input":"2025-02-13T11:37:54.174617Z","iopub.status.idle":"2025-02-13T11:37:54.18363Z","shell.execute_reply.started":"2025-02-13T11:37:54.174584Z","shell.execute_reply":"2025-02-13T11:37:54.182085Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# df_train_scaled, df_test_scaled = standardize_data(df_train, df_test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:37:58.690851Z","iopub.execute_input":"2025-02-13T11:37:58.691302Z","iopub.status.idle":"2025-02-13T11:37:58.696419Z","shell.execute_reply.started":"2025-02-13T11:37:58.691271Z","shell.execute_reply":"2025-02-13T11:37:58.695221Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# df_train_scaled.head(5)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:38:03.098377Z","iopub.execute_input":"2025-02-13T11:38:03.098801Z","iopub.status.idle":"2025-02-13T11:38:03.10398Z","shell.execute_reply.started":"2025-02-13T11:38:03.098772Z","shell.execute_reply":"2025-02-13T11:38:03.10269Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# df_test_scaled.head(5)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:38:05.5468Z","iopub.execute_input":"2025-02-13T11:38:05.547259Z","iopub.status.idle":"2025-02-13T11:38:05.551959Z","shell.execute_reply.started":"2025-02-13T11:38:05.547229Z","shell.execute_reply":"2025-02-13T11:38:05.550796Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X = df_train.drop(columns=[target_variable])\ny = df_train[target_variable]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:38:20.772571Z","iopub.execute_input":"2025-02-13T11:38:20.773127Z","iopub.status.idle":"2025-02-13T11:38:20.971193Z","shell.execute_reply.started":"2025-02-13T11:38:20.773086Z","shell.execute_reply":"2025-02-13T11:38:20.970014Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:38:21.865801Z","iopub.execute_input":"2025-02-13T11:38:21.866271Z","iopub.status.idle":"2025-02-13T11:38:23.12253Z","shell.execute_reply.started":"2025-02-13T11:38:21.866237Z","shell.execute_reply":"2025-02-13T11:38:23.121436Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_train.shape, X_test.shape, y_train.shape, y_test.shape","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:38:23.510844Z","iopub.execute_input":"2025-02-13T11:38:23.511284Z","iopub.status.idle":"2025-02-13T11:38:23.519027Z","shell.execute_reply.started":"2025-02-13T11:38:23.511254Z","shell.execute_reply":"2025-02-13T11:38:23.517655Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# from xgboost import XGBRegressor\n# from sklearn.metrics import mean_squared_error, r2_score,mean_squared_log_error\n# # Initialize and train the XGBoost Regressor\n# xgb_model = XGBRegressor(n_estimators=500, learning_rate=0.01, max_depth=10, random_state=42)\n# xgb_model.fit(X_train, y_train)\n\n# # Predictions\n# y_pred = xgb_model.predict(X_test)\n\n# # Model Evaluation\n# mse = mean_squared_error(y_test, y_pred)\n# r2 = r2_score(y_test, y_pred)\n# # Root Mean Squared Log Error (RMSLE)\n# rmsle = np.sqrt(mean_squared_log_error(y_test, np.maximum(y_pred, 0))) \n\n# print(f\"Mean Squared Error: {mse:.4f}\")\n# print(f\"R² Score: {r2:.4f}\")\n# print(f\"Root Mean Squared Log Error (RMSLE): {rmsle:.4f}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:29:44.489954Z","iopub.execute_input":"2025-02-13T11:29:44.490367Z","iopub.status.idle":"2025-02-13T11:30:41.312064Z","shell.execute_reply.started":"2025-02-13T11:29:44.490338Z","shell.execute_reply":"2025-02-13T11:30:41.310597Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_cat_columns","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:52:26.591921Z","iopub.execute_input":"2025-02-13T11:52:26.592331Z","iopub.status.idle":"2025-02-13T11:52:26.600435Z","shell.execute_reply.started":"2025-02-13T11:52:26.5923Z","shell.execute_reply":"2025-02-13T11:52:26.59905Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for col in train_cat_columns:\n    X_train[col] = X_train[col].astype(str).fillna(\"Unknown\")\n    X_test[col] = X_test[col].astype(str).fillna(\"Unknown\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:56:44.218696Z","iopub.execute_input":"2025-02-13T11:56:44.21932Z","iopub.status.idle":"2025-02-13T11:56:45.218317Z","shell.execute_reply.started":"2025-02-13T11:56:44.219275Z","shell.execute_reply":"2025-02-13T11:56:45.217194Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from catboost import CatBoostRegressor\nfrom sklearn.metrics import mean_squared_error, r2_score, mean_squared_log_error\n\n# Initialize and train the CatBoost Regressor\ncatboost_model = CatBoostRegressor(iterations=500, \n                                   learning_rate=0.1, \n                                   depth=6, \n                                   random_seed=42, \n                                   verbose=100, cat_features=train_cat_columns)  # Shows progress every 100 iterations\n\ncatboost_model.fit(X_train, y_train)\n\n# Predictions\ny_pred = catboost_model.predict(X_test)\n\n# Model Evaluation\nmse = mean_squared_error(y_test, y_pred)\nr2 = r2_score(y_test, y_pred)\nrmsle = np.sqrt(mean_squared_log_error(y_test, np.maximum(y_pred, 0)))  # Ensure no negative values\n\nprint(f\"Mean Squared Error (MSE): {mse:.4f}\")\nprint(f\"R² Score: {r2:.4f}\")\nprint(f\"Root Mean Squared Log Error (RMSLE): {rmsle:.4f}\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T11:56:47.682794Z","iopub.execute_input":"2025-02-13T11:56:47.683207Z","iopub.status.idle":"2025-02-13T12:02:53.574855Z","shell.execute_reply.started":"2025-02-13T11:56:47.683178Z","shell.execute_reply":"2025-02-13T12:02:53.573699Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for col in test_cat_columns:\n    df_test[col] = df_test[col].astype(str).fillna(\"Unknown\")\n    ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T12:04:53.225125Z","iopub.execute_input":"2025-02-13T12:04:53.225501Z","iopub.status.idle":"2025-02-13T12:04:53.885445Z","shell.execute_reply.started":"2025-02-13T12:04:53.225474Z","shell.execute_reply":"2025-02-13T12:04:53.884252Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"final_result=catboost_model.predict(df_test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T12:05:01.146765Z","iopub.execute_input":"2025-02-13T12:05:01.147203Z","iopub.status.idle":"2025-02-13T12:05:02.833658Z","shell.execute_reply.started":"2025-02-13T12:05:01.14717Z","shell.execute_reply":"2025-02-13T12:05:02.831925Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"final_result","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T12:05:04.215977Z","iopub.execute_input":"2025-02-13T12:05:04.216333Z","iopub.status.idle":"2025-02-13T12:05:04.22401Z","shell.execute_reply.started":"2025-02-13T12:05:04.216305Z","shell.execute_reply":"2025-02-13T12:05:04.222868Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sample_submission.head(4)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T12:05:05.314064Z","iopub.execute_input":"2025-02-13T12:05:05.314411Z","iopub.status.idle":"2025-02-13T12:05:05.325841Z","shell.execute_reply.started":"2025-02-13T12:05:05.314383Z","shell.execute_reply":"2025-02-13T12:05:05.324461Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sample_submission[\"Premium Amount\"]=final_result\nsample_submission.to_csv('submission.csv',index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T12:05:08.527816Z","iopub.execute_input":"2025-02-13T12:05:08.528313Z","iopub.status.idle":"2025-02-13T12:05:10.253693Z","shell.execute_reply.started":"2025-02-13T12:05:08.528278Z","shell.execute_reply":"2025-02-13T12:05:10.251872Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sample_submission.head(4)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-13T12:05:10.25523Z","iopub.execute_input":"2025-02-13T12:05:10.255656Z","iopub.status.idle":"2025-02-13T12:05:10.266238Z","shell.execute_reply.started":"2025-02-13T12:05:10.255623Z","shell.execute_reply":"2025-02-13T12:05:10.26479Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}