{"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":"gpu","dataSources":[{"sourceId":84896,"databundleVersionId":10305135,"sourceType":"competition"}],"dockerImageVersionId":30823,"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\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-28T07:04:37.122495Z","iopub.execute_input":"2024-12-28T07:04:37.122808Z","iopub.status.idle":"2024-12-28T07:04:37.130319Z","shell.execute_reply.started":"2024-12-28T07:04:37.122783Z","shell.execute_reply":"2024-12-28T07:04:37.129608Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!pip install -q xgbtune","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:04:37.13133Z","iopub.execute_input":"2024-12-28T07:04:37.131538Z","iopub.status.idle":"2024-12-28T07:04:40.371549Z","shell.execute_reply.started":"2024-12-28T07:04:37.13152Z","shell.execute_reply":"2024-12-28T07:04:40.370614Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport seaborn as sns\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.compose import ColumnTransformer\nfrom sklearn.pipeline import make_pipeline\nfrom sklearn.preprocessing import StandardScaler, FunctionTransformer,OneHotEncoder\nfrom sklearn.metrics import mean_squared_log_error\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.preprocessing import OrdinalEncoder\nfrom sklearn.utils.validation import check_array\nfrom catboost import CatBoostRegressor\nimport xgboost as xgb\nfrom xgbtune import tune_xgb_model\n\n\n\nimport warnings\nwarnings.filterwarnings(\"ignore\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:04:40.373Z","iopub.execute_input":"2024-12-28T07:04:40.373288Z","iopub.status.idle":"2024-12-28T07:04:40.378334Z","shell.execute_reply.started":"2024-12-28T07:04:40.373247Z","shell.execute_reply":"2024-12-28T07:04:40.377488Z"}},"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\")\n\ntrain.drop('id', axis=1, inplace=True)\ntest.drop('id', axis=1, inplace=True) ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:04:40.379469Z","iopub.execute_input":"2024-12-28T07:04:40.379724Z","iopub.status.idle":"2024-12-28T07:04:46.767114Z","shell.execute_reply.started":"2024-12-28T07:04:40.379704Z","shell.execute_reply":"2024-12-28T07:04:46.766405Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def date(df):\n\n    df['Policy Start Date'] = pd.to_datetime(df['Policy Start Date'])\n    df['Year'] = df['Policy Start Date'].dt.year\n    df['Day'] = df['Policy Start Date'].dt.day\n    df['Month'] = df['Policy Start Date'].dt.month\n    df['Month_name'] = df['Policy Start Date'].dt.month_name()\n    df['Day_of_week'] = df['Policy Start Date'].dt.day_name()\n    df['Week'] = df['Policy Start Date'].dt.isocalendar().week\n    df['Year_sin'] = np.sin(2 * np.pi * df['Year'])\n    df['Year_cos'] = np.cos(2 * np.pi * df['Year'])\n    df['Month_sin'] = np.sin(2 * np.pi * df['Month'] / 12) \n    df['Month_cos'] = np.cos(2 * np.pi * df['Month'] / 12)\n    df['Day_sin'] = np.sin(2 * np.pi * df['Day'] / 31)  \n    df['Day_cos'] = np.cos(2 * np.pi * df['Day'] / 31)\n    df['Group']=(df['Year']-2020)*48+df['Month']*4+df['Day']//7\n    \n    df.drop('Policy Start Date', axis=1, inplace=True)\n\n    return df\n    \ntrain = date(train)\ntest = date(test)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:04:46.767834Z","iopub.execute_input":"2024-12-28T07:04:46.768103Z","iopub.status.idle":"2024-12-28T07:04:49.36945Z","shell.execute_reply.started":"2024-12-28T07:04:46.768081Z","shell.execute_reply":"2024-12-28T07:04:49.368523Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#def date(df):\n    #df['Policy Start Date'] = pd.to_datetime(df['Policy Start Date'])\n    \n    #df['Year'] = df['Policy Start Date'].dt.year\n    #df['Month'] = df['Policy Start Date'].dt.month\n    #df['Day'] = df['Policy Start Date'].dt.day\n    #df['Quarter'] = df['Policy Start Date'].dt.quarter\n    #df['Day of Week'] = df['Policy Start Date'].dt.dayofweek\n    \n    #df.drop('Policy Start Date', axis=1, inplace=True)\n    \n    #return df\n\n#train = date(train)\n#test = date(test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:04:49.370276Z","iopub.execute_input":"2024-12-28T07:04:49.370518Z","iopub.status.idle":"2024-12-28T07:04:49.373977Z","shell.execute_reply.started":"2024-12-28T07:04:49.370494Z","shell.execute_reply":"2024-12-28T07:04:49.373092Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train[\"Annual_Income_Health_Score_Ratio\"] = train[\"Health Score\"] / train[\"Annual Income\"]\ntest[\"Annual_Income_Health_Score_Ratio\"] = test[\"Health Score\"] / test[\"Annual Income\"]\n\ntrain[\"Annual_Income_Age_Ratio\"] = train[\"Annual Income\"] / train[\"Age\"]\ntest[\"Annual_Income_Age_Ratio\"] = test[\"Annual Income\"] / test[\"Age\"]\n\ntrain[\"Credit_Age\"] = train[\"Credit Score\"] / train[\"Age\"]\ntest[\"Credit_Age\"] = test[\"Credit Score\"] / test[\"Age\"]\n\ntrain[\"Vehicle_Age_Insurance_Duration\"] = train[\"Vehicle Age\"] / train[\"Insurance Duration\"]\ntest[\"Vehicle_Age_Insurance_Duration\"] = test[\"Vehicle Age\"] / test[\"Insurance Duration\"]\n\naverage_income = train['Annual Income'].mean()\ntrain['Is High Income'] = (train['Annual Income'] > average_income).astype(int)\ntest['Is High Income'] = (test['Annual Income'] > average_income).astype(int)\n\ntrain['Property Location Type'] = train['Location'] + '_' + train['Property Type']\ntest['Property Location Type'] = test['Location'] + '_' + test['Property Type']\n\n\ntrain.drop('Property Type', axis=1, inplace=True)\ntest.drop('Property Type', axis=1, inplace=True) ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:04:49.374823Z","iopub.execute_input":"2024-12-28T07:04:49.375121Z","iopub.status.idle":"2024-12-28T07:04:50.287764Z","shell.execute_reply.started":"2024-12-28T07:04:49.375092Z","shell.execute_reply":"2024-12-28T07:04:50.286828Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def reduce_memory_usage(df):\n    for col in df.columns:\n        col_type = df[col].dtypes\n        if col_type == 'float64':\n            df[col] = df[col].astype('float32')\n        elif col_type == 'int64':\n            df[col] = df[col].astype('int32')\n    return df\n\ntrain = reduce_memory_usage(train)\ntest = reduce_memory_usage(test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:04:50.289608Z","iopub.execute_input":"2024-12-28T07:04:50.289964Z","iopub.status.idle":"2024-12-28T07:04:50.372591Z","shell.execute_reply.started":"2024-12-28T07:04:50.289931Z","shell.execute_reply":"2024-12-28T07:04:50.3719Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"numerical_cols = train.select_dtypes(include=['float32', 'int32']).columns.tolist()\nnumerical_cols.remove('Premium Amount')\n\ncategorical_cols = train.select_dtypes(include=['object']).columns.tolist()\n\npreprocessing = ColumnTransformer([\n    ('num', make_pipeline(SimpleImputer(strategy='mean'), StandardScaler()), numerical_cols),\n    ('cat', make_pipeline(SimpleImputer(strategy='constant', fill_value='unknown'),\n                          OneHotEncoder(handle_unknown='ignore')), categorical_cols)\n])\n\nX_train = train.drop(columns=['Premium Amount'])\ny_train = np.log1p(train['Premium Amount'])\n\nX_train_preprocessed = preprocessing.fit_transform(X_train)\nX_test_preprocessed = preprocessing.transform(test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:04:50.373536Z","iopub.execute_input":"2024-12-28T07:04:50.373743Z","iopub.status.idle":"2024-12-28T07:05:01.864681Z","shell.execute_reply.started":"2024-12-28T07:04:50.373725Z","shell.execute_reply":"2024-12-28T07:05:01.863727Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"final_catboost = CatBoostRegressor(\n    iterations=3000,\n    learning_rate=0.05,\n    depth=6,\n    eval_metric=\"RMSE\",\n    random_seed=42,\n    verbose=200,\n    task_type='GPU',\n    l2_leaf_reg=0.7\n)\n\nfinal_catboost.fit(X_train_preprocessed, y_train)\ny_pred_catboost = final_catboost.predict(X_test_preprocessed)\ny_pred_catboost_final = np.expm1(y_pred_catboost)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:05:01.865596Z","iopub.execute_input":"2024-12-28T07:05:01.865904Z","iopub.status.idle":"2024-12-28T07:06:08.668059Z","shell.execute_reply.started":"2024-12-28T07:05:01.865871Z","shell.execute_reply":"2024-12-28T07:06:08.667336Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"params = {'eval_metric': 'rmsle', 'tree_method': 'hist', 'device': 'cuda'}\n\nparams, round_count = tune_xgb_model(params, X_train_preprocessed, y_train)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:06:08.66869Z","iopub.execute_input":"2024-12-28T07:06:08.668934Z","iopub.status.idle":"2024-12-28T07:33:26.722092Z","shell.execute_reply.started":"2024-12-28T07:06:08.668913Z","shell.execute_reply":"2024-12-28T07:33:26.721136Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"dtrain = xgb.DMatrix(X_train_preprocessed, label=y_train)\nfinal_model = xgb.train(params, dtrain, num_boost_round=round_count)\n\ndtest = xgb.DMatrix(X_test_preprocessed)\ny_pred = final_model.predict(dtest)\ny_pred_final = np.expm1(y_pred)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:33:26.723168Z","iopub.execute_input":"2024-12-28T07:33:26.723478Z","iopub.status.idle":"2024-12-28T07:33:29.619574Z","shell.execute_reply.started":"2024-12-28T07:33:26.72345Z","shell.execute_reply":"2024-12-28T07:33:29.618928Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_pred_ensemble = (y_pred_final + y_pred_catboost_final) / 2","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:33:29.620217Z","iopub.execute_input":"2024-12-28T07:33:29.62042Z","iopub.status.idle":"2024-12-28T07:33:29.626791Z","shell.execute_reply.started":"2024-12-28T07:33:29.620402Z","shell.execute_reply":"2024-12-28T07:33:29.626132Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sub = pd.read_csv(\"/kaggle/input/playground-series-s4e12/sample_submission.csv\")\noutput = pd.DataFrame({\"id\": sub.id, \"Premium Amount\": y_pred_ensemble})\noutput.to_csv('submission_ensemble.csv', index=False)\n\noutput.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-28T07:33:29.627498Z","iopub.execute_input":"2024-12-28T07:33:29.627707Z","iopub.status.idle":"2024-12-28T07:33:31.187773Z","shell.execute_reply.started":"2024-12-28T07:33:29.627688Z","shell.execute_reply":"2024-12-28T07:33:31.187052Z"}},"outputs":[],"execution_count":null}]}