{"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":"gpu","dataSources":[{"sourceId":84896,"databundleVersionId":10305135,"sourceType":"competition"}],"dockerImageVersionId":30787,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom catboost import CatBoostRegressor\nfrom sklearn.model_selection import KFold\nfrom sklearn.metrics import mean_squared_log_error\n\nimport warnings\nwarnings.filterwarnings(\"ignore\")\n\nimport joblib","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-01T13:31:11.244395Z","iopub.execute_input":"2024-12-01T13:31:11.245207Z","iopub.status.idle":"2024-12-01T13:31:11.249725Z","shell.execute_reply.started":"2024-12-01T13:31:11.24517Z","shell.execute_reply":"2024-12-01T13:31:11.248754Z"}},"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\nsample = pd.read_csv('/kaggle/input/playground-series-s4e12/sample_submission.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-01T13:31:11.251265Z","iopub.execute_input":"2024-12-01T13:31:11.251598Z","iopub.status.idle":"2024-12-01T13:31:17.111064Z","shell.execute_reply.started":"2024-12-01T13:31:11.251558Z","shell.execute_reply":"2024-12-01T13:31:17.110294Z"}},"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","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-01T13:31:17.112343Z","iopub.execute_input":"2024-12-01T13:31:17.112596Z","iopub.status.idle":"2024-12-01T13:31:17.119499Z","shell.execute_reply.started":"2024-12-01T13:31:17.112572Z","shell.execute_reply":"2024-12-01T13:31:17.118593Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = date(train)\ntest = date(test)\n\n# cat_c = [col for col in train.columns if train[col].dtype == 'object']\n\n# def update(df):\n#     global cat_c\n\n#     for c in cat_c:\n#         df[c] = df[c].fillna('None').astype('category')\n                \n#     return df\n\n# train = update(train)\n# test = update(test)\n\ncolumns_to_convert = train.columns.difference(['Premium Amount'])\n\ntrain[columns_to_convert] = train[columns_to_convert].fillna('None').astype('string')\ntest[columns_to_convert] = test[columns_to_convert].fillna('None').astype('string')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-01T13:31:17.120509Z","iopub.execute_input":"2024-12-01T13:31:17.120868Z","iopub.status.idle":"2024-12-01T13:31:26.167296Z","shell.execute_reply.started":"2024-12-01T13:31:17.120843Z","shell.execute_reply":"2024-12-01T13:31:26.166574Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X = train.drop('Premium Amount', axis=1)  \ny = train['Premium Amount']\ncat_features = X.columns.values","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-01T13:31:26.169112Z","iopub.execute_input":"2024-12-01T13:31:26.169387Z","iopub.status.idle":"2024-12-01T13:31:26.82807Z","shell.execute_reply.started":"2024-12-01T13:31:26.169361Z","shell.execute_reply":"2024-12-01T13:31:26.827081Z"}},"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":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-01T13:31:26.829204Z","iopub.execute_input":"2024-12-01T13:31:26.829508Z","iopub.status.idle":"2024-12-01T13:31:26.833837Z","shell.execute_reply.started":"2024-12-01T13:31:26.829481Z","shell.execute_reply":"2024-12-01T13:31:26.832894Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def train():\n    kf = KFold(n_splits=5, shuffle=True, random_state=42)\n    oof = np.zeros(len(X))\n    models = []\n\n    for fold, (train_idx, valid_idx) in enumerate(kf.split(X)):\n        print(f\"Fold {fold + 1}\")\n        X_train, X_valid = X.iloc[train_idx], X.iloc[valid_idx]\n        y_train, y_valid = y.iloc[train_idx], y.iloc[valid_idx]\n\n        model = CatBoostRegressor(\n            iterations=1000,\n            learning_rate=0.1,\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        \n        model.fit(X_train,\n                  y_train,\n                  eval_set=(X_valid, y_valid), \n                  early_stopping_rounds=300,\n                  cat_features=cat_features,\n                 )\n        models.append(model)\n        oof[valid_idx] = np.maximum(0, model.predict(X_valid))\n        fold_rmsle = rmsle(y_valid, oof[valid_idx])\n        print(f\"Fold {fold + 1} RMSLE: {fold_rmsle}\")\n        \n    return models, oof","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-01T13:31:26.834757Z","iopub.execute_input":"2024-12-01T13:31:26.835008Z","iopub.status.idle":"2024-12-01T13:31:26.937553Z","shell.execute_reply.started":"2024-12-01T13:31:26.834968Z","shell.execute_reply":"2024-12-01T13:31:26.936577Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"models,oof = train()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-01T13:31:26.938666Z","iopub.execute_input":"2024-12-01T13:31:26.938932Z","iopub.status.idle":"2024-12-01T13:33:09.904143Z","shell.execute_reply.started":"2024-12-01T13:31:26.938907Z","shell.execute_reply":"2024-12-01T13:33:09.903017Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(rmsle(y, oof))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-01T13:33:09.904931Z","iopub.status.idle":"2024-12-01T13:33:09.905248Z","shell.execute_reply.started":"2024-12-01T13:33:09.905101Z","shell.execute_reply":"2024-12-01T13:33:09.905116Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test_predictions = np.zeros(len(test))\n\nfor model in models:\n    test_predictions += np.maximum(0, model.predict(test)) / len(models)\n\n\nsample['Premium Amount'] = test_predictions\nsample.to_csv('submission.csv', index = False)\n\njoblib.dump([oof,test_predictions],\"cat_non_loged.pkl\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-01T13:33:09.906232Z","iopub.status.idle":"2024-12-01T13:33:09.906558Z","shell.execute_reply.started":"2024-12-01T13:33:09.906385Z","shell.execute_reply":"2024-12-01T13:33:09.906401Z"}},"outputs":[],"execution_count":null}]}