{"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":30786,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import polars as pl # data processing, CSV file I/O (e.g. pd.read_csv)\npl.Config.set_tbl_cols(20)\npl.Config.set_tbl_rows(30)\nimport pandas as pd\nimport numpy as np\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-17T01:14:29.65686Z","iopub.execute_input":"2024-12-17T01:14:29.657798Z","iopub.status.idle":"2024-12-17T01:14:30.445586Z","shell.execute_reply.started":"2024-12-17T01:14:29.657738Z","shell.execute_reply":"2024-12-17T01:14:30.444164Z"}},"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')\nsample_df = pd.read_csv('/kaggle/input/playground-series-s4e12/sample_submission.csv')\ntrain_df.drop('id', axis=1, inplace=True)\ntest_df.drop('id', axis=1, inplace=True) \n\ndef 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    \ntrain_df = date(train_df)\ntest_df = date(test_df)\n\ncat_c = [col for col in train_df.columns if train_df[col].dtype == 'object']\n\ndef update(df):\n    \n    global cat_c\n\n    for c in cat_c:\n        df[c] = df[c].fillna('None').astype('category')\n                \n    return df\n\ntrain_df = update(train_df)\ntest_df = update(test_df)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T01:14:30.447415Z","iopub.execute_input":"2024-12-17T01:14:30.448162Z","iopub.status.idle":"2024-12-17T01:14:48.590338Z","shell.execute_reply.started":"2024-12-17T01:14:30.448101Z","shell.execute_reply":"2024-12-17T01:14:48.589164Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"numerical_vars = ['Age', 'Annual Income', 'Health Score',\n                  'Previous Claims', 'Vehicle Age', 'Credit Score',\n                  'Insurance Duration', 'Premium Amount']\ndef feature_changer(df):\n\n    global numerical_vars\n    vars = numerical_vars.copy()\n\n    vars = [var for var in vars if var not in ['Health Score', 'Previous Claims']]\n    if 'Premium Amount' in vars:\n      vars.remove('Premium Amount')\n\n\n    # Counter for missing values per row\n    df['MissingValuesCount'] = df.isna().sum(axis=1)\n    df['MissingHealth'] = df['Health Score'].isna().astype(int)\n    # Number of days passed between last policy started and current policy\n    df['Policy Start Date'] = pd.to_datetime(df['Policy Start Date'])\n\n    df['Days Passed'] = (df['Policy Start Date'].max() - df['Policy Start Date']).dt.days\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\n    # Ratio of number of claims vs insurance duration\n    df['Claims v Duration'] = df['Previous Claims'] / df['Insurance Duration']\n    df['Health vs Claims'] = df['Health Score'] / df['Previous Claims']\n    df['Cat Credit Score'] = df['Credit Score'].copy()\n    df['Int Credit Score'] = df['Credit Score'].apply(lambda x: int(x) if pd.notna(x) else x)\n    vars+= ['Days Passed']\n    cats = [col for col in df.columns if col not in vars]\n\n    # Filling missing data\n    df['HealthScore'] = df['Health Score'].apply(lambda x: int(x) if pd.notna(x) else x)\n    #df[cats] = df[cats].fillna('None').astype('string')\n    #df[vars] = df[vars].fillna(0).astype(float)\n\n    df = df.drop([ 'Policy Start Date'], axis = 1)\n\n    return df\ntrain_df = feature_changer(train_df)\ntest_df = feature_changer(test_df)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T01:14:48.591699Z","iopub.execute_input":"2024-12-17T01:14:48.592079Z","iopub.status.idle":"2024-12-17T01:14:53.046536Z","shell.execute_reply.started":"2024-12-17T01:14:48.592034Z","shell.execute_reply":"2024-12-17T01:14:53.04537Z"}},"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":"!pip install autogluon.tabular --no-cache-dir -q\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T01:14:53.048604Z","iopub.execute_input":"2024-12-17T01:14:53.048947Z","iopub.status.idle":"2024-12-17T01:15:17.374507Z","shell.execute_reply.started":"2024-12-17T01:14:53.048914Z","shell.execute_reply":"2024-12-17T01:15:17.373061Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from autogluon.tabular import TabularPredictor\n \npredictor = TabularPredictor(path = '/kaggle/working/Autogluon/predictor',\n                                      label='Premium Amount', \n                              problem_type = 'regression', \n                              eval_metric = 'rmse',  \n                              sample_weight = 'auto_weight', verbosity = 2)\n\npredictor.fit(train_data= train_df, \n                       auto_stack = True, \n                       presets='best_quality',\n# best_quality,  medium_quality                         \n                       time_limit = int(60 * 60 * 11),    \n                        num_bag_folds=5,\n                        num_bag_sets=1,\n                        num_stack_levels=1,)\nresults = predictor.fit_summary()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T01:15:17.376812Z","iopub.execute_input":"2024-12-17T01:15:17.377372Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"predictor.leaderboard()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"predictions = predictor.predict(test_df)\npredictions","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nsample_df =pd.read_csv('/kaggle/input/playground-series-s4e12/sample_submission.csv',index_col=0)\n\nsample_df['Premium Amount']=list(predictions)\nsample_df.to_csv('submission.csv')\nsample_df","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},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}