{"metadata":{"kernelspec":{"display_name":"env","language":"python","name":"python3"},"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.12.7"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":84896,"databundleVersionId":10305135,"sourceType":"competition"}],"dockerImageVersionId":30822,"isInternetEnabled":false,"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 matplotlib.pyplot as plt\nimport seaborn as sns\n\nfrom sklearn.preprocessing import LabelEncoder, OneHotEncoder, OrdinalEncoder, StandardScaler, FunctionTransformer\nfrom sklearn.impute import SimpleImputer, KNNImputer\nfrom sklearn.compose import ColumnTransformer\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import root_mean_squared_log_error\n\nfrom sklearn.ensemble import GradientBoostingRegressor, AdaBoostRegressor, RandomForestRegressor","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_data = pd.read_csv(r\"C:\\Users\\YUVRAJ\\Downloads\\playground-series-s4e12\\train.csv\")\ntest_data = pd.read_csv(r\"C:\\Users\\YUVRAJ\\Downloads\\playground-series-s4e12\\test.csv\")\ntrain_data.head()","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(\"Training Data\")\ndisplay(train_data.head())\nprint(\"Testing Data\")\ndisplay(test_data.head())","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_data = train_data.drop(columns=\"id\")\ntest_data = test_data.drop(columns=\"id\")\ntrain_data.shape, test_data.shape","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(\"Training Dataset Information: \\n\")\ntrain_info = train_data.info()\ndisplay(train_info)\n\nprint('\\n')\n\nprint(\"Test Dataset Information: \\n\")\ntest_info = test_data.info()\ndisplay(test_info)","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_missing = train_data.isnull()\ntest_missing = test_data.isnull()\n\nfig,axes = plt.subplots(1,2,figsize=(18,6))\n\nsns.heatmap(train_missing, cmap=\"viridis\", cbar= True, yticklabels=False, ax= axes[0])\naxes[0].set_title(\"Missing training data\")\naxes[0].set_xlabel(\"Features\")\naxes[0].set_ylabel(\"Entries\")\n\nsns.heatmap(test_missing, cmap=\"viridis\", cbar= True, yticklabels=False, ax= axes[1])\naxes[1].set_title(\"Missing testing data\")\naxes[1].set_xlabel(\"Features\")\naxes[1].set_ylabel(\"Entries\")","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_missing_table = pd.DataFrame({\n    \"Missing Values\" : train_data.isna().sum(),\n    \"Missing Percentage\" : (train_data.isna().sum() / len(train_data)) * 100,\n    \"DataTypes\" : train_data.dtypes\n})\n\ntest_missing_table = pd.DataFrame({\n    \"Missing Values\" : test_data.isna().sum(),\n    \"Missing Percentage\" : (test_data.isna().sum() / len(test_data)) * 100,\n    \"DataTypes\" : test_data.dtypes\n})\n\nprint(\"Training Data missing value table : \\n\")\ndisplay(train_missing_table[train_missing_table[\"Missing Values\"] > 0])\n\nprint(\"\\n\")\n\nprint(\"Testing Data missing value table : \\n\")\ndisplay(test_missing_table[test_missing_table[\"Missing Values\"] > 0])","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"missing_train = train_missing_table[train_missing_table[\"Missing Values\"] > 0].sort_values(by=\"Missing Percentage\", ascending=False)\nmissing_test = test_missing_table[test_missing_table[\"Missing Values\"] > 0].sort_values(by = \"Missing Percentage\", ascending=False)\n\nfig, axes = plt.subplots(1,2,figsize=(30,6))\n\naxes[0].barh(missing_train.index, missing_train[\"Missing Percentage\"])\naxes[0].set_title(\"Missing training data\")\naxes[0].set_xlabel(\"Features\")\naxes[0].set_ylabel(\"Entries\")\naxes[0].invert_yaxis()\n\naxes[1].barh(missing_test.index, missing_test[\"Missing Percentage\"])\naxes[1].set_title(\"Missing testing data\")\naxes[1].set_xlabel(\"Features\")\naxes[1].set_ylabel(\"Entries\")\naxes[1].invert_yaxis()","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"cat_features = train_data.select_dtypes(include='object').drop(columns=\"Policy Start Date\").columns\ncat_features","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_data[\"Policy Start Date\"]","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_data[\"Policy Start Date\"] = pd.DataFrame(pd.to_datetime(train_data[\"Policy Start Date\"]).astype(np.int64))\ntest_data[\"Policy Start Date\"] = pd.DataFrame(pd.to_datetime(test_data[\"Policy Start Date\"]).astype(np.int64))\ndisplay(train_data.head())\ndisplay(test_data.head())","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_data[\"Policy Start Date\"] = train_data[\"Policy Start Date\"].astype(np.float64)\ntest_data[\"Policy Start Date\"] = test_data[\"Policy Start Date\"].astype(np.float64)\ntrain_data.info()","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"fig,axes = plt.subplots(figsize=(8,6))\naxes = sns.histplot(train_data[\"Premium Amount\"],bins=30, color ='m')\naxes.set_title(\"Histogram of Premium amount\")\naxes.set_xlabel(\"Premium amount\")\naxes.set_ylabel(\"Frequency\")\naxes.grid(True,linestyle= '--', alpha=0.75)","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"fig,axes = plt.subplots(figsize=(8,6))\naxes = sns.boxplot(train_data[\"Premium Amount\"],color ='m')\naxes.set_title(\"Boxplot of Premium Amount\")\naxes.set_xlabel(\"Premium Amount\")\naxes.grid(True, linestyle='--', alpha=0.75)","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"columns_to_analyze = train_data.select_dtypes(include=[\"number\"]).columns.drop(\"Premium Amount\")\n\nfig,axes = plt.subplots(len(columns_to_analyze),3,figsize=(20, len(columns_to_analyze) * 5))\nfor i, column in enumerate(columns_to_analyze):\n    sns.histplot(train_data[column], bins=30, ax= axes[i,0],color ='m')\n    axes[i,0].set_title(f\"histogram of {column}\")\n    axes[i,0].set_xlabel(f\"{column}\")\n    axes[i,0].grid(True,linestyle=\"--\", alpha=0.75)\n\n    sns.boxplot(train_data[column], ax=axes[i,1], color='m')\n    axes[i,1].set_title(f\"Boxplot of{column} : Train\")\n    axes[i,1].set_xlabel(f\"{column}\")\n    axes[i,1].grid(True, linestyle=\"--\", alpha=0.75)\n\n    sns.boxplot(test_data[column], ax=axes[i,2], color='m')\n    axes[i,1].set_title(f\"Boxplot of{column} : Test\")\n    axes[i,1].set_xlabel(f\"{column}\")\n    axes[i,1].grid(True, linestyle=\"--\", alpha=0.75)\n\nplt.tight_layout()\nplt.show()","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"annual_income = train_data[\"Annual Income\"]\nfig,axes = plt.subplots(figsize=(8,6))\naxes = sns.histplot(annual_income,bins=30, color ='m')\naxes.set_title(\"Histogram of annual income\")\naxes.set_xlabel(\"annual income\")\naxes.set_ylabel(\"Frequency\")\naxes.grid(True,linestyle= '--', alpha=0.75)","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"annual_income_log = np.log1p(annual_income)\n\nfig,axes = plt.subplots(1,2,figsize=(18,6))\nsns.histplot(annual_income,bins=30, color ='m', ax=axes[0])\naxes[0].set_title(\"Histogram of annual income\")\naxes[0].set_xlabel(\"annual income\")\naxes[0].set_ylabel(\"Frequency\")\naxes[0].grid(True,linestyle= '--', alpha=0.75)\n\nsns.histplot(annual_income_log,bins=30, color ='m', ax=axes[1])\naxes[1].set_title(\"Histogram of annual income log transformed\")\naxes[1].set_xlabel(\"annual income log transformed\")\naxes[1].set_ylabel(\"Frequency\")\naxes[1].grid(True,linestyle= '--', alpha=0.75)","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_data.head()","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"Categorical_features = train_data.select_dtypes(include=[\"object\"]).columns\nfor feature in Categorical_features:\n    print(f\"{feature} : {train_data[feature].unique()}\")","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"binary_categorical_features = ['Gender', 'Smoking Status']\nnominal_categorical_features = ['Marital Status', 'Occupation', 'Location', 'Customer Feedback', 'Property Type', 'Education Level', 'Exercise Frequency']\nnumerical_features = train_data.select_dtypes(include=[\"number\"]).columns.drop('Premium Amount')\n\nlog_transformer = FunctionTransformer(np.log1p, validate= True)\n\nnumerical_pipeline = Pipeline([\n    ('Imputer', SimpleImputer(strategy=\"median\")),\n    ('log', log_transformer),\n    ('Scale', StandardScaler())\n])\n\nbinary_categorical_pipeline = Pipeline([\n    ('Imputer', SimpleImputer(strategy='constant',fill_value='Unknown')),\n    ('Encoding', OneHotEncoder(handle_unknown='ignore'))\n])\n\nnominal_categorical_pipeline = Pipeline([\n    (\"Imputer\", SimpleImputer(strategy='constant',fill_value='Unknown')),\n    (\"Encoding\", OneHotEncoder(handle_unknown='ignore'))\n])\n\npreprocessor = ColumnTransformer(\n    transformers=[\n        (\"num\", numerical_pipeline, numerical_features),\n        (\"Binary cat\", binary_categorical_pipeline, binary_categorical_features),\n        (\"nominal cat\", nominal_categorical_pipeline, nominal_categorical_features)\n    ]\n)\n\nRF_pipeline = Pipeline([\n    ('preprocessor', preprocessor),\n    ('RFR', RandomForestRegressor(n_estimators=100, random_state=42))\n])","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"x = train_data.drop(columns=\"Premium Amount\")\ny = train_data[\"Premium Amount\"]\n\nx_train, x_validate, y_train, y_validate = train_test_split(x,y,test_size=0.2,random_state=42)\n\nx_test = test_data","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"RF_pipeline.fit(x_train,y_train)","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.metrics import mean_squared_error, r2_score\n \ny_val_pred = RF_pipeline.predict(x_validate)\n\nrmse = np.sqrt(mean_squared_error(y_validate, y_val_pred))\nrmsle = np.sqrt(root_mean_squared_log_error(y_validate, y_val_pred))\nr2 = r2_score(y_validate,y_val_pred)\n\nprint(f\"rmse : {rmse} \\n rmsle : {rmsle} \\n r2 : {r2}\")","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y_pred = RF_pipeline.predict(x_test)\ny_pred","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission = pd.DataFrame(y_pred)\nsubmission","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"new_test = pd.read_csv(r\"C:\\Users\\YUVRAJ\\Downloads\\playground-series-s4e12\\test.csv\")\nid = new_test[\"id\"]\nfinal_submission = pd.concat([id, submission],axis=1)\nfinal_submission","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"final_submission.to_csv(r\"C:\\Users\\YUVRAJ\\Downloads\\playground-series-s4e12\\submission.csv\")","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{},"outputs":[],"execution_count":null}]}