{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":84896,"databundleVersionId":10305135,"sourceType":"competition"}],"dockerImageVersionId":30804,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"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\nimport pandas as pd\nimport numpy as np\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.preprocessing import LabelEncoder, OneHotEncoder, StandardScaler\nimport xgboost as xgb\nimport shap\nfrom scipy import stats\nfrom sklearn.metrics import mean_squared_log_error\nfrom datetime import date","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:57:50.630335Z","iopub.execute_input":"2024-12-23T08:57:50.63068Z","iopub.status.idle":"2024-12-23T08:57:50.635756Z","shell.execute_reply.started":"2024-12-23T08:57:50.630651Z","shell.execute_reply":"2024-12-23T08:57:50.634864Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Calculate RMSLE\ndef rmsle(y_true, y_pred):\n    # Ensure no negative predictions\n    y_pred = np.maximum(y_pred, 1e-15)\n    return np.sqrt(np.mean(np.square(np.log(y_true + 1) - np.log(y_pred + 1))))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:57:50.648677Z","iopub.execute_input":"2024-12-23T08:57:50.649097Z","iopub.status.idle":"2024-12-23T08:57:50.65409Z","shell.execute_reply.started":"2024-12-23T08:57:50.649063Z","shell.execute_reply":"2024-12-23T08:57:50.653116Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X = pd.read_csv(\"/kaggle/input/playground-series-s4e12/train.csv\")  # Replace with your file name","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:57:50.665585Z","iopub.execute_input":"2024-12-23T08:57:50.66598Z","iopub.status.idle":"2024-12-23T08:57:54.106592Z","shell.execute_reply.started":"2024-12-23T08:57:50.665943Z","shell.execute_reply":"2024-12-23T08:57:54.105808Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(X['Policy Start Date'].head())\nprint(X['Policy Start Date'].dtype)\nX['Policy Start Date'] = pd.to_datetime(X['Policy Start Date'], errors='coerce', format='%Y-%m-%d')\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:57:54.108053Z","iopub.execute_input":"2024-12-23T08:57:54.108367Z","iopub.status.idle":"2024-12-23T08:57:55.621915Z","shell.execute_reply.started":"2024-12-23T08:57:54.108323Z","shell.execute_reply":"2024-12-23T08:57:55.620814Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X.shape","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:57:55.622974Z","iopub.execute_input":"2024-12-23T08:57:55.623257Z","iopub.status.idle":"2024-12-23T08:57:55.630161Z","shell.execute_reply.started":"2024-12-23T08:57:55.623231Z","shell.execute_reply":"2024-12-23T08:57:55.62928Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X['Policy Start Date'].fillna(0, inplace=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:57:55.631848Z","iopub.execute_input":"2024-12-23T08:57:55.632172Z","iopub.status.idle":"2024-12-23T08:57:55.855Z","shell.execute_reply.started":"2024-12-23T08:57:55.632146Z","shell.execute_reply":"2024-12-23T08:57:55.854076Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X.isna().sum()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:57:55.855953Z","iopub.execute_input":"2024-12-23T08:57:55.856215Z","iopub.status.idle":"2024-12-23T08:57:56.378877Z","shell.execute_reply.started":"2024-12-23T08:57:55.85619Z","shell.execute_reply":"2024-12-23T08:57:56.377779Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_test = pd.read_csv(\"/kaggle/input/playground-series-s4e12/test.csv\")\nX_test_copy = pd.read_csv(\"/kaggle/input/playground-series-s4e12/test.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:57:56.379905Z","iopub.execute_input":"2024-12-23T08:57:56.380255Z","iopub.status.idle":"2024-12-23T08:58:00.772165Z","shell.execute_reply.started":"2024-12-23T08:57:56.380219Z","shell.execute_reply":"2024-12-23T08:58:00.771424Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y = X['Premium Amount'].values\nX.drop(['Premium Amount'], axis=1, inplace=True)\nX.drop(['id'], axis=1, inplace=True)\nX_test.drop(['id'], axis=1, inplace=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:00.773198Z","iopub.execute_input":"2024-12-23T08:58:00.773489Z","iopub.status.idle":"2024-12-23T08:58:01.215104Z","shell.execute_reply.started":"2024-12-23T08:58:00.773462Z","shell.execute_reply":"2024-12-23T08:58:01.213681Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:01.21655Z","iopub.execute_input":"2024-12-23T08:58:01.21682Z","iopub.status.idle":"2024-12-23T08:58:01.235847Z","shell.execute_reply.started":"2024-12-23T08:58:01.216794Z","shell.execute_reply":"2024-12-23T08:58:01.234886Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X['Exercise Frequency'].unique()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:01.237018Z","iopub.execute_input":"2024-12-23T08:58:01.23743Z","iopub.status.idle":"2024-12-23T08:58:01.300979Z","shell.execute_reply.started":"2024-12-23T08:58:01.237403Z","shell.execute_reply":"2024-12-23T08:58:01.300099Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Define mapping for Exercise Frequency\nexercise_mapping = {\n    'Never': 0.0,\n    'Rarely': 1.0,\n    'Weekly': 2.0,\n    'Monthly': 3.0,\n    'Daily': 4.0\n}\n\n# Map Exercise Frequency to numerical values\nX['Exercise Frequency'] = X['Exercise Frequency'].map(exercise_mapping).fillna(0)\nX_test['Exercise Frequency'] = X_test['Exercise Frequency'].map(exercise_mapping).fillna(0)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:01.304592Z","iopub.execute_input":"2024-12-23T08:58:01.304873Z","iopub.status.idle":"2024-12-23T08:58:01.424056Z","shell.execute_reply.started":"2024-12-23T08:58:01.304847Z","shell.execute_reply":"2024-12-23T08:58:01.423296Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def create_insurance_features(X):\n    X_new = X.copy()\n    \n    # Risk Score combining multiple factors\n    X_new['risk_score'] = (\n        X['Health Score'] * 0.3 +\n        X['Credit Score'] * 0.2 +\n        (X['Previous Claims'] > 0).astype(int) * -0.2 +\n        (X['Smoking Status'] == 'Smoker').astype(int) * -0.1\n    )\n    \n    # Age-related features\n    X_new['age_squared'] = X['Age'] ** 2  # Non-linear age effect\n    X_new['age_group'] = pd.cut(X['Age'], bins=[0, 25, 35, 45, 55, 65, 100], labels=['0-25', '26-35', '36-45', '46-55', '56-65', '65+'])\n    \n    # Financial features\n    X_new['income_per_dependent'] = X['Annual Income'] / (X['Number of Dependents'] + 1)\n    X_new['income_credit_ratio'] = X['Annual Income'] / X['Credit Score']\n    \n    # Duration and Experience features\n    X_new['vehicle_age_insurance_ratio'] = X['Vehicle Age'] / (X['Insurance Duration'] + 1)\n    X_new['total_experience'] = X['Age'] - 18  # Assuming driving age\n    \n    # Lifestyle score\n    X_new['lifestyle_score'] = (\n        X['Exercise Frequency'] * 0.4 +\n        (X['Smoking Status'] == 'Non-Smoker').astype(int) * 0.6\n    )\n    \n    # Categorical interactions\n    X_new['location_property'] = X['Location'] + '_' + X['Property Type']\n    X_new['occupation_education'] = X['Occupation'] + '_' + X['Education Level']\n\n    # Convert the date column to datetime\n    #X_new['Policy Start Date'] = pd.to_datetime(X['Policy Start Date'],errors='coerce')\n\n# Calculate the difference\n    #X_new['Policy Start Date'] = (pd.to_datetime(date.today()) - X['Policy Start Date']).dt.days\n\n    #X_test['Policy Start Date'] = pd.to_datetime(X_test['Policy Start Date'],errors='coerce')\n    #X_test['Policy Start Date'] = (pd.to_datetime(date.today()) - X_test['Policy Start Date']).dt.days\n    \n    return X_new","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:01.425095Z","iopub.execute_input":"2024-12-23T08:58:01.425424Z","iopub.status.idle":"2024-12-23T08:58:01.433202Z","shell.execute_reply.started":"2024-12-23T08:58:01.425395Z","shell.execute_reply":"2024-12-23T08:58:01.432397Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def preprocess_insurance_data(X):\n    # Handle missing values based on domain knowledge\n    X['Credit Score'].fillna(X.groupby('Occupation')['Credit Score'].transform('median'), inplace=True)\n    X['Health Score'].fillna(X.groupby(['Age', 'Smoking Status'])['Health Score'].transform('median'), inplace=True)\n    \n    # Encode categorical variables with domain-specific ordering\n    education_order = ['High School', 'Bachelor', 'Master', 'PhD']\n    X['Education_Level_Encoded'] = pd.Categorical(X['Education Level'], \n                                                categories=education_order, \n                                                ordered=True).codes  \n    return X","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:01.434427Z","iopub.execute_input":"2024-12-23T08:58:01.434797Z","iopub.status.idle":"2024-12-23T08:58:01.447814Z","shell.execute_reply.started":"2024-12-23T08:58:01.434756Z","shell.execute_reply":"2024-12-23T08:58:01.44699Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def calculate_risk_level(row):\n    \"\"\"Calculate risk level based on insurance domain knowledge\"\"\"\n    risk = 0\n    if pd.notnull(row['Previous Claims']) and row['Previous Claims'] > 0.0:\n        risk += 2\n    if pd.notnull(row['Smoking Status']) and row['Smoking Status'] == 'Smoker':\n        risk += 1\n    if pd.notnull(row['Health Score']) and row['Health Score'] < 70.0:\n        risk += 1\n    if pd.notnull(row['Credit Score']) and row['Credit Score'] < 600.0:\n        risk += 1\n    if pd.notnull(row['Vehicle Age']) and row['Vehicle Age'] > 10.0:\n        risk += 1\n    \n    return risk","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:01.448743Z","iopub.execute_input":"2024-12-23T08:58:01.449021Z","iopub.status.idle":"2024-12-23T08:58:01.461845Z","shell.execute_reply.started":"2024-12-23T08:58:01.448994Z","shell.execute_reply":"2024-12-23T08:58:01.4611Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def transform_target(y):\n    # Try a mix of log and power transformation\n    y_log = np.log1p(y)\n    y_sqrt = np.sqrt(y)\n    return (y_log + y_sqrt) / 2","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:01.46284Z","iopub.execute_input":"2024-12-23T08:58:01.463108Z","iopub.status.idle":"2024-12-23T08:58:01.472339Z","shell.execute_reply.started":"2024-12-23T08:58:01.463068Z","shell.execute_reply":"2024-12-23T08:58:01.471624Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"insurance_params = {\n    'objective':'reg:squaredlogerror',\n    'n_estimators': 3000,\n    'learning_rate': 0.005,\n    'max_depth': 6,\n    'min_child_weight': 4,\n    'gamma': 0.1,\n    'subsample': 0.85,\n    'colsample_bytree': 0.85,\n    'reg_alpha': 0.2,\n    'reg_lambda': 1.2,\n    'scale_pos_weight': 1,\n    'tree_method': 'hist',\n    'grow_policy': 'lossguide',\n    'max_bin': 255,\n    'num_parallel_tree': 2\n}","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:01.473658Z","iopub.execute_input":"2024-12-23T08:58:01.474096Z","iopub.status.idle":"2024-12-23T08:58:01.483759Z","shell.execute_reply.started":"2024-12-23T08:58:01.474059Z","shell.execute_reply":"2024-12-23T08:58:01.482954Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\nfrom xgboost import XGBRegressor \nfrom lightgbm import LGBMRegressor\nfrom catboost import CatBoostRegressor\n\nxgb_pred = XGBRegressor(**insurance_params)\nlgb_pred = LGBMRegressor(n_estimators=2000, learning_rate=0.005)\ncat_pred = CatBoostRegressor(iterations=2000, learning_rate=0.005, verbose=False)\n\ndef insurance_ensemble(X, y):\n    global xgb_pred, lgb_pred, cat_pred\n    # Train models    \n    xgb_pred = xgb_pred.fit(X, y)\n    lgb_pred = lgb_pred.fit(X, y)\n    cat_pred = cat_pred.fit(X, y)\n    \ndef insurance_ensemble_predict(X):\n   \n    xgb_predictions=xgb_pred.predict(X)\n    lgb_predictions=lgb_pred.predict(X)\n    cat_predictions=cat_pred.predict(X)\n    \n# Weighted average based on insurance domain expertise\n    final_pred = (0.5 * np.array(xgb_predictions) + \n                 0.3 * np.array(lgb_predictions) + \n                 0.2 * np.array(cat_predictions))\n    \n    return final_pred","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:01.484918Z","iopub.execute_input":"2024-12-23T08:58:01.485161Z","iopub.status.idle":"2024-12-23T08:58:01.502655Z","shell.execute_reply.started":"2024-12-23T08:58:01.485137Z","shell.execute_reply":"2024-12-23T08:58:01.501581Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_new_features = create_insurance_features(X)\nX_processed = preprocess_insurance_data(X_new_features)\nX_processed['risk'] = X_processed.apply(calculate_risk_level, axis=1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:01.503657Z","iopub.execute_input":"2024-12-23T08:58:01.503932Z","iopub.status.idle":"2024-12-23T08:58:34.530618Z","shell.execute_reply.started":"2024-12-23T08:58:01.503907Z","shell.execute_reply":"2024-12-23T08:58:34.52966Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_processed = X_processed.drop(['Property Type','Occupation','Smoking Status','Previous Claims','Policy Start Date','Age','Annual Income','Gender','Education Level','Occupation','Location','Number of Dependents'],axis=1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:34.531625Z","iopub.execute_input":"2024-12-23T08:58:34.53189Z","iopub.status.idle":"2024-12-23T08:58:34.618234Z","shell.execute_reply.started":"2024-12-23T08:58:34.531864Z","shell.execute_reply":"2024-12-23T08:58:34.617524Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(X_processed.columns)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:34.619581Z","iopub.execute_input":"2024-12-23T08:58:34.619823Z","iopub.status.idle":"2024-12-23T08:58:34.624269Z","shell.execute_reply.started":"2024-12-23T08:58:34.6198Z","shell.execute_reply":"2024-12-23T08:58:34.623417Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\ndef preprocess_features(X, categorical_columns, numerical_columns, encoding_type='mixed', max_categories=10):\n    \"\"\"\n    Preprocess features including:\n    - SimpleImputer for missing values\n    - StandardScaler for numerical features\n    - Label/OneHot encoding for categorical features\n    \"\"\"\n    X_encoded = X.copy()\n    \n    # Handle numerical features\n    if numerical_columns:\n        # Initialize imputer and scaler\n        imputer = SimpleImputer(strategy='mean')\n        scaler = StandardScaler()\n        \n        # First impute, then scale\n        X_numerical = X_encoded[numerical_columns].copy()\n        X_numerical = imputer.fit_transform(X_numerical)\n        X_numerical = scaler.fit_transform(X_numerical)\n        \n        # Convert back to DataFrame\n        X_encoded[numerical_columns] = X_numerical\n    \n    # Handle categorical features\n    onehot_columns = []\n    label_columns = []\n    \n    if encoding_type == 'mixed':\n        for col in categorical_columns:\n            if X[col].nunique() <= max_categories:\n                onehot_columns.append(col)\n            else:\n                label_columns.append(col)\n    elif encoding_type == 'label':\n        label_columns = categorical_columns\n    else:  # onehot\n        onehot_columns = categorical_columns\n    \n    # Initialize label encoders dictionary\n    label_encoders = {}\n    \n    # Apply label encoding if needed\n    if label_columns:\n        for col in label_columns:\n            le = LabelEncoder()\n            X_encoded[col] = le.fit_transform(X_encoded[col])\n            label_encoders[col] = le\n    \n    # Apply one-hot encoding if needed\n    if onehot_columns:\n        onehot = OneHotEncoder(sparse=False, handle_unknown='ignore')\n        onehot_array = onehot.fit_transform(X_encoded[onehot_columns])\n        \n        # Get one-hot encoded feature names\n        onehot_features = []\n        for i, col in enumerate(onehot_columns):\n            unique_vals = onehot.categories_[i]\n            onehot_features.extend([f\"{col}_{val}\" for val in unique_vals])\n        \n        # Create DataFrame with one-hot encoded features\n        onehot_df = pd.DataFrame(\n            onehot_array,\n            columns=onehot_features,\n            index=X.index\n        )\n        \n        # Drop original categorical columns and join with one-hot encoded\n        X_encoded = X_encoded.drop(columns=onehot_columns)\n        X_encoded = pd.concat([X_encoded, onehot_df], axis=1)\n    \n    preprocessors = {\n        'imputer': imputer if numerical_columns else None,\n        'scaler': scaler if numerical_columns else None,\n        'label_encoders': label_encoders if label_columns else None,\n        'onehot_encoder': onehot if onehot_columns else None\n    }\n    \n    return X_encoded, preprocessors\n\n# Example usage:\n\"\"\"\n# Define columns\nnumerical_columns = ['num1', 'num2', 'num3']\ncategorical_columns = ['cat1', 'cat2', 'cat3']\n\n# Preprocess features\nX_processed, preprocessors = preprocess_features(\n    X,\n    categorical_columns=categorical_columns,\n    numerical_columns=numerical_columns,\n    encoding_type='mixed',\n    max_categories=10\n)\n\n# For processing new data later:\ndef process_new_data(X_new, preprocessors, categorical_columns, numerical_columns):\n    X_new = X_new.copy()\n    \n    # Apply numerical preprocessing\n    if numerical_columns and preprocessors['imputer'] and preprocessors['scaler']:\n        X_new[numerical_columns] = preprocessors['imputer'].transform(X_new[numerical_columns])\n        X_new[numerical_columns] = preprocessors['scaler'].transform(X_new[numerical_columns])\n    \n    # Apply label encoding\n    if preprocessors['label_encoders']:\n        for col, le in preprocessors['label_encoders'].items():\n            X_new[col] = le.transform(X_new[col])\n    \n    # Apply one-hot encoding\n    if preprocessors['onehot_encoder']:\n        onehot_cols = [col for col in categorical_columns \n                      if col not in preprocessors['label_encoders'].keys()]\n        if onehot_cols:\n            onehot_array = preprocessors['onehot_encoder'].transform(X_new[onehot_cols])\n            onehot_features = []\n            for i, col in enumerate(onehot_cols):\n                unique_vals = preprocessors['onehot_encoder'].categories_[i]\n                onehot_features.extend([f\"{col}_{val}\" for val in unique_vals])\n            \n            onehot_df = pd.DataFrame(\n                onehot_array,\n                columns=onehot_features,\n                index=X_new.index\n            )\n            X_new = X_new.drop(columns=onehot_cols)\n            X_new = pd.concat([X_new, onehot_df], axis=1)\n    \n    return X_new\n\"\"\"","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:34.625758Z","iopub.execute_input":"2024-12-23T08:58:34.625983Z","iopub.status.idle":"2024-12-23T08:58:34.639603Z","shell.execute_reply.started":"2024-12-23T08:58:34.62596Z","shell.execute_reply":"2024-12-23T08:58:34.638737Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"numerical_columns = []\ncategorical_columns=['Marital Status','age_group','Policy Type','Customer Feedback','location_property','occupation_education']\n# Preprocess features\nX_encoded, preprocessors = preprocess_features(\n    X_processed,\n    categorical_columns=categorical_columns,\n    numerical_columns=numerical_columns,\n    encoding_type='mixed',\n    max_categories=10\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:34.640757Z","iopub.execute_input":"2024-12-23T08:58:34.64108Z","iopub.status.idle":"2024-12-23T08:58:37.717811Z","shell.execute_reply.started":"2024-12-23T08:58:34.641044Z","shell.execute_reply":"2024-12-23T08:58:37.717109Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_encoded.sample(5)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:37.719119Z","iopub.execute_input":"2024-12-23T08:58:37.719429Z","iopub.status.idle":"2024-12-23T08:58:37.76778Z","shell.execute_reply.started":"2024-12-23T08:58:37.719402Z","shell.execute_reply":"2024-12-23T08:58:37.766897Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y = transform_target(y)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:37.768916Z","iopub.execute_input":"2024-12-23T08:58:37.769268Z","iopub.status.idle":"2024-12-23T08:58:37.781534Z","shell.execute_reply.started":"2024-12-23T08:58:37.76923Z","shell.execute_reply":"2024-12-23T08:58:37.780845Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_train, X_valid, y_train, y_valid = train_test_split(\n        X_encoded, y, test_size=0.2, random_state=42)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:37.782492Z","iopub.execute_input":"2024-12-23T08:58:37.782755Z","iopub.status.idle":"2024-12-23T08:58:38.255552Z","shell.execute_reply.started":"2024-12-23T08:58:37.782731Z","shell.execute_reply":"2024-12-23T08:58:38.254684Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"insurance_ensemble(X_train,y_train)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T08:58:38.256983Z","iopub.execute_input":"2024-12-23T08:58:38.257266Z","iopub.status.idle":"2024-12-23T09:23:39.407808Z","shell.execute_reply.started":"2024-12-23T08:58:38.257238Z","shell.execute_reply":"2024-12-23T09:23:39.406955Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_pred = insurance_ensemble_predict(X_valid)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T09:23:39.408835Z","iopub.execute_input":"2024-12-23T09:23:39.409085Z","iopub.status.idle":"2024-12-23T09:24:12.01796Z","shell.execute_reply.started":"2024-12-23T09:23:39.409061Z","shell.execute_reply":"2024-12-23T09:24:12.017204Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(rmsle(y_valid,y_pred))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T09:24:12.019121Z","iopub.execute_input":"2024-12-23T09:24:12.019794Z","iopub.status.idle":"2024-12-23T09:24:12.027036Z","shell.execute_reply.started":"2024-12-23T09:24:12.019754Z","shell.execute_reply":"2024-12-23T09:24:12.026062Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_test_new_features = create_insurance_features(X_test)\nX_test_processed = preprocess_insurance_data(X_test_new_features)\nX_test_processed['risk'] = X_test_processed.apply(calculate_risk_level, axis=1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T09:24:12.031375Z","iopub.execute_input":"2024-12-23T09:24:12.031636Z","iopub.status.idle":"2024-12-23T09:24:33.695201Z","shell.execute_reply.started":"2024-12-23T09:24:12.031612Z","shell.execute_reply":"2024-12-23T09:24:33.694516Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_test_processed = X_test_processed.drop(['Property Type','Occupation','Smoking Status','Previous Claims','Policy Start Date','Age','Annual Income','Gender','Education Level','Occupation','Location','Number of Dependents'],axis=1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T09:24:33.696424Z","iopub.execute_input":"2024-12-23T09:24:33.696778Z","iopub.status.idle":"2024-12-23T09:24:33.757449Z","shell.execute_reply.started":"2024-12-23T09:24:33.696738Z","shell.execute_reply":"2024-12-23T09:24:33.756723Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"numerical_columns = []\ncategorical_columns=['Marital Status','age_group','Policy Type','Customer Feedback','location_property','occupation_education']\n# Preprocess features\nX_test_encoded, test_preprocessors = preprocess_features(\n    X_test_processed,\n    categorical_columns=categorical_columns,\n    numerical_columns=numerical_columns,\n    encoding_type='mixed',\n    max_categories=10\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T09:24:33.758571Z","iopub.execute_input":"2024-12-23T09:24:33.75894Z","iopub.status.idle":"2024-12-23T09:24:35.805055Z","shell.execute_reply.started":"2024-12-23T09:24:33.758902Z","shell.execute_reply":"2024-12-23T09:24:35.80433Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_test_encoded.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T09:24:35.806031Z","iopub.execute_input":"2024-12-23T09:24:35.806267Z","iopub.status.idle":"2024-12-23T09:24:35.827689Z","shell.execute_reply.started":"2024-12-23T09:24:35.806244Z","shell.execute_reply":"2024-12-23T09:24:35.826821Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_test_pred = insurance_ensemble_predict(X_test_encoded)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T09:24:35.828732Z","iopub.execute_input":"2024-12-23T09:24:35.829037Z","iopub.status.idle":"2024-12-23T09:26:24.987397Z","shell.execute_reply.started":"2024-12-23T09:24:35.829012Z","shell.execute_reply":"2024-12-23T09:26:24.986575Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_test_pred = np.expm1(y_test_pred)\n\n# Submission\nsubmission = pd.DataFrame({'id': X_test_copy['id'], 'Premium Amount': y_test_pred})\nsubmission.to_csv('submission.csv', index=False)\n\nprint(\"Submission file created.\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-23T09:26:24.98846Z","iopub.execute_input":"2024-12-23T09:26:24.988731Z","iopub.status.idle":"2024-12-23T09:26:26.355521Z","shell.execute_reply.started":"2024-12-23T09:26:24.988706Z","shell.execute_reply":"2024-12-23T09:26:26.354453Z"}},"outputs":[],"execution_count":null}]}