{"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":"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-06T10:49:04.045888Z","iopub.execute_input":"2024-12-06T10:49:04.046304Z","iopub.status.idle":"2024-12-06T10:49:04.083147Z","shell.execute_reply.started":"2024-12-06T10:49:04.046266Z","shell.execute_reply":"2024-12-06T10:49:04.081879Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"base_file_dir = \"/kaggle/input/playground-series-s4e12/\"\n\ntrain_df = pd.read_csv(f\"{base_file_dir}/train.csv\")\ntest_df = pd.read_csv(f\"{base_file_dir}/test.csv\")\nsub_df = pd.read_csv(f\"{base_file_dir}/sample_submission.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-06T10:49:04.179637Z","iopub.execute_input":"2024-12-06T10:49:04.180017Z","iopub.status.idle":"2024-12-06T10:49:11.682575Z","shell.execute_reply.started":"2024-12-06T10:49:04.179983Z","shell.execute_reply":"2024-12-06T10:49:11.681468Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# train_df = pd.get_dummies(train_df, columns=['Gender','Marital Status','Education Level','Occupation','Location','Policy Type','Smoking Status','Exercise Frequency','Property Type','Customer Feedback'])\n# test_df = pd.get_dummies(test_df, columns=['Gender','Marital Status','Education Level','Occupation','Location','Policy Type','Smoking Status','Exercise Frequency','Property Type','Customer Feedback'])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-06T10:49:11.684587Z","iopub.execute_input":"2024-12-06T10:49:11.684931Z","iopub.status.idle":"2024-12-06T10:49:11.690078Z","shell.execute_reply.started":"2024-12-06T10:49:11.684899Z","shell.execute_reply":"2024-12-06T10:49:11.688918Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_df['Policy Start Date'] = pd.to_datetime(train_df['Policy Start Date'])\ntest_df['Policy Start Date'] = pd.to_datetime(test_df['Policy Start Date'])\n\ntrain_df['Year'] = train_df['Policy Start Date'].dt.year\ntrain_df['Month'] = train_df['Policy Start Date'].dt.month\ntrain_df['Day'] = train_df['Policy Start Date'].dt.day\ntrain_df['Hour'] = train_df['Policy Start Date'].dt.hour\ntrain_df['Minute'] = train_df['Policy Start Date'].dt.minute\ntrain_df['Weekday'] = train_df['Policy Start Date'].dt.weekday\n\ntest_df['Year'] = test_df['Policy Start Date'].dt.year\ntest_df['Month'] = test_df['Policy Start Date'].dt.month\ntest_df['Day'] = test_df['Policy Start Date'].dt.day\ntest_df['Hour'] = test_df['Policy Start Date'].dt.hour\ntest_df['Minute'] = test_df['Policy Start Date'].dt.minute\ntest_df['Weekday'] = test_df['Policy Start Date'].dt.weekday\n\n\ntrain_df = train_df.drop('Policy Start Date', axis=1)\ntest_df = test_df.drop('Policy Start Date', axis=1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-06T10:49:11.691424Z","iopub.execute_input":"2024-12-06T10:49:11.691732Z","iopub.status.idle":"2024-12-06T10:49:13.352549Z","shell.execute_reply.started":"2024-12-06T10:49:11.691702Z","shell.execute_reply":"2024-12-06T10:49:13.351441Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Categorical Variables","metadata":{}},{"cell_type":"code","source":"from sklearn.preprocessing import StandardScaler, FunctionTransformer, LabelEncoder, OneHotEncoder\nfrom sklearn.pipeline import make_pipeline, Pipeline\nfrom sklearn.compose import ColumnTransformer, make_column_selector, make_column_transformer\nfrom sklearn.experimental import enable_iterative_imputer\nfrom sklearn.impute import SimpleImputer, IterativeImputer\nimport category_encoders as ce\n\ncategorical_features = train_df.drop('Premium Amount', axis=1).select_dtypes(include='object').columns.values\nnumerical_features = train_df.drop(\"Premium Amount\", axis=1).select_dtypes(include=np.number).columns.values\n\npreprocessing = ColumnTransformer([\n    ('num', make_pipeline(SimpleImputer(strategy='mean'), FunctionTransformer(), StandardScaler()), numerical_features),\n    ('cat', make_pipeline(SimpleImputer(strategy='most_frequent'), ce.cat_boost.CatBoostEncoder()), categorical_features)\n], remainder='drop')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-06T10:49:13.355596Z","iopub.execute_input":"2024-12-06T10:49:13.356039Z","iopub.status.idle":"2024-12-06T10:49:14.303883Z","shell.execute_reply.started":"2024-12-06T10:49:13.355992Z","shell.execute_reply":"2024-12-06T10:49:14.302624Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X = train_df.drop(columns=['Premium Amount'])\ny = np.log1p(train_df['Premium Amount'])\n\nX = preprocessing.fit_transform(X, y)\ntestProcessed = preprocessing.transform(test_df)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-06T10:49:14.305162Z","iopub.execute_input":"2024-12-06T10:49:14.305546Z","iopub.status.idle":"2024-12-06T10:49:27.153524Z","shell.execute_reply.started":"2024-12-06T10:49:14.305515Z","shell.execute_reply":"2024-12-06T10:49:27.152475Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.ensemble import StackingRegressor\nfrom sklearn.linear_model import LinearRegression, Ridge, Lasso\nfrom sklearn.tree import DecisionTreeRegressor\nfrom sklearn.ensemble import RandomForestRegressor\nfrom sklearn.model_selection import cross_val_score\nimport numpy as np\nimport pandas as pd\nfrom xgboost import XGBRegressor \n\nbase_models = [\n    ('linear', LinearRegression()),\n    ('ridge', Ridge(alpha=1.0)),\n    ('lasso', Lasso(alpha=0.01)),\n    ('decision_tree', DecisionTreeRegressor(max_depth=5)),\n    ('xgb', XGBRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)) \n]\n\nmeta_model = RandomForestRegressor(n_estimators=100, random_state=42)\n\nstacking_model = StackingRegressor(estimators=base_models, final_estimator=meta_model, cv=5)\n\nstacking_model.fit(X, y)\n\ny_pred = stacking_model.predict(testProcessed)\n\nsub = pd.read_csv(\"/kaggle/input/playground-series-s4e12/sample_submission.csv\")\nsub[\"Premium Amount\"] = np.expm1(y_pred)\nsub.to_csv(\"submission.csv\", index=False)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-06T10:49:27.154913Z","iopub.execute_input":"2024-12-06T10:49:27.155331Z","iopub.status.idle":"2024-12-06T10:49:31.169949Z","shell.execute_reply.started":"2024-12-06T10:49:27.155286Z","shell.execute_reply":"2024-12-06T10:49:31.16881Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import joblib\njoblib.dump(stacking_model, \"stacking_model.pkl\")\nprint(\"Model saved as stacking_model.pkl\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-06T10:49:31.171555Z","iopub.execute_input":"2024-12-06T10:49:31.172514Z","iopub.status.idle":"2024-12-06T10:49:33.022221Z","shell.execute_reply.started":"2024-12-06T10:49:31.172456Z","shell.execute_reply":"2024-12-06T10:49:33.020838Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sub","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-06T10:49:33.023609Z","iopub.execute_input":"2024-12-06T10:49:33.023934Z","iopub.status.idle":"2024-12-06T10:49:33.036307Z","shell.execute_reply.started":"2024-12-06T10:49:33.023899Z","shell.execute_reply":"2024-12-06T10:49:33.035201Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}