{"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":"nvidiaTeslaT4","dataSources":[{"sourceId":84896,"databundleVersionId":10305135,"sourceType":"competition"}],"dockerImageVersionId":30822,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport seaborn as sns\nimport matplotlib.pyplot as plt\nimport numpy as np\nfrom sklearn.preprocessing import StandardScaler, OneHotEncoder\nfrom sklearn.compose import ColumnTransformer\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.model_selection import RepeatedKFold\nfrom sklearn.model_selection import KFold\nfrom catboost import CatBoostRegressor\nfrom xgboost import XGBRegressor\nimport lightgbm as lgb\n\nimport warnings\nwarnings.filterwarnings('ignore')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:50:37.815167Z","iopub.execute_input":"2024-12-30T15:50:37.815451Z","iopub.status.idle":"2024-12-30T15:50:38.752649Z","shell.execute_reply.started":"2024-12-30T15:50:37.815428Z","shell.execute_reply":"2024-12-30T15:50:38.75176Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train =  pd.read_csv('/kaggle/input/playground-series-s4e12/train.csv', index_col='id')\ntrain.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:50:38.753731Z","iopub.execute_input":"2024-12-30T15:50:38.754146Z","iopub.status.idle":"2024-12-30T15:50:43.617072Z","shell.execute_reply.started":"2024-12-30T15:50:38.754119Z","shell.execute_reply":"2024-12-30T15:50:43.616302Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test = pd.read_csv('../input/playground-series-s4e12/test.csv', index_col='id')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:50:43.618432Z","iopub.execute_input":"2024-12-30T15:50:43.618637Z","iopub.status.idle":"2024-12-30T15:50:46.787501Z","shell.execute_reply.started":"2024-12-30T15:50:43.61862Z","shell.execute_reply":"2024-12-30T15:50:46.786857Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.isnull().sum()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:50:46.788721Z","iopub.execute_input":"2024-12-30T15:50:46.789041Z","iopub.status.idle":"2024-12-30T15:50:47.307818Z","shell.execute_reply.started":"2024-12-30T15:50:46.789012Z","shell.execute_reply":"2024-12-30T15:50:47.306913Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test.isnull().sum()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:50:47.308939Z","iopub.execute_input":"2024-12-30T15:50:47.309322Z","iopub.status.idle":"2024-12-30T15:50:47.657508Z","shell.execute_reply.started":"2024-12-30T15:50:47.309289Z","shell.execute_reply":"2024-12-30T15:50:47.656806Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print('--- Train ---\\n')\nprint(100*train.isnull().sum() / train.shape[0])\nprint('\\n')\nprint('--- Test ---\\n')\nprint(100*test.isnull().sum() / test.shape[0])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:50:47.658307Z","iopub.execute_input":"2024-12-30T15:50:47.658603Z","iopub.status.idle":"2024-12-30T15:50:48.525014Z","shell.execute_reply.started":"2024-12-30T15:50:47.658575Z","shell.execute_reply":"2024-12-30T15:50:48.524303Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(train.duplicated().sum())\n\nprint(test.duplicated().sum())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:50:48.525898Z","iopub.execute_input":"2024-12-30T15:50:48.526223Z","iopub.status.idle":"2024-12-30T15:50:50.815403Z","shell.execute_reply.started":"2024-12-30T15:50:48.526192Z","shell.execute_reply":"2024-12-30T15:50:50.814473Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.columns","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:50:50.816941Z","iopub.execute_input":"2024-12-30T15:50:50.817159Z","iopub.status.idle":"2024-12-30T15:50:50.822345Z","shell.execute_reply.started":"2024-12-30T15:50:50.81714Z","shell.execute_reply":"2024-12-30T15:50:50.821606Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.info()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:50:50.82317Z","iopub.execute_input":"2024-12-30T15:50:50.823478Z","iopub.status.idle":"2024-12-30T15:50:51.364251Z","shell.execute_reply.started":"2024-12-30T15:50:50.823448Z","shell.execute_reply":"2024-12-30T15:50:51.363261Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sns.histplot(data=train, x='Premium Amount', kde=True, color='teal', bins=30, alpha=0.6)\nplt.xlabel('Premium Amount')\nplt.ylabel('Density')\nplt.title('Distribution of Premium Amount')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T06:26:11.847283Z","iopub.execute_input":"2024-12-28T06:26:11.847574Z","iopub.status.idle":"2024-12-28T06:26:17.899707Z","shell.execute_reply.started":"2024-12-28T06:26:11.847545Z","shell.execute_reply":"2024-12-28T06:26:17.898403Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"fig, ax = plt.subplots(1, 2, figsize=(15, 7))\n\n# 1. Hexbin plot for Age vs. Premium Amount\nplt_1 = ax[0].hexbin(\n    train['Age'], \n    train['Premium Amount'], \n    gridsize=30, \n    cmap='Blues'\n)\nax[0].set_xlabel('Age')\nax[0].set_ylabel('Premium Amount')\nax[0].set_title('Hexbin: Age vs. Premium Amount')\ncbar = fig.colorbar(plt_1, ax=ax[0])\ncbar.set_label('Counts')\n\n# 2. Violin plot for Gender vs. Premium Amount\nsns.violinplot(\n    data=train, \n    x='Gender', \n    y='Premium Amount', \n    ax=ax[1], \n    palette='muted'\n)\nax[1].set_title('Violin Plot: Gender vs. Premium Amount')\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T06:32:08.021668Z","iopub.execute_input":"2024-12-28T06:32:08.02205Z","iopub.status.idle":"2024-12-28T06:32:11.909774Z","shell.execute_reply.started":"2024-12-28T06:32:08.022019Z","shell.execute_reply":"2024-12-28T06:32:11.908455Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"fig, ax = plt.subplots(1, 2, figsize=(15, 7))\n\n# 1. Box Plot: Number of Dependents vs. Premium Amount\nsns.boxplot(\n    data=train, \n    x='Number of Dependents', \n    y='Premium Amount', \n    ax=ax[0], \n    palette='coolwarm'\n)\nax[0].set_title('Box Plot: Number of Dependents vs. Premium Amount')\n\n# 2. Violin Plot: Marital Status vs. Premium Amount\nsns.violinplot(\n    data=train, \n    x='Marital Status', \n    y='Premium Amount', \n    ax=ax[1], \n    palette='Set2'\n)\nax[1].set_title('Violin Plot: Marital Status vs. Premium Amount')\n\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T06:56:59.271023Z","iopub.execute_input":"2024-12-28T06:56:59.271407Z","iopub.status.idle":"2024-12-28T06:57:03.074315Z","shell.execute_reply.started":"2024-12-28T06:56:59.271379Z","shell.execute_reply":"2024-12-28T06:57:03.07321Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Create subplots\nfig, ax = plt.subplots(1, 2, figsize=(15, 7))\n\n# 1. Violin Plot: Education Level vs. Premium Amount\nsns.violinplot(\n    data=train, \n    x='Education Level', \n    y='Premium Amount', \n    ax=ax[0], \n    palette='muted', \n    inner=\"quart\",  # Shows quartiles and potential outliers\n    scale='area'  # Scales the area of the violins\n)\nax[0].set_title('Violin Plot: Education Level vs. Premium Amount')\n\n# 2. CatPlot: Occupation vs. Premium Amount (Box Plot)\nsns.catplot(\n    data=train, \n    x='Occupation', \n    y='Premium Amount', \n    kind='box', \n    aspect=2, \n    height=6, \n    palette='Set3'\n)\nplt.title('CatPlot: Occupation vs. Premium Amount')\n\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:01:06.008209Z","iopub.execute_input":"2024-12-28T07:01:06.008593Z","iopub.status.idle":"2024-12-28T07:01:12.357301Z","shell.execute_reply.started":"2024-12-28T07:01:06.008566Z","shell.execute_reply":"2024-12-28T07:01:12.356207Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Create subplots\nfig, ax = plt.subplots(1, 2, figsize=(15, 7))\n\n# 1. Hexbin Plot: Health Score vs. Premium Amount\nhb = ax[0].hexbin(\n    train['Health Score'], \n    train['Premium Amount'], \n    gridsize=30,  # Adjust the density of hexagons\n    cmap='Blues'\n)\nax[0].set_title('Hexbin Plot: Health Score vs. Premium Amount')\nax[0].set_xlabel('Health Score')\nax[0].set_ylabel('Premium Amount')\nfig.colorbar(hb, ax=ax[0], label='Counts')\n\n# 2. Violin Plot: Location vs. Premium Amount\nsns.violinplot(\n    data=train, \n    x='Location', \n    y='Premium Amount', \n    ax=ax[1], \n    palette='muted', \n    inner=\"quart\",  # Quartile markers inside the violin\n    scale='area'\n)\nax[1].set_title('Violin Plot: Location vs. Premium Amount')\n\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:12:10.07807Z","iopub.execute_input":"2024-12-28T07:12:10.078435Z","iopub.status.idle":"2024-12-28T07:12:13.884264Z","shell.execute_reply.started":"2024-12-28T07:12:10.078407Z","shell.execute_reply":"2024-12-28T07:12:13.883186Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Create subplots\nfig, ax = plt.subplots(1, 2, figsize=(15, 7))\n\n# 1. Violin Plot: Previous Claims vs. Premium Amount\nsns.violinplot(\n    data=train, \n    x='Previous Claims', \n    y='Premium Amount', \n    ax=ax[0], \n    palette='coolwarm', \n    inner='quart',  # Display quartiles within the violins\n    scale='area'    # Scale violins by area to better compare distributions\n)\nax[0].set_title('Violin Plot: Previous Claims vs. Premium Amount')\n\n# 2. Point Plot: Policy Type vs. Premium Amount\nsns.pointplot(\n    data=train, \n    x='Policy Type', \n    y='Premium Amount', \n    ax=ax[1], \n    palette='Set1', \n    ci=None,         # No confidence interval for the plot\n    markers='o',     # Use circular markers\n    linestyles='-',  # Solid lines\n    dodge=True       # Separate the points for each category in Policy Type\n)\nax[1].set_title('Point Plot: Policy Type vs. Premium Amount')\n\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:14:11.787322Z","iopub.execute_input":"2024-12-28T07:14:11.787687Z","iopub.status.idle":"2024-12-28T07:14:14.910607Z","shell.execute_reply.started":"2024-12-28T07:14:11.787659Z","shell.execute_reply":"2024-12-28T07:14:14.9095Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Create subplots\nfig, ax = plt.subplots(1, 2, figsize=(18, 7))\n\n# 1. Violin Plot: Vehicle Age vs. Premium Amount\nsns.violinplot(\n    data=train, \n    x='Vehicle Age', \n    y='Premium Amount', \n    ax=ax[0], \n    palette='viridis', \n    inner='quart',  # Display quartiles within the violins\n    scale='area'    # Scale violins by area\n)\nax[0].set_title('Violin Plot: Vehicle Age vs. Premium Amount')\n\n# 2. Regplot: Credit Score vs. Premium Amount (Choose one: robust=True or lowess=True)\nsns.regplot(\n    data=train, \n    x='Credit Score', \n    y='Premium Amount', \n    ax=ax[1], \n    scatter_kws={'s': 10, 'alpha': 0.6},  # Adjust scatter point size and transparency\n    line_kws={'color': 'red'},  # Set the color of the regression line\n    robust=True,  # Use a robust regression model to reduce the impact of outliers\n    # lowess=True   # Uncomment this line if you prefer a locally weighted regression instead of robust regression\n)\nax[1].set_title('Regplot: Credit Score vs. Premium Amount')\n\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:16:28.87222Z","iopub.execute_input":"2024-12-28T07:16:28.872616Z","iopub.status.idle":"2024-12-28T08:17:17.944246Z","shell.execute_reply.started":"2024-12-28T07:16:28.87258Z","shell.execute_reply":"2024-12-28T08:17:17.942477Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Create subplots\nfig, ax = plt.subplots(1, 2, figsize=(18, 7))\n\n# 1. Count Plot: Customer Feedback vs. Premium Amount\nsns.countplot(\n    data=train, \n    x='Customer Feedback', \n    hue='Gender',  # Add 'Gender' to differentiate by gender\n    palette='Set2', \n    ax=ax[0]\n)\nax[0].set_title('Count Plot: Customer Feedback')\n\n# 2. Violin Plot: Insurance Duration vs. Premium Amount\nsns.violinplot(\n    data=train, \n    x='Insurance Duration', \n    y='Premium Amount', \n    ax=ax[1], \n    palette='viridis', \n    scale='area',  # Scale the violins by area to visualize density\n    inner='quart'  # Display quartiles inside the violin plot\n)\nax[1].set_title('Violin Plot: Insurance Duration vs. Premium Amount')\n\n# Adjust layout for better presentation\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T08:39:29.807821Z","iopub.execute_input":"2024-12-28T08:39:29.808224Z","iopub.status.idle":"2024-12-28T08:39:34.610514Z","shell.execute_reply.started":"2024-12-28T08:39:29.808185Z","shell.execute_reply":"2024-12-28T08:39:34.609423Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Create subplots\nfig, ax = plt.subplots(1, 2, figsize=(18, 7))\n\n# 1. Bar Plot: Smoking Status vs. Premium Amount\nsns.barplot(\n    data=train, \n    x='Smoking Status', \n    y='Premium Amount', \n    ax=ax[0], \n    palette='coolwarm', \n    ci=None  # Don't show confidence intervals\n)\nax[0].set_title('Bar Plot: Smoking Status vs. Premium Amount')\n\n# 2. Strip Plot: Exercise Frequency vs. Premium Amount\nsns.stripplot(\n    data=train, \n    x='Exercise Frequency', \n    y='Premium Amount', \n    ax=ax[1], \n    jitter=True,  # Add jitter for better visibility of overlapping points\n    hue='Gender', \n    palette='Set1', \n    alpha=0.6  # Make the points slightly transparent for visibility\n)\nax[1].set_title('Strip Plot: Exercise Frequency vs. Premium Amount')\nax[1].legend(title='Gender')\n\n# Adjust layout for better presentation\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T08:43:26.489101Z","iopub.execute_input":"2024-12-28T08:43:26.489528Z","iopub.status.idle":"2024-12-28T08:44:18.327447Z","shell.execute_reply.started":"2024-12-28T08:43:26.489498Z","shell.execute_reply":"2024-12-28T08:44:18.326081Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Create subplots\nfig, ax = plt.subplots(1, 2, figsize=(18, 7))\n\n# 1. Scatter Plot: Annual Income vs Premium Amount\nsns.scatterplot(\n    data=train, \n    x='Annual Income', \n    y='Premium Amount', \n    ax=ax[0], \n    color='teal', \n    alpha=0.6  # Make points slightly transparent for better visibility\n)\nax[0].set_title('Scatter Plot: Annual Income vs Premium Amount')\n\n# 2. Violin Plot: Property Type vs Premium Amount\nsns.violinplot(\n    data=train, \n    x='Property Type', \n    y='Premium Amount', \n    ax=ax[1], \n    palette='viridis', \n    scale='area',  # Scale violins by area for better comparison of distribution\n    inner='quart'  # Show quartiles inside the violin plot\n)\nax[1].set_title('Violin Plot: Property Type vs Premium Amount')\n\n# Adjust layout for better presentation\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T08:49:58.705382Z","iopub.execute_input":"2024-12-28T08:49:58.705803Z","iopub.status.idle":"2024-12-28T08:50:05.281531Z","shell.execute_reply.started":"2024-12-28T08:49:58.705767Z","shell.execute_reply":"2024-12-28T08:50:05.279592Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"numerical_cols = ['Age', 'Annual Income', 'Number of Dependents', 'Health Score', \n                  'Credit Score', 'Insurance Duration', 'Vehicle Age', 'Premium Amount']\n\nplt.figure(figsize=(12, 8))\nsns.heatmap(train[numerical_cols].corr(), annot=True, cmap='coolwarm', fmt=\".2f\")\nplt.title('Correlation Heatmap')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T16:51:53.258785Z","iopub.execute_input":"2024-12-28T16:51:53.259266Z","iopub.status.idle":"2024-12-28T16:51:54.046073Z","shell.execute_reply.started":"2024-12-28T16:51:53.259238Z","shell.execute_reply":"2024-12-28T16:51:54.0451Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Box plots for categorical columns vs Premium Amount\ncategorical_cols = ['Gender', 'Marital Status', 'Education Level', 'Occupation', \n                    'Location', 'Policy Type', 'Smoking Status', 'Exercise Frequency', 'Property Type']\n\nfor col in categorical_cols:\n    plt.figure(figsize=(10, 6))\n    sns.boxplot(data=train, x=col, y='Premium Amount', palette='Set2')\n    plt.title(f'Premium Amount by {col}')\n    plt.xticks(rotation=45)\n    plt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T16:52:33.27606Z","iopub.execute_input":"2024-12-28T16:52:33.276417Z","iopub.status.idle":"2024-12-28T16:52:40.477425Z","shell.execute_reply.started":"2024-12-28T16:52:33.276393Z","shell.execute_reply":"2024-12-28T16:52:40.476361Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Distribution of the target variable\nplt.figure(figsize=(8, 6))\nsns.histplot(data=train, x='Premium Amount', kde=True, color='dodgerblue', bins=30)\nplt.title('Distribution of Premium Amount')\nplt.xlabel('Premium Amount')\nplt.ylabel('Density')\nplt.show()\n\n# Scatter plots for numerical columns vs Premium Amount\nfor col in numerical_cols:\n    if col != 'Premium Amount':  # Exclude target\n        plt.figure(figsize=(8, 6))\n        sns.scatterplot(data=train, x=col, y='Premium Amount', hue='Gender', palette='Set1', alpha=0.7)\n        plt.title(f'Premium Amount vs {col}')\n        plt.xlabel(col)\n        plt.ylabel('Premium Amount')\n        plt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T16:53:17.818412Z","iopub.execute_input":"2024-12-28T16:53:17.818791Z","iopub.status.idle":"2024-12-28T17:00:16.956903Z","shell.execute_reply.started":"2024-12-28T16:53:17.818757Z","shell.execute_reply":"2024-12-28T17:00:16.955721Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# def preprocess_data(df):\n#     # Map binary categorical columns\n#     df['Gender'] = df['Gender'].map({'Female': 0, 'Male': 1})\n#     df['Smoking Status'] = df['Smoking Status'].map({'No': 0, 'Yes': 1})\n    \n#     # Clip Previous Claims to handle outliers\n#     df['Previous Claims'] = df['Previous Claims'].clip(None, 8)\n    \n#     # Fill missing values\n#     num_cols = ['Age', 'Annual Income', 'Number of Dependents', 'Health Score', \n#                 'Vehicle Age', 'Credit Score', 'Insurance Duration', 'Previous Claims']\n#     for col in num_cols:\n#         df[col] = df[col].fillna(df[col].median())\n    \n#     cat_cols = ['Marital Status', 'Education Level', 'Occupation', 'Location', \n#                 'Policy Type', 'Customer Feedback', 'Exercise Frequency', 'Property Type']\n#     for col in cat_cols:\n#         df[col] = df[col].fillna(\"Unknown\").astype('str')\n    \n#     # Extract features from Policy Start Date\n#     df['Policy Start Date'] = pd.to_datetime(df['Policy Start Date'], errors='coerce')\n#     df['Policy Start Year'] = df['Policy Start Date'].dt.year\n#     df['Policy Start Month'] = df['Policy Start Date'].dt.month\n#     df.drop(columns=['Policy Start Date'], inplace=True)\n    \n#     return df\n\ndef preprocess_data(df):\n    # Map binary categorical columns\n    df['Gender'] = df['Gender'].map({'Female': 0, 'Male': 1})\n    df['Smoking Status'] = df['Smoking Status'].map({'No': 0, 'Yes': 1})\n    \n    # Clip Previous Claims to handle outliers\n    df['Previous Claims'] = df['Previous Claims'].clip(None, 8)\n    \n    # Define imputation strategies for numerical columns\n    num_imputers = {\n        'Age': SimpleImputer(strategy='mean'),\n        'Annual Income': SimpleImputer(strategy='median'),\n        'Number of Dependents': SimpleImputer(strategy='most_frequent'),\n        'Health Score': SimpleImputer(strategy='mean'),\n        'Vehicle Age': SimpleImputer(strategy='median'),\n        'Credit Score': SimpleImputer(strategy='mean'),\n        'Insurance Duration': SimpleImputer(strategy='median'),\n        'Previous Claims': SimpleImputer(strategy='most_frequent')\n    }\n    \n    # Apply imputations to numerical columns\n    for col, imputer in num_imputers.items():\n        df[[col]] = imputer.fit_transform(df[[col]])\n    \n    # Define imputation strategies for categorical columns\n    cat_imputers = {\n        'Marital Status': \"Unknown\",\n        'Education Level': \"High School\",\n        'Occupation': \"Unemployed\",\n        'Location': \"Urban\",\n        'Policy Type': \"Basic\",\n        'Customer Feedback': \"Average\",\n        'Exercise Frequency': \"Rarely\",\n        'Property Type': \"House\"\n    }\n    \n    # Apply imputations to categorical columns\n    for col, fill_value in cat_imputers.items():\n        df[col] = df[col].fillna(fill_value).astype('str')\n    \n    # Extract features from Policy Start Date\n    df['Policy Start Date'] = pd.to_datetime(df['Policy Start Date'], errors='coerce')\n    df['Policy Start Year'] = df['Policy Start Date'].dt.year\n    df['Policy Start Month'] = df['Policy Start Date'].dt.month\n    df.drop(columns=['Policy Start Date'], inplace=True)\n    \n    return df\n\n# Apply preprocessing to train and test\ntrain_x = preprocess_data(train)\ntest_x = preprocess_data(test)\n\n# Separate features and target\nX = train_x.drop(columns=['Age','Premium Amount'])\ny = train_x['Premium Amount']\n\n# Define column groups\nnum_features = ['Annual Income', 'Number of Dependents', 'Health Score', \n                'Vehicle Age', 'Credit Score', 'Insurance Duration', 'Previous Claims']\ncat_features = ['Marital Status', 'Education Level', 'Occupation', 'Location', \n                'Policy Type', 'Customer Feedback', 'Exercise Frequency', 'Property Type']\n\n# Preprocessing pipeline\nnum_transformer = Pipeline(steps=[\n    ('scaler', StandardScaler())\n])\n\ncat_transformer = Pipeline(steps=[\n    ('onehot', OneHotEncoder(handle_unknown='ignore'))\n])\n\npreprocessor = ColumnTransformer(\n    transformers=[\n        ('num', num_transformer, num_features),\n        ('cat', cat_transformer, cat_features)\n    ]\n)\n\n# Transform the data\nX_train = preprocessor.fit_transform(X)\nX_test = preprocessor.transform(test_x)\n\n# Convert preprocessed data back to DataFrame\ncat_feature_names = preprocessor.named_transformers_['cat']['onehot'].get_feature_names_out(cat_features)\nall_feature_names = np.concatenate([num_features, cat_feature_names])\n\nX_train = pd.DataFrame(X_train, columns=all_feature_names, index=X.index)\nX_test = pd.DataFrame(X_test, columns=all_feature_names, index=test.index)\n\n# Verify the shapes\nprint(\"X_train shape:\", X_train.shape)\nprint(\"X_test shape:\", X_test.shape)\nprint(\"y shape:\", y.shape)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:52:25.102843Z","iopub.execute_input":"2024-12-30T15:52:25.10316Z","iopub.status.idle":"2024-12-30T15:52:32.964252Z","shell.execute_reply.started":"2024-12-30T15:52:25.103117Z","shell.execute_reply":"2024-12-30T15:52:32.963282Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_test.columns","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T17:32:26.905611Z","iopub.execute_input":"2024-12-28T17:32:26.906052Z","iopub.status.idle":"2024-12-28T17:32:26.913103Z","shell.execute_reply.started":"2024-12-28T17:32:26.906019Z","shell.execute_reply":"2024-12-28T17:32:26.911796Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_train.columns","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T17:32:41.730532Z","iopub.execute_input":"2024-12-28T17:32:41.731054Z","iopub.status.idle":"2024-12-28T17:32:41.73904Z","shell.execute_reply.started":"2024-12-28T17:32:41.731009Z","shell.execute_reply":"2024-12-28T17:32:41.737866Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def optimize_memory_usage(df):\n    \"\"\"\n    Optimizes the memory usage of a DataFrame by downcasting numeric columns to the smallest data type possible.\n    Parameters:\n        df (pd.DataFrame): The input DataFrame to optimize.\n    Returns:\n        pd.DataFrame: The optimized DataFrame with reduced memory usage.\n    \"\"\"\n    print('==> Optimizing memory usage...')\n    start_mem_usage = df.memory_usage().sum() / 1024**2  # Initial memory usage in MB\n\n    for col in df.columns:\n        col_type = df[col].dtype\n\n        # Skip object (categorical) columns\n        if col_type == 'object' or col_type.name == 'category':\n            continue\n\n        c_min = df[col].min()\n        c_max = df[col].max()\n\n        # Downcast integer columns\n        if str(col_type)[:3] == 'int':\n            if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:\n                df[col] = df[col].astype(np.int8)\n            elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:\n                df[col] = df[col].astype(np.int16)\n            elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:\n                df[col] = df[col].astype(np.int32)\n            elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:\n                df[col] = df[col].astype(np.int64)\n\n        # Downcast float columns\n        elif str(col_type)[:5] == 'float':\n            if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:\n                df[col] = df[col].astype(np.float16)\n            elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:\n                df[col] = df[col].astype(np.float32)\n            else:\n                df[col] = df[col].astype(np.float64)\n\n    end_mem_usage = df.memory_usage().sum() / 1024**2  # Final memory usage in MB\n\n    print(f'------ Memory usage before: {start_mem_usage:.2f} MB')\n    print(f'------ Memory usage after: {end_mem_usage:.2f} MB')\n    print(f'------ Reduced memory usage by {(100 * (start_mem_usage - end_mem_usage) / start_mem_usage):.1f}%')\n\n    return df\n\n# Apply optimization to your processed datasets\nprocessed_train = optimize_memory_usage(X_train)\nprocessed_test = optimize_memory_usage(X_test)\n\nprocessed_train_1 = optimize_memory_usage(train)\nprocessed_test_1 = optimize_memory_usage(test)\n\n# Output the reduced memory usage\nprint(\"Processed train memory usage optimized.\")\nprint(\"Processed test memory usage optimized.\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:52:38.535899Z","iopub.execute_input":"2024-12-30T15:52:38.536305Z","iopub.status.idle":"2024-12-30T15:52:42.814079Z","shell.execute_reply.started":"2024-12-30T15:52:38.536271Z","shell.execute_reply":"2024-12-30T15:52:42.813065Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Catboost","metadata":{}},{"cell_type":"code","source":"# Define custom metric: Root Mean Squared Logarithmic Error (RMSLE)\ndef mean_squared_log_error(y_true, y_pred):\n    \"\"\"\n    Compute the Mean Squared Logarithmic Error (MSLE).\n    \"\"\"\n    return np.mean((np.log1p(y_true) - np.log1p(y_pred)) ** 2)\n\n# Parameters for CatBoost\ncb_params = {'loss_function': 'MAE',\n             'iterations': 1000,\n             'task_type': 'CPU'}\n\n# Cross-validation setup\nskf = RepeatedKFold(n_splits=20, n_repeats=1, random_state=42)\n\n# Initialize variables to store results\nscores = []  # To store scores for each fold\ncat_test_preds = []  # To store predictions for the test set\n\n# Perform Repeated K-Fold Cross-Validation\nfor i, (train_index, test_index) in enumerate(skf.split(processed_train, y)):\n    print(f\"------------ Working on Fold {i+1} ------------\")\n    \n    # Split data into training and validation sets\n    X_train_fold = processed_train.iloc[train_index]\n    X_valid_fold = processed_train.iloc[test_index]\n    y_train_fold = y.iloc[train_index]\n    y_valid_fold = y.iloc[test_index]\n    \n    # Train CatBoost model\n    cat_model = CatBoostRegressor(**cb_params)\n    cat_model.fit(X_train_fold, y_train_fold, eval_set=(X_valid_fold, y_valid_fold), verbose=0)\n    \n    # Predict on validation set\n    valid_preds = cat_model.predict(X_valid_fold)\n    \n    # Calculate RMSLE score for the validation set\n    fold_score = mean_squared_log_error(y_valid_fold, valid_preds)\n    print(f\"The RMSLE score for Fold {i+1} is {fold_score:.4f}\")\n    scores.append(fold_score)\n    \n    # Predict on the test set and store predictions\n    test_preds = cat_model.predict(processed_test)\n    cat_test_preds.append(test_preds)\n\n# Calculate overall mean and standard deviation of RMSLE scores\ncat_oof_score = np.mean(scores)\ncat_std = np.std(scores)\n\n# Print cross-validation results\nprint(f\"\\nThe 10-fold average oof RMSLE score of the CatBoost model is {cat_oof_score:.4f}\")\nprint(f\"The 10-fold std oof RMSLE score of the CatBoost model is {cat_std:.4f}\")\n\n# Aggregate predictions for the test set (e.g., averaging)\nfinal_test_preds = np.mean(cat_test_preds, axis=0)\n\n# Save or use the predictions as needed\nprint(\"Final test predictions are ready.\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-29T06:31:05.464695Z","iopub.execute_input":"2024-12-29T06:31:05.465078Z","iopub.status.idle":"2024-12-29T07:19:09.127356Z","shell.execute_reply.started":"2024-12-29T06:31:05.465048Z","shell.execute_reply":"2024-12-29T07:19:09.12615Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission = pd.read_csv('/kaggle/input/playground-series-s4e12/sample_submission.csv')\nsubmission['Premium Amount'] = np.mean(cat_test_preds, axis=0)\nsubmission.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-29T07:19:48.087022Z","iopub.execute_input":"2024-12-29T07:19:48.087549Z","iopub.status.idle":"2024-12-29T07:19:48.492381Z","shell.execute_reply.started":"2024-12-29T07:19:48.08749Z","shell.execute_reply":"2024-12-29T07:19:48.491357Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission.to_csv('sub_1.csv', index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-29T07:19:58.081278Z","iopub.execute_input":"2024-12-29T07:19:58.081612Z","iopub.status.idle":"2024-12-29T07:19:59.674438Z","shell.execute_reply.started":"2024-12-29T07:19:58.081588Z","shell.execute_reply":"2024-12-29T07:19:59.673522Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## LGBRegression","metadata":{}},{"cell_type":"code","source":"import numpy as np\nfrom sklearn.model_selection import RepeatedKFold\nimport lightgbm as lgb\n\n# Define custom metric: Root Mean Squared Logarithmic Error (RMSLE)\ndef mean_squared_log_error(y_true, y_pred):\n    \"\"\"\n    Compute the Mean Squared Logarithmic Error (MSLE).\n    \"\"\"\n    return np.mean((np.log1p(y_true) - np.log1p(y_pred)) ** 2)\n\n# Parameters for LightGBM\nlgb_params = {\n    'objective': 'RMSE',  # Using Mean Absolute Error as the loss function\n    'learning_rate': 0.03,  # Adjusted learning rate\n    'n_estimators': 1200,  # Increased iterations for better learning\n    'max_depth': 12,  # Tuned depth to avoid overfitting\n    'reg_alpha': 0.01,  # L1 regularization\n    'reg_lambda': 0.01,  # L2 regularization\n    'num_leaves': 50,  # Optimized number of leaves\n    'colsample_bytree': 0.7,  # Feature sampling\n    'subsample': 0.8,  # Data sampling to prevent overfitting\n    'verbose': -1,  # Silent mode\n    'n_jobs': -1,  # Use all available CPUs\n    'device': 'cpu'  # Use GPU if available\n}\n\n# Cross-validation setup\nskf = RepeatedKFold(n_splits=20, n_repeats=1, random_state=42)\n\n# Initialize variables to store results\nscores = []  # To store scores for each fold\nlgb_test_preds = []  # To store predictions for the test set\n\n# Perform Repeated K-Fold Cross-Validation\nfor i, (train_index, test_index) in enumerate(skf.split(processed_train, y)):\n    print(f\"------------ Working on Fold {i+1} ------------\")\n    # Split data into training and validation sets\n    X_train_fold = processed_train.iloc[train_index]\n    X_valid_fold = processed_train.iloc[test_index]\n    y_train_fold = y.iloc[train_index]\n    y_valid_fold = y.iloc[test_index]\n    \n    # Train LightGBM model\n    lgb_model = lgb.LGBMRegressor(**lgb_params)\n    lgb_model.fit(\n        X_train_fold, \n        y_train_fold, \n        eval_set=[(X_valid_fold, y_valid_fold)], \n        eval_metric='mae'\n    )\n    \n    # Predict on validation set\n    valid_preds = lgb_model.predict(X_valid_fold)\n    \n    # Calculate RMSLE score for the validation set\n    fold_score = mean_squared_log_error(y_valid_fold, valid_preds)\n    print(f\"The RMSLE score for Fold {i+1} is {fold_score:.4f}\")\n    scores.append(fold_score)\n    \n    # Predict on the test set and store predictions\n    test_preds = lgb_model.predict(processed_test)\n    lgb_test_preds.append(test_preds)\n\n# Calculate overall mean and standard deviation of RMSLE scores\nlgb_oof_score = np.mean(scores)\nlgb_std = np.std(scores)\n\n# Print cross-validation results\nprint(f\"\\nThe 10-fold average oof RMSLE score of the LightGBM model is {lgb_oof_score:.4f}\")\nprint(f\"The 10-fold std oof RMSLE score of the LightGBM model is {lgb_std:.4f}\")\n\n# Aggregate predictions for the test set (e.g., averaging)\nfinal_test_preds = np.mean(lgb_test_preds, axis=0)\n\n# Save or use the predictions as needed\nprint(\"Final test predictions are ready.\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-29T07:30:00.506005Z","iopub.execute_input":"2024-12-29T07:30:00.506385Z","iopub.status.idle":"2024-12-29T08:02:39.026357Z","shell.execute_reply.started":"2024-12-29T07:30:00.506358Z","shell.execute_reply":"2024-12-29T08:02:39.025229Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission2 = pd.read_csv('/kaggle/input/playground-series-s4e12/sample_submission.csv')\nsubmission2['Premium Amount'] = np.mean(lgb_test_preds, axis=0)\nsubmission2.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-29T08:09:48.380033Z","iopub.execute_input":"2024-12-29T08:09:48.380538Z","iopub.status.idle":"2024-12-29T08:09:48.619634Z","shell.execute_reply.started":"2024-12-29T08:09:48.380495Z","shell.execute_reply":"2024-12-29T08:09:48.618734Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission2.to_csv('sub_2.csv', index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-29T08:09:58.208734Z","iopub.execute_input":"2024-12-29T08:09:58.209073Z","iopub.status.idle":"2024-12-29T08:09:59.793753Z","shell.execute_reply.started":"2024-12-29T08:09:58.209048Z","shell.execute_reply":"2024-12-29T08:09:59.7926Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## XGBRegressor","metadata":{}},{"cell_type":"code","source":"# Define custom metric: Root Mean Squared Logarithmic Error (RMSLE)\ndef mean_squared_log_error(y_true, y_pred):\n    \"\"\"\n    Compute the Mean Squared Logarithmic Error (MSLE).\n    \"\"\"\n    return np.mean((np.log1p(y_true) - np.log1p(y_pred)) ** 2)\n\n# Parameters for XGBRegressor\nxgb_params = {\n    'objective': 'reg:squarederror',  # Objective for regression\n    'learning_rate': 0.05,           # Learning rate\n    'n_estimators': 1000,            # Number of trees\n    'max_depth': 10,                 # Maximum depth of a tree\n    'reg_alpha': 0.5,                # L1 regularization\n    'reg_lambda': 2.0,               # L2 regularization\n    'colsample_bytree': 0.8,         # Fraction of features used per tree\n    'subsample': 0.75,               # Fraction of data used per tree\n    # 'tree_method': 'gpu_hist',       # Use GPU acceleration if available\n    'verbosity': 1,                  # Logging verbosity\n    'n_jobs': -1                     # Use all available CPUs\n}\n\n# Cross-validation setup\nskf = RepeatedKFold(n_splits=20, n_repeats=1, random_state=42)\n\n# Initialize variables to store results\nscores = []  # To store scores for each fold\nxgb_test_preds = []  # To store predictions for the test set\n\n# Perform Repeated K-Fold Cross-Validation\nfor i, (train_index, test_index) in enumerate(skf.split(processed_train, y)):\n    print(f\"------------ Working on Fold {i+1} ------------\")\n    \n    # Split data into training and validation sets\n    X_train_fold = processed_train.iloc[train_index]\n    X_valid_fold = processed_train.iloc[test_index]\n    y_train_fold = y.iloc[train_index]\n    y_valid_fold = y.iloc[test_index]\n    \n    # Train XGBRegressor model\n    xgb_model = XGBRegressor(**xgb_params)\n    xgb_model.fit(\n        X_train_fold, \n        y_train_fold, \n        eval_set=[(X_valid_fold, y_valid_fold)], \n        eval_metric='rmse',  # Metric for evaluation\n        verbose=False\n    )\n    \n    # Predict on validation set\n    valid_preds = xgb_model.predict(X_valid_fold)\n    \n    # Calculate RMSLE score for the validation set\n    fold_score = mean_squared_log_error(y_valid_fold, valid_preds)\n    print(f\"The RMSLE score for Fold {i+1} is {fold_score:.4f}\")\n    scores.append(fold_score)\n    \n    # Predict on the test set and store predictions\n    test_preds = xgb_model.predict(processed_test)\n    xgb_test_preds.append(test_preds)\n\n# Calculate overall mean and standard deviation of RMSLE scores\nxgb_oof_score = np.mean(scores)\nxgb_std = np.std(scores)\n\n# Print cross-validation results\nprint(f\"\\nThe 10-fold average oof RMSLE score of the XGBRegressor model is {xgb_oof_score:.4f}\")\nprint(f\"The 10-fold std oof RMSLE score of the XGBRegressor model is {xgb_std:.4f}\")\n\n# Aggregate predictions for the test set (e.g., averaging)\nfinal_test_preds = np.mean(xgb_test_preds, axis=0)\n\n# Save or use the predictions as needed\nprint(\"Final test predictions are ready.\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T04:36:02.457496Z","iopub.execute_input":"2024-12-30T04:36:02.45783Z","iopub.status.idle":"2024-12-30T05:28:44.542226Z","shell.execute_reply.started":"2024-12-30T04:36:02.457803Z","shell.execute_reply":"2024-12-30T05:28:44.541263Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Autogluon","metadata":{}},{"cell_type":"code","source":"!pip install autogluon.tabular","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:53:00.503255Z","iopub.execute_input":"2024-12-30T15:53:00.503526Z","iopub.status.idle":"2024-12-30T15:53:11.922029Z","shell.execute_reply.started":"2024-12-30T15:53:00.503506Z","shell.execute_reply":"2024-12-30T15:53:11.92113Z"},"_kg_hide-output":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!pip install scikit-learn==1.2.2","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:53:13.857882Z","iopub.execute_input":"2024-12-30T15:53:13.858222Z","iopub.status.idle":"2024-12-30T15:53:19.30563Z","shell.execute_reply.started":"2024-12-30T15:53:13.858192Z","shell.execute_reply":"2024-12-30T15:53:19.30476Z"},"_kg_hide-output":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!pip install ray==2.10.0","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:53:22.102691Z","iopub.execute_input":"2024-12-30T15:53:22.103043Z","iopub.status.idle":"2024-12-30T15:53:32.979574Z","shell.execute_reply.started":"2024-12-30T15:53:22.103013Z","shell.execute_reply":"2024-12-30T15:53:32.978526Z"},"_kg_hide-output":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"processed_train_1['Premium Amount'] = np.log1p(processed_train_1['Premium Amount'])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:53:34.788179Z","iopub.execute_input":"2024-12-30T15:53:34.788483Z","iopub.status.idle":"2024-12-30T15:53:34.797976Z","shell.execute_reply.started":"2024-12-30T15:53:34.788456Z","shell.execute_reply":"2024-12-30T15:53:34.797174Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"kf = KFold(n_splits=10, random_state=142, shuffle=True)\nsplit = kf.split(processed_train_1, processed_train_1['Premium Amount'])\nfor i, (_, val_index) in enumerate(split):\n    processed_train_1.loc[val_index, 'fold'] = i","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:53:39.248409Z","iopub.execute_input":"2024-12-30T15:53:39.248716Z","iopub.status.idle":"2024-12-30T15:53:39.481918Z","shell.execute_reply.started":"2024-12-30T15:53:39.24869Z","shell.execute_reply":"2024-12-30T15:53:39.481211Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from autogluon.tabular import TabularPredictor\n\npredictor = TabularPredictor(\n    problem_type='regression',\n    eval_metric='rmse',\n    label='Premium Amount',\n    groups='fold',\n    verbosity=2\n)\n\npredictor.fit(\n    train_data=processed_train_1,\n    time_limit=3600 * 3,\n    presets='best_quality',\n    excluded_model_types=['KNN'],\n    ag_args_fit={'num_gpus': 2, 'num_cpus': 4}\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:54:02.658407Z","iopub.execute_input":"2024-12-30T15:54:02.658895Z","iopub.status.idle":"2024-12-30T18:54:06.090573Z","shell.execute_reply.started":"2024-12-30T15:54:02.658837Z","shell.execute_reply":"2024-12-30T18:54:06.089873Z"},"_kg_hide-output":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"predictor.leaderboard(silent=True).style.background_gradient(subset=['score_val'], cmap='viridis')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T18:54:37.496491Z","iopub.execute_input":"2024-12-30T18:54:37.496819Z","iopub.status.idle":"2024-12-30T18:54:37.545659Z","shell.execute_reply.started":"2024-12-30T18:54:37.49676Z","shell.execute_reply":"2024-12-30T18:54:37.54503Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"predictor = TabularPredictor.load(\"/kaggle/working/AutogluonModels/ag-20241230_155402\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T18:55:06.604459Z","iopub.execute_input":"2024-12-30T18:55:06.604739Z","iopub.status.idle":"2024-12-30T18:55:06.619857Z","shell.execute_reply.started":"2024-12-30T18:55:06.604717Z","shell.execute_reply":"2024-12-30T18:55:06.619017Z"}},"outputs":[],"execution_count":null}]}