{"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.10.14"},"colab":{"provenance":[]},"widgets":{"application/vnd.jupyter.widget-state+json":{"b8068f0d79c6428ebd54c004c46474ff":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_17bc2f55711a40c591125ae874c17055","IPY_MODEL_5d519951dcf841e68648d77ee997462b","IPY_MODEL_5e75d88a02db4bf284a5809cb17d4a04"],"layout":"IPY_MODEL_fd9b0afa2c954893bc03c381b58018cc"}},"17bc2f55711a40c591125ae874c17055":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_c279ad40abf24ef886bf6709e0f50743","placeholder":"​","style":"IPY_MODEL_3d3f67fa62b8499094c625ddb5422062","value":"Best trial: 6. Best value: 1.06727: 100%"}},"5d519951dcf841e68648d77ee997462b":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_e86675ee99ca4ad3ae2860e8060e6f22","max":50,"min":0,"orientation":"horizontal","style":"IPY_MODEL_eefd24cf4d28407883b32c89157a6429","value":50}},"5e75d88a02db4bf284a5809cb17d4a04":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_4bca64b1f162442b9340092849065dc9","placeholder":"​","style":"IPY_MODEL_46f82b8ba71b4afea94cfb11086624bf","value":" 50/50 [2:45:20&lt;00:00, 197.16s/it]"}},"fd9b0afa2c954893bc03c381b58018cc":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"c279ad40abf24ef886bf6709e0f50743":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"3d3f67fa62b8499094c625ddb5422062":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"e86675ee99ca4ad3ae2860e8060e6f22":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"eefd24cf4d28407883b32c89157a6429":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"4bca64b1f162442b9340092849065dc9":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"46f82b8ba71b4afea94cfb11086624bf":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}}}},"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":"import numpy as np\nimport pandas as pd\nimport seaborn as sns\nimport matplotlib.pyplot as plt\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import mean_squared_error\nimport gc","metadata":{"id":"KcS7YjgSceps","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:24:04.186474Z","iopub.execute_input":"2024-12-11T18:24:04.186928Z","iopub.status.idle":"2024-12-11T18:24:06.020702Z","shell.execute_reply.started":"2024-12-11T18:24:04.186887Z","shell.execute_reply":"2024-12-11T18:24:06.019574Z"}},"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":{"id":"dR8dIJlhiPEP","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:24:06.023207Z","iopub.execute_input":"2024-12-11T18:24:06.023985Z","iopub.status.idle":"2024-12-11T18:24:17.533408Z","shell.execute_reply.started":"2024-12-11T18:24:06.023929Z","shell.execute_reply":"2024-12-11T18:24:17.532272Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train","metadata":{"id":"GrCrHjLAvC8G","outputId":"176d0112-bb0b-4a3a-dabf-2e5acb295803","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:24:17.534634Z","iopub.execute_input":"2024-12-11T18:24:17.534991Z","iopub.status.idle":"2024-12-11T18:24:18.315855Z","shell.execute_reply.started":"2024-12-11T18:24:17.534957Z","shell.execute_reply":"2024-12-11T18:24:18.314731Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.info()","metadata":{"id":"nCSMjyZltXqU","outputId":"eca4929d-034c-4952-a370-6e3bee25a59d","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:24:18.317822Z","iopub.execute_input":"2024-12-11T18:24:18.318306Z","iopub.status.idle":"2024-12-11T18:24:18.982515Z","shell.execute_reply.started":"2024-12-11T18:24:18.318264Z","shell.execute_reply":"2024-12-11T18:24:18.981369Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#Preprocessing","metadata":{"id":"RCNGQybVt5J8"}},{"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder\nfrom sklearn.preprocessing import StandardScaler","metadata":{"id":"C9kiNjRyh4EV","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:24:18.985139Z","iopub.execute_input":"2024-12-11T18:24:18.985519Z","iopub.status.idle":"2024-12-11T18:24:18.990563Z","shell.execute_reply.started":"2024-12-11T18:24:18.985482Z","shell.execute_reply":"2024-12-11T18:24:18.989332Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def datetime_feature(data):\n    date_time = pd.to_datetime(data['Policy Start Date'])\n    data['year'] = date_time.dt.year\n    data['month'] = date_time.dt.month\n    data['day'] = date_time.dt.day\n    data['month_sin'] = np.sin(2 * np.pi * data['month'] / 12)\n    data['month_cos'] = np.cos(2 * np.pi * data['month'] / 12)\n    data['day_sin'] = np.sin(2 * np.pi * data['day'] / 31)\n    data['day_cos'] = np.cos(2 * np.pi * data['day'] / 31)\n    data['year'] = data['year'].astype('category')\n    data.drop(columns=['id', 'Policy Start Date', 'month', 'day'], axis=1, inplace=True)\n    return data","metadata":{"id":"ZNqjXPT-qwjt","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:24:18.992232Z","iopub.execute_input":"2024-12-11T18:24:18.993335Z","iopub.status.idle":"2024-12-11T18:24:19.014987Z","shell.execute_reply.started":"2024-12-11T18:24:18.99328Z","shell.execute_reply":"2024-12-11T18:24:19.013976Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def one_hot_missing(df):\n\n    cat_columns = df.select_dtypes(include=['object']).columns\n    int_columns = df.select_dtypes(include=['float64','float32', 'int64']).columns\n\n    df[int_columns] = df[int_columns].fillna(df[int_columns].median())\n    for i in cat_columns:\n      miss = df[i].value_counts().idxmax()\n      df[i] = df[i].fillna(miss)\n\n    df[cat_columns] = df[cat_columns].apply(lambda x: LabelEncoder().fit_transform(x))\n\n    return df","metadata":{"id":"ggKr997up1Am","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:24:19.016492Z","iopub.execute_input":"2024-12-11T18:24:19.016954Z","iopub.status.idle":"2024-12-11T18:24:19.026786Z","shell.execute_reply.started":"2024-12-11T18:24:19.016915Z","shell.execute_reply":"2024-12-11T18:24:19.025602Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"new_train = datetime_feature(train.drop('Premium Amount', axis=1))","metadata":{"id":"g4vZpYyCuWu4","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:24:19.028181Z","iopub.execute_input":"2024-12-11T18:24:19.028549Z","iopub.status.idle":"2024-12-11T18:24:20.163013Z","shell.execute_reply.started":"2024-12-11T18:24:19.028515Z","shell.execute_reply":"2024-12-11T18:24:20.161401Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"new_train = one_hot_missing(new_train)","metadata":{"id":"3IADuGIgru3-","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:24:20.164742Z","iopub.execute_input":"2024-12-11T18:24:20.165365Z","iopub.status.idle":"2024-12-11T18:24:25.24111Z","shell.execute_reply.started":"2024-12-11T18:24:20.165314Z","shell.execute_reply":"2024-12-11T18:24:25.239979Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def train_tast_split(df):\n\n    y = np.log(train[\"Premium Amount\"])\n\n    df = df[df.columns.to_list()].astype(\"object\")\n\n    X = df\n\n    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)\n\n    return X_train, X_test, y_train, y_test","metadata":{"id":"27lxZUupDPjf","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:24:25.242509Z","iopub.execute_input":"2024-12-11T18:24:25.242863Z","iopub.status.idle":"2024-12-11T18:24:25.249602Z","shell.execute_reply.started":"2024-12-11T18:24:25.24283Z","shell.execute_reply":"2024-12-11T18:24:25.248156Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"##CatB","metadata":{"id":"60H8kj3zpQq4"}},{"cell_type":"code","source":"!pip install catboost\n!pip install optuna","metadata":{"id":"x3emXBKO1k6Q","outputId":"3621da41-fb17-44d8-fee3-eb412aaf500b","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:24:25.250878Z","iopub.execute_input":"2024-12-11T18:24:25.251199Z","iopub.status.idle":"2024-12-11T18:24:48.712754Z","shell.execute_reply.started":"2024-12-11T18:24:25.251169Z","shell.execute_reply":"2024-12-11T18:24:48.711092Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import optuna\nfrom catboost import Pool, CatBoostRegressor\nfrom sklearn import metrics\nfrom sklearn.metrics import mean_squared_log_error","metadata":{"id":"tckeqUkE_-1v","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:24:48.714838Z","iopub.execute_input":"2024-12-11T18:24:48.715484Z","iopub.status.idle":"2024-12-11T18:24:49.375032Z","shell.execute_reply.started":"2024-12-11T18:24:48.715394Z","shell.execute_reply":"2024-12-11T18:24:49.37384Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def rmsle(y_true, y_pred):\n    return np.sqrt(mean_squared_log_error(y_true, y_pred))","metadata":{"id":"Sb-guFj2FJw2","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:24:49.376503Z","iopub.execute_input":"2024-12-11T18:24:49.376844Z","iopub.status.idle":"2024-12-11T18:24:49.382584Z","shell.execute_reply.started":"2024-12-11T18:24:49.376814Z","shell.execute_reply":"2024-12-11T18:24:49.381068Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_train, X_test, y_train, y_test = train_tast_split(new_train)","metadata":{"id":"LkktGuzDrOtz","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:24:49.38728Z","iopub.execute_input":"2024-12-11T18:24:49.388Z","iopub.status.idle":"2024-12-11T18:24:54.048632Z","shell.execute_reply.started":"2024-12-11T18:24:49.38796Z","shell.execute_reply":"2024-12-11T18:24:54.047427Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# params from Optuna. Look in the notebook\ncatb_params = {'learning_rate': 0.13187536434427824,\n'colsample_bylevel': 0.22161422022143296,\n'depth': 3,\n'boosting_type': 'Ordered',\n'iterations': 639,\n'l2_leaf_reg': 2.5,\n'min_child_samples': 4,\n'border_count': 120,\n'bootstrap_type': 'Bernoulli'\n}","metadata":{"id":"VaJu91mp1iCh","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:24:54.049837Z","iopub.execute_input":"2024-12-11T18:24:54.05017Z","iopub.status.idle":"2024-12-11T18:24:54.055944Z","shell.execute_reply.started":"2024-12-11T18:24:54.050139Z","shell.execute_reply":"2024-12-11T18:24:54.054876Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"catb_final = CatBoostRegressor(\n    **catb_params,\n    objective='RMSE',\n    eval_metric='SMAPE',\n    grow_policy='SymmetricTree',\n    random_state=1,\n)\ncatb_final.fit(X_train, y_train)\ny_pred = np.exp(catb_final.predict(X_test))\nprint(\"RMSLE:\", rmsle(np.exp(y_test), y_pred))","metadata":{"id":"frgfglQs14Ey","outputId":"3e429eac-fa69-4399-b9a2-5b631ad7dcd8","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:24:54.057566Z","iopub.execute_input":"2024-12-11T18:24:54.05865Z","iopub.status.idle":"2024-12-11T18:25:58.413673Z","shell.execute_reply.started":"2024-12-11T18:24:54.058553Z","shell.execute_reply":"2024-12-11T18:25:58.412153Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#Predictions","metadata":{"id":"Q1QLHLIxp1An"}},{"cell_type":"code","source":"new_test = datetime_feature(one_hot_missing(test))","metadata":{"id":"lsdDTBZhp1An","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:25:58.415336Z","iopub.execute_input":"2024-12-11T18:25:58.415681Z","iopub.status.idle":"2024-12-11T18:26:03.88977Z","shell.execute_reply.started":"2024-12-11T18:25:58.415651Z","shell.execute_reply":"2024-12-11T18:26:03.888622Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_pred_test = np.exp(catb_final.predict(new_test[new_test.columns.to_list()].astype(\"object\")))\ny_pred_test","metadata":{"id":"xFXEBYAk_Job","outputId":"604aaae8-4248-4f43-917f-331a5dad267c","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:26:03.891364Z","iopub.execute_input":"2024-12-11T18:26:03.891763Z","iopub.status.idle":"2024-12-11T18:26:07.461424Z","shell.execute_reply.started":"2024-12-11T18:26:03.891726Z","shell.execute_reply":"2024-12-11T18:26:07.460053Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#Submission","metadata":{"id":"VPEkah8jp1An"}},{"cell_type":"code","source":"sample = pd.read_csv('/kaggle/input/playground-series-s4e12/sample_submission.csv')\nsample[\"Premium Amount\"] =  y_pred_test\n\nsample.to_csv('submission.csv',index=False)\nsample","metadata":{"id":"Lzu-my2G_N3H","outputId":"630a7e00-b7b0-48cc-d649-6624eac3e79f","trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:26:07.463093Z","iopub.execute_input":"2024-12-11T18:26:07.463594Z","iopub.status.idle":"2024-12-11T18:26:09.451163Z","shell.execute_reply.started":"2024-12-11T18:26:07.463541Z","shell.execute_reply":"2024-12-11T18:26:09.449866Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print('Done!')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-11T18:26:09.452947Z","iopub.execute_input":"2024-12-11T18:26:09.453481Z","iopub.status.idle":"2024-12-11T18:26:09.461283Z","shell.execute_reply.started":"2024-12-11T18:26:09.453405Z","shell.execute_reply":"2024-12-11T18:26:09.459894Z"}},"outputs":[],"execution_count":null}]}