{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":84896,"databundleVersionId":10305135,"sourceType":"competition"}],"dockerImageVersionId":30804,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# 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# 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":"2024-12-21T12:49:42.45767Z","iopub.execute_input":"2024-12-21T12:49:42.458577Z","iopub.status.idle":"2024-12-21T12:49:42.466106Z","shell.execute_reply.started":"2024-12-21T12:49:42.458539Z","shell.execute_reply":"2024-12-21T12:49:42.465008Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train= pd.read_csv('/kaggle/input/playground-series-s4e12/train.csv')\ntest = pd.read_csv('/kaggle/input/playground-series-s4e12/test.csv')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T12:49:42.467955Z","iopub.execute_input":"2024-12-21T12:49:42.468276Z","iopub.status.idle":"2024-12-21T12:49:50.003771Z","shell.execute_reply.started":"2024-12-21T12:49:42.468247Z","shell.execute_reply":"2024-12-21T12:49:50.002662Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = train.drop([\"id\"], axis =1)\ntest =test.drop([\"id\"], axis =1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T12:49:50.005239Z","iopub.execute_input":"2024-12-21T12:49:50.005725Z","iopub.status.idle":"2024-12-21T12:49:50.338516Z","shell.execute_reply.started":"2024-12-21T12:49:50.005644Z","shell.execute_reply":"2024-12-21T12:49:50.337335Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Convert 'Policy Start Date' to datetime explicitly\ntrain['Policy Start Date'] = pd.to_datetime(train['Policy Start Date'], errors='coerce')\ntest['Policy Start Date'] = pd.to_datetime(test['Policy Start Date'], errors='coerce')\n\n\ntrain['day_sin'] = np.sin(2* np.pi *train['Policy Start Date'].dt.day/31)\ntrain['day_cos']= np.cos(2* np.pi *train['Policy Start Date'].dt.day/31)\ntrain['month_sin'] = np.sin(2 * np.pi * train['Policy Start Date'].dt.month / 12)\ntrain['month_cos'] = np.cos(2 * np.pi * train['Policy Start Date'].dt.month / 12)\ntrain.drop(columns=['Policy Start Date'], inplace=True)\n\ntest['day_sin'] = np.sin(2* np.pi *test['Policy Start Date'].dt.day/31)\ntest['day_cos']= np.cos(2* np.pi *test['Policy Start Date'].dt.day/31)\ntest['month_sin'] = np.sin(2 * np.pi * test['Policy Start Date'].dt.month / 12)\ntest['month_cos'] = np.cos(2 * np.pi * test['Policy Start Date'].dt.month / 12)\ntest.drop(columns=['Policy Start Date'], inplace=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T12:49:50.340012Z","iopub.execute_input":"2024-12-21T12:49:50.340432Z","iopub.status.idle":"2024-12-21T12:49:51.985952Z","shell.execute_reply.started":"2024-12-21T12:49:50.34039Z","shell.execute_reply":"2024-12-21T12:49:51.984645Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.model_selection import KFold, train_test_split, cross_val_score\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.metrics import mean_squared_log_error, make_scorer\nfrom xgboost import XGBRegressor","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T12:49:51.989032Z","iopub.execute_input":"2024-12-21T12:49:51.989384Z","iopub.status.idle":"2024-12-21T12:49:51.995263Z","shell.execute_reply.started":"2024-12-21T12:49:51.989351Z","shell.execute_reply":"2024-12-21T12:49:51.994078Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"categorical_columns = train.select_dtypes(include=['object', 'category']).columns\nprint(categorical_columns)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T12:49:51.996833Z","iopub.execute_input":"2024-12-21T12:49:51.997167Z","iopub.status.idle":"2024-12-21T12:49:52.526494Z","shell.execute_reply.started":"2024-12-21T12:49:51.997135Z","shell.execute_reply":"2024-12-21T12:49:52.525401Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import category_encoders as ce\ncategorical_cols= ['Gender', 'Marital Status', 'Education Level', 'Occupation', 'Location',\n       'Policy Type', 'Customer Feedback', 'Smoking Status',\n       'Exercise Frequency', 'Property Type']\n\nencoder = ce.TargetEncoder()\n\nfor feature in categorical_cols:\n    train[feature] = encoder.fit_transform(train[feature], train['Premium Amount'])\n    test[feature] = encoder.transform(test[feature])\n\nprint(\"Categorical columns transformed with target encoder in train and test data: \")\ncategorical_cols\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T12:49:52.527941Z","iopub.execute_input":"2024-12-21T12:49:52.528362Z","iopub.status.idle":"2024-12-21T12:50:03.229151Z","shell.execute_reply.started":"2024-12-21T12:49:52.528305Z","shell.execute_reply":"2024-12-21T12:50:03.2281Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from xgboost import XGBRegressor\nimport optuna\nfrom sklearn.metrics import mean_squared_log_error\nfrom sklearn.model_selection import train_test_split\n\n\ndef RMSLE(true,pred):\n    true_log = np.log1p(true)\n    pred_log = np.log1p(pred)\n    m = np.sqrt(np.mean( (true_log-pred_log)**2.0 ))\n    return m\n    \npred = np.exp( np.mean( np.log1p(train[\"Premium Amount\"]) ) )-1\nm = RMSLE(train[\"Premium Amount\"].values, pred)\nprint(f\"Exponented Mean Log 1p produces CV RMSLE = {m}\")\n\nX = train.drop([\"Premium Amount\"], axis =1)\ny= train[\"Premium Amount\"]\n\nX_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.2, random_state=42)\n\nbest_params = {\n    'max_depth': 11,\n    'learning_rate': 0.06605356819367247,\n    'subsample': 0.6397519686309207,\n    'n_estimators': 100,  \n    'random_state': 42,\n    'tree_method': 'hist',\n    'objective': 'reg:gamma',\n    'verbosity': 0\n}\n\n\n# Train the XGBRegressor model with the best parameters\nmodel = XGBRegressor(**best_params)\nmodel.fit(\n    X_train, y_train,\n    eval_set=[(X_valid, y_valid)],  # Validation set for early stopping\n    eval_metric=\"rmse\",            # Use RMSE (Root Mean Squared Error)\n    early_stopping_rounds=200,     # Early stopping\n    verbose=False                  # Suppress logs\n)\n\n\n# Predict and calculate RMSLE\ny_pred = model.predict(X_valid)\nrmsle_score = RMSLE(y_valid, y_pred)\n\n# Print the evaluation result\nprint(\"RMSLE on validation set:\", rmsle_score)\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T12:50:03.230485Z","iopub.execute_input":"2024-12-21T12:50:03.230832Z","iopub.status.idle":"2024-12-21T12:50:24.15874Z","shell.execute_reply.started":"2024-12-21T12:50:03.230802Z","shell.execute_reply":"2024-12-21T12:50:24.157518Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_test=model.predict(test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T12:50:24.160122Z","iopub.execute_input":"2024-12-21T12:50:24.160735Z","iopub.status.idle":"2024-12-21T12:50:25.708454Z","shell.execute_reply.started":"2024-12-21T12:50:24.160664Z","shell.execute_reply":"2024-12-21T12:50:25.70746Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"pred = np.exp( np.mean( np.log1p(train[\"Premium Amount\"]) ) )-1\nsub = pd.read_csv(\"/kaggle/input/playground-series-s4e12/sample_submission.csv\")\nsub[\"Premium Amount\"] = pred\nsub.to_csv(\"submission.csv\",index=False)\nprint(\"Sub shape:\",sub.shape)\nsub.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T12:50:25.709713Z","iopub.execute_input":"2024-12-21T12:50:25.710052Z","iopub.status.idle":"2024-12-21T12:50:27.707755Z","shell.execute_reply.started":"2024-12-21T12:50:25.710019Z","shell.execute_reply":"2024-12-21T12:50:27.706567Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sub.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T12:51:05.890532Z","iopub.execute_input":"2024-12-21T12:51:05.890968Z","iopub.status.idle":"2024-12-21T12:51:05.901841Z","shell.execute_reply.started":"2024-12-21T12:51:05.890931Z","shell.execute_reply":"2024-12-21T12:51:05.900672Z"}},"outputs":[],"execution_count":null}]}