{"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-31T18:30:08.931755Z","iopub.execute_input":"2024-12-31T18:30:08.93202Z","iopub.status.idle":"2024-12-31T18:30:09.32553Z","shell.execute_reply.started":"2024-12-31T18:30:08.931995Z","shell.execute_reply":"2024-12-31T18:30:09.324401Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport pandas as pd \nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.metrics import mean_squared_error\nfrom lightgbm import LGBMRegressor\nimport optuna","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T18:30:09.32679Z","iopub.execute_input":"2024-12-31T18:30:09.327176Z","iopub.status.idle":"2024-12-31T18:30:13.404555Z","shell.execute_reply.started":"2024-12-31T18:30:09.327151Z","shell.execute_reply":"2024-12-31T18:30:13.40373Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Working with train data","metadata":{}},{"cell_type":"code","source":"df=pd.read_csv(\"/kaggle/input/playground-series-s4e12/train.csv\")\ndf","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T18:30:13.405989Z","iopub.execute_input":"2024-12-31T18:30:13.406649Z","iopub.status.idle":"2024-12-31T18:30:20.588066Z","shell.execute_reply.started":"2024-12-31T18:30:13.406614Z","shell.execute_reply":"2024-12-31T18:30:20.586933Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df.info()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T18:30:20.58949Z","iopub.execute_input":"2024-12-31T18:30:20.589751Z","iopub.status.idle":"2024-12-31T18:30:21.245135Z","shell.execute_reply.started":"2024-12-31T18:30:20.589728Z","shell.execute_reply":"2024-12-31T18:30:21.244083Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df['Policy Start Date']=pd.to_datetime(df['Policy Start Date'])\ndf['Year']=df['Policy Start Date'].dt.year\ndf['Month']=df['Policy Start Date'].dt.month\ndf['Day']=df['Policy Start Date'].dt.day\ndf['Quarter'] = df['Policy Start Date'].dt.quarter","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T18:30:21.246169Z","iopub.execute_input":"2024-12-31T18:30:21.246526Z","iopub.status.idle":"2024-12-31T18:30:21.953883Z","shell.execute_reply.started":"2024-12-31T18:30:21.246495Z","shell.execute_reply":"2024-12-31T18:30:21.95277Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df = df.loc[:, df.columns != 'Policy Start Date']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T18:30:21.955087Z","iopub.execute_input":"2024-12-31T18:30:21.955497Z","iopub.status.idle":"2024-12-31T18:30:22.13662Z","shell.execute_reply.started":"2024-12-31T18:30:21.955454Z","shell.execute_reply":"2024-12-31T18:30:22.13546Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Filling null values","metadata":{}},{"cell_type":"code","source":"df.isnull().mean()*100","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T18:30:22.137628Z","iopub.execute_input":"2024-12-31T18:30:22.138029Z","iopub.status.idle":"2024-12-31T18:30:22.712547Z","shell.execute_reply.started":"2024-12-31T18:30:22.137998Z","shell.execute_reply":"2024-12-31T18:30:22.711444Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"imp_mean=SimpleImputer(missing_values=np.nan,strategy='mean')\nimp_mode=SimpleImputer(missing_values=np.nan,strategy='most_frequent')\nimp_median=SimpleImputer(missing_values=np.nan,strategy='median')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T18:30:22.715679Z","iopub.execute_input":"2024-12-31T18:30:22.715964Z","iopub.status.idle":"2024-12-31T18:30:22.720587Z","shell.execute_reply.started":"2024-12-31T18:30:22.71594Z","shell.execute_reply":"2024-12-31T18:30:22.719606Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Assuming 'df' is your DataFrame\n# df.loc[:, 'Age'] = imp_mean.fit_transform(df['Age'].values.reshape(-1, 1)).ravel()\n# df.loc[:, 'Vehicle Age'] = imp_mean.fit_transform(df['Vehicle Age'].values.reshape(-1, 1)).ravel()\n# df.loc[:, 'Health Score'] = imp_mean.fit_transform(df['Health Score'].values.reshape(-1, 1)).ravel()\n# df.loc[:, 'Credit Score'] = imp_mean.fit_transform(df['Credit Score'].values.reshape(-1, 1)).ravel()\n# df.loc[:, 'Marital Status'] = imp_mode.fit_transform(df['Marital Status'].values.reshape(-1, 1)).ravel()\n# df.loc[:, 'Number of Dependents'] = imp_mode.fit_transform(df['Number of Dependents'].values.reshape(-1, 1)).ravel()\n# df.loc[:, 'Annual Income'] = imp_median.fit_transform(df['Annual Income'].values.reshape(-1, 1)).ravel()\n# df.loc[:, 'Customer Feedback'] = imp_mode.fit_transform(df['Customer Feedback'].values.reshape(-1, 1)).ravel()\n# df.loc[:, 'Insurance Duration'] = imp_mode.fit_transform(df['Insurance Duration'].values.reshape(-1, 1)).ravel()\n# df.loc[:, 'Occupation'] = imp_mode.fit_transform(df['Occupation'].values.reshape(-1, 1)).ravel()\n# df.loc[:, 'Previous Claims'] = df['Previous Claims'].fillna(0)\n\ndf.fillna(-1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T18:30:22.722909Z","iopub.execute_input":"2024-12-31T18:30:22.72332Z","iopub.status.idle":"2024-12-31T18:30:24.608876Z","shell.execute_reply.started":"2024-12-31T18:30:22.723283Z","shell.execute_reply":"2024-12-31T18:30:24.607787Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"categorical_columns=['Gender', 'Marital Status', 'Education Level','Occupation', 'Location', 'Policy Type','Customer Feedback', 'Smoking Status','Exercise Frequency', 'Property Type']\ndf_encoded=pd.get_dummies(df,columns=categorical_columns,drop_first=True,dtype='int')\ndf_encoded.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T18:30:24.609898Z","iopub.execute_input":"2024-12-31T18:30:24.610264Z","iopub.status.idle":"2024-12-31T18:30:26.057765Z","shell.execute_reply.started":"2024-12-31T18:30:24.610207Z","shell.execute_reply":"2024-12-31T18:30:26.056717Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"scaler=StandardScaler()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T18:30:26.058879Z","iopub.execute_input":"2024-12-31T18:30:26.059256Z","iopub.status.idle":"2024-12-31T18:30:26.063406Z","shell.execute_reply.started":"2024-12-31T18:30:26.059202Z","shell.execute_reply":"2024-12-31T18:30:26.062482Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X=df_encoded.drop('Premium Amount',axis='columns')\ny=df_encoded['Premium Amount']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T18:30:26.064337Z","iopub.execute_input":"2024-12-31T18:30:26.064659Z","iopub.status.idle":"2024-12-31T18:30:26.175806Z","shell.execute_reply.started":"2024-12-31T18:30:26.064624Z","shell.execute_reply":"2024-12-31T18:30:26.174749Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X = scaler.fit_transform(X)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T18:30:26.176762Z","iopub.execute_input":"2024-12-31T18:30:26.17706Z","iopub.status.idle":"2024-12-31T18:30:27.652915Z","shell.execute_reply.started":"2024-12-31T18:30:26.177032Z","shell.execute_reply":"2024-12-31T18:30:27.651806Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T18:30:27.654008Z","iopub.execute_input":"2024-12-31T18:30:27.654396Z","iopub.status.idle":"2024-12-31T18:30:28.262724Z","shell.execute_reply.started":"2024-12-31T18:30:27.654361Z","shell.execute_reply":"2024-12-31T18:30:28.261833Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_train_log=np.log1p(y_train)\ny_test_log=np.log1p(y_test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T18:30:28.263467Z","iopub.execute_input":"2024-12-31T18:30:28.263779Z","iopub.status.idle":"2024-12-31T18:30:28.29153Z","shell.execute_reply.started":"2024-12-31T18:30:28.263754Z","shell.execute_reply":"2024-12-31T18:30:28.290521Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def objective(trial):  # Corrected argument name\n    params = {\n        'num_leaves': trial.suggest_int('num_leaves', 10, 70),\n        'max_depth': trial.suggest_int('max_depth', -1, 20),\n        'learning_rate': trial.suggest_float('learning_rate', 0.001, 0.1, log=True),\n        'n_estimators': trial.suggest_int('n_estimators', 100, 500),\n        'subsample': trial.suggest_float('subsample', 0.7, 1.0),\n        'colsample_bytree': trial.suggest_float('colsample_bytree', 0.6, 1.0),\n        'reg_alpha': trial.suggest_float('reg_alpha', 0.0, 1.0),\n        'reg_lambda': trial.suggest_float('reg_lambda', 0.0, 1.0),\n    }\n\n    model = LGBMRegressor(**params)\n    model.fit(\n        X_train, \n        y_train_log, \n        eval_set=[(X_test, y_test_log)], \n        eval_metric='mse'\n    )\n    y_pred = model.predict(X_test)\n    mse = np.sqrt(mean_squared_error(y_test_log, y_pred))\n    return mse","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T18:30:28.292484Z","iopub.execute_input":"2024-12-31T18:30:28.292951Z","iopub.status.idle":"2024-12-31T18:30:28.299213Z","shell.execute_reply.started":"2024-12-31T18:30:28.292923Z","shell.execute_reply":"2024-12-31T18:30:28.298159Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"study = optuna.create_study(direction='minimize')\nstudy.optimize(objective, n_trials=100)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T18:30:28.300123Z","iopub.execute_input":"2024-12-31T18:30:28.300425Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(\"Best parameters:\", study.best_params)\nbest_model = LGBMRegressor(**study.best_params)\nbest_model.fit(X_train, y_train_log)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Working with test data","metadata":{}},{"cell_type":"code","source":"df_test= pd.read_csv('/kaggle/input/playground-series-s4e12/test.csv')\ndf_test","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# df_test.loc[:, 'Age'] = imp_mean.fit_transform(df_test['Age'].values.reshape(-1, 1)).ravel()\n# df_test.loc[:, 'Vehicle Age'] = imp_mean.fit_transform(df_test['Vehicle Age'].values.reshape(-1, 1)).ravel()\n# df_test.loc[:, 'Health Score'] = imp_mean.fit_transform(df_test['Health Score'].values.reshape(-1, 1)).ravel()\n# df_test.loc[:, 'Credit Score'] = imp_mean.fit_transform(df_test['Credit Score'].values.reshape(-1, 1)).ravel()\n# df_test.loc[:, 'Marital Status'] = imp_mode.fit_transform(df_test['Marital Status'].values.reshape(-1, 1)).ravel()\n# df_test.loc[:, 'Number of Dependents'] = imp_mode.fit_transform(df_test['Number of Dependents'].values.reshape(-1, 1)).ravel()\n# df_test.loc[:, 'Annual Income'] = imp_median.fit_transform(df_test['Annual Income'].values.reshape(-1, 1)).ravel()\n# df_test.loc[:, 'Customer Feedback'] = imp_mode.fit_transform(df_test['Customer Feedback'].values.reshape(-1, 1)).ravel()\n# df_test.loc[:, 'Insurance Duration'] = imp_mode.fit_transform(df_test['Insurance Duration'].values.reshape(-1, 1)).ravel()\n# df_test.loc[:, 'Occupation'] = imp_mode.fit_transform(df_test['Occupation'].values.reshape(-1, 1)).ravel()\n# df_test.loc[:, 'Previous Claims'] = df_test['Previous Claims'].fillna(0)\n\ndf_test.fillna(-1)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_test['Policy Start Date']=pd.to_datetime(df_test['Policy Start Date'])\ndf_test['Year']=df_test['Policy Start Date'].dt.year\ndf_test['Month']=df_test['Policy Start Date'].dt.month\ndf_test['Day']=df_test['Policy Start Date'].dt.day\ndf_test['Quarter'] = df_test['Policy Start Date'].dt.quarter \n\ndf_test= df_test.loc[:, df_test.columns != 'Policy Start Date']","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"categorical_columns=['Gender', 'Marital Status', 'Education Level','Occupation', 'Location', 'Policy Type','Customer Feedback', 'Smoking Status','Exercise Frequency', 'Property Type']\ndf_test_encoded=pd.get_dummies(df_test,columns=categorical_columns,drop_first=True,dtype='int')\ndf_test_encoded.head()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_test_scaled=scaler.transform(df_test_encoded)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Submission","metadata":{}},{"cell_type":"code","source":"predictions_log = best_model.predict(df_test_scaled)\npredictions = np.expm1(predictions_log)\nsubmission = pd.DataFrame({'id':df_test['id'],'Premium Amount':predictions})\nsubmission.to_csv('submission.csv', index=False)\n\nprint(\"Submission file 'submission.csv' created.\")\n","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}