{"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":"none","dataSources":[{"sourceId":84896,"databundleVersionId":10305135,"sourceType":"competition"}],"dockerImageVersionId":30822,"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-30T19:45:46.87152Z","iopub.execute_input":"2024-12-30T19:45:46.87192Z","iopub.status.idle":"2024-12-30T19:45:46.880376Z","shell.execute_reply.started":"2024-12-30T19:45:46.871891Z","shell.execute_reply":"2024-12-30T19:45:46.87923Z"},"_kg_hide-input":true,"_kg_hide-output":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport seaborn as sns\nimport matplotlib.gridspec as gridspec\n\nimport warnings\nwarnings.filterwarnings(\"ignore\", category=UserWarning, module=\"seaborn\")\nwarnings.filterwarnings(\"ignore\", category=FutureWarning, module=\"seaborn\")\n\nimport numpy as np\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler, OneHotEncoder\nfrom sklearn.compose import ColumnTransformer\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.metrics import mean_squared_log_error\nfrom sklearn.metrics import mean_squared_log_error\nimport optuna\nimport lightgbm as lgb\n\nfrom sklearn.pipeline import Pipeline","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T19:45:46.882458Z","iopub.execute_input":"2024-12-30T19:45:46.8829Z","iopub.status.idle":"2024-12-30T19:45:46.896588Z","shell.execute_reply.started":"2024-12-30T19:45:46.88287Z","shell.execute_reply":"2024-12-30T19:45:46.89554Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_df=pd.read_csv('/kaggle/input/playground-series-s4e12/train.csv')\ntest_df=pd.read_csv('/kaggle/input/playground-series-s4e12/test.csv')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T19:45:46.898509Z","iopub.execute_input":"2024-12-30T19:45:46.89903Z","iopub.status.idle":"2024-12-30T19:45:55.44526Z","shell.execute_reply.started":"2024-12-30T19:45:46.898985Z","shell.execute_reply":"2024-12-30T19:45:55.44421Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Data preprocess","metadata":{}},{"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    min_year = df['Year'].min()\n    max_year = df['Year'].max()\n    df['Year_sin'] = np.sin(2 * np.pi * (df['Year'] - min_year) / (max_year - min_year))\n    df['Year_cos'] = np.cos(2 * np.pi * (df['Year'] - min_year) / (max_year - min_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\n# Apply the date function to both datasets\ntrain_df = date(train_df)\ntest_df = date(test_df)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T19:45:55.447403Z","iopub.execute_input":"2024-12-30T19:45:55.447861Z","iopub.status.idle":"2024-12-30T19:45:58.722977Z","shell.execute_reply.started":"2024-12-30T19:45:55.447806Z","shell.execute_reply":"2024-12-30T19:45:58.721842Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Define features and target\nnumerical_features = [\n    'Age', 'Annual Income', 'Number of Dependents', 'Health Score', \n    'Previous Claims', 'Vehicle Age', 'Credit Score', 'Insurance Duration', \n    'Year_sin', 'Year_cos', 'Month_sin', 'Month_cos', 'Day_sin', 'Day_cos'\n]\ncategorical_features = [\n    'Gender', 'Marital Status', 'Education Level', 'Occupation', 'Location',\n    'Policy Type', 'Customer Feedback', 'Smoking Status', 'Exercise Frequency', \n    'Property Type', 'Month_name', 'Day_of_week'\n]\ntarget_column = 'Premium Amount'","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T19:45:58.724877Z","iopub.execute_input":"2024-12-30T19:45:58.725259Z","iopub.status.idle":"2024-12-30T19:45:58.731219Z","shell.execute_reply.started":"2024-12-30T19:45:58.72522Z","shell.execute_reply":"2024-12-30T19:45:58.730143Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Split train data into features and target\nX = train_df.drop(columns=[target_column, 'id', 'Group', 'Year', 'Month', 'Day', 'Week'])\ny = train_df[target_column]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T19:45:58.732351Z","iopub.execute_input":"2024-12-30T19:45:58.732782Z","iopub.status.idle":"2024-12-30T19:45:59.213493Z","shell.execute_reply.started":"2024-12-30T19:45:58.73274Z","shell.execute_reply":"2024-12-30T19:45:59.21246Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Preprocessing pipeline for numerical features\nnum_pipeline = Pipeline(steps=[\n    ('imputer', SimpleImputer(strategy='median')),\n    ('scaler', StandardScaler())                       # Scale numerical features\n])\n\n# Preprocessing pipeline for categorical features\ncat_pipeline = Pipeline(steps=[\n    ('imputer', SimpleImputer(strategy='constant', fill_value='Unknown')),  # Handle missing values\n    ('onehot', OneHotEncoder(handle_unknown='ignore'))                      # Encode categorical features\n])\n\n# Combine pipelines into a ColumnTransformer\npreprocessor = ColumnTransformer(\n    transformers=[\n        ('num', num_pipeline, numerical_features),\n        ('cat', cat_pipeline, categorical_features)\n    ]\n)\n\n# Preprocess train and test data\nX_processed = preprocessor.fit_transform(X)\ntest_processed = preprocessor.transform(test_df.drop(columns=['id', 'Group', 'Year', 'Month', 'Day', 'Week']))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T19:45:59.214632Z","iopub.execute_input":"2024-12-30T19:45:59.214919Z","iopub.status.idle":"2024-12-30T19:46:15.17063Z","shell.execute_reply.started":"2024-12-30T19:45:59.214894Z","shell.execute_reply":"2024-12-30T19:46:15.169622Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Model training","metadata":{}},{"cell_type":"code","source":"# Split the data\nX_train, X_val, y_train, y_val = train_test_split(X_processed, y, test_size=0.000000001, random_state=42)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T19:46:15.173341Z","iopub.execute_input":"2024-12-30T19:46:15.173611Z","iopub.status.idle":"2024-12-30T19:46:15.608196Z","shell.execute_reply.started":"2024-12-30T19:46:15.173587Z","shell.execute_reply":"2024-12-30T19:46:15.606841Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":" # Create a LightGBM dataset\ndtrain = lgb.Dataset(X_train, label=y_train)\ndval = lgb.Dataset(X_val, label=y_val, reference=dtrain)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T19:46:15.609477Z","iopub.execute_input":"2024-12-30T19:46:15.609818Z","iopub.status.idle":"2024-12-30T19:46:15.640833Z","shell.execute_reply.started":"2024-12-30T19:46:15.60979Z","shell.execute_reply":"2024-12-30T19:46:15.639472Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\nbest_params = {\n    'boosting_type': 'dart',\n    'n_estimators': 1175, \n    'learning_rate': 0.02991020706767896, \n    'num_leaves': 385, \n    'max_depth': 13, \n    'min_child_samples': 12, \n    'subsample': 0.9633137940297378, \n    'colsample_bytree': 0.9637121094733179, \n    'reg_alpha': 8.846561105667421, \n    'reg_lambda': 3.9007247999299173,\n    'seed': 42,\n    'feature_fraction': 0.9883068358315196,\n    'bagging_fraction': 0.7201712704805296,\n    'bagging_freq': 7,\n    'min_data_in_leaf': 51,\n    'lambda_l1': 0.0011290211269753312,\n    'lambda_l2': 3.056310541294081,\n}","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T19:46:15.642038Z","iopub.execute_input":"2024-12-30T19:46:15.642376Z","iopub.status.idle":"2024-12-30T19:46:15.659549Z","shell.execute_reply.started":"2024-12-30T19:46:15.642345Z","shell.execute_reply":"2024-12-30T19:46:15.658185Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.ensemble import VotingRegressor\nfrom catboost import CatBoostRegressor\nfrom xgboost import XGBRegressor\nfrom lightgbm import LGBMRegressor\nfrom sklearn.linear_model import LinearRegression\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import mean_squared_error\n\n  ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T19:46:15.660835Z","iopub.execute_input":"2024-12-30T19:46:15.661239Z","iopub.status.idle":"2024-12-30T19:46:15.677389Z","shell.execute_reply.started":"2024-12-30T19:46:15.661199Z","shell.execute_reply":"2024-12-30T19:46:15.676299Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"final_model = lgb.train(\n    best_params,\n    lgb.Dataset(X_processed, label=y),\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T19:46:15.678617Z","iopub.execute_input":"2024-12-30T19:46:15.678999Z","iopub.status.idle":"2024-12-30T20:26:13.959437Z","shell.execute_reply.started":"2024-12-30T19:46:15.678956Z","shell.execute_reply":"2024-12-30T20:26:13.958148Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Creating submission.csv","metadata":{}},{"cell_type":"code","source":"# Make predictions on the test set\ntest_predictions = final_model.predict(test_processed, num_iteration=final_model.best_iteration)\n\n# Prepare submission file\nsubmission = pd.DataFrame({'id': test_df['id'], 'Premium Amount': test_predictions})\nsubmission.to_csv(\"submission.csv\", index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T20:26:13.960491Z","iopub.execute_input":"2024-12-30T20:26:13.960841Z","iopub.status.idle":"2024-12-30T20:27:21.37604Z","shell.execute_reply.started":"2024-12-30T20:26:13.960812Z","shell.execute_reply":"2024-12-30T20:27:21.375089Z"}},"outputs":[],"execution_count":null}]}