{"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":"markdown","source":"#  Importing necessary libraries\n","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport seaborn as sns\nimport matplotlib.pyplot as plt\nimport lightgbm as lgb\nimport xgboost as xgb\nimport category_encoders as ce\nfrom sklearn.model_selection import KFold, cross_val_score\nfrom sklearn.metrics import mean_squared_log_error, make_scorer, mean_squared_error\nfrom sklearn.linear_model import LinearRegression\nfrom sklearn.ensemble import RandomForestRegressor\nfrom scipy.signal import find_peaks\nfrom sklearn.impute import KNNImputer\nfrom sklearn.base import clone\nimport warnings\nwarnings.filterwarnings(\"ignore\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T18:14:43.083779Z","iopub.execute_input":"2024-12-14T18:14:43.084195Z","iopub.status.idle":"2024-12-14T18:14:43.091467Z","shell.execute_reply.started":"2024-12-14T18:14:43.084158Z","shell.execute_reply":"2024-12-14T18:14:43.090286Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Load datasets\n","metadata":{}},{"cell_type":"code","source":"base_path = '../input/playground-series-s4e12/'\ntrain = pd.read_csv(base_path + 'train.csv', index_col='id')\ntest = pd.read_csv(base_path + 'test.csv', index_col='id')\nsubmission = pd.read_csv(base_path + 'sample_submission.csv', index_col='id')\n\n# Overview of the data\nprint(f\"Train shape: {train.shape}\")\nprint(f\"Test shape: {test.shape}\")\ntrain.info()\ntest.info()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T18:14:43.898772Z","iopub.execute_input":"2024-12-14T18:14:43.899838Z","iopub.status.idle":"2024-12-14T18:14:52.613949Z","shell.execute_reply.started":"2024-12-14T18:14:43.899796Z","shell.execute_reply":"2024-12-14T18:14:52.612674Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Basic statistical summary\n\n","metadata":{}},{"cell_type":"code","source":"print(\"Statistical summary:\")\nprint(train.describe().T)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T18:14:52.615803Z","iopub.execute_input":"2024-12-14T18:14:52.61611Z","iopub.status.idle":"2024-12-14T18:14:53.263607Z","shell.execute_reply.started":"2024-12-14T18:14:52.616079Z","shell.execute_reply":"2024-12-14T18:14:53.262563Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Visualizing missing values\n","metadata":{}},{"cell_type":"code","source":"plt.figure(figsize=(10, 6))\nsns.heatmap(train.isnull(), cbar=False, cmap=\"viridis\")\nplt.title(\"Missing Values in Train Dataset\")\nplt.show()\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T18:14:53.26501Z","iopub.execute_input":"2024-12-14T18:14:53.265448Z","iopub.status.idle":"2024-12-14T18:15:16.504555Z","shell.execute_reply.started":"2024-12-14T18:14:53.265401Z","shell.execute_reply":"2024-12-14T18:15:16.503355Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# KDE plot with peaks\n","metadata":{}},{"cell_type":"code","source":"kde = sns.kdeplot(data=train, x='Premium Amount').get_lines()[0].get_data()\nx, y = kde[0], kde[1]\npeaks, _ = find_peaks(y)\nplt.plot(x[peaks], y[peaks], 'ro')\nplt.fill_between(x, y, color='blue', alpha=0.5)\nplt.title(\"Premium Amount: KDE with Peaks\")\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T18:15:16.506854Z","iopub.execute_input":"2024-12-14T18:15:16.50721Z","iopub.status.idle":"2024-12-14T18:15:21.603248Z","shell.execute_reply.started":"2024-12-14T18:15:16.507175Z","shell.execute_reply":"2024-12-14T18:15:21.60212Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Convert Policy Start Date to datetime and extract components\n","metadata":{}},{"cell_type":"code","source":"for df in [train, test]:\n    df['Policy Start Date'] = pd.to_datetime(df['Policy Start Date'])\n    df['Day'] = df['Policy Start Date'].dt.day\n    df['Month'] = df['Policy Start Date'].dt.month\n    df['Year'] = df['Policy Start Date'].dt.year\n    df.drop(columns=['Policy Start Date'], inplace=True)\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T18:15:21.604633Z","iopub.execute_input":"2024-12-14T18:15:21.604964Z","iopub.status.idle":"2024-12-14T18:15:22.912074Z","shell.execute_reply.started":"2024-12-14T18:15:21.604932Z","shell.execute_reply":"2024-12-14T18:15:22.91085Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Handling missing values using KNN Imputer\n","metadata":{}},{"cell_type":"code","source":"# Convert Policy Start Date to datetime and extract components if the column exists\nfor df_name, df in [('train', train), ('test', test)]:\n    if 'Policy Start Date' in df.columns:\n        df['Policy Start Date'] = pd.to_datetime(df['Policy Start Date'])\n        df['Day'] = df['Policy Start Date'].dt.day\n        df['Month'] = df['Policy Start Date'].dt.month\n        df['Year'] = df['Policy Start Date'].dt.year\n        df.drop(columns='Policy Start Date', inplace=True)\n        print(f\"Processed 'Policy Start Date' in {df_name} dataset.\")\n    else:\n        print(f\"'Policy Start Date' column not found in {df_name} dataset.\")\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T18:16:58.787667Z","iopub.execute_input":"2024-12-14T18:16:58.788102Z","iopub.status.idle":"2024-12-14T18:16:58.795862Z","shell.execute_reply.started":"2024-12-14T18:16:58.788064Z","shell.execute_reply":"2024-12-14T18:16:58.794652Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Splitting features and target\ny = train['Premium Amount']\nX = train.drop(columns=['Premium Amount'])\ny_log = np.log1p(y)\n\n# Initialize models with dictionaries for parameters\nlgb_params = {\n    'learning_rate': 0.1,\n    'n_estimators': 100,\n    'max_depth': 5\n}\n\nxgb_params = {\n    'learning_rate': 0.1,\n    'n_estimators': 100,\n    'max_depth': 5\n}\n\nmodel1 = lgb.LGBMRegressor(**lgb_params)\nmodel2 = xgb.XGBRegressor(**xgb_params)\n\nprint(\"Models initialized successfully!\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T18:18:39.513593Z","iopub.execute_input":"2024-12-14T18:18:39.513969Z","iopub.status.idle":"2024-12-14T18:18:39.731036Z","shell.execute_reply.started":"2024-12-14T18:18:39.513939Z","shell.execute_reply":"2024-12-14T18:18:39.729813Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder\n\ncategorical_columns = X.select_dtypes(include=['object']).columns\n\nlabel_encoders = {}\nfor col in categorical_columns:\n    le = LabelEncoder()\n    X[col] = le.fit_transform(X[col].astype(str))\n    test[col] = le.transform(test[col].astype(str))\n    label_encoders[col] = le\n\nprint(\"Categorical columns encoded successfully!\")\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T18:20:12.062657Z","iopub.execute_input":"2024-12-14T18:20:12.063083Z","iopub.status.idle":"2024-12-14T18:20:16.592224Z","shell.execute_reply.started":"2024-12-14T18:20:12.063048Z","shell.execute_reply":"2024-12-14T18:20:16.590983Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score\nfrom sklearn.model_selection import train_test_split\n\nX_train, X_val, y_train, y_val = train_test_split(X, y_log, test_size=0.2, random_state=42)\n\n#  (LGBMRegressor)\nmodel1.fit(X_train, y_train)\ny_pred_lgb = model1.predict(X_val)\n\n#  (XGBRegressor)\nmodel2.fit(X_train, y_train)\ny_pred_xgb = model2.predict(X_val)\n\nprint(\"Evaluation Metrics for LGBMRegressor:\")\nprint(f\"RMSE: {mean_squared_error(y_val, y_pred_lgb, squared=False)}\")\nprint(f\"MAE: {mean_absolute_error(y_val, y_pred_lgb)}\")\nprint(f\"R2 Score: {r2_score(y_val, y_pred_lgb)}\")\n\nprint(\"\\nEvaluation Metrics for XGBRegressor:\")\nprint(f\"RMSE: {mean_squared_error(y_val, y_pred_xgb, squared=False)}\")\nprint(f\"MAE: {mean_absolute_error(y_val, y_pred_xgb)}\")\nprint(f\"R2 Score: {r2_score(y_val, y_pred_xgb)}\")\n\ntest_predictions_lgb = model1.predict(test)\ntest_predictions_xgb = model2.predict(test)\n\nfinal_predictions_lgb = np.expm1(test_predictions_lgb)\nfinal_predictions_xgb = np.expm1(test_predictions_xgb)\n\ntest['Predictions_LGB'] = final_predictions_lgb\ntest['Predictions_XGB'] = final_predictions_xgb\n\ntest[['Predictions_LGB', 'Predictions_XGB']].to_csv('final_predictions.csv', index=False)\n\nprint(\"\\nPredictions saved successfully to 'final_predictions.csv'\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T18:21:41.995576Z","iopub.execute_input":"2024-12-14T18:21:41.996541Z","iopub.status.idle":"2024-12-14T18:22:18.164756Z","shell.execute_reply.started":"2024-12-14T18:21:41.996499Z","shell.execute_reply":"2024-12-14T18:22:18.163414Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}