{"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":30839,"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":"2025-02-06T19:17:20.595771Z","iopub.execute_input":"2025-02-06T19:17:20.596114Z","iopub.status.idle":"2025-02-06T19:17:20.994334Z","shell.execute_reply.started":"2025-02-06T19:17:20.596085Z","shell.execute_reply":"2025-02-06T19:17:20.993499Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# LASSO approach\n# Table of contents:\n1. Imports\n2. Preprocessing\n3. Pipeline\n4. Using Cross Validation to improve score\n5. Adding Ridge regression\n6. Submitting\n# Score: 1.17056","metadata":{}},{"cell_type":"code","source":"# Regression tools\nimport sklearn.linear_model as LM\nimport statsmodels.api as sm\nfrom sklearn.model_selection import KFold,RepeatedKFold\nfrom sklearn.linear_model import Ridge,RidgeCV\nfrom sklearn.linear_model import LassoCV\n\n# Graphing tools\nimport matplotlib.pyplot as plt\nfrom sklearn.feature_selection import mutual_info_regression\n# imputation and pipeline imports\nfrom sklearn.compose import ColumnTransformer\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.preprocessing import LabelEncoder","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-06T19:17:20.99535Z","iopub.execute_input":"2025-02-06T19:17:20.995781Z","iopub.status.idle":"2025-02-06T19:17:24.84595Z","shell.execute_reply.started":"2025-02-06T19:17:20.995739Z","shell.execute_reply":"2025-02-06T19:17:24.844691Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/playground-series-s4e12/train.csv')\ntest = pd.read_csv('/kaggle/input/playground-series-s4e12/test.csv')\n# print(train.head())\n# print(test.head())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-06T19:17:24.847028Z","iopub.execute_input":"2025-02-06T19:17:24.847579Z","iopub.status.idle":"2025-02-06T19:17:35.226486Z","shell.execute_reply.started":"2025-02-06T19:17:24.847544Z","shell.execute_reply":"2025-02-06T19:17:35.225377Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Pipeline \n1. Test\n2. Function","metadata":{}},{"cell_type":"markdown","source":"# Cross Validation\n2.04: Added RidgeCv","metadata":{}},{"cell_type":"code","source":"def CV_insurance(df,alph):\n    \"\"\"perform 10-fold Cross Validation on dataframe\n    returns 10-fold CV estimate \n    (10-fold sum over RMSE on predictive sets)\n    \"\"\"\n    se = 0\n    # transformation constants\n    const_vals = [13]\n    mean_vals = list(range(0,20))\n    \n    tmean_vals =[('num',SimpleImputer(),mean_vals)]\n    tconst =[('num',SimpleImputer(strategy = 'constant',fill_value = 0),const_vals)]\n    # define transformer\n    trans1 = ColumnTransformer(transformers = tmean_vals, remainder = 'passthrough')\n    trans2 = ColumnTransformer(transformers = tconst, remainder = 'passthrough')\n    # kfold splits\n    kfold = KFold(n_splits = 10)\n    for train, test in kfold.split(df):\n        (Xtrain,Xtest,ytrain,ytest) = (df.loc[train].drop('Premium Amount',axis=1),\n                                       df.loc[test].drop('Premium Amount',axis=1),\n                                       df.loc[train]['Premium Amount'],df.loc[test]['Premium Amount'])\n        # model = LM.LinearRegression()\n        model = Ridge(alpha= alph)\n        # define pipeline\n        pipeline = Pipeline(steps = [('const',trans2),('mean',trans1),('m',model)])\n        pipeline.fit(Xtrain,ytrain)\n        yhat = pipeline.predict(Xtest)\n        # scoring\n        se+=np.mean((yhat-ytest)**2)\n    return (se**(1/2))\n       \n        \n\n\n    \n    ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-06T19:17:35.228591Z","iopub.execute_input":"2025-02-06T19:17:35.228891Z","iopub.status.idle":"2025-02-06T19:17:35.236526Z","shell.execute_reply.started":"2025-02-06T19:17:35.228866Z","shell.execute_reply":"2025-02-06T19:17:35.235491Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# MSE scores with various models\nUse of least squares linear regression gave me an mse= 2731.9941. \nWant to see what happens if I try ridge regression. As I change alpha between 1/2 and 48, \n(over 11 different values) basically does not change. \n# Note to self: iterating where I create a new version of the data set should involve a emptying of variable first.  ","metadata":{}},{"cell_type":"code","source":"#LassoCV used as model here \nfrom sklearn.metrics import mean_squared_error as MSE\n# Define dataframe\ntrain = pd.read_csv('/kaggle/input/playground-series-s4e12/train.csv')\nfor col in train.columns:\n    if train[col].dtype == 'object':\n        train[col] = LabelEncoder().fit_transform(train[col])\nX,y = train.drop('Premium Amount', axis=1), train['Premium Amount']\nconst_vals = [13]\nmean_vals = list(range(0,20))\ntmean_vals =[('num',SimpleImputer(),mean_vals)]\ntconst =[('num',SimpleImputer(strategy = 'constant',fill_value = 0),const_vals)]\n# transformations\ntrans1 = ColumnTransformer(transformers = tmean_vals, remainder = 'passthrough')\ntrans2 = ColumnTransformer(transformers = tconst, remainder = 'passthrough')\n# pipeline\n# cv = RepeatedKFold(n_splits = 10, n_repeats = 3)\nmodel = LassoCV()\npipeline = Pipeline(steps = [('const',trans2),('mean',trans1),('m',model)])\n# fit pipeline\nresults = pipeline.fit(X,y)\nresults","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-06T19:17:35.238675Z","iopub.execute_input":"2025-02-06T19:17:35.23912Z","iopub.status.idle":"2025-02-06T19:17:54.47621Z","shell.execute_reply.started":"2025-02-06T19:17:35.239072Z","shell.execute_reply":"2025-02-06T19:17:54.47514Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"pipeline.get_params()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-06T19:17:54.477337Z","iopub.execute_input":"2025-02-06T19:17:54.477678Z","iopub.status.idle":"2025-02-06T19:17:54.491904Z","shell.execute_reply.started":"2025-02-06T19:17:54.477651Z","shell.execute_reply":"2025-02-06T19:17:54.490911Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for col in test.columns:\n    if test[col].dtype == 'object':\n        test[col] = LabelEncoder().fit_transform(test[col])\nyhat = pipeline.predict(test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-06T19:17:54.493022Z","iopub.execute_input":"2025-02-06T19:17:54.493344Z","iopub.status.idle":"2025-02-06T19:17:57.890416Z","shell.execute_reply.started":"2025-02-06T19:17:54.493311Z","shell.execute_reply":"2025-02-06T19:17:57.889346Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission_df = pd.DataFrame({'id':test.id,'Premium Amount':yhat})\nsubmission_df.to_csv('submission.csv',index=False)\nprint(\"Submission file created.\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-06T19:17:57.891538Z","iopub.execute_input":"2025-02-06T19:17:57.891851Z","iopub.status.idle":"2025-02-06T19:17:59.523308Z","shell.execute_reply.started":"2025-02-06T19:17:57.891825Z","shell.execute_reply":"2025-02-06T19:17:59.52221Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission_df","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-06T19:17:59.524328Z","iopub.execute_input":"2025-02-06T19:17:59.524711Z","iopub.status.idle":"2025-02-06T19:17:59.543259Z","shell.execute_reply.started":"2025-02-06T19:17:59.524678Z","shell.execute_reply":"2025-02-06T19:17:59.542126Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}